SCP 语法 - AWS Organizations

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

SCP 语法

服务控制策略(SCP)使用的语法,与 AWS Identity and Access Management(IAM)权限策略和基于资源的策略(例如 Amazon S3 存储桶策略)使用的语法非常相似。有关 IAM 策略及其语法的更多信息,请参阅《IAM 用户指南》https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html中的 IAM 策略概述

SCP 是一个纯文本文件,根据 JSON 的规则设置结构。它使用本主题中所述的元素。

注意

SCP 中的所有字符将计入其最大大小。本指南中的示例演示了使用额外空格编排格式的 SCP,以提高其可读性。但是,在您的策略大小接近最大大小时,可以删除任何空格(例如,引号之外的空格字符和换行符)来节省空间。

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

元素摘要

下表总结了可在 SCP 中使用的策略元素。一些策略元素仅在拒绝操作的 SCP 中可用。Supported effects (支持的效果) 列中列出了可用于 SCP 中的每个策略元素的效果类型。

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

Allow, Deny

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

Action

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

Allow, Deny

NotAction

指定不受 SCP 约束的AWS服务和操作。用来代替 Action 元素。

Deny

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

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

Version 元素

每个 SCP 必须包含 Version 元素,其值为 "2012-10-17"。此版本值与 IAM 权限策略的最新版本相同。

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

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

Statement 元素

一个 SCP 可包含一个或多个 Statement 元素。一条策略中只能有一个 Statement 关键字,但其值可以是 JSON 语句数组 (使用 [ ] 字符括起)。

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

"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 元素。该值可以是 AllowDeny。它会影响在同一个语句中列出的任意操作。

有关更多信息,请参阅《IAM 用户指南》https://docs.aws.amazon.com/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 充当筛选条件,指定组织、组织部门(OU)或账户中账户的最大权限数。在前面的示例中,即使账户中的用户已经附加了 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 所创建的防护机制也会阻止它。

ActionNotAction 元素

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

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

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

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

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

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

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

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

注意

在 SCP 中,ActionNotAction 参数中的通配符(*)和(?)只能单独使用或放在字符串结尾处。它不能出现在字符串的开头或中间部分。因此,"servicename:action*" 是有效的,但 "servicename:*action""servicename:some*action" 在 SCP 中都是无效的。

有关 AWS Organizations SCP 和 IAM 权限策略中均支持的所有服务和操作的列表,请参阅《IAM 用户指南》中的AWS服务的操作、资源和条件键

有关更多信息,请参阅《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 元素将 AWS 服务排除在策略效果之外。

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

除非使用 IAM 操作,否则在使用此语句时,受影响的账户仅限于在指定AWS 区域执行操作。

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-1eu-west-1 区域之外的任何操作的访问,但列出的服务中的操作除外。

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

不支持的元素

SCP 中不支持以下元素:

  • Principal

  • NotPrincipal

  • NotResource