SCP 语法 - AWS Organizations

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

SCP 语法

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

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

注意

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

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

元素摘要

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

元素 用途 支持的效果

操作

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

Allow, Deny

效果 定义 SCP 语句是允许还是拒绝账户中的 IAM 用户和角色访问权限。

Allow, Deny

Statement 充当策略元素的容器。中可以有多个语句 SCPs。

Allow, Deny

Statement ID (Sid) (可选)提供语句的友好名称。

Allow, Deny

版本 指定要用于处理策略的语言语法规则。

Allow, Deny

Condition 指定语句何时生效的条件。

Allow, Deny

NotAction

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

Allow, Deny

资源 指定 SCP 适用的 AWS 资源。

Allow, Deny

NotResource 指定免受 SCP 限制的 AWS 资源。用来代替 Resource 元素。

Allow, Deny

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

ActionNotAction 元素

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

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

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

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

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

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

有关更多信息,请参阅 IAM 用户指南中的 IA M JSON 策略元素: NotAction操作和 IAM JSON 策略元素:

Action 元素的示例

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

JSON
{ "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 上。此示例策略禁止关联账户中的账户管理员委派对 IAM、Amazon 和 Amazon EC2 RDS 服务的任何权限。只要没有其他已附加策略拒绝,就可以委派来自其他服务的任何操作。

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

NotAction 元素的示例

以下示例说明如何使用NotAction元素将 AWS 服务排除在策略的影响之外。

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

使用此声明,除非使用 IAM 操作 AWS 区域,否则受影响的账户只能在指定范围内执行操作。

Condition 元素

您可以在 SCP 的允许和拒绝语句中指定一个Condition元素。

以下示例说明如何在 SCP 中使用带有 deny 语句的条件元素来限制对eu-central-1eu-west-1区域之外的任何操作的访问,但指定服务中的操作除外。

{ "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 中使用带有 allow 语句的条件元素来允许特定的委托人访问服务 AWS 。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowServicesForSpecificPrincipal", "Effect":"Allow", "Action":[ "ec2:*", "s3:*", "rds:*", "lambda:*", "cloudformation:*", "iam:*", "cloudwatch:*" ], "Resource":"*", "Condition":{ "StringEquals":{ "aws:PrincipalArn":[ "arn:aws:iam::123456789012:role/specific-role" ] } } } ] }

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

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 中它也不会实际授予用户执行任何操作的权限。相反,可以 SCPs 充当筛选器,为组织、组织单位 (OU) 或账户中的账户指定最大权限。在前面的示例中,即使账户中的用户已经附加了 AdministratorAccess 托管式策略,SCP 也会将受影响账户中的所有用户限制为只能执行 Amazon S3 操作。

"Effect": "Deny"

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

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

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

EC2 如果 Amazon EC2 实例未设置为,SCP 中的此声明设置了保护措施,防止受影响的账户(其中 SCP 附加到账户本身或包含该账户的组织根目录或 OU)启动亚马逊实例。t2.micro即使将允许此操作的 IAM 策略附加到账户,SCP 所创建的防护机制也会阻止它。

ResourceNotResource元素

您可以使用通配符,例如星号 (*) 或问号 (?) 在资源元素中:

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

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

以下示例说明如何使用 SCP 来防止 IAM 用户和受影响账户中的角色修改在组织中所有账户中创建的常见管理 IAM 角色。

{ "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" ] } ] }

以下示例说明如何使用NotResource元素将特定的 Amazon Bedrock 型号排除在政策的影响之外。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"Statement1", "Effect":"Deny", "Action":[ "bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream" ], "NotResource":[ "arn:aws:bedrock:*::foundation-model/model-to-permit" ] } ] }

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

Statement 元素

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

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

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

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

Version 元素

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

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

不支持的元素

中不支持以下元素 SCPs:

  • Principal

  • NotPrincipal