我正在AWS EB上运行一个ruby on rails项目。Ruby版本是2.6。我想使用以下代码将文件从源bucket复制到目标bucket。但接收错误:Aws::S3::Errors::AccessDenied
。AWS访问密钥是正确的,我可以将文件放入源bucket;源bucket和目标bucket也处于相同的刚性中。我不明白为什么会出现这个错误。你能帮忙吗?
s3 = Aws::S3::Resource.new
s3_src_key = terminal_id
s3_key = 'company/' + uuid
s3_src_obj = s3.bucket(ENV["AWS_PUBLIC_BUCKET"]).object(s3_src_key)
s3_obj = s3.bucket(ENV["AWS_S3_BUCKET"]).object(s3_key)
s3_src_obj.copy_to(s3_obj)
不是答案,而是故障排除步骤:
- 这两个bucket是否在同一个AWS帐户中?如果没有,请参阅https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/
- 这两个bucket中的任何一个是否启用了KMS加密?如果是,则需要向IAM用户或实例配置文件授予读取kms:Decrypt和写入kms:Encrypt的访问权限。如果您的AWS帐户不拥有任何KMS密钥,请参阅https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html
- 是否有任何存储桶启用了版本控制?如果是,请确保包含用于写入的s3:PutObjectVersion和用于读取的s3:GetObjectVersion
- 你有bucket或object ACL吗?如果是,请确保他们允许你读写
如果以上都不适用,您可能需要分享更多信息,如下所示:
- 您有Bucket策略吗?如果是,请将其粘贴在此处以进一步检查
- 请粘贴IAM用户策略,以便我们可以与您一起跟踪它