关于存储:解决访问-Amazon-S3-对象时遇到的访问被拒绝错误

3次阅读

共计 3585 个字符,预计需要花费 9 分钟才能阅读完成。

作为 Amazon S3 的用户, 在尝试拜访 S3 存储桶中的对象时, 您可能会遇到“拜访被回绝”谬误。这些谬误示意申请短少执行所申请操作的无效凭证或权限策略。

在本博文中, 我将介绍各种故障排除步骤和配置查看, 以解决拜访 S3 对象时遇到的“拜访被回绝”谬误。

应用 Amazon Systems Manager 自动化文档

亚马逊云科技提供了两个 Systems Manager 自动化文档, 能够帮忙诊断您的 S3 存储桶的拜访问题:

AmazonSupport-TroubleshootS3PublicRead – 应用此文档查看您的 S3 存储桶的私有读拜访问题。

AmazonSupport-TroubleshootS3AccessSameAccount – 应用此文档诊断从您本人的 S3 存储桶拜访被回绝的谬误。

这些文档依据您的存储桶配置主动运行诊断并提供举荐解决方案。我强烈建议将它们用作首要的故障排除步骤。

要运行这些文档:

  1. 关上 Amazon Systems Manager 控制台, 进入自动化局部。
  2. 搜寻文档名称。
  3. 点击“执行自动化”。
  4. 指定所需的参数, 如 S3 存储桶名称。
  5. 查看后果并施行倡议。

自动化文档将查看存储桶策略、对象所有权、用户凭据等方面以辨认根本原因。这能够为您节俭数小时的手动故障排除工夫。

查看存储桶和对象的所有权

如果正在拜访的对象与存储桶具备不同的所有者, 可能会产生“拜访被回绝”谬误。默认状况下, 即便上传者将对象上传到您的存储桶, 上传者也领有该对象。

依照以下步骤查看对象所有权:

  1. 应用 Amazon CLI 获取您的账户的标准 ID:
aws s3api list-buckets --query "Owner.ID" 
  1. 获取对象所有者的标准 ID:
aws s3api list-objects --bucket mybucket --prefix myobject
  1. aws s3api list-objects –bucket mybucket –prefix myobject
aws s3api put-object-acl --bucket mybucket --key myobject --acl bucket-owner-full-control
  1. 通过将对象复制给本人来更新对象所有权:
aws s3 cp s3://mybucket/myobject s3://mybucket/myobject 

为了避免将来产生此问题, 要求在对象上传上设置 bucket-owner-full-control ACL, 并启用 S3 对象所有权。

查看存储桶策略和 IAM 策略

仔细检查存储桶策略和 IAM 用户策略, 查看是否存在可能无心中回绝拜访的语句。

要留神:

  • 蕴含多重认证、IP 地址、VPC 等条件的回绝语句
  • 短少诸如 s3:GetObject 或 s3:PutObjectAcl 之类的操作
    * ARN 中存在额定的空格或拼写错误
  • 过于限制性的主体元素

例如, 此存储桶策略基于 VPC 回绝拜访:

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17", 
  "Statement": [
    {
      "Sid": "Statement1",
      "Action": ["s3:GetObject"],
      "Effect": "Allow",
      "Resource": "arn:aws-cn:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": "*"
    },
    {
      "Sid": "Statement2",
      "Action": ["s3:GetObject"],
      "Effect": "Deny",
      "Resource": "arn:aws-cn:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringNotEquals": {"aws:SourceVpce": "vpce-1a2b3c4d"}
      },
      "Principal": "*"  
    }
  ]
}

在上述策略中,Statement1 容许获取对象。但如果申请不是来自 VPC 端点 vpce-1a2b3c4d, 则 Statement2 回绝雷同的 GET 拜访。因而, 在该 VPC 端点之外的用户将收到“拜访被回绝”谬误。

而此策略短少要害的 s3:PutObjectAcl 操作:

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": ["s3:PutObject"],
      "Effect": "Allow",
      "Resource": "arn:aws-cn:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": ["arn:aws-cn:iam::111122223333:user/Dave"]
      }
    }
  ]
}

上述策略仅容许 s3:PutObject 操作。如果用户尝试应用 s3:PutObjectAcl 批改对象的 ACL, 因为未许可该操作, 他们将收到“拜访被回绝”谬误。

现实状况下, 运行亚马逊云科技策略生成器 工具来验证策略没有问题。

如果在标识上设置了 IAM 权限边界, 也要查看它们。

查看 S3 公开拜访阻止设置
如果在公开对象申请上取得拜访被回绝, 请查看账户和存储桶级别的 S3 公开拜访阻止设置。这些设置能够笼罩容许公开拜访的权限。

应用 S3 控制台查看您的账户和存储桶上的这些设置。

审查用户凭证

确保拜访存储桶的 IAM 用户或角色已配置了适当的凭证:

  • 对于 CLI, 查看配置的凭证:

aws configure list

  • 对于 EC2, 查看实例所附加的角色:

aws sts get-caller-identity

对于通过 STS 获取的长期凭证, 查看与所承当角色相关联的会话策略中的 S3 权限。

查看 VPC 端点策略

如果通过 VPC 端点 拜访 S3, 请确保端点策略授予所需的权限。该策略管制能够通过该端点拜访的存储桶 / 对象。

例如:

{
  "Id": "Policy1234567890123",  
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws-cn:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws-cn:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": "*"
    }
  ] 
}

上述 VPC 端点策略:

  • 容许在 DOC-EXAMPLE-BUCKET 存储桶中获取、搁置和列出对象
  • 应用通配符容许拜访该存储桶中的任何对象
  • 利用于通过 VPC 端点拜访的所有委托人
  • 但仅容许拜访 DOC-EXAMPLE-BUCKET 存储桶

查看 S3 拜访点策略

如果应用 S3 拜访点, 拜访点策略必须容许拜访底层存储桶。所以要查看拜访点策略和存储桶策略。

查看缺失的对象

如果正在拜访的对象在存储桶中不存在,S3 会返回“拜访被回绝”谬误, 而不是 404。查看对象是否理论存在

aws s3api head-object --bucket mybucket --key myobject

如果它不存在, 请解决理论的对象问题。

确认 KMS 加密密钥拜访

如果应用 Amazon KMS (SSE-KMS) 加密的 S3 对象无奈被领有无效权限的用户拜访, 请确保:

  • KMS 密钥策略 授予所需的权限(例如 kms:Decrypt)
  • 如果 IAM 用户与 KMS 密钥不在同一账户中,IAM 策略也蕴含 KMS 权限

指定申请方领取参数

如果启用了存储桶的申请方领取, 跨账户用户必须传递 –request-payer 参数:

aws s3 cp s3://mybucket/myobject . --request-payer requester

查看 Amazon Organizations 策略

验证 Amazon Organizations 服务控制策略容许您的账户拜访 S3。明确的回绝策略将笼罩任何容许策略。

这涵盖了在 S3 对象上排查“拜访被回绝”谬误时须要查看的次要方面。一些要点:

  • 应用 Systems Manager 自动化文档主动诊断
  • 审查存储桶策略、对象所有权和拜访点策略
  • 查看 IAM 权限以及 VPC 端点策略等资源策略
  • 如果应用长期令牌, 验证凭证和会话策略
  • 查看对象是否存在及特殊字符

针对您的配置解决这些问题, 您就能够拜访 S3 对象而不会遇到任何“拜访被回绝”谬误。如果您有任何其余故障排除提醒, 请在评论中让我晓得!

参考文献

[1] 排查 Amazon S3 拜访被拒谬误

[2] Amazon S3 请求者领取

[3] Amazon S3 对象所有权

[4] 应用存储桶策略和用户策略

[5] Amazon KMS 密钥策略

文章起源:https://dev.amazoncloud.cn/column/article/64e5c96384d23218430…

正文完
 0