使用IAM角色ID获取IAM角色名称

时间:2020-02-27 21:27:31

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

所有AWS IAM角色均具有关联的角色名称和角色ID。通常不会看到角色ID,因为AWS控制台仅显示角色名称。在S3 Event there's a PrincipalID value的JSON消息中,该消息包含用于执行S3操作的角色的角色ID,例如"principalId":"AWS:AROAKJDKSDKF93HSA:123456789

this document中我们看到,

每个IAM实体(用户,组或角色)都有一个已定义的aws:userid 变量。您将需要此变量以在存储桶策略中使用 将角色或用户指定为条件元素中的例外。 假定角色的aws:userId值定义为 UNIQUE-ROLE-ID:ROLE-SESSION-NAME(例如, AROAEXAMPLEID:用户定义的会话名称)。

因此,我们知道S3 Event message中的PrincipalId是IAM角色的角色ID。如何使用该角色ID获取角色名称?我已经搜索了IAM和STS库,但没有看到任何允许我传递角色ID并获取角色名称的API。 STS GetCallerIdentity无济于事,IAM GetRole仅接受角色名称作为输入。

任何帮助将不胜感激。我只是使用S3 Events,从S3 Event's message json中读取PrincipalID值,从PrincipalID中提取IAM角色ID,并且我需要一种方法来使用IAM角色ID获取IAM角色名称。

2 个答案:

答案 0 :(得分:1)

例如,使用python,您可以使用list_roles
输出将为您提供每个角色的角色ID。只需循环播放并搜索您想要的RoleId

{
    'Roles': [
        {
            'Path': 'string',
            'RoleName': 'string',
            'RoleId': 'string',
            'Arn': 'string',
            'CreateDate': datetime(2015, 1, 1),
            'AssumeRolePolicyDocument': 'string',
            'Description': 'string',
            'MaxSessionDuration': 123,
            'PermissionsBoundary': {
                'PermissionsBoundaryType': 'PermissionsBoundaryPolicy',
                'PermissionsBoundaryArn': 'string'
            },
            'Tags': [
                {
                    'Key': 'string',
                    'Value': 'string'
                },
            ],
            'RoleLastUsed': {
                'LastUsedDate': datetime(2015, 1, 1),
                'Region': 'string'
            }
        },
    ],
    'IsTruncated': True|False,
    'Marker': 'string'
}

角色ID (字符串)
标识角色的稳定且唯一的字符串。有关ID的更多信息,请参阅《 IAM用户指南》中的IAM标识符。

参考:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html#IAM.Client.list_roles

我也建议您使用Paginator

某些AWS操作返回的结果不完整且需要 后续请求以获取整个结果集。的 发送后续请求以继续先前请求的过程 取消的请求称为分页

参考:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html

答案 1 :(得分:1)

这是通过AWS CLI进行获取的快速方法:

aws iam list-roles --query 'Roles[?RoleId==`AROAEXAMPLEID`]'