我希望能够查询AWS SDK以检查当前凭据的IAM角色是什么。我想检查我是否正在使用特定角色运行,如果没有,则尝试承担该角色。
有可能这样做吗?我正在使用AWS SDK for JavaScript for node.js.在AWS.config.credentials中,我可以访问我的密钥,但不能访问它们属于哪个角色。
答案 0 :(得分:1)
根据您可以使用的一组密钥获取用户的用户名:
var iam = new AWS.IAM(); iam.getUser()User.UserName;
API文档提供了完整的详细信息。
要获取实例的角色arn,您可能必须使用实例元数据API端点,因为SDK中没有可用的方法。
答案 1 :(得分:1)
我认为您想要的方法是 STS (安全令牌服务)API上的 GetCallerIdentity
:
这将返回不错的用户信息(如果没有作用):
{
Account: "123456789012",
Arn: "arn:aws:iam::123456789012:user/Alice",
UserId: "AKIAI44QH8DHBEXAMPLE"
}
或有关临时会话/用户和角色的信息(如果角色有效):
{
Account: "123456789012",
Arn: "arn:aws:sts::123456789012:assumed-role/my-role-name/my-role-session-name",
UserId: "AKIAI44QH8DHBEXAMPLE:my-role-session-name"
}
如前所述,IAM().GetUser()
(用于返回有关当前用户的信息)仅在第一个实例中有效,前提是不承担任何角色。如果有角色,它将失败,因此需要进行防御代码,但是值得考虑的是,当没有任何角色有效时,它会返回格式正确的对象(尽管您可以从{{1}进行正则表达式解析arn:aws:iam::(.*):user/(.*)
ARN }):
GetCallerIdentity
我怀疑使用角色时{
User: {
Arn: "arn:aws:iam::123456789012:user/Bob",
CreateDate: <Date Representation>,
Path: "/",
UserId: "AKIAIOSFODNN7EXAMPLE",
UserName: "Bob"
}
}
失败了,因为据我所知,您被分配了一个临时用户,我发现在服务器上还原该角色假设是有问题的,这在在这种情况下才能使GetUser
工作。在某些情况下(实例配置文件?)我认为没有任何真实的用户帐户可以还原。
答案 2 :(得分:0)
仅使用AWS CLI:
aws sts get-caller-identity
AWS安全令牌服务(STS)返回如下内容:
{
"UserId": "ABBBCCC123123DDDDEEEE",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/bob"
}
(用户名在Arn
值内,在最后一个:
之后)
答案 3 :(得分:0)
我将提供示例如何在AWS CLI中进行操作,您可以将其转换为NodeJS代码:
aws sts get-caller-identity
从响应中获取ARN并从那里获取用户名(user /之后的所有内容)
aws iam list-groups-for-user --user-name UserNameFromPreviousResponse
然后针对每个组,您可以深入研究该组的内置或附加策略:
aws iam list-group-policies --group-name GroupName
aws iam list-attached-group-policies --group-name GroupName
如果需要,您可以从此处深入研究策略以获取其ARN,但我认为在此级别,它已经可以满足您的需求。