Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在ec2实例的不同帐户上同步两个不同的s3存储桶_Amazon Web Services_Amazon S3_Amazon Ec2_Aws Cli - Fatal编程技术网

Amazon web services 在ec2实例的不同帐户上同步两个不同的s3存储桶

Amazon web services 在ec2实例的不同帐户上同步两个不同的s3存储桶,amazon-web-services,amazon-s3,amazon-ec2,aws-cli,Amazon Web Services,Amazon S3,Amazon Ec2,Aws Cli,我的目标是能够在ec2实例上使用此命令aws s3 sync s3://源bucket s3://目标bucket运行aws cli。源和目标存储桶位于不同的帐户中,我不拥有源帐户。我已经看到了很多示例,说明了如何在不使用ec2实例的情况下同步驻留在不同帐户中的s3存储桶。尽管当我使用ec2实例并向这个中间人(e2c实例)授予权限时,这些示例并不能很好地翻译 我已经读过,在使用ec2实例时,最好使用IAM角色来授予权限。以下是我当前配置的内容: 这是附加到我的IAM角色的策略,该角色也被分配给我

我的目标是能够在ec2实例上使用此命令
aws s3 sync s3://源bucket s3://目标bucket
运行aws cli。源和目标存储桶位于不同的帐户中,我不拥有源帐户。我已经看到了很多示例,说明了如何在不使用ec2实例的情况下同步驻留在不同帐户中的s3存储桶。尽管当我使用ec2实例并向这个中间人(e2c实例)授予权限时,这些示例并不能很好地翻译

我已经读过,在使用ec2实例时,最好使用IAM角色来授予权限。以下是我当前配置的内容:

这是附加到我的IAM角色的策略,该角色也被分配给我目标帐户上的ec2实例。据我所知,它给了我的ec2实例对我的目标s3 bucket的登录、下载等权限。。此外,该策略允许我在源帐户上担任s3角色

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::destination-bucket",
                "arn:aws:s3:::destination-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<source account number>:role/s3-role"
        }
    ]
}
最后,在我的ec2实例上,我用一个概要文件配置了我的aws cli,这样我就可以在源帐户上扮演这个角色。下面是它的外观:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::source-bucket/*",
                "arn:aws:s3:::source-bucket"
            ]
        }
    ]
}
[profile foundation]
role_arn = arn:aws:iam::<source account number>:role/s3-role

credential_source = Ec2InstanceMetadata
[个人资料基础]
角色\u arn=arn:aws:iam:::角色/s3角色
凭证\u来源=EC2INSTANCEMTADATA
然后,当我运行命令
aws s3 sync s3://源bucket s3://目标bucket--profile foundation
。我在调用ListObjectsV2操作时遇到此错误,(AccessDenied):拒绝访问。我怀疑问题在于我使用的命名配置文件可能只是提供对源帐户的访问权限,但我真的不知道

我只是不知道如何授予权限,以便ec2实例可以访问源帐户而不承担该角色。我不确定我是否也需要将策略附加到s3存储桶中。如果需要,我不确定我会在其中添加什么。最后一条重要信息是,我可以使用cp和ls等命令单独访问这两个bucket


如果答案很明显,我是aws的新手,我会非常感激。谢谢。

我发现在源bucket上扮演角色对于授予允许同步发生的权限是不必要的。在s3源bucket的附加策略上,我将其添加到语句部分

{
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<destination account number>:root"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::source-bucket/*",
                "arn:aws:s3:::source-bucket"
            ]
        }
然后,我可以很好地运行这个命令
awss3syncs3://源bucket s3://目标bucket

 {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::source-bucket",
                "arn:aws:s3:::source-bucket/*"
            ]
        }