将 S3 对象复制到另一个 S3 位置 Elastic Beanstalk SSH 设置错误
Posted
技术标签:
【中文标题】将 S3 对象复制到另一个 S3 位置 Elastic Beanstalk SSH 设置错误【英文标题】:Copy S3 object to another S3 location Elastic Beanstalk SSH setup error 【发布时间】:2020-10-26 07:21:40 【问题描述】:尝试执行此操作时出现此 Elastic Beanstalk 权限错误:
eb ssh --setup
2020-07-06 07:36:50 INFO Environment update is starting.
2020-07-06 07:36:53 ERROR Service:Amazon S3, Message:You don't have permission to copy an Amazon S3 object to another S3 location. Source: bucket = 'tempsource', key = 'xxx'. Destination: bucket = 'tempdest', key = 'yyy'.
2020-07-06 07:36:53 ERROR Failed to deploy configuration.
我是否应该向我的 IAM 权限添加特定策略?我尝试向我的 IAM 用户添加完整的 S3 访问权限,但错误仍然存在。还是与源存储桶相关的权限错误?
更多细节:
两个存储桶都在同一个 AWS 账户中。复制操作不适用于 AWS CLI 复制命令。
存储桶配置文件
源桶
"Version": "2012-10-17",
"Statement": [
"Sid": "Stmt1",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/aws-elasticbeanstalk-ec2-role"
,
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::SOURCE_BUCKET/*"
,
"Sid": "Stmt2",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/aws-elasticbeanstalk-ec2-role"
,
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::SOURCE_BUCKET"
]
目标桶(elasticbeanstalk-us-west-2-XXXXXXXXXXXX)
"Version": "2008-10-17",
"Statement": [
"Sid": "eb-ad78f54a-f239-4c90-adda-49e5f56cb51e",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/aws-elasticbeanstalk-ec2-role"
,
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::elasticbeanstalk-us-west-2-XXXXXXXXXXXX/*",
"arn:aws:s3:::elasticbeanstalk-us-west-2-XXXXXXXXXXXX/resources/environments/logs/*"
]
,
"Sid": "eb-af163bf3-d27b-4712-b795-d1e33e331ca4",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/aws-elasticbeanstalk-ec2-role"
,
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::elasticbeanstalk-us-west-2-XXXXXXXXXXXX",
"arn:aws:s3:::elasticbeanstalk-us-west-2-XXXXXXXXXXXX/resources/environments/*"
]
,
"Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b",
"Effect": "Deny",
"Principal":
"AWS": "*"
,
"Action": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::elasticbeanstalk-us-west-2-XXXXXXXXXXXX"
]
【问题讨论】:
【参考方案1】:我已尝试向我的 IAM 用户添加完整的 S3 访问权限,但错误仍然存在。
该错误与您的 IAM 权限(即您的 IAM 用户)无关。但它是关于 EB 正在使用您的实例的角色(即 instance role/profile):
Managing Elastic Beanstalk instance profilesaws-elasticbeanstalk-ec2-role
中的实例使用的默认角色。因此,您可以在 IAM 控制台中找到它,并添加所需的 S3 权限。根据您的设置,您可能使用不同的角色。
或者是与源存储桶相关的权限错误?
如果您有拒绝访问的存储桶策略,这也可能是原因。
【讨论】:
嗯,这有点道理。但是,我检查了我使用的是 EC2 实例角色,并且该角色也具有 S3FullAccess。至于存储桶策略,看起来我的源存储桶中有 GetObject 访问权限,而我的目标存储桶中有 PutObject 访问权限。我还有什么遗漏的吗? @AlanJi 没有更多细节很难推测。存储桶是否在同一个帐户中?桶策略的原则是什么?政策有条件吗?从其他实例(非 EB)复制操作是否有效,因此拒绝访问是否仅限于这一 EB 环境?您可以使用新的详细信息更新问题。 @AlanJi 谢谢。如果删除策略,您是否检查过问题是否仍然存在?这将确保问题是由这些政策引起的,而不是 EB 申请。 即使我删除了政策,这个问题似乎仍然存在。 我已经尝试直接通过 ssh 进入我的 EB 环境(没有设置标志),它可以工作。以上是关于将 S3 对象复制到另一个 S3 位置 Elastic Beanstalk SSH 设置错误的主要内容,如果未能解决你的问题,请参考以下文章
Amazon S3,如何将 JSON 文件复制到另一个在更新原始文件时更新的存储桶?
使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶