AWS STS凭证访问权限跨账户

时间:2020-07-19 07:53:35

标签: amazon-web-services amazon-s3 aws-lambda amazon-iam

我有3个AWS账户。帐户A具有lambda(Lambda_Account_A),帐户B具有角色(Role_Account_B),帐户C具有s3存储桶(S3_Account_C)。帐户C中的资源配置有存储桶策略,该策略显示-Role_Account_B可以访问该存储桶。

如果帐户A中的Lambda承担帐户B的角色(Role_Account_B)并生成STS凭据,那么这些凭据是否可以访问帐户C资源s3存储桶?

帐户B和C已配置为彼此信任。

帐户Lambda代码:

try {
    AssumeRoleRequest roleRequest = new AssumeRoleRequest()
            .withRoleArn(assumeRole) //arn of the role in account B
            .withPolicy(policy) // policy contains "arn:aws:s3:::my_bucket"
            .withDurationSeconds(3600)
            .withRoleSessionName(SESSION_NAME);

    // Assume the IAM role
    AssumeRoleResult assumeResult = stsClient.assumeRole(roleRequest);

 
    final BasicSessionCredentials temporaryCredentials = new BasicSessionCredentials(
            assumeResult.getCredentials().getAccessKeyId(),
            assumeResult.getCredentials().getSecretAccessKey(),
            assumeResult.getCredentials().getSessionToken());

    return temporaryCredentials;
} catch (AWSSecurityTokenServiceException e) {}

帐户C中的桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account_No:role/Account_B_role”
            },
            "Action": [
                "s3:Get*",
            ],
            "Resource": "arn:aws:s3:::my_bucket/*”
        }
    ]
}

Role_B权限策略为

{
    "Version": "2012-10-17",
    "Statement": [

        {
            "Action": [
                "s3:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

它的信任关系同时具有帐户A和帐户C

1 个答案:

答案 0 :(得分:0)

当您在另一个帐户中担任角色时,就如同您在该帐户中一样。

只要帐户B对此IAM角色具有IAM权限以访问帐户C中的存储桶,便可以执行这些操作。

为防止未经授权访问某些权限,您可以使用external ids来锁定,this blog post是在您担任角色时选择指定的。这样,您可以使用引用sts:ExternalId的条件来锁定角色IAM策略中的特定权限。

有关外部ID的更多信息,请参见DEMO IS HERE