

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

# 服务控制策略 (SCPs)
<a name="orgs_manage_policies_scps"></a>

服务控制策略 (SCPs) 是一种组织策略，可用于管理组织中的权限。 SCPs 集中控制组织中 IAM 用户和 IAM 角色的最大可用权限。 SCPs 帮助您确保您的帐户符合组织的访问控制准则。 SCPs仅在[启用了所有功能的组织中可用](orgs_manage_org_support-all-features.md)。 SCPs 如果您的组织仅启用了整合账单功能，则不可用。有关启用的说明 SCPs，请参阅[启用策略类型](enable-policy-type.md)。

SCPs 请勿向组织中的 IAM 用户和 IAM 角色授予权限。SCP 不授予任何权限。SCP 针对组织中的 IAM 用户和 IAM 角色可以执行的操作定义了权限护栏或设置了限制。要授予权限，管理员必须附加相关策略来控制访问权限，例如，将基于身份的策略附加到 IAM 用户和 IAM 角色，以及将基于资源的策略附加到您账户中的资源。有关更多信息，请参见《IAM 用户指南》**中的[基于身份的策略和基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。

[有效权限](#scp-effects-on-permissions)是 SCP 和[资源控制策略 (RCPs) 所允许的权限与基于身份和基于资源的策略](orgs_manage_policies_rcps.md)所允许的权限之间的逻辑交集。

**SCPs 不影响管理账户中的用户或角色**  
SCPs 不要影响管理账户中的用户或角色。它们仅影响组织中的成员账户。这也意味着这 SCPs 适用于被指定为授权管理员的成员账户。

****本页面上的主题****
+ [的测试效果 SCPs](#scp-warning-testing-effect)
+ [最大大小为 SCPs](#scp-size-limit)
+ [隶 SCPs 属于组织中的不同级别](#scp-about-inheritance)
+ [SCP 对权限的影响](#scp-effects-on-permissions)
+ [使用访问数据进行改进 SCPs](#data-from-iam)
+ [不受限制的任务和实体 SCPs](#not-restricted-by-scp)
+ [SCP 评估](orgs_manage_policies_scps_evaluation.md)
+ [SCP 语法](orgs_manage_policies_scps_syntax.md)
+ [服务控制策略示例](orgs_manage_policies_scps_examples.md)
+ [使用对服务控制策略 (SCPs) 进行故障排除 AWS Organizations](org_troubleshoot_policies.md)

## 的测试效果 SCPs
<a name="scp-warning-testing-effect"></a>

AWS 强烈建议您在未彻底测试该政策对账户的影响之前，不要将其附加 SCPs 到组织的根目录上。您可以改为创建一个 OU，并将您的账户一次移入一个，或至少每次以少量移入，以确保您不会无意中阻止用户使用关键服务。确定账户是否使用服务的一种方法是检查 [IAM 中服务上次访问的数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html)。另一种方法是[AWS CloudTrail 使用在 API 级别记录服务使用情况](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/how-cloudtrail-works.html)。

**注意**  
除非您修改**完整版AWSAccess**策略或将其替换为包含允许操作的单独策略，否则成员账户的所有操作都将失败，否则所有来自成员账户的 AWS 操作都将失败。

## 最大大小为 SCPs
<a name="scp-size-limit"></a>

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

**提示**  
使用可视化编辑器构建您的 SCP。它会自动删除额外的空格。

## 隶 SCPs 属于组织中的不同级别
<a name="scp-about-inheritance"></a>

有关 SCPs 工作原理的详细说明，请参阅[SCP 评估](orgs_manage_policies_scps_evaluation.md)。

## SCP 对权限的影响
<a name="scp-effects-on-permissions"></a>

SCPs 与 AWS Identity and Access Management 权限策略类似，使用几乎相同的语法。但是，SCP 永远不会授予权限。取而代之 SCPs 的是访问控制，用于指定组织中 IAM 用户和 IAM 角色的最大可用权限。有关更多信息，请参阅《IAM 用户指南》**中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。
+ SCPs ***仅影响由属于该组织的账户管理的 IAM 用户和角色***。 SCPs 不要直接影响基于资源的策略。也不会影响组织外的账户的用户或角色。例如，请考虑一个 Amazon S3 存储桶，它由组织中的账户“A”所有。存储桶策略（一种基于资源的策略）会向来自组织外账户 B 的用户授予访问权限。账户 A 附加了一个 SCP。SCP 不适用于账户 B 中的那些外部用户。SCP 仅适用于由该组织内的账户 A 所管理的用户。
+ SCP 会限制成员账户中的 IAM 用户和角色的权限，包括成员账户的根用户。任何账户都只有上方的***每个*** 父级允许的那些权限。如果权限在账户上面的任何级别被隐式阻止（通过不包括在 `Allow` 策略语句中）或明确阻止（通过包括在 `Deny` 策略语句中），则受影响账户中的用户或角色不能使用该权限，即使账户管理员将带有 \$1/\$1 权限的 `AdministratorAccess` IAM policy 附加到用户也是如此。
+ SCPs 仅影响组织中的***成员***帐户。它们对管理账户中的用户或角色没有任何影响。这也意味着这 SCPs 适用于被指定为授权管理员的成员账户。有关更多信息，请参阅 [管理账户的最佳实践](orgs_best-practices_mgmt-acct.md)。
+ 仍然必须通过适当的 IAM 权限策略将权限授予用户和角色。没有任何 IAM 权限策略的用户没有访问权限，即使适用的策略 SCPs 允许所有服务和所有操作。
+ 如果用户或角色具有授予访问权限的 IAM 权限策略，该策略也被适用用户允许 SCPs，则该用户或角色可以执行该操作。
+ 如果用户或角色的 IAM 权限策略允许访问相应用户不允许或明确拒绝的操作 SCPs，则该用户或角色将无法执行该操作。
+ SCPs 影响关联账户中的所有用户和角色，***包括 root 用户***。唯一例外在 [不受限制的任务和实体 SCPs](#not-restricted-by-scp)中介绍。
+ SCPs ***不***影响任何服务相关角色。服务相关角色允许其他角色与 AWS 服务 之集成 AWS Organizations ，并且不能受其限制。 SCPs
+ 在根目录中禁用 SCP 策略类型时，所有 SCPs 策略类型将自动与该根目录中的所有 AWS Organizations 实体分离。 AWS Organizations 实体包括组织单位、组织和账户。如果您在根目录 SCPs 中重新启用，则该根目录将恢复为仅自动附加到根目录中所有实体的默认`FullAWSAccess`策略。之前 SCPs 被禁用的 AWS Organizations 实体的所有附件都将丢失且无法自动恢复，但您可以手动重新连接它们。 SCPs 
+ 如果权限边界（高级 IAM 功能）和 SCP 同时存在，则边界、SCP 以及基于身份的策略必须全部允许操作。

## 使用访问数据进行改进 SCPs
<a name="data-from-iam"></a>

使用管理账户证书登录后，您可以在 IAM 控制台的**AWS Organizations**部分中查看 AWS Organizations 实体或策略的[上次访问服务数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html)。您还可以在 IAM 中使用 AWS Command Line Interface (AWS CLI) 或 AWS API 来检索上次访问的服务数据。这些数据包括 AWS Organizations 账户中的 IAM 用户和角色上次尝试访问哪些允许的服务以及何时访问的信息。您可以使用此信息来识别未使用的权限，以便可以完善您的权限， SCPs 以更好地遵守[最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)原则。

例如，您可能有一个[拒绝列表 SCP](orgs_manage_policies_scps_evaluation.md#how_scps_deny)，禁止访问三个 AWS 服务。SCP 的 `Deny` 语句中未列出的所有服务均允许访问。IAM 中服务上次访问的数据会告诉您 SCP 允许但从未使用过 AWS 服务 哪些数据。借助该信息，您可以更新 SCP 以拒绝对不需要服务的访问权限。

有关更多信息，请参阅 *IAM 用户指南*中的以下主题：
+ [查看 Organizations 的 Organizations 服务上次的访问数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-view-data-orgs.html)
+ [使用数据来细化组织部门的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-example-scenarios.html#access_policies_access-advisor-reduce-permissions-orgs) 

## 不受限制的任务和实体 SCPs
<a name="not-restricted-by-scp"></a>

您***不能***使用 SCPs 来限制以下任务：
+ 管理账户执行的任何操作
+ 使用附加到服务相关角色的权限执行的任何操作
+ 以根用户身份注册企业支持计划
+ 为 CloudFront 私有内容提供可信签名者功能
+ 为 Amazon Lightsail 电子邮件服务器和作为根用户的 Amazon EC2 实例配置反向 DNS
+ 一些 AWS相关服务的任务：
  + Alexa Top Sites
  + Alexa Web Information Service
  + Amazon Mechanical Turk
  + Amazon Product Marketing API

# SCP 评估
<a name="orgs_manage_policies_scps_evaluation"></a>

**注意**  
本节中的信息***不***适用于管理策略类型，包括备份策略、标签策略、聊天应用程序政策或人工智能服务退出政策。有关更多信息，请参阅 [了解管理策略继承](orgs_manage_policies_inheritance_mgmt.md)。

由于您可以在中附加不同级别的多个服务控制策略 (SCPs) AWS Organizations，因此了解评估 SCPs 方式可以帮助您编写 SCPs 得出正确结果的内容。

**Topics**
+ [如何 SCPs 使用 “允许”](#how_scps_allow)
+ [如何 SCPs 使用 “拒绝”](#how_scps_deny)
+ [使用策略 SCPs](#strategy_using_scps)

## 如何 SCPs 使用 “允许”
<a name="how_scps_allow"></a>

要**允许**特定账户获得权限，在从根到账户直接路径中的每个 OU（包括目标账户本身），每个级别都必须有**显式`Allow`语句**。这就是为什么在启用 SCPs时会 AWS Organizations 附加名为 F [ull](https://console.aws.amazon.com/organizations/v2/home/policies/service-control-policy/p-FullAWSAccess) 的 AWS 托管 SCP 策略AWSAccess，该策略允许所有服务和操作。如果该政策在组织的任何级别被删除且未被替换，则该级别下的所有 OUs 和账户都将被禁止采取任何行动。

例如，我们来看一下图 1 和图 2 所示的场景。要允许账户 B 获得权限或服务，应将允许该权限或服务的 SCP 附加到根、生产 OU 和账户 B 本身。

SCP 评估遵循 deny-by-default模型，这意味着任何未明确允许的权限 SCPs 都将被拒绝。如果 SCPs 在任何级别（例如根、生产 OU 或账户 B）中都没有允许声明，则访问将被拒绝。

![\[在根、生产 OU 和账户 B 处附加 Allow 语句的组织结构示例\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_allow_1.png)


*图 1：在根、生产 OU 和账户 B 处附加 `Allow` 语句的组织结构示例*

![\[生产 OU 中缺少 Allow 语句的组织结构示例及其对账户 B 的影响\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_allow_2.png)


*图 2：生产 OU 中缺少 `Allow` 语句的组织结构示例及其对账户 B 的影响*

## 如何 SCPs 使用 “拒绝”
<a name="how_scps_deny"></a>

要**拒绝**特定账户获得权限，在从根到账户直接路径中的每个 OU（包括目标账户本身），**任何 SCP** 都可以拒绝该权限。

例如，假设有一个 SCP 附加到生产 OU，它为给定服务指定了显式 `Deny` 语句。碰巧还有另一个 SCP 附加到根和账户 B，它显式允许访问相同的服务，如图 3 所示。因此，账户 A 和账户 B 都将被拒绝访问该服务，因为将针对其下的所有账户 OUs 和成员账户评估组织中任何级别的拒绝策略。

![\[生产 OU 中附加了 Deny 语句的组织结构示例及其对账户 B 的影响\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_deny_1.png)


*图 3：生产 OU 中附加了 `Deny` 语句的组织结构示例及其对账户 B 的影响*

## 使用策略 SCPs
<a name="strategy_using_scps"></a>

在撰写时， SCPs 您可以结合使用`Allow`和`Deny`语句来允许在组织中执行预期的操作和服务。 `Deny`语句是实施限制的有力方法，应该适用于组织中的更广泛部分，或者 OUs 因为当它们应用于根级或 OU 级别时，它们会影响其下的所有帐户。

**提示**  
您可以在 [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 中使用[服务上次访问的数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html)来更新您的 SCPs ，将访问权限限制为仅您需要 AWS 服务 的内容。有关更多信息，请参阅《IAM 用户指南》**中的[查看 Organizations 的 Organizations 服务上次访问的数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-view-data-orgs.html)。

AWS Organizations 创建后，将名为 F [https://console.aws.amazon.com/organizations/v2/home/policies/service-control-policy/p-FullAWSAccess](https://console.aws.amazon.com/organizations/v2/home/policies/service-control-policy/p-FullAWSAccess) 的 AWS 托管 SCP 附加AWSAccess到每个根、OU 和账户。此策略允许所有服务和操作。您可以将 F **ull AWSAccess** 替换为仅允许一组服务的策略，这样除非通过更新明确允许新 AWS 服务 服务，否则不允许使用新服务 SCPs。例如，如果您的组织只想允许在您的环境中使用部分服务，则可以使用 `Allow` 语句来仅允许特定服务。您可以选择在根级别或每个级别替换 F **ull AWSAccess**。如果您在根目录处附加特定于服务的许可名单 SCP，它会自动应用于其下的所有 OUs 帐户，这意味着单个根级策略决定了整个组织的有效服务许可名单，如场景 7 所示。或者，您可以删除和替换AWSAccess每个 OU 和账户的 Ful **l**，这样您就可以实施更精细的服务许可名单，这些许可名单因组织单位或个人账户而异。

 注意：仅依赖 allow 语句和隐式 deny-by-default模型可能会导致意外访问，因为更宽或重叠的 Allow 语句可能会覆盖限制性更强的语句。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:*",
                "cloudwatch:*",
                "organizations:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

将两个语句组合在一起的策略可能与以下示例类似，它阻止成员账户离开组织并允许使用所需的 AWS 服务。组织管理员可以分离**完整AWSAccess**策略，改为附加此策略。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:*",
                "cloudwatch:*",
                "organizations:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny", 
            "Action":"organizations:LeaveOrganization",
            "Resource": "*" 
        }
    ]
}
```

------

要演示如何在 AWS 组织中应用多个服务控制策略 (SCPs)，请考虑以下组织结构和方案。

### 情境 1：Deny 策略的影响
<a name="scp_scenario_1"></a>

此情境演示了组织中较高级别的拒绝策略如何影响其下级所有账户。当沙盒 OU 同时具有 “完全 AWS 访问权限” 和 “拒绝 S3 访问” 策略，而账户 B 具有 “拒绝 EC2 访问” 策略时，结果是账户 B 无法访问 S3（来自 OU 级拒绝）和 EC2（来自其账户级拒绝）。账户 A 没有 S3 访问权限（由于 OU 级别的拒绝策略）。

![\[情境 1：Deny 策略的影响\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_1.png)


### 情境 2：每个级别都必须存在允许策略
<a name="scp_scenario_2"></a>

此情境说明允许策略在 SCP 中的运作方式。要使服务可访问，从根级别到账户级别，每个级别都必须明确允许。在这里，由于沙盒 OU 具有“允许 EC2 访问”策略，该策略仅明确允许 EC2 服务访问，账户 A 和 B 将只具有 EC2 访问权限。

![\[情境 2：每个级别都必须存在允许策略\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_2.png)


### 情境 3：在根级别缺少 Allow 语句的影响
<a name="scp_scenario_3"></a>

在 SCP 中缺少 root 级别的 “允许” 语句是一种严重的配置错误，它将有效地阻止组织中所有成员帐户对 AWS 服务和操作的所有访问权限。

![\[情境 3：在根级别缺少 Allow 语句的影响\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_3.png)


### 情境 4：分层 Deny 语句和产生的权限
<a name="scp_scenario_4"></a>

此情境演示了一个两级深度 OU 结构。根和工作负载 OU 都具有 “完全 AWS 访问权限”，测试 OU 具有 “完全 AWS 访问权限” 和 “拒绝 EC2 访问权限”，生产 OU 具有 “完全 AWS 访问权限”。因此，账户 D 拥有除 EC2 之外的所有服务访问权限，账户 E 和 F 则拥有所有服务访问权限。

![\[情境 4：分层 Deny 语句和产生的权限\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_4.png)


### 情境 5：在 OU 级别限制服务访问权限的允许策略
<a name="scp_scenario_5"></a>

此情境说明如何使用允许策略来限制对特定服务的访问。测试 OU 具有“允许 EC2 访问”策略，这意味着账户 D 仅允许访问 EC2 服务。生产 OU 维持“完全 AWS 访问权限”，因此账户 E 和 F 可以访问所有服务。这演示了如何在 OU 级别实施更严格的允许策略，同时在根级别保持更宽松的允许策略。

![\[情境 5：在 OU 级别限制服务访问权限的允许策略\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_5.png)


### 情境 6：根级别的拒绝策略会影响所有账户，无论较低级别有何允许策略
<a name="scp_scenario_6"></a>

此情境表明，根级别的拒绝策略会影响组织中的所有账户，无论较低级别有何允许策略。根同时具有 “完全 AWS 访问权限” 和 “拒绝 S3 访问” 策略。尽管测试 OU 具有“允许 S3 访问”策略，但根级别的 S3 拒绝策略仍具有优先级。账户 D 没有服务访问权限，因为测试 OU 仅允许 S3 访问，但 S3 在根级别已被拒绝。由于根级别有明确的拒绝策略，账户 E 和 F 可以访问除 S3 之外的其他服务。

![\[情境 6：根级别的拒绝策略会影响所有账户，无论较低级别有何允许策略\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_6.png)


### 场景 7：根级别自定义允许策略限制 OU 级别的访问权限
<a name="scp_scenario_7"></a>

此场景演示了在根级别应用显式服务允许列表时如何 SCPs 发挥作用 AWS Organizations。在组织根级别，附加了两个自定义 “服务允许” SCPs ，明确允许访问有限的一组 AWS 服务 — SCP\$11 允许 IAM 和 Amazon EC2，SCP\$12 允许 Amazon S3 和亚马逊。 CloudWatch在组织单位 (OU) 级别，默认的 “完整” AWSAccess 策略仍处于附加状态。但是，由于交叉行为，这些 OU 下的账户 A 和 B 只能访问根级 SCP 明确允许的服务。限制性更强的根策略优先，实际上只允许访问 IAM、EC2、S3 和 CloudWatch 服务，而不管在较低的组织级别授予的更广泛权限如何。

![\[场景 7：根级别自定义允许策略限制 OU 级别的访问权限\]](http://docs.aws.amazon.com/zh_cn/organizations/latest/userguide/images/scp_scenario_7.png)


# 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 中使用星号（\$1）或问号（?）等通配符：
+ 使用星号（\$1）通配符以匹配名称中包含相同部分的多个操作。值 `"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` 元素中指定“\$1”。您不能指定单个资源 Amazon 资源名称 (ARNs)。

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

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

# 服务控制策略示例
<a name="orgs_manage_policies_scps_examples"></a>

本主题中显示的示例[服务控制策略 (SCPs)](orgs_manage_policies_scps.md) 仅供参考。

**在使用这些示例之前**  
在组织 SCPs 中使用这些示例之前，请考虑以下几点：  
[服务控制策略 (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) 本应用作粗粒度的护栏，它们不直接授予访问权限。管理员仍必须将[基于身份或基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)附加到您账户中的 IAM 委托人或资源才能实际授予权限。有效权限是服务控制策略与身份策略或服务 policy/Resource 控制策略与资源策略之间的逻辑交叉点。 policy/Resource 您可以[在此处](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html#scp-effects-on-permissions)获取有关 SCP 对权限影响的更多详细信息。
[服务控制策略 (SCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) 附加到组织、组织单位或账户时，可以集中控制组织、组织单位或账户中所有账户的最大可用权限。由于 SCP 可以应用于组织的多个级别，因此了解[评估](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_evaluation.html)方式SCPs 可以帮助你撰写 SCPs 得出正确结果的文章。
此存储库中的服务控制策略如示例所示。在 SCPs 未彻底测试该政策对账户的影响之前，您不应附加。在您准备好要实施的策略后，我们建议在可以代表您的生产环境的单独组织或 OU 中进行测试。测试完成后，您应该将更改部署到更具体的范围， OUs 然后 OUs 随着时间的推移慢将更改部署到更广泛和更广泛的范围。
此存储库中的 SCP 示例使用[拒绝列表策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_evaluation.html#strategy_using_scps)，这意味着您还需要一个[完整AWSAccess](https://console.aws.amazon.com/organizations/?#/policies/p-FullAWSAccess)策略或其他策略，允许附加到组织实体的访问权限以允许操作。您还需要使用基于身份或基于资源的策略向委托人授予适当的权限。

**提示**  
您可以在 [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 中使用[上次访问的服务数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html)来更新您的 SCPs ，将访问权限限制为仅您需要 AWS 服务 的内容。有关更多信息，请参阅《IAM 用户指南》**中的[查看 Organizations 的 Organizations 服务上次访问的数据](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-view-data-orgs.html)。

## GitHub 存储库
<a name="scp-github-repositories"></a>
+ [服务控制策略示例](https://github.com/aws-samples/service-control-policy-examples)-此 GitHub 存储库包含用于开始使用或完善您的使用方法的示例策略 AWS SCPs

# 使用对服务控制策略 (SCPs) 进行故障排除 AWS Organizations
<a name="org_troubleshoot_policies"></a>

使用此处的信息来帮助您诊断和修复在服务控制策略中发现的常见错误（SCPs）。

中的服务控制策略 (SCPs) AWS Organizations 与 IAM 策略类似，语法相同。此语法从[JavaScript 对象表示](http://www.json.org)法 (JSON) 的规则开始。JSON 描述*对象* 以及组成对象的名称和值对。[IAM 策略语法](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-grammar.html)通过定义名称和值的含义，并让使用策略授予权限的 AWS 服务 可以理解这些名称和值来进行构建。

AWS Organizations 使用 IAM 语法和语法的子集。有关更多信息，请参阅 [SCP 语法](orgs_manage_policies_scps_syntax.md)。

**Topics**
+ [多个策略对象](#morethanonepolicyblock)
+ [多个 Statement 元素](#morethanonestatement)
+ [策略文档超出最大大小](#scptoolong)

## 多个策略对象
<a name="morethanonepolicyblock"></a>

一个 SCP 必须包含一个并且只能包含一个 JSON 对象。可通过在两旁放置 \$1 \$1 括号来表示对象。虽然您可以通过在外部对中嵌入额外 \$1 \$1 括号在 JSON 对象中嵌套其他对象，但是一个策略只能包含一个最外层的 \$1 \$1 括号对。以下示例***不正确***，因为它在顶层包含两个对象（在中调用*red*）：

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

****  

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

------

不过，您可以使用正确的策略语法来实现上面示例的意图。可以将两个数据块合并到单个 `Statement` 元素中，而不是包含两个完整的策略对象 (每个都有自己的 `Statement` 元素)。`Statement` 元素将两个对象组成的数组作为其值，如以下示例所示：

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

无法将此示例进一步压缩到带一个元素的 `Statement` 中，因为两个元素具有不同的作用。通常，您只能在每个语句中的 `Effect` 和 `Resource` 元素相同时组合语句。

## 多个 Statement 元素
<a name="morethanonestatement"></a>

此错误乍一看似乎是由上一部分中的错误变化而来的。但是，它在句法上是不同类型的错误。在以下示例中，顶层只有一个策略对象，由单个 \$1 \$1 括号对表示。但是，该对象包含两个 `Statement` 元素。

一个 SCP 策略只能包含一个 `Statement` 元素，名称 (`Statement`) 在冒号左侧，它的值在冒号右侧。`Statement` 元素的值必须是对象，以 \$1 \$1 括号表示，其中包含一个 `Effect` 元素、一个 `Action` 元素和一个 `Resource` 元素。以下示例***不正确***，因为它在策略对象中包含两个 `Statement` 元素：

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

****  

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

------

因为值对象可以是多个值对象组成的数组，所以您可以通过将两个 `Statement` 元素合并为一个对象数组元素来解决此问题，如以下示例所示：

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

****  

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

------

`Statement` 元素的值是对象数组。此示例中的数组包含两个对象，每个对象是 `Statement` 元素的正确值。数组中的每个对象之间用逗号隔开。

## 策略文档超出最大大小
<a name="scptoolong"></a>

SCP 文档的最大大小为 5,120 个字符。此最大大小包括所有字符，含空格。要减小 SCP 的大小，您可以删除引号之外的所有空格字符（如空格和换行符）。

**注意**  
如果您使用保存策略 AWS 管理控制台，则 JSON 元素之间和引号之外的多余空格将被移除且不计算在内。如果您使用 SDK 操作或保存策略 AWS CLI，则策略将完全按照您提供的方式保存，并且不会自动删除字符。