【问题标题】:AWS STS credentials access permission cross accountAWS STS 凭证访问权限跨账户
【发布时间】:2020-11-08 15:45:31
【问题描述】:

我有 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 已配置为相互信任。

账户 A 的 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"
        }
    ]
}

它的信任关系既有Account A也有Account C

【问题讨论】:

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


    【解决方案1】:

    当您在另一个帐户中担任角色时,它会被视为您在该帐户中。

    只要账户 B 拥有此 IAM 角色的 IAM 权限以访问账户 C 中的存储桶,它就能够执行这些操作。

    为了防止对某些权限的未经授权的访问,您可以使用external ids 锁定,当您担任角色时可以选择指定这些权限。这允许您使用引用 sts:ExternalId 的条件锁定角色 IAM 策略中的特定权限。

    有关外部 ID 的更多信息,请访问 this blog post。

    【讨论】:

    • 在Role_Account_B的信任关系中我给了Account C的访问权限,策略权限为(s3*),但是生成的STS不能访问Account C的bucket。我收到此错误:Received error response: com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: A51A3847E64F93D9; S3 Extended Request ID:
    • S3 存储桶策略是否在其存储桶策略中将账户 B 角色列入白名单?你有你的代码示例吗?
    • 对,我在那里看到了代码,虽然看不到 S3 客户端在哪里使用这些凭据。您似乎正在指定一项策略,但 IAM 角色(在账户 B 中配置)本身是否也具有权限? :)
    • 您的意思是 Role_B 的权限策略。是的。我也添加了该代码。凭据用于在代码的另一部分创建 S3 客户端
    猜你喜欢
    • 2023-02-02
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2015-05-11
    • 1970-01-01
    相关资源
    最近更新 更多