解决访问 Amazon S3 对象时遇到的“访问被拒绝”错误

作为 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. 假如ID不匹配,目标一切者有必要颁发您完全操控的 ACL:
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 密钥战略

文章来历:dev.amazoncloud.cn/column/arti…