Amazon web services 从不同的aws帐户访问s3 bucket
作为测试的一部分,我正在尝试恢复数据库。备份存在于prod s3帐户上。我的数据库在dev帐户中作为ec2实例运行 有人能告诉我如何从dev帐户访问prods3吗 步骤: -我在prod帐户上创建了一个角色,并与dev帐户建立了信任关系 -我为角色添加了一个策略 { 在开发人员帐户上,我创建了一个角色,并使用假设策略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"
> { "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/*"
]
}
]
}