

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

# SCP 语法
<a name="orgs_manage_policies_scps_syntax"></a>

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

SCP 是一个纯文本文件，根据 [JSON](http://json.org) 的规则设置结构。它使用本主题中所述的元素。

**注意**  
SCP 中的所有字符将计入其[最大大小](orgs_reference_limits.md#min-max-values)。本指南中的示例显示了带有额外空格以提高其可读性的 SCPs 格式化内容。但是，在您的策略大小接近最大大小时，可以删除任何空格（例如，引号之外的空格字符和换行符）来节省空间。

有关的一般信息 SCPs，请参见[服务控制策略 (SCPs)](orgs_manage_policies_scps.md)。

## 元素摘要
<a name="scp-elements-table"></a>

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


| Element | 用途 | 支持的效果 | 
| --- | --- | --- | 
| [Action](#scp-syntax-action) | 指定 SCP 允许或拒绝的 AWS 服务和操作。 | `Allow`, `Deny` | 
| [效果](#scp-syntax-effect) | 定义 SCP 语句是[允许](orgs_manage_policies_scps_evaluation.md#how_scps_allow)还是[拒绝](orgs_manage_policies_scps_evaluation.md#how_scps_deny)账户中的 IAM 用户和角色访问权限。 | `Allow`, `Deny` | 
| [Statement](#scp-syntax-statement) | 充当策略元素的容器。中可以有多个语句 SCPs。 | `Allow`, `Deny` | 
| [Statement ID (Sid)](#scp-syntax-sid) | （可选）提供语句的友好名称。 | `Allow`, `Deny` | 
| [版本](#scp-syntax-version) | 指定要用于处理策略的语言语法规则。 | `Allow`, `Deny` | 
| [Condition](#scp-syntax-condition) | 指定语句何时生效的条件。 | `Allow,``Deny` | 
| [NotAction](#scp-syntax-action) | 指定免受 SCP 限制的 AWS 服务和操作。用来代替 `Action` 元素。 | `Allow,``Deny` | 
| [资源](#scp-syntax-resource) | 指定 SCP 适用的 AWS 资源。 | `Allow,``Deny` | 
| [NotResource](#scp-syntax-resource) | 指定免受 SCP 限制的 AWS 资源。用来代替 Resource 元素。 | `Allow`, `Deny` | 

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

**Topics**
+ [元素摘要](#scp-elements-table)
+ [`Action` 和 `NotAction` 元素](#scp-syntax-action)
+ [`Condition` 元素](#scp-syntax-condition)
+ [`Effect` 元素](#scp-syntax-effect)
+ [`Resource`和`NotResource`元素](#scp-syntax-resource)
+ [`Statement` 元素](#scp-syntax-statement)
+ [Statement ID (`Sid`) 元素](#scp-syntax-sid)
+ [`Version` 元素](#scp-syntax-version)
+ [不支持的元素](#scp-syntax-unsupported)

## `Action` 和 `NotAction` 元素
<a name="scp-syntax-action"></a>

`Action`或`NotAction`元素的值是一个字符串列表（JSON 数组），用于标识语句允许或拒绝的 AWS 服务和操作。

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

您也可以在 SCP 中使用星号（\*）或问号（?）等通配符：
+ 使用星号（\*）通配符以匹配名称中包含相同部分的多个操作。值 `"s3:*"` 表示 Amazon S3 服务中的所有操作。值 `"ec2:Describe*"` 仅与以“Describe”开头的 EC2 操作匹配。
+ 使用问号（?）通配符来匹配单个字符。

有关所有服务及其在两者 AWS Organizations SCPs和 IAM 权限策略中支持的操作的列表，请参阅 IA *M 用户指南*中的[AWS 服务操作、资源和条件密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actionsconditions.html)。

有关更多信息，请参阅 [IAM 用户指南中的 IAM JSON 策略元素： NotAction操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html)[和 I](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html) *AM* JSON 策略元素：。

### `Action` 元素的示例
<a name="scp-syntax-action-example"></a>

以下示例演示带有一条语句的 SCP，该语句允许账户管理员在账户中委派 EC2 实例的描述、启动、停止和终止权限。这是一个[允许列表](orgs_manage_policies_scps_evaluation.md#how_scps_allow)示例，这在***未***附加默认 `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": "*"
    }
}
```

------

以下示例演示如何通过[拒绝访问](orgs_manage_policies_scps_evaluation.md#how_scps_deny)您不希望用于所附加账户中的服务。它假定默认 `"Allow *"` SCP 仍附加到所有 OU 和根。此示例策略阻止所附加账户中的账户管理员委派 IAM、Amazon EC2 和 Amazon RDS 服务的任何权限。只要没有其他已附加策略拒绝，就可以委派来自其他服务的任何操作。

------
#### [ JSON ]

****  

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

------

### `NotAction` 元素的示例
<a name="scp-syntax-notaction-example"></a>

以下示例说明如何使用`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` 元素
<a name="scp-syntax-condition"></a>

您可以在 SCP 中的 Allow 和 Deny 语句中指定 `Condition` 元素。

以下示例说明如何在 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}}"
               ]
            }
         }
      }
   ]
}
```

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

------
#### [ JSON ]

****  

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

------

有关更多信息，请参阅 *IAM 用户指南* 中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。

## `Effect` 元素
<a name="scp-syntax-effect"></a>

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

有关更多信息，请参阅《IAM 用户指南》[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html)中的 *IAM JSON 策略元素：效果*。

### `"Effect": "Allow"`
<a name="scp-syntax-effect-allow"></a>

以下示例演示带有一条语句的 SCP，该语句包含一个 `Effect` 元素，其值为 `Allow`，表示允许账户用户执行 Amazon S3 服务的操作。对于使用[允许列表策略](orgs_manage_policies_scps_evaluation.md#how_scps_allow)（已经分离了所有默认 `FullAWSAccess` 策略使得默认情况下默示拒绝权限）的组织，此示例非常有用。结果是语句[允许](orgs_manage_policies_scps_evaluation.md#how_scps_allow)任何附加账户的 Amazon S3 权限：

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

即使它使用与 IAM 权限策略相同的 `Allow` 值关键字，在 SCP 中它也不会实际授予用户执行任何操作的权限。相反，可以 SCPs 充当筛选器，为组织、组织单位 (OU) 或账户中的账户指定最大权限。在前面的示例中，即使账户中的用户已经附加了 `AdministratorAccess` 托管式策略，SCP 也会将受影响账户中的***所有***用户限制为只能执行 Amazon S3 操作。

### `"Effect": "Deny"`
<a name="scp-syntax-effect-deny"></a>

在`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"
            }
        }
    }
}
```

------

SCP 中的此语句设置一个防护机制来阻止受影响的账户（其中，SCP 附加到账户本身或包含该账户的组织根或 OU）启动 Amazon EC2 实例（如果 Amazon EC2 实例未设置为 `t2.micro`）。即使将允许此操作的 IAM 策略附加到账户，SCP 所创建的防护机制也会阻止它。

## `Resource`和`NotResource`元素
<a name="scp-syntax-resource"></a>

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

您可以在资源元素中使用星号（\*）或问号（?）等通配符：
+ 使用星号（\*）通配符以匹配名称中包含相同部分的多个操作。
+ 使用问号（?）通配符来匹配单个字符。

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

------
#### [ JSON ]

****  

```
{    
  "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 角色进行更改。

以下示例说明如何使用 `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 策略元素：资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)。

## `Statement` 元素
<a name="scp-syntax-statement"></a>

一个 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 策略元素：语句](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_statement.html)。

## Statement ID (`Sid`) 元素
<a name="scp-syntax-sid"></a>

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

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

有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_id.html)。

## `Version` 元素
<a name="scp-syntax-version"></a>

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

有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：版本](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_version.html)。

## 不支持的元素
<a name="scp-syntax-unsupported"></a>

中不支持以下元素 SCPs：
+ `NotPrincipal`
+ `Principal`