所有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角色名称。>
答案 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标识符。
我也建议您使用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`]'