亚马逊AWS官方博客

如何使用服务控制策略在 Amazon Organizations 中跨账户设置权限防护机制

Amazon Organizations 为多个账户提供集中监管和管理。中央安全管理员使用 Amazon Organizations 的服务控制策略(SCP)来构建所有 IAM 主体(用户和角色)都遵守的控制机制。现在,您可以使用 SCP 设置权限防护机制,其中包含 Amazon Identity and Access Management(IAM)policy 语言支持的精细控制。该机制让您可以更轻松地调整策略,以满足组织监管规则的确切要求。

您现在可以使用 SCP 指定 ConditionsResourcesActionNotAction 以拒绝组织或组织单位中的跨账户访问。例如,您可以使用 SCP 限制对特定亚马逊云科技中国区域的访问权限,或者阻止您的 IAM 主体删除常见资源,例如用于中央管理员的 IAM 角色。您还可以定义监管控制的例外情况,限制账户中除特定管理员角色之外的所有 IAM 实体(用户、角色和根)进行服务操作。

要使用 SCP 实施权限防护机制,您可以使用 Amazon Organizations 控制台中的策略编辑器。此编辑器通过指导您添加操作、资源和条件,让编写 SCP 变得更加容易。在这篇文章中,我将回顾 SCP,并展示如何构建可以立即在组织中使用的示例 SCP。

服务控制策略概念概览

在介绍示例之前,先来回顾一下 SCP 和 Amazon Organizations 的一些功能。

SCP 为账户中的所有 IAM 实体提供集中访问控制。您可以使用 SCP 来强制执行希望业务中每个人遵循的权限。通过使用 SCP,开发人员只能在您定义的边界内操作,因此您可以放心地让开发人员管理自己的权限。

您可以通过 Amazon Organizations 创建并应用 SCP。当您创建组织时,Amazon Organizations 会自动创建一个,它构成组织中所有账户的父容器。在根中,您可以将组织中的账户分组为组织单位(OU),以简化对这些账户的管理。您可以在单个组织内创建多个 OU,也可以在其他 OU 内创建 OU,以形成分层结构。您可以将 SCP 附加到组织根、OU 账户和个人账户。附加到根和 OU 的 SCP 适用于所有 OU 及 OU 中的账户。

但 SCP 使用 Amazon Identity and Access Management(IAM)policy 语言,不授予权限。SCP 允许您通过定义账户中 IAM 实体的最大可用权限来设置权限防护机制。如果 SCP 拒绝针对某个账户执行某项操作,则该账户中的任何实体都无法执行该操作,即使其 IAM 权限允许他们执行该操作。SCP 中设置的防护机制适用于账户中的所有 IAM 实体,包括所有用户、角色和账户根用户。

SCP 中可用的策略元素

下表总结了 SCP 中可用的 IAM policy 语言元素。有关不同 IAM policy 元素的更多信息,请参阅 IAM JSON 策略参考

“支持的语句效果”列表示您可以对 SCP 中的每个策略元素使用的效果类型。

策略元素 定义 支持的语句效果
Statement 策略的主要元素。每个策略可以有多个语句。 允许、拒绝
Sid (可选)语句友好的名称。 允许、拒绝
Effect 定义 SCP 语句是允许还是拒绝账户中的操作。 允许、拒绝
Action 列出 SCP 适用的亚马逊云科技操作。 允许、拒绝
NotAction (可选)列出不受 SCP 限制的亚马逊云科技操作。取代 Action 元素。 拒绝
Resource 列出 SCP 适用的亚马逊云科技资源。 拒绝
Condition (可选)指定语句何时生效的条件。 拒绝

注意:某些策略元素仅在拒绝操作的 SCP 中可用。

您可以在组织中新的或现有 SCP 中使用新的策略元素。在下一部分,我将使用 Amazon Organizations 控制台用新元素创建 SCP。

在 Amazon Organizations 控制台中创建 SCP

在本部分,您将创建 SCP 来限制账户中的 IAM 主体,使其无法更改在组织的所有账户中创建的常用 IAM 管理角色。想象一下,您的中央安全团队使用这些角色来审核和更改亚马逊云科技设置。就本例而言,您在所有名为 AdminRole 的账户中都有附加了 AdministratorAccess 托管策略的角色。使用 SCP,您可以限制账户中的所有 IAM 实体修改 AdminRole 或其关联权限。从而确保中央安全团队始终可以使用此角色。以下是创建和附加此 SCP 的步骤。

1. 确保您已通过 Amazon Organizations 控制台启用了 Amazon Organizations 的所有功能SCP

2. 在 Amazon Organizations 控制台中,选择“策略”选项卡,选择“服务控制策略”,然后选择“创建策略”。

图 1:在“策略”选项卡上选择“创建策略”

3. 为策略命名并添加描述,以帮助您快速识别它。在此示例中,我使用以下名称和描述。

  • 名称:DenyChangesToAdminRole
  • 描述:防止所有 IAM 主体更改 AdminRole。

图 2:为策略命名并添加描述

4. 在文本编辑器中,策略编辑器提供一个空白语句作为开始,并允许您使用右侧面板向其中添加相关的操作、资源和条件。

图 3:SCP 编辑器工具

5. 更改 Statement ID 以说明该语句的作用。在此示例中,由于该策略只有一条语句,我沿用了策略的名称 DenyChangesToAdminRole

图 4:更改 Statement ID

接下来,添加您希望限制的操作。使用右侧面板,选择 IAM 服务。您会看到操作列表。要了解每个操作的详细信息,您可以单击每个操作旁边的 “i”。在此示例中,我们希望允许账户中的主体查看该角色,但限制任何可能修改或删除该角色的操作。于是我们使用 NotAction 策略元素拒绝对该角色进行除查看操作之外的所有操作。从列表中选择以下查看操作:

  • GetContextKeysForPrincipalPolicy
  • GetRole
  • GetRolePolicy
  • ListAttachedRolePolicies
  • ListInstanceProfilesForRole
  • ListRolePolicies
  • ListRoleTags
  • SimulatePrincipalPolicy

6. 现在,将光标置于 Action 元素并将其更改为 NotAction。执行上述步骤后,您的策略应如下所示。

图 5:策略示例

7. 接下来,仅对账户中的 AdminRole 角色应用这些控制机制。为此,请使用 Resource 策略元素,该元素现在让您可以指定资源。

a. 在右边 添加资源部分中,选择添加按钮。

b. 在提示中,从下拉菜单中选择 IAM 服务。

c. 选择角色作为资源类型,然后在资源 ARN 提示中键入 “arn:aws:iam::*:role/AdminRole”。

d. 选择添加资源

注意:AdminRole 在所有账户中具有通用名称,但对于每个角色的账户 ID 会有所不同。要简化策略语句,请使用 * 通配符代替账户 ID,以表示所有具有此名称的角色,无论账户是什么。

8. 您的策略应如下所示:

{    
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyChangesToAdminRole",
      "Effect": "Deny",
      "NotAction": [
        "iam:GetContextKeysForPrincipalPolicy",
        "iam:GetRole",
        "iam:GetRolePolicy",
        "iam:ListAttachedRolePolicies",
        "iam:ListInstanceProfilesForRole",
        "iam:ListRolePolicies",
        "iam:ListRoleTags",
        "iam:SimulatePrincipalPolicy"
      ],
      "Resource": [
        "arn:aws:iam::*:role/AdminRole"
      ]
    }
  ]
}

9. 选择创建策略按钮来创建您的策略。您可以在策略选项卡中看到新策略。

图 6:“策略”选项卡上的新策略

10. 最后,将策略附加到您要申请权限的亚马逊云科技账户。

附加 SCP 后,该账户会阻止更改角色的配置。使用该角色的中央安全团队可能希望稍后进行更改,因此您可能希望允许角色本身修改该角色的配置。我将在下一部分演示如何执行此操作。

为管理员角色授予 SCP 例外权限

在上一部分,您已经创建了一个防止所有主体修改或删除 AdminRole IAM 角色的 SCP。中央安全团队的管理员可能需要在不解除 SCP 保护的前提下更改组织中的此角色。在下一个示例中,我会在以上策略的基础上继续构建,演示如何将 AdminRole 排除在 SCP 防护机制之外。

1. 在 Amazon Organizations 控制台中,选择策略选项卡,选择服务控制策略,选择 DenyChangesToAdminRole 策略,然后选择编辑策略

2. 在添加条件部分中,选择添加按钮。您将使用策略的 Condition 元素,使用 aws:PrincipalARN 全局条件键来指定要从策略限制中排除的角色。

3. aws:PrincipalARN 条件键返回提出请求的主体的 ARN。如果请求的主体是 AdminRole,则忽略该策略语句。使用 StringNotLike 运算符断言如果主体 ARN 不是 AdminRole,则此 SCP 生效。为此,请为条件填写以下值。

a. 条件键:aws:PrincipalARN

b. 标签键:arn:aws:iam::*:role/AdminRole

c. 限定符:Default

d. 运算符:StringNotLike

4. 选择添加条件。编辑窗口中将显示以下策略。

{    
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyChangesToAdminRole",
      "Effect": "Deny",
      "NotAction": [
        "iam:GetContextKeysForPrincipalPolicy",
        "iam:GetRole",
        "iam:GetRolePolicy",
        "iam:ListAttachedRolePolicies",
        "iam:ListInstanceProfilesForRole",
        "iam:ListRolePolicies",
        "iam:ListRoleTags"
      ],
      "Resource": [
        "arn:aws:iam::*:role/AdminRole"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:PrincipalARN":"arn:aws:iam::*:role/AdminRole"
        }
      }
    }
  ]
}

5. 验证策略后,选择保存更改。如果您已经在组织中附加了该策略,则更改将立即生效。

现在,SCP 拒绝账户中除 AdminRole 本身之外的所有主体更新或删除 AdminRole。

后续步骤

您现在可以使用 SCP 限制对特定资源的访问权限,或定义 SCP 何时生效的条件。您现在可以在现有 SCP 中使用新功能,也可以为您的组织创建新的权限防护机制。我在这篇博客文章中演示了一个例子,您还可以在文档中探索 SCP 的其他使用案例。以下是我们从客户那里了解到的您可能感兴趣的内容。

  • 账户只能在某些亚马逊云科技区域运营(示例
  • 账户只能部署某些 EC2 实例类型(示例
  • 账户需要在执行操作之前启用 MFA(示例

您可以使用 Amazon Organizations 控制台CLIAPI 开始应用 SCP。有关 SCP 以及如何在组织中使用 SCP 的更多信息,请参阅服务控制策略文档

Original URL:https://aws.amazon.com/blogs/security/how-to-use-service-control-policies-to-set-permission-guardrails-across-accounts-in-your-aws-organization/