AWS 조직의 모든 VM 이름, IP 및 FQDN을 가져오는 간단한 Python 코드
AWS는 AWS 조직 전체에서 모든 가상 머신 이름, IP 및 정규화된 도메인 이름의 통합 목록을 얻는 것을 터무니없이 어렵게 만들었습니다. 이를 수행하는 단일 명령이 없습니다. 모든 계정을 개별적으로 반복하여 각 계정 내에서 API를 호출해야 합니다. 까다로울 수 있습니다.
Python을 사용하여 간단하게 만들었습니다. 내가 어떻게했는지 알아 보려면 계속 읽으십시오.
배경: 사용자가 마스터 계정에서 개별 회원 계정으로 역할을 맡을 수 있도록 AWS 조직을 설정해야 합니다. 이에 대한 자세한 내용은 시작here을 참조하십시오.
프로그램 논리:
1) 프로그램에 관리 계정 ID를 입력합니다. 나중에 사용하겠습니다.
print("******************************************************************")
print("Welcome to the AWS Organization EC2 Name, IP and FQDN Report")
print("To get started, please enter the AWS Organization Main Account ID: ")
orgMainAccountID = input()
2) AWS Organization의 모든 계정 목록 가져오기
orgClient = boto3.client('organizations')
response = orgClient.list_accounts()
3) "response"변수에서 찾은 모든 계정을 반복합니다. 각 계정에 대해 AWS Security Token Service(STS)를 사용하여 임시 토큰을 생성하여 관리 계정에서 회원 계정에 액세스합니다. 단, 직접 액세스하기 때문에 관리 계정에 대한 임시 토큰을 생성하지 않습니다.
for account in response['Accounts']:
4) AWS STS를 사용하여 토큰 및 세션 생성
stsClient = boto3.client('sts')
roleArn = "arn:aws:iam::" + account['Id'] + ":role/OrganizationAccountAccessRole"
stsresponse = stsClient.assume_role(RoleArn=roleArn, RoleSessionName='newsession')
# Save the details from assumed role into vars
newsession_id = stsresponse["Credentials"]["AccessKeyId"]
newsession_key = stsresponse["Credentials"]["SecretAccessKey"]
newsession_token = stsresponse["Credentials"]["SessionToken"]
5) assume_role 변수를 사용하여 ec2client를 생성하여 가상 머신에서 정보를 가져오고 "response"변수에 저장합니다.
# Use the assumed session vars to create a new boto3 client with the assumed role creds
ec2Client = boto3.client('ec2',
region_name=region['RegionName'],
aws_access_key_id=newsession_id,
aws_secret_access_key=newsession_key,
aws_session_token=newsession_token)
response = ec2Client.describe_instances()
6) 모든 응답을 반복하고 VM 이름, IP 및 FDQN을 가져옵니다.
for reservation in response["Reservations"]:
for instance in reservation["Instances"]:
try:
if instance["State"]["Name"] == "running":
print("Account Name:",account['Name']+",", "Region:
{}, Name: {}, Private IP: {}, Public IP: {}, FQDN:
{}".format( region['RegionName'],
# get instance name from Tag Name
[tag['Value'] for tag in instance['Tags'] if tag['Key'] == 'Name'][0], instance["PrivateIpAddress"],instance["PublicIpAddress"], instance["PublicDnsName"]))
except KeyError as missing_key:
# Used as missing_key for readability purposes only
print(f"Trying to access a <dict> with a missing key {missing_key}")
7) 1단계에서 입력한 관리 계정 ID로 돌아갑니다. 이 코드에는 관리 계정에 직접 액세스하므로 "역할 가정"을 시도하지 않도록 하는 조건이 포함되어 있습니다.
최종 메모. 전체 코드는 here에서 찾을 수 있습니다. 더 나은 오류 처리, 가독성 또는 실행 속도로 자유롭게 개선하십시오.
Reference
이 문제에 관하여(AWS 조직의 모든 VM 이름, IP 및 FQDN을 가져오는 간단한 Python 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jakehowering/simple-python-code-to-get-all-vm-names-ips-and-fqdns-in-the-aws-organization-1he7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)