获取STS AssumeRole颁发者的真实IAM用户名

问题描述 投票:0回答:1

我一直使用 AWS 账户 A 中的 IAM 用户凭证在 AWS 账户 B 中担任 IAM 角色,并且它按预期工作。作为安全和审计目的的一部分,我想从 AWS 账户 A 获取真实的 IAM 用户名,该用户访问 AWS 账户 B 中的服务,特别是 EC2 SessionManager 控制台访问。

通过 AWS GUI 控制台访问会话管理器时,CloudTrail 的原始用户名位于

userIdentity
中,但通过 AWS CLI 访问时,用户名将记录为
botocore-session-###########
。为临时 STS 会话随机生成
accessKeyId

如何将这个临时

accessKeyId
映射到真实的 IAM 用户?

尝试了不同版本的AWS CLI和不同的操作系统。账户 B 中的 IAM 角色具有上次活动信息和撤销活动会话的方式,但没有有关当前活动会话的信息。

boto3 amazon-iam amazon-cloudtrail sts assume-role
1个回答
0
投票

一旦您担任角色并开始使用新的临时凭证,您就不再是担任该角色的主体:您是会话主体。仅凭会话主体的 ARN 或密钥 ID,无法直接找出谁承担了角色。

一种选择是在 CloudTrail 中查看谁使用该会话会话名称担任该角色。我不确定到底记录了什么;请注意两个不同主体使用相同会话名称承担相同角色的情况。

当您在 AWS 控制台中看到原始委托人的名称时,这并不是因为控制台有某种神奇的方法可以从角色会话中查找该委托人的身份;而是因为控制台有某种神奇的方法可以从角色会话中查找该委托人的身份。发生的情况是控制台使用假设者的名称作为会话名称。默认情况下,您可以在承担角色时指定所需的任何会话名称。如果您想强制执行某些顺序,请尝试使用权限策略条件键

sts:RoleSessionName
来要求调用者使用特定的会话名称。

例如,如果您的角色的信任策略包含以下内容(并且没有其他允许您的用户承担该角色的语句):

{
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Principal": {
        "AWS": [
            "arn:aws:iam::123456789012:user/UserA",
            "arn:aws:iam::123456789012:user/UserB",
            "arn:aws:iam::123456789012:user/UserC",
            "arn:aws:iam::123456789012:user/UserD"
        ]
    },
    "Condition": {
        "StringLike": {
            "sts:RoleSessionName": "${aws:username}"
        }
    }
}

只有当指定用户使用其用户名作为会话名称时,他们才能够承担该角色。

© www.soinside.com 2019 - 2024. All rights reserved.