以编程方式确定特定IAM用户的AWS账户ID

时间:2015-03-26 07:45:28

标签: amazon-web-services amazon-iam

我有一个网络工具,允许IAM用户使用他们的AWS账户进行魔术。考虑到我有一个免费计划,任何AWS用户都可以在试用期结束后创建新的IAM用户,因此他们最终将永远不会为我的服务付费。 有没有办法知道特定IAM用户的Aws帐户ID?这样我就可以在db上存储该ID,并阻止来自该特定AWS账户的任何其他新IAM用户。

5 个答案:

答案 0 :(得分:4)

从CLI

aws sts get-caller-identity

如果您使用基于IAM的呼叫(与其他人建议的呼叫相同),您的IAM用户需要对这些呼叫具有适当的权限,但对于任何IAM用户,都应该使用该权限。

答案 1 :(得分:2)

如果您有权访问iam GetUser,那么该呼叫将返回(除其他外)用户的ARN,其中包括帐户ID。您无需知道要调用的用户名 - 如果未指定,则使用调用用户。

aws iam get-user

之类的通话

会回来:

{
  "User": {
    "UserName": "test",
    "PasswordLastUsed": "2015-01-18T11:08:07Z",
    "CreateDate": "2014-10-21T20:30:04Z",
    "UserId": "AIDAXXXXXXXXXXXXX",
    "Path": "/",
    "Arn":  "arn:aws:iam::123456789012:user/test"
  }
}

iam实体的ARN(亚马逊资源编号(arn))格式为arn:aws:iam::account-number:resource,因此您只需要从中提取此部分( 123456789012 )。你不能保证后面的部分也不会包含数字,所以你应该在:上拆分并取第5个部分。

答案 2 :(得分:1)

  

Ruby SDK

#!/usr/bin/ruby
require 'aws-sdk'
require 'pp'
require 'colorize'

current_region='us-west-2'
current_profile='default'

Aws.config.update({
                      region: current_region,
                      credentials: Aws::SharedCredentials.new(profile_name: current_profile),
                  })

iam = Aws::IAM::Client.new
client = iam.get_account_authorization_details({
                                                   max_items: 1,
                                               })
resp=client.user_detail_list[0].arn
acc="#{resp}".split(":")[4]
puts acc

答案 3 :(得分:0)

您可以执行Get-IAMUser并获取包括ARN在内的信息;解析ARN也会有帐户ID。截图如下。

<强>的PowerShell

Import-Module AWSPowerShell.psd1
Get-IAMUser

enter image description here

<强>宝途

import boto
iam = boto.connect_iam()
iam.get_user()

答案 4 :(得分:0)

如果您没有iam.get_user()

的访问权限,则可以使用另一种Python boto2变体
import boto.utils

print boto.utils.get_instance_metadata()['iam']['info']['InstanceProfileArn'].split(':')[4]