我有一个网络工具,使IAM用户可以在他们的AWS账户上执行魔法。考虑到我有免费计划,任何AWS用户在试用结束后都可以创建新的IAM用户,所以他们最终永远不需要为我的服务付费。 有没有办法知道特定IAM用户的Aws账户ID?这样我就可以将该ID存储在数据库中,并阻止来自该特定AWS账户的任何其他新IAM用户。
我有一个网络工具,使IAM用户可以在他们的AWS账户上执行魔法。考虑到我有免费计划,任何AWS用户在试用结束后都可以创建新的IAM用户,所以他们最终永远不需要为我的服务付费。 有没有办法知道特定IAM用户的Aws账户ID?这样我就可以将该ID存储在数据库中,并阻止来自该特定AWS账户的任何其他新IAM用户。
从命令行界面
aws sts get-caller-identity
像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"
}
}
arn:aws:iam::account-number:resource
,因此您只需要从中提取此部分(123456789012)。您无法保证后面的部分不包含数字,因此应该在:
上拆分并获取第5个组件。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
您可以使用 Get-IAMUser 命令获取信息,包括 ARN;解析 ARN 将同时得到帐户 ID。如下所示的屏幕截图。
PowerShell
Import-Module AWSPowerShell.psd1
Get-IAMUser
Boto
import boto
iam = boto.connect_iam()
iam.get_user()
如果您没有访问/权限来使用 iam.get_user()
,这里有另一个Python boto2变体。
import boto.utils
print boto.utils.get_instance_metadata()['iam']['info']['InstanceProfileArn'].split(':')[4]