【问题标题】:S3 PutObject returns AccessDenied for PutObject commandS3 PutObject 为 PutObject 命令返回 AccessDenied
【发布时间】:2022-02-07 15:52:26
【问题描述】:

希望有人能提供帮助。

尝试写入其他账户中的 S3 存储桶时遇到问题。

  • 我自己和其他人已经完成了这个角色(sts 假定)和 权限似乎是正确的。
  • 存储桶使用 KMS 加密
  • ListObjects 返回一个成功的响应。
  • CloudTrail 显示 KMS 正在生成密钥,因此我们正在进入存储桶,并且 kms 是 允许加密。
  • CloudTrail 显示所承担的角色。

我不确定请求是否正确

PutObjectCommandInput
{
    "middlewareStack": {},
    "input": {
      "Bucket": "com-a-bucket-dev-feeds",
      "Body": "{ "value": "success"}",
      "Key": "datalake/raw/sites/20220127153225490.9CBC8C6F00DF025CE053AC17050DAF8F.json"
    }
  }

错误响应是:

AccessDenied:拒绝访问
在 deserializeAws_restXmlPutObjectCommandError (/var/task/app.js:31983:43)
在 processTicksAndRejections (internal/process/task_queues.js:95:5)
在异步 /var/task/app.js:7648:24
在异步 /var/task/app.js:14753:22
在异步 StandardRetryStrategy.retry (/var/task/app.js:13621:42)
在异步 /var/task/app.js:13258:24 {
代码:“拒绝访问”,

任何帮助将不胜感激

【问题讨论】:

  • 最好提供你做了什么。您如何提供访问权限。您为该角色授予了哪些权限。您如何授予跨账户访问权限。这将有助于更好地了解情况。

标签: amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

您可以尝试“IAM 策略模拟器”来验证您的访问权限。

https://policysim.aws.amazon.com/

【讨论】:

    【解决方案2】:

    在使用 AWS Support 进行一些挖掘之后,我们发现了这个问题。 第二个账户中的角色策略正在检查操作的来源是否来自附加了 Lambda 的 VPC。当 Lambda 在第二个账户中担任角色时,此信息会丢失,适用于 Lambdas 的 AWS VPC 是在角色策略检查期间看到的。 ListObjects 之所以有效,是因为单独的语句允许它在不检查特定 VPC 的情况下进行。

    更改语句解决了问题。

    关于跨账户访问请求的几点注意事项:

    • Bucket 是存储桶名称,而不是 ARN
    • 密钥不应以“/”开头
    • 在请求中省略 KMS/ACL 信息将默认使用存储桶上定义的内容。

    感谢您的建议,希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2021-07-28
      • 2012-09-09
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多