编程确定特定IAM用户的AWS帐户ID

4

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


你是否有这些用户的凭证?目前他们如何被识别? - Frederick Cheung
是的,我有他们的访问密钥ID和秘密访问密钥。 - alexandresaiz
5个回答

5

从命令行界面

aws sts get-caller-identity

如果您使用基于IAM的调用(与其他人建议的相同),则IAM用户需要具有适当的权限来执行这些调用,但是对于任何IAM用户,都应该可以通过sts进行。

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(Amazon资源编号)格式为arn:aws:iam::account-number:resource,因此您只需要从中提取此部分(123456789012)。您无法保证后面的部分不包含数字,因此应该在:上拆分并获取第5个组件。

2

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

0

您可以使用 Get-IAMUser 命令获取信息,包括 ARN;解析 ARN 将同时得到帐户 ID。如下所示的屏幕截图。

PowerShell

Import-Module AWSPowerShell.psd1
Get-IAMUser

enter image description here

Boto

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

0

如果您没有访问/权限来使用 iam.get_user(),这里有另一个Python boto2变体。

import boto.utils

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接