IaaS/퍼블릭클라우드

AWS 오래된 Access Key를 Expire하는 스케쥴 만들기

armyost 2022. 8. 16. 10:16
728x90

회사 Account를 관리하다 보면 보안노출의 위험들이 많이 보인다. 요즘에는 개발자들이 자기 Git에 필터링 없이 올리는 경우도 많고... 그러다 보면 AccessKey같은것들이 노출되기 쉽상이다. 

 

물론! 개발에서 엑세스키를 사용하는것은 절대 안된다. 클라우드 내에서 돌리고 Role로 관리해야 하며 그게 여의치 않다면 STS를 사용하던지 해야된다. 

 

아무튼 AccessKey와 같이 사용이 오래된 Key들을 Expire시키는 스케쥴을 만들어 보자.

 

import json
import boto3
import datetime

# Main
def lambda_handler(event, context):
	print("!!! Start expire_access_key Script !!!")
	print("============================================================")
	expire_days=event['ExpireDate']
	iam_obj = boto3.client('iam')
	user_list=iam_obj.list_users()
    
	for user_name in user_list['Users']:
		user = iam_obj.get_user(UserName=user_name['UserName'])
		access_keys = iam_obj.list_access_keys(UserName=user['User']['UserName'])
        
		if( int(datetime.datetime.now().strftime("%Y%m%d")) - int(access_keys['AccessKeyMetadata'][0]['CreateDate'].strftime("%Y%m%d")) > expire_days ):
			response = iam_obj.update_access_key(UserName=user['User']['UserName'], AccessKeyId=access_keys['AccessKeyMetadata'][0]['AccessKeyId'], Status='Inactive')
			print("["+user['User']['UserName'] + "Access Key over "+ str(expire_days) +"days, so it is expired.")
		else:
			print("["+user['User']['UserName'] + "]" + " Still available.")
            
	print("============================================================")
	print("!!! Finish expire_access_key Script !!!")

 

 

이렇게 lambda를 CF Event Trigger에 등록하고 ExpireDate 에 유효기간을 파라미터로 주면 된다.