创建、更新和删除服务控制策略 - AWS Organizations

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

创建、更新和删除服务控制策略

当登录到您组织的管理账户时,您可以创建和更新服务控制策略(SCP)。您可以通过构建拒绝或允许访问您指定的服务和操作的语句来创建 SCP。

SCP 的默认配置是使用“阻止列表”策略,在该策略中,除了通过创建拒绝访问的语句阻止的操作之外,它会隐式允许所有操作。对于拒绝语句,您可以为该语句指定资源和条件并使用 NotAction 元素。对于允许语句,您只能指定服务和操作。有关拒绝访问和允许访问的语句的更多信息,请参阅 SCP 评估

提示

您可以使用 IAM服务上次访问的数据作为更新 SCP 的数据点,以限制仅访问您需要的AWS服务。有关更多信息,请参阅《IAM 用户指南》中的查看 Organizations 的 Organizations 服务上次访问的数据

本主题内容:

创建 SCP

最小权限

要创建 SCP,您需要运行以下操作的权限:

  • organizations:CreatePolicy

AWS Management Console
创建服务控制策略
  1. 登录到 AWS Organizations 控制台。您必须以 IAM 用户的身份登录,担任 IAM 角色;或在组织的管理账户中以根用户的身份登录(不推荐)。

  2. Service control policies (服务控制策略) 页面上,选择 Create policy (创建策略)

  3. CCreate new service control policy (创建新的服务控制策略) 页面上,输入策略的 Policy name (策略名称) 和可选 Policy description (策略说明)

  4. (可选)添加一个或多个标签,方法是选择 Add tag (添加标签),然后输入一个键和可选的值。将值留空,设置为空字符串;它并非 null。您最多可以向策略附加 50 个标签。有关更多信息,请参阅为 AWS Organizations 资源添加标签

    注意

    在接下来的大多数步骤中,我们讨论如何使用 JSON 编辑器右侧的控件来逐个元素构建策略。或者,您可以随时在窗口左侧的 JSON 编辑器中输入文本。您可以直接键入,也可以使用复制和粘贴。

  5. 为了构建策略,您的后续步骤因您是否要添加拒绝允许访问的语句而异。有关更多信息,请参阅SCP 评估。如果您使用 Deny 语句,您可以进行额外的控制,因为您可以限制对特定资源的访问,定义 SCP 何时生效的条件并使用 NotAction 元素。有关语法的详细信息,请参阅SCP 语法

    要添加拒绝 访问的语句,请执行以下操作:

    1. 在编辑器右侧的编辑语句窗格中,在添加操作下选择 AWS 服务。

      当您选择右侧的选项时,JSON 编辑器会更新,以在左侧显示相应的 JSON 策略。

    2. 选择服务后,将打开一个列表,其中包含该服务的可用操作。您可以选择 All actions (所有操作),或选择要拒绝的一个或多个单独操作。

      左侧的 JSON 将更新,以包含您选择的操作。

      注意

      如果您选择一个单独的操作,然后返回并选择 All actions (所有操作),那么 servicename/* 的预期条目会添加到 JSON 中,但您之前选择的单个操作将保留在 JSON 中,而不会被删除。

    3. 如果要添加来自其他服务的操作,您可以选择 Statement (语句) 框顶部的 All services (所有服务),然后根据需要重复前面两个步骤。

    4. 指定要包含在语句中的资源。

      • 添加资源旁边,选择添加

      • Add resource (添加资源) 对话框中,从列表中选择要控制其资源的服务。您只能从上一步骤选择的服务中进行选择。

      • Resource type (资源类型) 下,选择要控制的资源的类型。

      • 最后,在 Resource ARN 中填写 Amazon Resource Name(ARN),以标识您要控制访问权限的特定资源。必须替换由大括号 {} 包围的所有占位符。您可以在资源类型的 ARN 语法允许的地方指定通配符(*)。有关可在何处使用通配符的信息,请参阅特定资源类型的文档。

      • 保存您对策略添加的内容,方法是选择 Add resource (添加资源)。JSON 中的 Resource 元素反映了您的添加或更改。需要 Resource (资源) 元素。

      提示

      如果要指定选定服务的所有资源,请选择列表中的 All resources (所有资源) 选项,或者直接在 JSON 中编辑 Resource 语句以读取 "Resource":"*"

    5. (可选)要指定限制策略语句生效时间的条件,请在添加条件旁边选择添加

      • 条件键 – 从列表中,您可以选择任何可用于所有AWS服务(例如 aws:SourceIp)的条件键,或仅用于您为此语句选择的其中一个服务的特定于服务的键。

      • 限定词 –(可选)如果为条件提供多个值(取决于特定条件键),则可指定限定词来针对值测试请求。

        • 默认值 – 根据策略中的条件键值测试请求中的单个值。如果请求中的值均与策略中的值匹配,则条件返回 true。如果策略指定了多个值,则它们将被视为“or”测试,如果请求值与任何策略值匹配,则条件返回 true。

        • 对于请求中的任何值 – 当请求可以具有多个值时,此选项测试是否有至少一个请求值与策略中的至少一个条件键值匹配。如果请求中的任何一个键值与策略中的任何一个条件值匹配,则条件返回 true。对于没有匹配的键或空数据集,条件返回 false。

        • 对于请求中的所有值 – 当请求可以具有多个值时,此选项测试是否每个请求值都与策略中的条件键值匹配。如果请求中的每个键值均与策略中的至少一个值匹配,则条件返回 true。如果请求中没有键或者键值解析为空数据集(如空字符串),则也会返回 true。

      • 运算符运算符指定要进行比较的类型。显示的选项取决于条件键的数据类型。例如,aws:CurrentTime 全局条件键允许您从任何日期比较运算符(或 Null)中选择,您可以使用它来测试请求中是否存在该值。

        对于 Null 测试之外的任何条件运算符,您可以选择 IfExists 选项。

      • –(可选)指定要测试请求的一个或多个值。

      选择 Add condition (添加条件)

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

    6. (可选)要使用 NotAction 元素来拒绝对所有操作(指定操作除外)的访问权限,请将左窗格中的 Action 替换为 NotAction(位于 "Effect": "Deny", 元素后)。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素:操作

  6. 要添加允许 访问的语句,请执行以下操作:

    1. 在左侧的 JSON 编辑器中,将行 "Effect": "Deny" 改为 "Effect": "Allow"

      当您选择右侧的选项时,JSON 编辑器会更新,以在左侧显示相应的 JSON 策略。

    2. 选择服务后,将打开一个列表,其中包含该服务的可用操作。您可以选择 All actions (所有操作),或选择要允许的一个或多个单独操作。

      左侧的 JSON 将更新,以包含您选择的操作。

      注意

      如果您选择一个单独的操作,然后返回并选择 All actions (所有操作),那么 servicename/* 的预期条目会添加到 JSON 中,但您之前选择的单个操作将保留在 JSON 中,而不会被删除。

    3. 如果要添加来自其他服务的操作,您可以选择 Statement (语句) 框顶部的 All services (所有服务),然后根据需要重复前面两个步骤。

  7. (可选)要向策略添加另一个语句,请选择 Add statement (添加语句) 并使用可视化编辑器构建下一条语句。

  8. 添加完语句后,选择 Create policy (创建策略) 以保存已完成的 SCP。

您的新 SCP 会显示在组织的策略列表中。现在,您可以将 SCP 附加到根、OU 或账户

AWS CLI & AWS SDKs
创建服务控制策略

您可以使用以下命令之一创建 SCP:

  • AWS CLI:create-policy

    以下示例假定您有一个名为 Deny-IAM.json 的文件,其中包含 JSON 策略文本。它使用该文件创建新的服务控制策略。

    $ aws organizations create-policy \ --content file://Deny-IAM.json \ --description "Deny all IAM actions" \ --name DenyIAMSCP \ --type SERVICE_CONTROL_POLICY { "Policy": { "PolicySummary": { "Id": "p-i9j8k7l6m5", "Arn": "arn:aws:organizations::123456789012:policy/o-aa111bb222/service_control_policy/p-i9j8k7l6m5", "Name": "DenyIAMSCP", "Description": "Deny all IAM actions", "Type": "SERVICE_CONTROL_POLICY", "AwsManaged": false }, "Content": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Statement1\",\"Effect\":\"Deny\",\"Action\":[\"iam:*\"],\"Resource\":[\"*\"]}]}" } }
  • AWS SDK:CreatePolicy

注意

SCP 在管理账户和其他部分情况中不会生效。有关更多信息,请参阅不受 SCP 限制的任务和实体

更新 SCP

当登录到您组织的管理账户后,您可以重命名或更改策略内容。更改 SCP 的内容会立即影响所有附加账户中的任何用户、组和角色。

最小权限

若要更新 SCP,您需要运行以下操作的权限:

  • organizations:UpdatePolicy,且同一条策略语句中有一个 Resource 元素包含所指定策略的 ARN(或“*”)。

  • organizations:DescribePolicy,且同一条策略语句中有一个 Resource 元素包含所指定策略的 ARN(或“*”)。

AWS Management Console
更新策略
  1. 登录到 AWS Organizations 控制台。您必须以 IAM 用户的身份登录,担任 IAM 角色;或在组织的管理账户中以根用户的身份登录(不推荐)。

  2. 服务控制策略页面上,选择要更新的策略的名称。

  3. 在策略的详细信息页面上,选择 Edit policy (编辑策略)

  4. 进行以下任何或全部更改:

    • 您可以通过在 Policy name (策略名称) 中输入新名称来重命名策略。

    • 您可以通过在 Policy description (策略说明) 中输入新文本来更改策略说明。

    • 您可以通过在左窗格中以 JSON 格式编辑策略来编辑策略文本。或者,您可以在右侧的编辑器中选择一个语句,然后使用控件更改其元素。有关每个控件的详细信息,请参阅本主题前面的创建 SCP 过程

  5. 完成后,选择 Save changes (保存更改)

AWS CLI & AWS SDKs
更新策略

可以使用以下命令之一来更新策略:

  • AWS CLI:update-policy

    以下示例重命名策略。

    $ aws organizations update-policy \ --policy-id p-i9j8k7l6m5 \ --name "MyRenamedPolicy" { "Policy": { "PolicySummary": { "Id": "p-i9j8k7l6m5", "Arn": "arn:aws:organizations::123456789012:policy/o-aa111bb222/service_control_policy/p-i9j8k7l6m5", "Name": "MyRenamedPolicy", "Description": "Blocks all IAM actions", "Type": "SERVICE_CONTROL_POLICY", "AwsManaged": false }, "Content": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Statement1\",\"Effect\":\"Deny\",\"Action\":[\"iam:*\"],\"Resource\":[\"*\"]}]}" } }

    以下示例添加或更改服务控制策略的说明。

    $ aws organizations update-policy \ --policy-id p-i9j8k7l6m5 \ --description "My new policy description" { "Policy": { "PolicySummary": { "Id": "p-i9j8k7l6m5", "Arn": "arn:aws:organizations::123456789012:policy/o-aa111bb222/service_control_policy/p-i9j8k7l6m5", "Name": "MyRenamedPolicy", "Description": "My new policy description", "Type": "SERVICE_CONTROL_POLICY", "AwsManaged": false }, "Content": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Statement1\",\"Effect\":\"Deny\",\"Action\":[\"iam:*\"],\"Resource\":[\"*\"]}]}" } }

    以下示例通过指定包含新 JSON 策略文本的文件来更改 SCP 的策略文档。

    $ aws organizations update-policy \ --policy-id p-zlfw1r64 --content file://MyNewPolicyText.json { "Policy": { "PolicySummary": { "Id": "p-i9j8k7l6m5", "Arn": "arn:aws:organizations::123456789012:policy/o-aa111bb222/service_control_policy/p-i9j8k7l6m5", "Name": "MyRenamedPolicy", "Description": "My new policy description", "Type": "SERVICE_CONTROL_POLICY", "AwsManaged": false }, "Content": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"AModifiedPolicy\",\"Effect\":\"Deny\",\"Action\":[\"iam:*\"],\"Resource\":[\"*\"]}]}" } }
  • AWS SDK:UpdatePolicy

有关更多信息

有关创建 SCP 的更多信息,请参阅以下主题:

编辑附加到 SCP 的标签

当您登录到组织的管理账户时,您可以添加或删除附加到 SCP 的标签。有关标记的更多信息,请参阅为 AWS Organizations 资源添加标签

最小权限

要编辑附加到AWS组织中 SCP 的标签,您必须拥有以下权限:

  • organizations:DescribeOrganization – 仅当使用 Organizations 控制台时才需要

  • organizations:DescribePolicy – 仅当使用 Organizations 控制台时才需要

  • organizations:TagResource

  • organizations:UntagResource

AWS Management Console
编辑附加到 SCP 的标签
  1. 登录到 AWS Organizations 控制台。您必须以 IAM 用户的身份登录,担任 IAM 角色;或在组织的管理账户中以根用户的身份登录(不推荐)。

  2. Service control policies (服务控制策略) 页面上,选择带有您想要编辑的标签的策略名称。

  3. 在策略详细信息页面上,选择 Tags (标签) 选项卡,然后选择 Manage tags (管理标签)

  4. 进行以下任何或全部更改:

    • 更改标签的值,方法是在旧标签上输入新值。您不能直接修改标签键。要更改键,您必须删除带有旧键的标签,然后添加使用新键的标签。

    • 删除任何现有的标签,方法是选择 Remove (删除)

    • 添加新的标签键和值对。选择 Add tag (添加标签),然后在提供的框中输入新的键名称和可选值。如果您将 Value (值) 框留空,则值是空字符串;它并非 null

  5. 完成后,选择 Save changes (保存更改)

AWS CLI & AWS SDKs
编辑附加到 SCP 的标签

您可以使用以下命令之一编辑附加到 SCP 的标签:

删除 SCP

当登录到您组织的管理账户时,您可以删除您的组织中不再需要的策略。

注意
  • 必须先将某个策略从所有附加实体中分离,然后才能删除该策略。

  • 您无法删除任何AWS托管的 SCP,例如名为 FullAWSAccess 的 SCP。

最小权限

若要删除 SCP,您需要运行以下操作的权限:

  • organizations:DeletePolicy

AWS Management Console
删除 SCP
  1. 登录到 AWS Organizations 控制台。您必须以 IAM 用户的身份登录,担任 IAM 角色;或在组织的管理账户中以根用户的身份登录(不推荐)。

  2. Service control policies (服务控制策略) 页面上,选择要删除的 SCP 的名称。

  3. 要删除的策略必须先从所有根、OU 和账户分离。选择 Targets (目标) 选项卡,选择显示在 Targets (目标) 列表中的每个根、OU 或账户旁边的单选按钮,然后选择 Detach (分离)。在确认对话框中,选择 Detach (分离)。重复操作,直到删除所有目标。

  4. 在页面的顶部,选择 Delete (删除)

  5. 在确认对话框上,输入策略的名称,然后选择 Delete (删除)

AWS CLI & AWS SDKs
删除 SCP

可以使用以下命令之一删除策略:

  • AWS CLI:delete-policy

    以下示例删除指定 SCP。

    $ aws organizations delete-policy \ --policy-id p-i9j8k7l6m5

    如果成功,此命令不会产生任何输出。

  • AWS SDK:DeletePolicy