是否可以查询AWS SDK以确定当前凭据的IAM角色?

时间:2015-03-22 18:26:12

标签: amazon-web-services amazon-iam

我希望能够查询AWS SDK以检查当前凭据的IAM角色是什么。我想检查我是否正在使用特定角色运行,如果没有,则尝试承担该角色。

有可能这样做吗?我正在使用AWS SDK for JavaScript for node.js.在AWS.config.credentials中,我可以访问我的密钥,但不能访问它们属于哪个角色。

4 个答案:

答案 0 :(得分:1)

根据您可以使用的一组密钥获取用户的用户名:

var iam = new AWS.IAM(); iam.getUser()User.UserName;

API文档提供了完整的详细信息。

要获取实例的角色arn,您可能必须使用实例元数据API端点,因为SDK中没有可用的方法。

This回答和this提供了有关查询实例元数据的不同方法的详细信息。

答案 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,但我认为在此级别,它已经​​可以满足您的需求。