跳至内容

如何对 AWS Organizations 中的 SCP 显式拒绝错误进行故障排除?

2 分钟阅读
0

AWS Organizations 成员账户收到了一条类似于以下内容的显式拒绝错误消息: “The IAM Entity is not authorized to perform API action on resource: arn:aws:iam::123456789012:role/Admin with an explicit deny in a service control policy”。

简短描述

您可以使用 Organizations Service 控制策略 (SCP) 来管理组织中的成员账户权限。但是,SCP 不会向组织中的 AWS Identity and Access Management (IAM) 身份授予权限。

要授权执行 API 操作,SCP 和 IAM 基于身份的策略都必须允许成员账户访问权限。

解决方法

要确认显式拒绝错误是因为 SCP 拒绝请求而发生的,请使用 AWS CloudTrail 事件历史记录搜索事件名称。然后,从 AWS Organizations 管理账户中,使用 Organizations 控制台移除或修改策略以允许 API 操作请求。

注意: 如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。

查看 CloudTrail 事件历史记录

使用 CloudTrail 控制台

您可以查看过去 90 天内所有支持的服务、集成和事件类型(例如创建、修改、删除)以及不可变活动。无需设置跟踪即可使用 CloudTrail 事件历史记录。

有关说明,请参阅 Viewing recent CloudTrail events in the CloudTrail console(在 CloudTrail 控制台中查看最近的 CloudTrail 事件)。

使用 AWS CLI

运行 lookup-events AWS CLI 命令来查找过去 90 天的管理事件或 CloudTrail Insights 事件。

运行 filter-log-events 命令应用指标筛选器来搜索日志事件中的特定术语、短语和值。然后,您可以将其更改为 CloudWatch 指标和警报。

有关更多信息,请参阅 Filter pattern syntax for metric filters, subscription filters, filter log events, and Live Tail(指标筛选器、订阅筛选器、筛选器日志事件和 Live Tail 的筛选器模式语法)。

使用 AWS Organizations 控制台移除或修改 SCP

完成以下步骤:

  1. 使用 AWS Organizations 管理账户打开 AWS Organizations 控制台。
  2. 在导航窗格中,选择 AWS 账户,然后选择受影响的成员账户。
  3. 选择 Policies(策略)选项卡,然后查看所有限制访问 API 操作的已应用 SCP。
  4. 要编辑策略,请先选中 SCP,然后再选择 Edit policy(编辑策略)。编辑策略后,选择 Save changes(保存更改)。
    -或-
    要删除策略,请先选择 SCP,然后再选择 Delete(删除)
    -或-
    要分离策略,请先选择 SCP,然后再选择 Detach(分离)。

使用 AWS CLI 管理服务控制策略

检索政策详情

要描述策略并查看其当前配置和内容,请运行以下 describe-policy AWS CLI 命令:

aws organizations describe-policy --policy-id policy-id

注意: 将策略 ID 替换为您的策略 ID。

前面的命令返回策略的元数据,其中包括名称、描述、类型和完整的 JSON 策略文档。

识别附加的目标

要确定哪些组织单元 (OU) 或账户受策略影响,请运行以下 list-targets-for-policy AWS CLI 命令:

aws organizations list-targets-for-policy --policy-id policy-id

注意: 将策略 ID 替换为您的策略 ID。

前面的命令列出了当前附加策略的所有目标。这有助于在进行更改之前评测影响范围。

更新策略

要修改策略,请使用更新的 JSON 策略文档运行以下 update-policy AWS CLI 命令:

aws organizations update-policy --policy-id policy-id --content "Updated JSON"

注意: 请将 policy-id ** 替换为您的策略 ID,将更新的 JSON** 替换为更新后的策略文档。

确认 JSON 内容已正确转义且格式无误。对于复杂的策略,将 JSON 存储在文件中并使用 file:// 前缀:

aws organizations update-policy --policy-id policy-id --content file://updated-policy.json

注意: 请将 policy-id 替换为您的策略 ID,将 updated-policy.json 替换为您的策略文档文件。

分离或删除策略

如果您需要完全移除策略而不是对其进行修改,请完成以下步骤:

  1. 要将策略与特定目标分离,请运行以下 detach-policy 命令:

    aws organizations detach-policy --policy-id policy-id --target-id target-id

    注意: 请将 policy-id 替换为您的策略 ID,将 target-id 替换为您的目标 ID。

  2. 要在将策略与所有目标分离后将其删除,请运行以下 delete-policy 命令:

    aws organizations delete-policy --policy-id policy-id

    注意: 将策略 ID 替换为您的策略 ID。

验证显式拒绝错误是否已解决

在成员账户中再次运行 API 操作以确认显式拒绝错误已解决。

相关信息

Service control policies (SCPs) 服务控制策略 (SCP)

Enhanced access denied error messages with policy ARNs(增强访问被拒绝错误消息及策略 ARN)

Viewing details of an organization from the management account(通过管理账户查看组织的详细信息)