无法在EC2实例上扮演角色

时间:2020-08-18 01:31:37

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-iam

我的目标是让一个帐户中的EC2实例从另一个帐户中的S3存储桶中读取。我遵循了教程here

我在一个具有内联策略的EC2实例上附加了一个角色,该策略使EC2在另一个帐户中承担另一个角色。

这是一个例子:

附加到EC2实例的角色:RoleA-AccountID: 11111111111

将假定的角色:RoleB-AccountID: 22222222222

.aws / config

[profile RoleA]
role_arn = arn:iam::22222222222:role/RoleB
credential_source = EC2InstanceMetadata

当我运行命令aws sts get-caller-identity --profile RoleA时,输出应类似于:

"Account": "22222222222",

 "UserId": "AROAEXAMPLEID:sessionName",

 "Arn": "arn:aws:sts::22222222222:assumed-role/RoleB/sessionName"

但是我看到的是:

"Account": "11111111111",

 "UserId": "AROAEXAMPLEID:sessionName",

 "Arn": "arn:aws:sts::11111111111:assumed-role/RoleA/sessionName"

在创建角色或其他地方时我搞砸了吗?

2 个答案:

答案 0 :(得分:2)

或者,您可以使用桶策略

场景:

    帐户A中的
  • EC2实例,使用角色A
  • 帐户B中的S3存储桶(B桶)

向存储桶B添加一个存储桶策略,以允许角色A进行访问:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/role-a"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/*"
            ]
        }
    ]
}

这允许EC2使用的IAM角色从存储桶访问“获取对象”。不需要其他角色或承担任何角色。

答案 1 :(得分:0)

您必须明确承担这个角色。为此,在您的实例中,您必须执行assume-role CLI命令,例如:

aws sts assume-role --role-arn arn:aws:sts::22222222222:assumed-role/RoleB/sessionName --role-session-name <session-name> --region <region>

这将返回一组临时凭证SecretAccessKeySessionTokenAccessKeyId。有了新的凭据,您可以在使用CLI访问另一个帐户中的S3存储桶之前将它们导出为环境变量。

替代方法是使用以下角色设置CLI配置文件: