标记SCPs资源的示例 - AWS Organizations

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

标记SCPs资源的示例

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

如果请求不包含指定标签,则以下内容SCP可防止受影响账户中的IAM用户和角色创建某些资源类型。

重要

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

以下示例策略与 AWS CloudFormation 所写策略不兼容,因为该服务创建了一个密钥,然后将其标记为两个单独的步骤。此示例策略实际上 AWS 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/*", "arn:aws:ec2:*:*:volume/*" ], "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/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } } ] }

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

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

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

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

重要

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

有关完整策略及其工作原理的详细分析,请参阅使用 AWS 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 } } } ] }