- IAM 역활 특정 정책을 제외하고 모두 REVOKE2024년 12월 27일
- wngnl05
- 작성자
- 2024.12.27.:57
CloudTrail 추적을 생성하고 CloudWatch 로그그룹을 연결해줍니다.
CloudWatch 로그그룹으로 이동해서 "지표 필터" > "지표 필터 생성"을 눌러줍니다.
{($.eventName=AttachRolePolicy)&&($.userIdentity.userName=Employee)}
필터를 생성하고
"경보 생성"을 눌러줍니다.
이제 람다 함수를 만들어줍니다.
람다 함수에 트리거를 CloudWatch LogGroup으로 하고 아래 핉터를 적용시켜 줍니다.
{($.eventName=AttachRolePolicy)&&($.userIdentity.userName=Employee)}
Lambda Python Code
람다의 제한 시간을 45초로 수정해주세요.
더보기import boto3 import os import time iam_client = boto3.client('iam') def lambda_handler(event, context): role_name = 'wsc2024-instance-role' policy_to_keep_arn = 'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore' attached_policies = iam_client.list_attached_role_policies(RoleName=role_name)['AttachedPolicies'] for policy in attached_policies: policy_arn = policy['PolicyArn'] if policy_arn != policy_to_keep_arn: iam_client.detach_role_policy(RoleName=role_name, PolicyArn=policy_arn) print(f"Detached policy: {policy_arn}") else: print(f"Kept policy: {policy_arn}")
import boto3 import os import time cloudwatch_client = boto3.client('cloudwatch') alarm_name = 'wsc2024-gvn-alarm' def lambda_handler(event, context): time.sleep(40) while True: time.sleep(5) cloudwatch_client.set_alarm_state( AlarmName=alarm_name, StateValue='OK', StateReason='Lambda function completed successfully and detached unnecessary policies.' ) print("Alarm Status is OK")
aws lambda add-permission \ --function-name <람다 이름> \ --statement-id cloudwatch-invoke-ok \ --action "lambda:InvokeFunction" \ --principal "lambda.alarms.cloudwatch.amazonaws.com" \ --source-arn "<CloudWatch Alarm ARN>"
CloudWatch Alram 경보에서 "편집"을 누르고 "경보 상태"일때 Lambda를 실해하도록 수정해주세요.
확인
rm -rf ~/.aws/* USERNAME="Employee" CREATED_KEYS=$(aws iam create-access-key --user-name "$USERNAME") ACCESS_KEY_ID=$(echo "$CREATED_KEYS" | jq -r '.AccessKey.AccessKeyId') SECRET_ACCESS_KEY=$(echo "$CREATED_KEYS" | jq -r '.AccessKey.SecretAccessKey') aws configure set aws_access_key_id "$ACCESS_KEY_ID" aws configure set aws_secret_access_key "$SECRET_ACCESS_KEY" sleep 10 aws iam attach-role-policy --role-name wsc2024-instance-role --policy-arn arn:aws:iam::aws:policy/AdministratorAccess rm -rf ~/.aws/* timeout 180 bash -c 'while [ "$(aws cloudwatch describe-alarms --alarm-names "wsc2024-gvn-alarm" --query "MetricAlarms[0].StateValue" --output text)" != "ALARM" ]; do echo "Waiting for alarm to enter ALARM state..."; sleep 30; done; echo "Alarm is now in ALARM state."' aws iam list-attached-role-policies --role-name wsc2024-instance-role echo ===================================== USERNAME="Admin" CREATED_KEYS=$(aws iam create-access-key --user-name "$USERNAME") ACCESS_KEY_ID=$(echo "$CREATED_KEYS" | jq -r '.AccessKey.AccessKeyId') SECRET_ACCESS_KEY=$(echo "$CREATED_KEYS" | jq -r '.AccessKey.SecretAccessKey') aws configure set aws_access_key_id "$ACCESS_KEY_ID" aws configure set aws_secret_access_key "$SECRET_ACCESS_KEY" sleep 10 aws iam attach-role-policy --role-name wsc2024-instance-role --policy-arn arn:aws:iam::aws:policy/AdministratorAccess rm -rf ~/.aws/* sleep 180 && aws cloudwatch describe-alarms --alarm-names "wsc2024-gvn-alarm" --query "MetricAlarms[0].StateValue" --output text aws iam list-attached-role-policies --role-name wsc2024-instance-role
'Aws' 카테고리의 다른 글
Codecommit 에 Dockerfile을 위치하지 않고 Docker 배포하기 (0) 2024.12.27 CloudWatch 로그 그룹에 지표 필터 사용하기 (0) 2024.12.27 Ec2 5분마다 healthcheck 하고 실패하면 종료하기 (0) 2024.12.27 CloudFront Function 다른 경로로 접근 시 redirect (0) 2024.12.27 ApiGateway 통합응답 문법 (0) 2024.12.27 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)