Скрипт AWS IAM Python Boto3 - Создать пользователя - PullRequest
0 голосов
/ 19 июня 2019

Моя проблема: я пытаюсь создать скрипт CLI AWS, используя Python и библиотеку Boto3. Я хочу, чтобы скрипт запрашивал входные данные (имя пользователя, программный доступ, присоединение к какой группе, смена пароля при первом входе в систему и т. Д.) И настраивал пользователя с этими подробностями.

Моя попытка: я могу создать пользователя и предоставить пользователю программный доступ или нет. Моя проблема заключается в передаче выбранной группы ARN в attach_group_policy PolicyARN = 'aws: aws: iam :: aws: policy / xxxx

Я чувствую себя здесь в отличных костюмах, но не могу придумать, как это сделать. Надеюсь, мой код ниже показывает мою проблему лучше.


iam = boto3.resource('iam')
iam_keys = boto3.resource('iam')
group_list = boto3.client('iam')
attach_group = boto3.client('iam')

mail = raw_input("Please enter your e-mail address: ")
response = iam.create_user(UserName=mail)

prog = raw_input("Do you require programmatic access?(y/n): ") 
if prog == "y":
        iam_keys.create_access_key(UserName=mail)
        print("Make sure awscli is installed on your machine")
elif prog == "n":
        print("Console access only")


### it is this area downwards that things break/get confusing
list = group_list.list_groups(MaxItems=150)   ### works
for "GroupName" in list:                      ### works
        print(list)                           ### works; prints as large JSON, need to output just u' GroupName

float(input("Please pick a Group {}".format(attach)))

var = attach_group.attach_group_policy(GroupName=attach, PolicyArn='aws:aws:iam::aws:policy/xxxx')     ### Broke; need to fill in ARN somehow after forward slash

print(response, prog)

Я хочу, чтобы выбранная политика (выбранная путем ввода точного имени группы) была прикреплена к пользователю.

Любая помощь очень ценится, у меня очень мало знаний о Python, за которыми я следовал https://boto3.amazonaws.com/v1/documentation/api/latest/index.html

Спасибо.

1 Ответ

1 голос
/ 19 июня 2019

Вот пример Python 2, как вывести список групп IAM, позволить пользователю выбрать одну из них, а затем использовать ARN, соответствующий выбранной группе IAM:

import boto3

iam = boto3.client('iam')

rsp = iam.list_groups()
groups = rsp['Groups']
print(groups)
index = 1

for group in groups:
  print("%d: %s" % (index, group["GroupName"]))
  index += 1

option = int(input("Please pick a group number: "))
arn = groups[option-1]["Arn"]
print("You selected group %d: %s" % (option, arn))

Или в Python3:

import boto3

iam = boto3.client('iam')

rsp = iam.list_groups()
groups = rsp['Groups']
index = 1

for group in groups:
    print(f'{index}: {group["GroupName"]}')
    index += 1

option = int(input("Please pick a group number: "))
arn = groups[option-1]["Arn"]
print(f'You selected group {option}: {arn}')

Это приведет к чему-то вроде этого:

1: admins
2: devops
3: programmers
Please pick a group number: 2
You selected option 2: arn:aws:iam::123456781234:group/devops

Примечание: вам нужно будет добавить проверку ввода, например, если пользователь вводит -3 или букву А.

Если, как я подозреваю, вам действительно нужно, чтобы пользователь выбрал политику по имени, чтобы вы могли получить ARN для этой политики (для присоединения к группе IAM), то вы можете сделать это следующим образом:

rsp = iam.list_policies(Scope='Local', OnlyAttached=False)
policies = rsp['Policies']
index = 1

for policy in policies:
    print("%d: %s" % (index, policy["PolicyName"]))
    index += 1

option = int(input("Please pick a policy number: "))
arn = policies[option-1]["Arn"]
print("You selected policy %d: %s" % (option, arn))
...