SCP语法 - AWS Organizations

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

SCP语法

服务控制策略 (SCPs) 使用的语法与 (IAM) 权限策略和基于资源的策略 AWS Identity and Access Management (如 Amazon S3 存储桶策略)使用的语法类似。有关IAM策略及其语法的更多信息,请参阅IAM用户指南中的IAM策略概述

SCP是根据的规则构造的纯文本文件。JSON它使用本主题中所述的元素。

注意

你中的所有字符都按其最大大小进行SCP计数。本指南中的示例显示了带有额外空格以提高其可读性的SCPs格式化内容。但是,在您的策略大小接近最大大小时,可以删除任何空格(例如,引号之外的空格字符和换行符)来节省空间。

有关 SCPs 的一般信息,请参阅 服务控制策略 (SCPs)

元素摘要

下表汇总了您可以在中使用的策略元素SCPs。某些策略元素仅SCPs在该拒绝操作中可用。支持的效果列列出了您可以与中的每个策略元素一起使用的效果类型SCPs。

元素 用途 支持的效果
版本 指定要用于处理策略的语言语法规则。

Allow, Deny

Statement 充当策略元素的容器。中可以有多个语句SCPs。 Allow, Deny
Statement ID (Sid) (可选)提供语句的友好名称。 Allow, Deny
效果 定义该SCP语句是允许还是拒绝对账户中的IAM用户和角色的访问。 Allow, Deny

操作

指定SCP允许或拒绝的 AWS 服务和操作。

Allow, Deny

NotAction

指定免于的 AWS 服务和操作SCP。用来代替 Action 元素。

Deny

资源 指定SCP适用的 AWS 资源。 Deny
Condition 指定语句何时生效的条件。 Deny

以下各节提供了有关如何在中使用策略元素的更多信息和示例SCPs。

Version 元素

每个元素都SCP必须包含一个带有值的Version元素"2012-10-17"。这与最新版本的IAM权限策略的版本值相同。

"Version": "2012-10-17",

有关更多信息,请参阅《IAM用户指南》中的 “IAMJSON策略元素:版本”。

Statement 元素

SCP由一个或多个Statement元素组成。策略中只能有一个Statement关键字,但该值可以是一JSON组语句(由 [] 字符包围)。

以下示例演示包含单个 EffectActionResource 元素的语句。

"Statement": { "Effect": "Allow", "Action": "*", "Resource": "*" }

以下示例包括作为一个 Statement 元素中的数组列表的两个语句。第一条语句允许所有操作,而第二条语句拒绝任何EC2操作。结果是,账户管理员可以委派亚马逊弹性计算云 (AmazonEC2) 以外的任何权限。

"Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:*", "Resource": "*" } ]

有关更多信息,请参阅《IAM用户指南》中的 “IAMJSON策略元素:声明”。

Statement ID (Sid) 元素

Sid 是您针对策略语句提供的可选标识符。您可以为语句数组中的每个语句指定 Sid 值。以下示例SCP显示了一个示例Sid语句。

{ "Statement": { "Sid": "AllowsAllActions", "Effect": "Allow", "Action": "*", "Resource": "*" } }

有关更多信息,请参阅《IAM用户指南》中的 “IAMJSON策略元素:ID”。

Effect 元素

每个语句必须包含一个 Effect 元素。该值可以是 AllowDeny。它会影响在同一个语句中列出的任意操作。

有关更多信息,请参阅《IAM用户指南》中的 “IAMJSON策略元素:效果”。

"Effect": "Allow"

以下示例显示了一个 wit SCP h 语句,该语句包含一个值为的Effect元素Allow,该元素允许账户用户对 Amazon S3 服务执行操作。对于使用允许列表策略(已经分离了所有默认 FullAWSAccess 策略使得默认情况下默示拒绝权限)的组织,此示例非常有用。结果是语句允许任何附加账户的 Amazon S3 权限:

{ "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } }

尽管此语句使用与IAM权限策略相同的Allow值关键字,但实际上SCP它并未授予用户执行任何操作的权限。取而代之的是,SCPs充当筛选器,为组织中的IAM用户和IAM角色指定最大权限。在前面的示例中,即使账户中的用户附加了AdministratorAccess托管策略,这也会SCP限制受影响账户中的所有用户只能执行 Amazon S3 操作。

"Effect": "Deny"

Effect元素值为的语句中Deny,您还可以限制对特定资源的访问权限或定义何时生效SCPs的条件。

以下显示了有关如何在拒绝语句中使用条件密钥的示例。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:InstanceType": "t2.micro" } } } }

如果亚马逊EC2实例未SCP设置为,则此语句设置了防护栏,以防止受影响的账户(即关联到账户本身或包含该账户的组织根目录或组织根目录或 OU)启动亚马逊EC2实例。SCP t2.micro即使账户附加了允许此操作的IAM策略,由创建的护栏也会SCP阻止该操作。

ActionNotAction 元素

每个语句必须包含下列项目之一:

  • 在允许和拒绝语句中,为 Action 元素。

  • 仅在拒绝语句中(其中,Effect 元素的值为 Deny),为 Action NotAction 语句。

ActionNotAction元素的值是标识语句允许或拒绝的操作 AWS 服务 的字符串列表(JSON数组)。

所有字符串均包含服务简写(例如“s3”、“ec2”、“iam”或“organizations”),全小写,后跟冒号,然后是该服务的操作。操作和非操作不区分大小写。通常,其键入方式为每个单词的开头是大写字母,其余为小写字母。例如:"s3:ListAllMyBuckets"

也可以使用通配符,例如星号 (*) 或问号 (?) 在一个SCP:

  • 使用星号(*)通配符以匹配名称中包含相同部分的多个操作。值 "s3:*" 表示 Amazon S3 服务中的所有操作。该值仅"ec2:Describe*"匹配以 “描述” 开头的EC2操作。

  • 使用问号(?)通配符来匹配单个字符。

注意

在 a 中SCP,通配符 (*) 和 (?) Action或中的NotAction元素只能单独使用,也只能在字符串的末尾使用。它不能出现在字符串的开头或中间部分。因此,"servicename:action*"是有效的,但是"servicename:*action"和在中"servicename:some*action"都是无效的SCPs。

有关所有服务及其在IAM权限策略中支持的操作的列表,请参阅《服务授权参考》中的 “操作”、“资源” 和 “条件密钥”。 AWS Organizations SCPs AWS 服务

有关更多信息,请参阅《IAM用户指南》 NotAction中的 “IAMJSONIAMJSON策略元素:操作和策略元素:”。

Action 元素的示例

以下示例显示了一个SCP带语句的语句,该语句允许账户管理员为账户中的EC2实例委派描述、启动、停止和终止权限。这是另一个允许列表示例,这在附加默认 Allow * 策略时非常有用,因此,在默认情况下,权限将被隐式拒绝。如果默认 Allow * 策略仍附加到以下策略所附加到的根、OU 或账户,则以下策略没有任何效果。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } }

以下示例演示如何通过拒绝访问您不希望用于所附加账户中的服务。它假设默认值"Allow *"SCPs仍然附加到 all OUs 和 root 上。此示例策略禁止关联账户中的账户管理员委派对IAMEC2、Amazon 和 Amazon RDS 服务的任何权限。只要没有其他已附加策略拒绝,就可以委派来自其他服务的任何操作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "iam:*", "ec2:*", "rds:*" ], "Resource": "*" } }

NotAction 元素的示例

以下示例显示了如何使用NotAction元素来 AWS 服务 排除策略的影响。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "LimitActionsInRegion", "Effect": "Deny", "NotAction": "iam:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "us-west-1" } } } ] }

使用此语句,除非使用操作,否则受影响的账户只能在指定 AWS 区域范围内IAM采取行动。

Resource 元素

Effect元素值为的语句中Allow,只能在 a 的Resource元素中指定 “*” SCP。您不能指定单个资源 Amazon 资源名称 (ARNs)。

您也可以在 resource 参数中使用星号(*)或问号(?)等通配符:

  • 使用星号(*)通配符以匹配名称中包含相同部分的多个操作。

  • 使用问号(?)通配符来匹配单个字符。

Effect元素值为的语句中Deny您可以指定个人ARNs,如以下示例所示。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessToAdminRole", "Effect": "Deny", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRole", "iam:DeleteRolePermissionsBoundary", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy", "iam:UpdateAssumeRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": [ "arn:aws:iam::*:role/role-to-deny" ] } ] }

这SCP限制了受影响账户中的IAM用户和角色对在组织中所有账户中创建的通用管理IAM角色进行更改。

有关更多信息,请参阅《IAM用户指南》中的 “IAMJSON策略元素:资源”。

Condition 元素

您可以在 deny 语句中指定一个Condition元素SCP。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllOutsideEU", "Effect": "Deny", "NotAction": [ "cloudfront:*", "iam:*", "route53:*", "support:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": [ "eu-central-1", "eu-west-1" ] } } } ] }

这会SCP拒绝访问eu-central-1eu-west-1区域以外的任何操作,但列出的服务中的操作除外。

有关更多信息,请参阅《IAM用户指南》中的 “IAMJSON策略元素:条件”。

不支持的元素

中不支持以下元素SCPs:

  • Principal

  • NotPrincipal

  • NotResource