AWS Toolbox ๐งฐ - ํด๋ผ์ฐ๋ ์์ง๋์ด๋ฅผ ์ํ ๋ฉ์ง ๋๊ตฌ ๋ฐ ์คํฌ๋ฆฝํธ ๋ชจ์
https://github.com/dannysteenman/aws-toolbox
๋ค์์ AWS Toolbox์์ ์ฐพ์ ์ ์๋ ๋ด์ฉ์ ๋๋ค.
What's in the AWS Toolbox?
AWS ๋๊ตฌ ์์์๋ ๋ฌด์์ด ์์ต๋๊น?
๋จผ์ AWS ๋๊ตฌ ์์์์ ์ ๊ณต๋๋ Bash ๋ฐ Python ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก AWS ๋ช ๋ น์ค ์ธํฐํ์ด์ค(CLI)๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ๋์์ด ๋๋ ์๊ฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์คํฌ๋ฆฝํธ
๋ฐ๋ณต ์์ ์ ํผํ๊ธฐ ์ํด ์คํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ 20๊ฐ ์ด์์ Bash ๋ฐ Python ์คํฌ๋ฆฝํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด multi_account_execution script์ aws_account_list์ ์ง์ ๋ ๋ชจ๋ ๊ณ์ ์์ Boto3 ๋ช ๋ น์ ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ธ์.
# https://github.com/dannysteenman/aws-toolbox
#
# This script gives you the ability to run Boto3 commands on all accounts which are specified in the aws_account_list
import boto3
aws_account_list = ["111111111111", "222222222222", "333333333333"]
def role_arn_to_session(**args):
client = boto3.client("sts")
response = client.assume_role(**args)
return boto3.Session(
aws_access_key_id=response["Credentials"]["AccessKeyId"],
aws_secret_access_key=response["Credentials"]["SecretAccessKey"],
aws_session_token=response["Credentials"]["SessionToken"],
)
# This decides what role to use, the name of the session you will start, and potentially an external id.
# The external id can be used as a passcode to protect your role.
def set_boto3_clients(account_id):
return role_arn_to_session(
RoleArn="arn:aws:iam::" + account_id + ":role/your-rolename-to-assume",
RoleSessionName="your-rolename-to-assume",
)
# This is an example function which deletes evaluation results for a specific config rule.
# You can create your own Boto3 function which you want to execute on mutliple accounts.
def delete_awsconfig_rule_evaluations(awsconfig):
return awsconfig.delete_evaluation_results(ConfigRuleName="SHIELD_002")
def lambda_handler(event, context):
for account_id in aws_account_list:
run_boto3_in_account = set_boto3_clients(account_id)
# You can use run_boto3_in_account as if you are using boto in another account
# For example: s3 = run_boto3_in_account.client('s3')
awsconfig = run_boto3_in_account.client("config")
delete_awsconfig_rule_evaluations(awsconfig)
if __name__ == " __main__":
lambda_handler({"invokingEvent": '{"messageType":"ScheduledNotification"}'}, None)
๋๊ตฌ
๋ฆฌํฌ์งํ ๋ฆฌ์ ์ด ์น์ ์๋ ์ฝ์, CLI ๋๋ API์์ AWS ์ฌ์ฉ์ ์๋ํํ๊ฑฐ๋ ๋จ์ํํ๋ ์ธ๊ธฐ ์๋ ๋๊ตฌ ๋ฐ ์จ๊ฒจ์ง ๋ณด์ ๐์ ๋ํ ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์๋ํ๋ ๋ฐฉ์์ผ๋ก ๋น๊ต์ ์ฝ๊ฒ AWS ECS ์ปจํ ์ด๋๋ฅผ ์ค์ ํ๊ณ ๋ฐฐํฌํ๋ ๋ฐ ๋์์ด ๋๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ์๋ AWS Copilot CLI ์ ๋๋ค. AWS Copilot CLI๋ ๊ฐ๋ฐ์๊ฐ Amazon ECS ๋ฐ AWS Fargate์์ ์์ฐ ์ค๋น๊ฐ ๋ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถ, ๋ฆด๋ฆฌ์ค ๋ฐ ์ด์ํ ์ ์๋ ๋๊ตฌ์ ๋๋ค.
์จ๊ฒจ์ง ๋ณด์ ๐์ ์๋ steampipe ์ ๋๋ค. ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด SQL๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๋ฅผ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. ์ฌ๋ฌ AWS ๋ฆฌ์์ค๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ ์ด ๋๊ตฌ๊ฐ ๊ธฐ๋ณธ AWS CLI๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค!
๋ค์๊ณผ ๊ฐ์ด SQL์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ํด๋ผ์ฐ๋ API๋ฅผ ์ฆ์ ์คํํ ์ ์์ต๋๋ค.
select
title,
create_date,
mfa_enabled
from
aws_iam_user
์์ ์ฟผ๋ฆฌ๋ ์์ฑ ๋ ์ง์ MFA๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ IAM ์ฌ์ฉ์๋ฅผ ๋ฐํํฉ๋๋ค.
+-----------------+---------------------+-------------+
| title | create_date | mfa_enabled |
+-----------------+---------------------+-------------+
| pam_beesly | 2005-03-24 21:30:00 | false |
| creed_bratton | 2005-03-24 21:30:00 | true |
| stanley_hudson | 2005-03-24 21:30:00 | false |
| michael_scott | 2005-03-24 21:30:00 | false |
| dwight_schrute | 2005-03-24 21:30:00 | true |
+-----------------+---------------------+-------------+
๊ทธ๋ฌ๋์ด ๋๊ตฌ์ ์ง์ ํ ํ์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค! Steampipe ๋ชจ๋๋ ์ฟผ๋ฆฌ, ์ปจํธ๋กค, ๋ฒค์น๋งํฌ์ ๊ฐ์ ๊ด๋ จ Steampipe ๋ฆฌ์์ค ๋ชจ์์ ๋๋ค. Steampipe Hub์์ ์ฌ๋ฌ ๋ชจ๋ ์ค ํ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์ง์ ๋ง๋ค ์ ์์ต๋๋ค.
AWS์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ ์ข์ ์๋ AWS Compliance Mod ์ ๋๋ค. ์ด ๋ชจ๋๋ AWS ๊ธฐ๋ณธ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ๊ฐ๋ณ ๊ตฌ์ฑ, ๊ท์ ์ค์ ๋ฐ ๋ณด์ ์ ์ด ๋๋ ์ ์ฒด ๊ท์ ์ค์ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ AWS ๊ณ์ ์์ ์ ์ฒด ๋ณด์ ์ํ ํ์ธ์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณด๊ณ ์๋ฅผ ์์ฑํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋๊ตฌ๋ AWS ๊ณ์ ์ ๋ณดํธํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๋ธ๋ก๊ทธ๋กค
์ด ์น์ ์๋ ์ ์ฉํ ํ๊ณผ ํธ๋ฆญ์ด ํฌํจ๋ AWS ๋ธ๋ก๊ทธ ๋ชจ์์ด ํฌํจ๋์ด ์์ต๋๋ค.
| ๋ธ๋ก๊ทธ ์ ๋ชฉ | ์ค๋ช |
| AWS Security | ์ต์ AWS ๋ณด์, ์๊ฒฉ ์ฆ๋ช ๋ฐ ๊ท์ ์ค์ ์ถ์, ๋ฐํ ๋ฐ ๋ฐฉ๋ฒ ๊ฒ์๋ฌผ์ ๋๋ค. |
| AWS DevOps | ์ต์ AWS DevOps ๋ฐํ ๋ฐ ๋ฐฉ๋ฒ ๊ฒ์๋ฌผ์ ๋๋ค. |
| Netflix Techblog | Netflix์ ์ธ๊ณ์ ์ธ ์์ง๋์ด๋ง ๋ ธ๋ ฅ, ๊ธฐ์ ๋ฌธํ, ์ ํ ๊ฐ๋ฐ ๋ฑ์ ๋ํด ์์๋ณด์ธ์. |
| Last week in AWS | ์ฐ๋ฆฌ๋ ๋ฌธ์ ๊ทธ๋๋ก AWS์ ๋ชจ๋ ๊ฒ์ ๋ํ ์ธํฐ๋ท์ ์ ์ผํ๊ฒ ๋น์ดํ๊ณ ๋น๊ผฌ๋ ๋ฆฌ์์ค์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์๊ณ ์์ต๋๋ค. |
๊ธฐ์ฌ
๋ชจ๋ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! ๋ฐ๋ผ์ Bash ๋๋ Python ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒฝ์ฐ ํ ๋ฆฌํ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ์์ฑํ์ธ์! contribution guidelines์ ์ฝ๊ณ ๊ธฐ์ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฝ์ด๋ณด์ญ์์ค.
๐ ์ด ๊ธฐ์ฌ๊ฐ ๋ง์์ ๋์ จ๋์? ์๋ ์๊ฒฌ์ ์ฐ๋ฝํ๊ฑฐ๋ ์๊ฒฌ์ ๋ณด๋ด์ฃผ์ธ์.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(AWS Toolbox ๐งฐ - ํด๋ผ์ฐ๋ ์์ง๋์ด๋ฅผ ์ํ ๋ฉ์ง ๋๊ตฌ ๋ฐ ์คํฌ๋ฆฝํธ ๋ชจ์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/aws-builders/aws-toolbox-a-collection-of-awesome-tools-and-scripts-for-cloud-engineers-533nํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค