高阶实践:强制TAG——自动化打标签运维

简介: 基于标签(TAG)可以进行资源访问控制,我们可以限制用户只有当有某个标签的时候才允许创建。我已经有存量没有打某个标签的资源,怎么保障它们有该特定的标签呢?本文接下来就以ECS(弹性计算)实例来说明如何实现事后保障一定有特定标签能力。

问题

基于访问控制 (RAM) 策略来授予子账号(RAM User)在指定的标签(TAG)下 管理 ECS 中 资源(支持标签的资源)的权限, 该策略必须限制在标签(TAG)级别权限,以便 RAM 子账号可以管理包含特定标签的 ECS 资源。

场景描述

使用指定标签(TAG)为子账号(RAM User)限定访问ECS资源的边界,这里指支持标签的ECS资源:实例/磁盘/网卡/安全组/快照/镜像/密钥对。

简述

如果保障ECS资源(支持标签的资源)可以强制有标签。高阶实践:强制TAG——必须带标签创建ECS 资源在前面的文章说明了,本文就如何事后自动化运维机制来保障强制TAG。

  1. 创建RAM策略:创建一个 RAM 策略,以授予对任何带该特定标签(TAG)​的访问权限(主要针对ECS)。
  2. 授权用户:将该 RAM 策略附加到您希望访问具备该标签(TAG)的用户或组。
  3. 自动打标:为存量资源自动化打特定的标签。

解决方法

本文已ECS实例为例说明如何为存量未打标签资源自动打标签。如果磁盘/网卡/安全组/快照/镜像/密钥对等其他资源更换资源列表查询接口为对应资源的查询接口,比如磁盘为DescribeDisks。
注:ECS查询资源列表接口有1000的限制,如果标签下资源超过1000,则推荐修改为ListTagResources来过滤资源。

创建RAM策略

在 访问控制台 或者 或者使用 RAM API CreatePolicy 创建策略
策略如下:

  • 授权 AliyunOOSFullAccess 权限
{
    "Version": "1",
    "Statement": [
        {
            "Action": "oos:*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "ram:PassRole",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "acs:Service": "oos.aliyuncs.com"
                }
            }
        }
    ]
}
  • 为OOS服务创建服务OOSServiceRole角色参考文档
    注:文本的策略没有为配置角色的权限,需要的话自行配置。
  • 在RAM访问控制-权限管理-权限策略管理-新建策略
{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ecs:DescribeInstances",
                "ecs:TagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
  • 为OOSServiceRole授权该策略
  • 如果您使用的是子账号或者sts角色,也需要为您使用的账号或者角色授权该策略以及操作OOS权限AliyunOOSFullAccess。

授权方式

将RAM 策略附加到您希望控制访问的用户或组。您可以使用 RAM 管理控制台、阿里云 CLI、阿里云 API AttachPolicyToUser AttachPolicyToGroup来添加 RAM 策略。

自动打标

创建模版

OOS运维编排控制台,点击我的模版-点击创建模版-选择空白模板-选择YAML

FormatVersion: OOS-2019-06-01
Description: Tag Resources Without The Specified Tags
Parameters:
  tags:
    Type: Json
    Description:
      en: The tags to select ECS instances.
      zh-cn: 实例的标签。
    AssociationProperty: Tags
  regionId:
    Type: String
    Description:
      en: The region to select ECS instances.
      zh-cn: 实例的地域。
  OOSAssumeRole:
    Description:
      en: The RAM role to be assumed by OOS.
      zh-cn: OOS扮演的RAM角色。
    Type: String
    Default: OOSServiceRole
RamRole: OOSServiceRole
Tasks:
  - Name: getInstancesByTags
    Action: 'ACS::ExecuteAPI'
    Description: ''
    Properties:
      Service: ECS
      API: DescribeInstances
      Parameters:
        Tags: '{{ tags }}'
        RegionId: '{{ regionId }}'
    Outputs:
      InstanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
  - Name: getAllInstances
    Action: 'ACS::ExecuteAPI'
    Description: ''
    Properties:
      Service: ECS
      API: DescribeInstances
      Parameters:
        RegionId: '{{regionId}}'
    Outputs:
      InstanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
  - Name: TagResources_ECS_Instances
    Action: 'ACS::ExecuteAPI'
    Description:
      zh-cn: 对没有改标签ECS实例进行打签
      en: 'tag ecs instances, which are without the specified tags.'
    Properties:
      Service: ECS
      API: TagResources
      Parameters:
        Tags: '{{ tags }}'
        RegionId: '{{regionId}}'
        ResourceType: Instance
        ResourceIds:
          - '{{ACS::TaskLoopItem}}'
    Loop:
      MaxErrors: 100%
      Concurrency: 20
      Items:
        'Fn::Difference':
          - '{{ getAllInstances.InstanceIds }}'
          - '{{ getInstancesByTags.InstanceIds }}'
Outputs:
  InstanceIds:
    Type: List
    Value:
      'Fn::Difference':
        - '{{ getAllInstances.InstanceIds }}'
        - '{{ getInstancesByTags.InstanceIds }}'

创建执行

点击创建执行
image.png
点击下一步:设置参数。填写入参,指定特定标签(TAG)
image.png
点击下一步:确定,确认参数没有问题
image.png
开始执行,并输出需要新增或者修改实例列表。
image.png

其他资源说明

  • 如果您需要关注的是磁盘这里DescribeInstances换成DescribeDisks,相关的权限策略也是修改为DescribeDisks
  • 如果您需要关注的是安全组这里DescribeInstances换成DescribeSecurityGroups,相关的权限策略也是修改为DescribeSecurityGroups
  • 如果您需要关注的是自定义镜像这里DescribeInstances换成DescribeImages,相关的权限策略也是修改为DescribeImages
  • 如果您需要关注的是快照这里DescribeInstances换成DescribeSnapshots,相关的权限策略也是修改为DescribeSnapshots
  • 如果您需要关注的是网卡这里DescribeInstances换成DescribeNetworkInterfaces,相关的权限策略也是修改为DescribeNetworkInterfaces
  • 如果您需要关注的是密钥对这里DescribeInstances换成DescribeKeyPairs,相关的权限策略也是修改为DescribeKeyPairs
  • 如果您需要关注的是启动模版这里DescribeInstances换成DescribeLaunchTemplates,相关的权限策略也是修改为DescribeLaunchTemplates
  • 如果您需要关注的是专有宿主机这里DescribeInstances换成DescribeDedicatedHosts,相关的权限策略也是修改为DescribeDedicatedHosts

其他产品保障标签能力

目前OOS支持的云产品列表参考文档
以及云产品支持TAG列表

相关文档

基于OOS批量修改资源标签(TAG)值(Value)
强制TAG——必须带标签创建ECS 资源
ECS支持跨地域跨资源类型的标签(TAG)操作
如何检查您的资源是否具有您指定的标签?
基于标签批量管理资源
支持标签产品及其文档
标签的最佳实践
通过OOS基于标签批量启动ECS实例实践
如何使用标签控制对ECS 资源的访问?
使用标签检索资源
创建资源标签分组设置
ECS全局标签实践
ECS控制台云资源分组管理---全局标签
标记您的MongoDB数据库实例
标记您的 CDN 资源——域名(domain)
标记您的 OSS 资源
标记您的 RDS 资源
标记您的 SLB 资源
标记您的 ECS 资源
标记您的redis数据库实例
标记您的弹性容器实例(ECI)资源
标记(TAG)您的漏洞扫描(CSS)资源

目录
相关文章
|
3天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
3天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
3天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
3天前
|
Web App开发 敏捷开发 测试技术
探索自动化测试的奥秘:从理论到实践
【10月更文挑战第39天】在软件质量保障的战场上,自动化测试是提升效率和准确性的利器。本文将深入浅出地介绍自动化测试的基本概念、必要性以及如何实施自动化测试。我们将通过一个实际案例,展示如何利用流行的自动化测试工具Selenium进行网页测试,并分享一些实用的技巧和最佳实践。无论你是新手还是有经验的测试工程师,这篇文章都将为你提供宝贵的知识,帮助你在自动化测试的道路上更进一步。
|
3天前
|
敏捷开发 Java 测试技术
探索自动化测试:从理论到实践
【10月更文挑战第39天】在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的船只。本文将作为你的航海图,指引你理解自动化测试的核心概念,并分享一段实际的代码旅程,让你领略自动化测试的魅力和力量。准备好了吗?让我们启航!
|
4天前
|
运维 监控
构建高效运维体系:从理论到实践
在当今快速发展的信息化时代,高效的运维体系是保障企业信息系统稳定运行的关键。本文旨在探讨如何构建一个高效、可靠的运维体系,通过分析当前运维面临的挑战,提出相应的解决策略,并结合实际案例,展示这些策略的实施效果。文章首先介绍了高效运维的重要性,接着分析了运维过程中常见的问题,然后详细阐述了构建高效运维体系的策略和步骤,最后通过一个实际案例来验证这些策略的有效性。
|
4天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
63 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
13天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
38 4