Amazon web services 从不同的aws帐户访问s3 bucket

Amazon web services 从不同的aws帐户访问s3 bucket,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,作为测试的一部分,我正在尝试恢复数据库。备份存在于prod s3帐户上。我的数据库在dev帐户中作为ec2实例运行 有人能告诉我如何从dev帐户访问prods3吗 步骤: -我在prod帐户上创建了一个角色,并与dev帐户建立了信任关系 -我为角色添加了一个策略 { 在开发人员帐户上,我创建了一个角色,并使用假设策略 > { "Version": "2012-10-17", "Statement": [ > { > "Effect": "Allow"

作为测试的一部分,我正在尝试恢复数据库。备份存在于prod s3帐户上。我的数据库在dev帐户中作为ec2实例运行

有人能告诉我如何从dev帐户访问prods3吗

步骤: -我在prod帐户上创建了一个角色,并与dev帐户建立了信任关系 -我为角色添加了一个策略

{

在开发人员帐户上,我创建了一个角色,并使用假设策略

> {   "Version": "2012-10-17",   "Statement": [
>     {
>       "Effect": "Allow",
>       "Action": "sts:AssumeRole",
>       "Resource": "arn:aws:iam::xxxxxxxxx:role/prod-role"
>     }   ] }
但是我无法访问s3存储桶,有人能告诉我哪里错了吗。 我还向现有角色添加了上述策略。那么这是否意味着由于我的实例配置文件(不一致的错误)而无法工作

请帮助和纠正我,如果我错了任何地方。我正在寻找一个解决方案方面的角色,而不是作为一个用户。
提前感谢!

您需要从开发人员帐户中承担生产帐户中的角色。请调用
sts:AssumeRole
,然后使用返回的凭据访问存储桶


您也可以添加一个bucket策略,允许开发人员帐户从prod帐户读取。在这种情况下,您不需要prod帐户中的跨帐户角色。

您需要从开发人员帐户中承担生产帐户中的角色。调用
sts:AssumeRole
,然后使用返回的凭据访问buc基特


您也可以添加一个bucket策略,允许dev帐户从prod帐户读取。在这种情况下,您不需要prod帐户中的cross-account角色。

因此,让我们重述一下:您想从dev帐户访问prod bucket。
有两种方法可以做到这一点,方法1是您的方法,但我建议方法2:
方法1:使用角色。这就是您上面所描述的,这很好,但是,如果它们在不同的帐户上,您无法将bucket同步到bucket,因为每次都需要导出不同的访问密钥。您很可能需要将文件从prod bucket同步到本地fs,然后从本地fs同步到dev bucket。
如何做到这一点:
使用角色,在生产帐户上创建一个可以访问该存储桶的角色。此角色的信任关系必须信任分配给ec2实例的开发人员帐户上的角色。将授予对产品存储桶访问权限的策略附加到该角色。配置完这些后,必须更新开发人员中的ec2实例角色以允许
sts:AssumeRole
您在生产中定义的角色。在dev中的ec2实例上,您将需要运行
aws sts承担角色--role arn--role session name
。这将返回3个变量,
aws\u SECRET\u ACCESS\u KEY
aws\u ACCESS\u KEY\u ID
,以及
aws\u session\u TOKEN
。在您的ec2实例上,运行
set-a;AWS\u SECRET\u ACCESS\u KEY=${SECRET\u ACCESS\u KEY};
AWS_ACCESS_KEY_ID=${ACCESS_KEY_ID};AWS_SESSION_TOKEN=${SESSION_TOKEN}
。导出这些变量后,您可以运行
aws sts get caller identity
,该操作会显示您在生产中设置的角色上。现在您应该能够将文件同步到本地系统,完成后,取消设置为env变量的aws密钥,然后复制文件将ec2实例复制到dev中的bucket中。请注意,这里有两个步骤可以复制它们?这可能会非常烦人-查看方法2如何避免这种情况:
方法2:更新prod bucket策略以信任dev帐户-这意味着您可以从dev访问prod bucket并执行bucket到bucket的同步/cp。
我强烈建议您采用这种方法,因为这意味着您可以在存储桶之间直接复制,而无需同步到本地fs。
为此,您需要在生产中更新bucket上的bucket策略,以拥有信任dev的AWS帐户id的principals块。例如,更新prod bucket策略,使其看起来像这样:

注意:授予s3:*是错误的,不建议授予对帐户的完全访问权限,因为帐户上具有正确s3权限的任何人现在都可以访问此存储桶,但为了简单起见,我将在这里保留此选项:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Example permissions",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::DEV_ACC_ID:root"
         },
         "Action": [
            "s3:*"
         ],
         "Resource": [
            "arn:aws:s3:::PROD_BUCKET_NAME",
            "arn:aws:s3:::PROD_BUCKET_NAME/*"
         ]
      }
   ]
}
完成此操作后,在dev帐户上,将主要帖子中的策略附加到dev ec2实例角色(授予s3访问权限的角色)。现在,当您连接到dev实例时,您不必导出任何环境变量,只需运行
aws s3 ls s3://prodbucket
,它应该列出文件。
您可以使用
aws s3 sync s3://prodbucket s3://devbucket-acl-bucket-owner-full-control在两个bucket之间同步文件,这应该将所有文件从prod复制到dev,并且最重要的是应该更新每个文件的acl,以便dev拥有它们(意味着您可以完全访问dev中的文件).

让我们重述一下:您希望从dev帐户访问您的prod bucket。
有两种方法可以做到这一点,方法1是您的方法,但我建议方法2:
方法1:使用角色。这就是您上面所描述的,这很好,但是,如果它们在不同的帐户上,您无法将bucket同步到bucket,因为每次都需要导出不同的访问密钥。您很可能需要将文件从prod bucket同步到本地fs,然后从本地fs同步到dev bucket。
如何做到这一点:
使用角色,在生产帐户上创建一个可以访问该存储桶的角色。此角色的信任关系必须信任分配给ec2实例的开发人员帐户上的角色。将授予对产品存储桶访问权限的策略附加到该角色。配置完这些后,必须更新开发人员中的ec2实例角色以允许
sts:AssumeRole
您在生产中定义的角色。在dev中的ec2实例上,您需要运行
aws sts假定角色--role arn--role session name
。这将返回3个变量,
aws\u SECRET\u ACCESS\u KEY
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Example permissions",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::DEV_ACC_ID:root"
         },
         "Action": [
            "s3:*"
         ],
         "Resource": [
            "arn:aws:s3:::PROD_BUCKET_NAME",
            "arn:aws:s3:::PROD_BUCKET_NAME/*"
         ]
      }
   ]
}