【问题标题】:How to access IAM resources using temporary credentials如何使用临时凭证访问 IAM 资源
【发布时间】:2020-07-15 05:28:22
【问题描述】:

我正在尝试使用承担角色的东西从不同的 AWS 账户 B 访问 AWS 账户 A 的 IAM 资源。我已经在两个 AWS 账户(受托人账户和受托账户)中承担了角色权限策略设置。假设角色名称为 dummyRole 存在于 AWS A 中,它具有创建用户权限和创建访问密钥权限,并且我被允许从 AWS B 承担 dummyRole。

我正在尝试通过从 AWS 账户 A 假设 dummyRole 来在 AWS 账户 A 中创建一个 IAM 用户。我被困在一个地方,一旦我们使用临时凭证进入 AWS A 需要做什么才能获得可见性IAM 功能。 这是我尝试过的代码 sn-p 但观察到AttributeError: 'IAM' object has no attribute 'User'

import boto3
import os, sys

role_arn = 'arn:aws:iam::A:role/dummyRole'

client = boto3.client('sts')

response = client.assume_role(RoleArn=role_arn, RoleSessionName='createCrossAccountUser')
local_creds = response.get('Credentials')
print (local_creds)

access_key = local_creds.get('AccessKeyId', '')
secret_key = local_creds.get('SecretAccessKey', '')
session_token = local_creds.get('SessionToken', '')

iam_resource = boto3.client('iam', aws_access_key_id=access_key, aws_secret_access_key=secret_key,
                                    aws_session_token=session_token)
print (iam_resource)

iam_resource.User('dummyUserForSubaccount')

【问题讨论】:

  • 你想要boto3.resource('iam')而不是boto3.client('iam')

标签: python amazon-web-services boto3 amazon-iam


【解决方案1】:

只需使用 boto3.resource

更新以下行
iam_resource = boto3.resource('iam', aws_access_key_id=access_key, aws_secret_access_key=secret_key,
                                aws_session_token=session_token)

每当您遇到类似的错误时

AttributeError: 'AWS-Service>' 对象没有属性 'attribute-name>'

始终检查该服务的 boto3 文档。根据你的情况

For Client object

For resource objects

根据文档,User() 方法可用于资源而不是客户端。所有 AWS 服务都必须遵循相同的逻辑。

您也可以像这样创建用户。只需用此替换代码的最后一行。

iam_resource.create_user(UserName='dummyUserForSubaccount')

【讨论】:

  • 谢谢。虽然我遇到了具有承担角色的 create_user 的访问被拒绝问题(我有 root 访问权限并且允许 root 承担 dummyRole),但似乎使用上述解决方案至少我能够进入另一个 AWS 帐户。
  • 由于 SCP 问题,我正在运行访问被拒绝错误。 SCP 问题已解决。现在,可以承担角色并成功创建用户。
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 2016-08-17
  • 2020-10-11
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
相关资源
最近更新 更多