Как получить доступ к ресурсам IAM с использованием временных учетных данных - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь получить доступ к ресурсам IAM AWS учетной записи A из другой AWS учетной записи B, используя функцию "предположить роль". Я предполагаю настройку политики разрешений ролей в обеих учетных записях AWS (учетная запись доверенного лица и доверенная учетная запись). Скажем, имя роли dummyRole существует в AWS A, и у него есть разрешение на создание пользователя и разрешения на создание ключей доступа, и мне разрешено принять dummyRole из AWS B.

Я пытаюсь создать пользователь IAM в AWS учетной записи A, принимая dummyRole из AWS учетной записи A. Я застрял в том месте, где, как только мы попадаем в AWS A, используя временные учетные данные, что необходимо сделать, чтобы увидеть IAM функции. Вот фрагмент кода, который я пробовал, но наблюдал 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')

1 Ответ

1 голос
/ 14 июля 2020

Просто обновите строку ниже с помощью 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: '<<strong>AWS -Service > 'объект не имеет атрибута' <<strong> attribute-name > '

Всегда проверяйте документ boto3 для этой службы. В соответствии с вашим случаем

Для объекта Client

Для объектов ресурсов

Согласно документу доступен метод User () для ресурса не для клиента. Тот же лог c, который вы должны использовать для всех AWS сервисов.

Вы также можете создать такого пользователя. просто замените последнюю строку вашего кода на это.

iam_resource.create_user(UserName='dummyUserForSubaccount')
...