以编程方式确定特定 IAM 用户的 AWS 账户 ID
Programmatically determine AWS account Id of a particular IAM user
我有一个 Web 工具,它允许 IAM 用户使用他们的 AWS 账户施展魔法。考虑到我有一个免费计划,任何 AWS 用户都可以在试用期结束后创建新的 IAM 用户,因此他们最终永远不会为我的服务付费。
有什么方法可以知道特定 IAM 用户的 Aws 帐户 ID?这样我就可以将该 ID 存储在 db 上并阻止来自该特定 AWS 账户的任何其他新 IAM 用户。
如果您有权访问 iam GetUser,那么调用 returns(除其他事项外)用户的 ARN,其中包括帐户 ID。您无需知道用户名即可调用它 - 如果指定了 none,它将使用调用用户。
像 aws iam get-user
这样的调用
会 return:
{
"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))格式为 arn:aws:iam::account-number:resource
,因此您只需从中提取此部分 (123456789012)它。您不能保证后面的部分也不会包含数字,因此您应该拆分 :
并取第 5 个分量。
您可以执行 Get-IAMUser 并获取信息,包括 ARN;解析 ARN 也会有账户 ID。屏幕截图如下。
PowerShell
Import-Module AWSPowerShell.psd1
Get-IAMUser
博托
import boto
iam = boto.connect_iam()
iam.get_user()
另一个 Python boto2 变体,以防 access/permissions 用于 iam.get_user()
import boto.utils
print boto.utils.get_instance_metadata()['iam']['info']['InstanceProfileArn'].split(':')[4]
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
来自 CLI
aws sts get-caller-identity
如果您使用基于 IAM 的调用(与其他人的建议相同),您的 IAM 用户需要对这些调用具有适当的权限,但任何 IAM 用户都应该通过 sts。
我有一个 Web 工具,它允许 IAM 用户使用他们的 AWS 账户施展魔法。考虑到我有一个免费计划,任何 AWS 用户都可以在试用期结束后创建新的 IAM 用户,因此他们最终永远不会为我的服务付费。 有什么方法可以知道特定 IAM 用户的 Aws 帐户 ID?这样我就可以将该 ID 存储在 db 上并阻止来自该特定 AWS 账户的任何其他新 IAM 用户。
如果您有权访问 iam GetUser,那么调用 returns(除其他事项外)用户的 ARN,其中包括帐户 ID。您无需知道用户名即可调用它 - 如果指定了 none,它将使用调用用户。
像 aws iam get-user
这样的调用会 return:
{
"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))格式为 arn:aws:iam::account-number:resource
,因此您只需从中提取此部分 (123456789012)它。您不能保证后面的部分也不会包含数字,因此您应该拆分 :
并取第 5 个分量。
您可以执行 Get-IAMUser 并获取信息,包括 ARN;解析 ARN 也会有账户 ID。屏幕截图如下。
PowerShell
Import-Module AWSPowerShell.psd1
Get-IAMUser
博托
import boto
iam = boto.connect_iam()
iam.get_user()
另一个 Python boto2 变体,以防 access/permissions 用于 iam.get_user()
import boto.utils
print boto.utils.get_instance_metadata()['iam']['info']['InstanceProfileArn'].split(':')[4]
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
来自 CLI
aws sts get-caller-identity
如果您使用基于 IAM 的调用(与其他人的建议相同),您的 IAM 用户需要对这些调用具有适当的权限,但任何 IAM 用户都应该通过 sts。