У меня есть скрипт, использующий пользовательскую библиотеку (nwmaws
), которая перебирает все мои учетные записи AWS
и создает динамический ARN
, который я использую, чтобы взять на себя роль администратора для печати всех EC2
идентификаторы экземпляров во всех указанных учетных записях. Тем не менее, мой for loop
по какой-то причине выполняет итерацию только по одной учетной записи (у меня есть как минимум 20 учетных записей или около того) Ниже мой код и вывод:
CODE:
import boto3
import nwmaws
accounts = nwmaws.Accounts().list()
def get_sts_token(**kwargs):
role_arn = kwargs['RoleArn']
region_name = kwargs['RegionName']
sts = boto3.client(
'sts',
region_name=region_name,
)
token = sts.assume_role(
RoleArn=role_arn,
RoleSessionName='GetInstances',
DurationSeconds=900,
)
return token["Credentials"]
def create_role_arn():
for i in accounts:
account_list = i.account_id
role_arn = "arn:aws:iam::{}:role/ADFS-
GlobalAdmins".format(account_list)
tokens = get_sts_token(RoleArn=role_arn, RegionName="us-east-1")
print(role_arn)
access_key = tokens['AccessKeyId']
secret_key = tokens['SecretAccessKey']
session_token = tokens['SessionToken']
s = boto3.session.Session(aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
aws_session_token=session_token
)
return s.resource('ec2')
def get_all_instances():
ec2 = create_role_arn()
instances = ec2.instances.filter(
Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
for instance in instances:
print(instance.id)
get_all_instances()
OUTPUT:
arn:aws:iam::XXXXXXXXXXXX:role/ADFS-GlobalAdmins
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
etc etc
Как видите, он только создает один ARN
, печатает экземпляры в этой учетной записи и затем завершает работу.