如何排查所有资源均来自同一 AWS 账户的 Amazon S3 桶的“403 访问被拒绝”错误?

2 分钟阅读
0

我想要访问我的 Amazon Simple Storage Service(Amazon S3)桶。所有相关资源均来自同一 AWS 账户。但是,我收到了一个“403 访问被拒绝”错误。

简短描述

当您对 Amazon S3 桶执行被禁止的请求时,该服务会返回“403 访问被拒绝”错误。要手动排查“403 访问被拒绝”错误,请参阅如何排查 Amazon S3 的“403 访问被拒绝”错误?

您还可以使用 AWS Systems ManagerAWSSupport-TroubleshootS3AccessSameAccount 运行手册,以协助您诊断 Amazon S3 桶的访问被拒绝问题。针对来自同一 AWS 账户的所有相关资源,该运行手册会评估在 Amazon S3 资源上授予请求者的资源访问权限级别。这包括与 Amazon S3 资源关联的访问策略、用户策略和基于资源的策略。它还包括在输入参数中指定的 AWS Identity and Access Management(IAM)用户或角色。

**注意:**AWSSupport-TroubleshootS3AccessSameAccount 不对跨账户资源的权限进行评估。此外,请求者必须与 Amazon S3 桶或对象处于同一 AWS 账户。

解决方法

必要步骤

按照以下步骤从 Systems Manager 控制台运行 AWSSupport-TroubleshootS3AccessSameAccount 运行手册:

1.    打开 Systems Manager 控制台

2.    在导航窗格中,选择自动化

3.    选择执行自动化

4.    在“选择文档”下选择由 Amazon 拥有选项卡。

5.    在自动化文档搜索栏中,从下拉列表中选择文档名称前缀筛选器。然后从下拉列表中选择相等,并输入 AWSSupport-TroubleshootS3AccessSameAccount。然后按确认

6.    选择 AWSSupport-TroubleshootS3AccessSameAccount

7.    选择下一步

8.    选择简单执行

9.    对于 S3ResourceArn,输入要排除故障的 S3 桶或对象的 ARN。例如,要测试对象的上传或下载。

arn:aws:s3:::bucket_name/key_name

10.    对于 S3Action,选择您希望运行手册评估的 S3 操作。

11.    对于 RequesterARN,输入您想要在特定的 S3 资源上查找访问级别的 IAM 用户或角色 ARN:

arn:aws:iam::123456789012:user/user_name or arn:aws:iam::123456789012:role/example-rol

12.    选择执行

借助执行状态来跟踪文件的进度。状态变为成功之后,查看输出部分中列出的结果。结果包括每个被评估对象的错误代码。
注意:要查看评估中每一个步骤的结果,请在“已执行步骤”下方选择相关的步骤 ID

可选步骤

以下步骤是可选的。

  • 对于 AutomationAssumeRole,您可以为 Systems Manager 选择一个 IAM 角色,向您的桶发送请求。如果将此字段留空,Systems Manager 会采用您正在使用的 IAM 身份来设置文件。有关更多信息,请参阅 AutomationAssumeRole 所需的 IAM 权限部分。
    **重要事项:**您选择的 IAM 角色的信任策略必须允许 Systems Manager Automation 代入该角色。此外,IAM 角色必须具有运行 AWSSupport-TroubleshootS3AccessSameAccount 运行手册的权限。

  • 如果 IAM ARN 是一个角色并且您想要提供特定的会话名称,请在 RequesterRoleSessionName 中输入会话名称。

  • 如果对象有多个版本,请在 S3ObjectVersionId 中输入对象的 VersionId。此参数让您可以指定要为其评估访问上下文的对象版本。

  • 如果与操作相关,请输入 KmsKeyArn 的 KMS 密钥 ARN。例如,要测试利用 KMS 密钥加密的对象的下载情况。

  • 对于 VpcEndpointId,您可以输入与访问评估相关的 Amazon Virtual Private Cloud(Amazon VPC)端点 ID。Amazon S3 桶策略可以控制特定 Amazon VPC 端点对桶的访问权限。

  • 对于 ContextKeyList,您可以输入条件上下文密钥列表以及与策略评估相关的相应值。例如,桶策略中对 PutObject 的明确拒绝:

    {"ContextKeyName":"s3:x-amz-server-side-encryption-aws-kms-key-id","ContextKeyValues':["arn:aws:kms:us-east-1:123456789012:key/abc12345-b1e9-45a3-aa90-39ec93dd9b82'],"ContextKeyType":"string'}
  • 如果您希望运行手册将输入与特定的 AWS Organizations 服务控制策略(SCP)进行比较,请在 SCPPolicy 中输入 SCP。输入值时,请移除所有新行、制表符或空格。如果您使用组织的管理账户运行此运行手册,则无需执行此步骤。

  • 对于标签,您可以标记为自动化,帮助您进行分类。

  • 对于 AWS CLI 命令和可共享的执行链接,运行手册提供了适用于 Linux、Unix 和 macOS 的 AWS 命令行界面(AWS CLI)命令示例。运行手册还提供了一个可共享的链接。

AutomationAssumeRole 所需的 IAM 权限

AutomationAssumeRole 参数需要进行某些操作,才能使用运行手册。

以下示例策略包括了自动化角色需要进行的操作:

{  
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iam:SimulateCustomPolicy",
        "iam:GetUser",
        "iam:GetPolicy",
        "iam:GetPolicyVersion",
        "iam:ListAttachedUserPolicies",
        "iam:ListUserPolicies",
        "iam:GetUserPolicy",
        "iam:ListGroupsForUser",
        "iam:ListGroupPolicies",
        "iam:GetGroupPolicy",
        "iam:ListAttachedGroupPolicies",
        "iam:GetRole",
        "iam:GetRolePolicy",
        "iam:ListAttachedRolePolicies",
        "iam:ListRolePolicies"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetObjectAcl",
        "s3:GetObjectVersionAcl",
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::bucket_name/destination-prefix",
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetBucketPolicy",
        "s3:GetBucketAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:GetBucketLocation",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::bucket_name",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ec2:DescribeVpcEndpoints"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "kms:GetKeyPolicy"
      ],
      "Resource": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "Effect": "Allow"
    },
    {
      "Action": [
        "organizations:ListPolicies",
        "organizations:DescribePolicy"
      ],
      "Resource": "arn:aws:organizations::aws:policy/service_control_policy/*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ssm:GetAutomationExecution",
        "ssm:DescribeAutomationExecutions"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "ssm:StartAutomationExecution",
      "Resource": "arn:aws:ssm:*:*:automation-definition/AWSSupport-TroubleshootS3AccessSameAccount:*",
      "Effect": "Allow",
      "Sid": "StartAutomationExecution"
    },
    {
      "Action": "access-analyzer:ValidatePolicy",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
AWS 官方
AWS 官方已更新 8 个月前