我有一个网络工具,允许IAM用户使用他们的AWS账户进行魔术。考虑到我有一个免费计划,任何AWS用户都可以在试用期结束后创建新的IAM用户,因此他们最终将永远不会为我的服务付费。 有没有办法知道特定IAM用户的Aws帐户ID?这样我就可以在db上存储该ID,并阻止来自该特定AWS账户的任何其他新IAM用户。
答案 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
<强>宝途强>
import boto
iam = boto.connect_iam()
iam.get_user()
答案 4 :(得分:0)
如果您没有iam.get_user()
import boto.utils
print boto.utils.get_instance_metadata()['iam']['info']['InstanceProfileArn'].split(':')[4]