SCPs 为资源添加标签的示例 - Amazon Organizations
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SCPs 为资源添加标签的示例

需要在指定的已创建资源上使用标签

如果请求不包含指定的标签,以下 SCP 将阻止受影响账户中的 IAM 用户和角色创建特定资源类型。

重要

请务必使用您在环境中使用的服务测试基于拒绝的策略。以下示例是创建未标记密钥或运行未标记的 Amazon EC2 实例的简单模块,不包括任何例外。

以下示例策略与 Amazon CloudFormation 所写策略不兼容,因为该服务创建了一个密钥,然后将其标记为两个单独的步骤。此示例策略实际上 Amazon CloudFormation 阻止了将密钥作为堆栈的一部分创建,因为无论多么短暂,这样的操作都会导致未按要求标记的机密。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCreateSecretWithNoProjectTag", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/Project": "true" } } }, { "Sid": "DenyRunInstanceWithNoProjectTag", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "Null": { "aws:RequestTag/Project": "true" } } }, { "Sid": "DenyCreateSecretWithNoCostCenterTag", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } }, { "Sid": "DenyRunInstanceWithNoCostCenterTag", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } } ] }

有关所有服务及其在两者 Amazon Organizations SCPs和 IAM 权限策略中支持的操作的列表,请参阅 IA M 用户指南 Amazon Web Services 服务中的操作、资源和条件密钥

阻止标记被修改,除非由授权委托人修改

以下 SCP 显示策略如何仅允许授权委托人修改附加到资源的标签。这是使用基于属性的访问控制 (ABAC) 作为 Amazon 云安全策略的一部分的重要组成部分。该策略允许调用者仅修改授权标签(在此示例中为 access-project)与附加到发出请求的用户或角色的相同授权标签完全匹配的资源上的标签。该策略还可以阻止授权用户更改用于授权的标签的。调用委托人必须具有授权标签才能进行任何更改。

此策略仅阻止未经授权的用户更改标签。未被该策略屏蔽的授权用户仍必须拥有单独的 IAM 策略,明确授予相关标签 APIs的Allow权限。例如,如果您的用户具有使用 Allow */* 的管理员策略(允许所有服务和所有操作),则组合将导致允许管理员用户能更改那些授权标签值与附加到用户委托人的授权标签值匹配的标签。这是因为该策略中的显式 Deny 将覆盖管理员策略中的显式 Allow

重要

这不是一个完整的策略解决方案,不应按如下所示使用。此示例仅用于演示 ABAC 策略的一部分,需要针对生产环境进行定制和测试。

有关完整策略及其工作原理的详细分析,请参阅使用 Amazon Organizations中的服务控制策略保护用于授权的资源标签

请务必使用您在环境中使用的服务测试基于拒绝的策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyModifyTagsIfResAuthzTagAndPrinTagDontMatch", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "ec2:ResourceTag/access-project": "${aws:PrincipalTag/access-project}", "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "Null": { "ec2:ResourceTag/access-project": false } } }, { "Sid": "DenyModifyResAuthzTagIfPrinTagDontMatch", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "aws:RequestTag/access-project": "${aws:PrincipalTag/access-project}", "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "access-project" ] } } }, { "Sid": "DenyModifyTagsIfPrinTagNotExists", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "Null": { "aws:PrincipalTag/access-project": true } } } ] }