SCP 语法
服务控制策略(SCP)使用的语法,与 Amazon Identity and Access Management(IAM)权限策略和基于资源的策略(例如 Amazon S3 存储桶策略)使用的语法非常相似。有关 IAM 策略及其语法的更多信息,请参阅《IAM 用户指南》https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html中的 IAM 策略概述。
SCP 是一个纯文本文件,根据 JSON
注意
SCP 中的所有字符将计入其最大大小。本指南中的示例演示了使用额外空格编排格式的 SCP,以提高其可读性。但是,在您的策略大小接近最大大小时,可以删除任何空格(例如,引号之外的空格字符和换行符)来节省空间。
有关 SCP 的一般信息,请参阅服务控制策略 (SCP)。
元素摘要
下表总结了可在 SCP 中使用的策略元素。一些策略元素仅在拒绝操作的 SCP 中可用。Supported effects (支持的效果) 列中列出了可用于 SCP 中的每个策略元素的效果类型。
元素 | 用途 | 支持的效果 |
---|---|---|
版本 | 指定要用于处理策略的语言语法规则。 |
|
Statement | 充当策略元素的容器。您可以在 SCP 中拥有多个语句。 | Allow , Deny |
Statement ID (Sid) | (可选)提供语句的友好名称。 | Allow , Deny |
效果 | 定义 SCP 语句是允许还是拒绝账户中的 IAM 用户和角色访问权限。 | Allow , Deny |
指定 SCP 允许或拒绝的Amazon服务和操作。 |
|
|
指定不受 SCP 约束的Amazon服务和操作。用来代替 |
|
|
资源 | 指定 SCP 应用于的 Amazon 资源。 | Deny |
Condition | 指定语句何时生效的条件。 | Deny |
以下部分提供了有关如何在 SCP 中使用策略元素的更多信息和示例。
Version
元素
每个 SCP 必须包含 Version
元素,其值为 "2012-10-17"
。此版本值与 IAM 权限策略的最新版本相同。
"Version": "2012-10-17",
有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:版本。
Statement
元素
一个 SCP 可包含一个或多个 Statement
元素。一条策略中只能有一个 Statement
关键字,但其值可以是 JSON 语句数组 (使用 [ ] 字符括起)。
以下示例演示包含单个 Effect
、Action
和 Resource
元素的语句。
"Statement": { "Effect": "Allow", "Action": "*", "Resource": "*" }
以下示例包括作为一个 Statement
元素中的数组列表的两个语句。第一条语句允许所有操作,第二条语句拒绝任何 EC2 操作。结果是账户中的管理员可以委派除了 Amazon Elastic Compute Cloud(Amazon EC2)的权限之外的任意权限。
"Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:*", "Resource": "*" } ]
有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:语句。
Statement ID (Sid
) 元素
Sid
是您针对策略语句提供的可选标识符。您可以为语句数组中的每个语句指定 Sid
值。以下示例 SCP 显示了一个示例 Sid
语句。
{ "Statement": { "Sid": "AllowsAllActions", "Effect": "Allow", "Action": "*", "Resource": "*" } }
有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:ID。
Effect
元素
每个语句必须包含一个 Effect
元素。该值可以是 Allow
或 Deny
。它会影响在同一个语句中列出的任意操作。
有关更多信息,请参阅《IAM 用户指南》https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_effect.html中的 IAM JSON 策略元素:效果。
"Effect": "Allow"
以下示例演示带有一条语句的 SCP,该语句包含一个 Effect
元素,其值为 Allow
,表示允许账户用户执行 Amazon S3 服务的操作。对于使用允许列表策略(已经分离了所有默认 FullAWSAccess
策略使得默认情况下默示拒绝权限)的组织,此示例非常有用。结果是语句允许任何附加账户的 Amazon S3 权限:
{ "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } }
即使它使用与 IAM 权限策略相同的 Allow
值关键字,在 SCP 中它也不会实际授予用户执行任何操作的权限。相反,SCP 充当筛选条件,用于指定组织中 IAM 用户和 IAM 角色的最大权限。在前面的示例中,即使账户中的用户已经附加了 AdministratorAccess
托管式策略,SCP 也会将受影响账户中的所有用户限制为只能执行 Amazon S3 操作。
"Effect": "Deny"
在 Effect
元素具有值 Deny
的语句中,您还可以限制对特定资源的访问,或者定义 SCP 何时生效的条件。
以下显示了有关如何在拒绝语句中使用条件密钥的示例。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:InstanceType": "t2.micro" } } } }
SCP 中的此语句设置一个防护机制来阻止受影响的账户(其中,SCP 附加到账户本身或包含该账户的组织根或 OU)启动 Amazon EC2 实例(如果 Amazon EC2 实例未设置为 t2.micro
)。即使将允许此操作的 IAM 策略附加到账户,SCP 所创建的防护机制也会阻止它。
Action
和 NotAction
元素
每个语句必须包含下列项目之一:
-
在允许和拒绝语句中,为
Action
元素。 -
仅在拒绝语句中(其中,
Effect
元素的值为Deny
),为Action
或NotAction
语句。
Action
或 NotAction
元素的值为是一种字符串列表(JSON 数组),用于标识语句所允许或拒绝的 Amazon Web Services 服务和操作。
所有字符串均包含服务简写(例如“s3”、“ec2”、“iam”或“organizations”),全小写,后跟冒号,然后是该服务的操作。操作和注释不区分大小写。通常,其键入方式为每个单词的开头是大写字母,其余为小写字母。例如:"s3:ListAllMyBuckets"
。
您也可以在 SCP 中使用星号(*)或问号(?)等通配符:
-
使用星号(*)通配符以匹配名称中包含相同部分的多个操作。值
"s3:*"
表示 Amazon S3 服务中的所有操作。值"ec2:Describe*"
仅与以“Describe”开头的 EC2 操作匹配。 -
使用问号(?)通配符来匹配单个字符。
注意
在 SCP 中,Action
或 NotAction
参数中的通配符(*)和(?)只能单独使用或放在字符串结尾处。它不能出现在字符串的开头或中间部分。因此,"servicename:action*"
是有效的,但 "servicename:*action"
和 "servicename:some*action"
在 SCP 中都是无效的。
有关在 Amazon Organizations SCP 和 IAM 权限策略中均支持的所有服务和操作列表,请参阅《服务授权参考》中的 Actions, Resources, and Condition Keys for Amazon Web Services 服务。
有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:操作和 IAM JSON 策略元素:NotAction。
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 *"
SCP 仍附加到所有 OU 和根。此示例策略阻止所附加账户中的账户管理员委派 IAM、Amazon EC2 和 Amazon RDS 服务的任何权限。只要没有其他已附加策略拒绝,就可以委派来自其他服务的任何操作。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "iam:*", "ec2:*", "rds:*" ], "Resource": "*" } }
NotAction
元素的示例
以下示例演示了如何使用 NotAction
元素将 Amazon Web Services 服务排除在策略作用范围之外。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LimitActionsInRegion", "Effect": "Deny", "NotAction": "iam:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "us-west-1" } } } ] }
除非使用 IAM 操作,否则在使用此语句时,受影响的账户仅限于在指定Amazon Web Services 区域执行操作。
Resource
元素
在 Effect
元素具有值 Allow
的语句中,您只能在 SCP 的 Resource
元素中指定“*”。您不能指定单个资源 Amazon Resource Name(ARN)。
您也可以在 resource 参数中使用星号(*)或问号(?)等通配符:
-
使用星号(*)通配符以匹配名称中包含相同部分的多个操作。
-
使用问号(?)通配符来匹配单个字符。
在 Effect
元素具有值 Deny
的语句中,您可以 指定单个 ARN,如以下示例所示。
{ "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 用户指南》中的 IAM JSON 策略元素:资源。
Condition
元素
您可以在 SCP 中的拒绝语句中指定 Condition
元素。
{ "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-1
和 eu-west-1
区域之外的任何操作的访问,但列出的服务中的操作除外。
有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:条件。
不支持的元素
SCP 中不支持以下元素:
-
Principal
-
NotPrincipal
-
NotResource