将 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 profiles

aws-elasticbeanstalk-ec2-role 中的实例使用的默认角色。因此,您可以在 IAM 控制台中找到它,并添加所需的 S3 权限。根据您的设置,您可能使用不同的角色。

或者是与源存储桶相关的权限错误?

如果您有拒绝访问的存储桶策略,这也可能是原因。

【讨论】:

嗯,这有点道理。但是,我检查了我使用的是 EC2 实例角色,并且该角色也具有 S3FullAccess。至于存储桶策略,看起来我的源存储桶中有 GetObject 访问权限,而我的目标存储桶中有 PutObject 访问权限。我还有什么遗漏的吗? @AlanJi 没有更多细节很难推测。存储桶是否在同一个帐户中?桶策略的原则是什么?政策有条件吗?从其他实例(非 EB)复制操作是否有效,因此拒绝访问是否仅限于这一 EB 环境?您可以使用新的详细信息更新问题。 @AlanJi 谢谢。如果删除策略,您是否检查过问题是否仍然存在?这将确保问题是由这些政策引起的,而不是 EB 申请。 即使我删除了政策,这个问题似乎仍然存在。 我已经尝试直接通过 ssh 进入我的 EB 环境(没有设置标志),它可以工作。

以上是关于将 S3 对象复制到另一个 S3 位置 Elastic Beanstalk SSH 设置错误的主要内容,如果未能解决你的问题,请参考以下文章

将dynamoDB表复制到另一个没有S3的aws帐户

Amazon S3 将目录复制到另一个目录

Amazon S3,如何将 JSON 文件复制到另一个在更新原始文件时更新的存储桶?

使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶

如何在同一 S3 位置复制和粘贴多个对象以生成 ObjectCreated 通知?

如何使用aws java sdk将文件从S3存储桶从一个区域复制到另一个区域?