안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 CloudFormation으로 IAM User를 생성해 보고, 자격 증명을 AWS Secrets Manager로 관리해 보는 방법을 정리해 봤습니다.
CloudFormation으로 IAM User 생성
파라미터 설정
Parameters:
UserName:
Description: IAM User Name.
Type: String
UserPassword:
Description: IAM User Password.
Type: String
NoEcho: true
먼저 IAM User 이름과 비밀번호 입력을 위한 파라미터를 준비합니다.
비밀번호의 경우 CloudFormation 내에서 하드코딩 하는 것 보다 파라미터를 통해 입력하는 것이 바람직합니다. 또, NoEcho: true를 통해 입력되는 비밀번호를 숨길 수 있습니다.
IAM User 생성
Resources:
IAMUser:
Type: AWS::IAM::User
Properties:
UserName: !Ref UserName
LoginProfile:
Password: !Ref UserPassword
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
이어서 IAM User를 생성합니다. 파라미터에서 입력했던 이름과 비밀번호를 !Ref 함수를 이용해 참조합니다.
생성할 IAM User에게는 관리자 권한을 할당합니다.
※ 테스트 환경이기 때문에 관리자 권한을 할당했지만, IAM User에게는 최저한의 권한을 할당하는 것이 모범 사례입니다.
자격 증명 생성
IAMUserAccessKey:
Type: AWS::IAM::AccessKey
Properties:
UserName: !Ref IAMUser
생성한 IAM User의 자격 증명(액세스 키 및 시크릿 키)를 생성합니다.
생성한 자격 증명을 AWS Secrets Mananger에 보관
AccessKeySecretManager:
Type: AWS::SecretsManager::Secret
Properties:
Name: !Sub ${IAMUser}-credentials
SecretString: !Sub "{\"accessKeyId\":\"${IAMUserAccessKey}\",\"secretKeyId\":\"${IAMUserAccessKey.SecretAccessKey}\"}"
생성한 자격 증명을 AWS Secrets Manager에 보관합니다.
AWS Secrets Manager의 경우 키밸류 형식으로 보안 인증 및 암호를 저장할 수 있으며, 일반 텍스트를 선택하면 {"":""} 형태로 키밸류를 입력할 수 있습니다.
※ IAM User의 경우 전 리전에 걸쳐 생성되는 서비스이지만, AWS Secrets Manager는 생성한 CloudFormation 스택의 리전에 영향을 받습니다. 즉, 서울 리전에 CloudFormation 스택을 생성했다면, 서울 리전에 AWS Secrets Manager가 생성됩니다.
전체 CloudFormation 코드
AWSTemplateFormatVersion: '2010-09-09'
Description: Create IAM User
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
UserName:
Description: IAM User Name.
Type: String
UserPassword:
Description: IAM User Password.
Type: String
NoEcho: true
# ------------------------------------------------------------#
# Create IAM User
# ------------------------------------------------------------#
Resources:
IAMUser:
Type: AWS::IAM::User
Properties:
UserName: !Ref UserName
LoginProfile:
Password: !Ref UserPassword
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
# ------------------------------------------------------------#
# Create IAM AccessKey & SecretKey
# ------------------------------------------------------------#
IAMUserAccessKey:
Type: AWS::IAM::AccessKey
Properties:
UserName: !Ref IAMUser
AccessKeySecretManager:
Type: AWS::SecretsManager::Secret
Properties:
Name: !Sub ${IAMUser}-credentials
SecretString: !Sub "{\"accessKeyId\":\"${IAMUserAccessKey}\",\"secretKeyId\":\"${IAMUserAccessKey.SecretAccessKey}\"}"
CloudFormation 스택 생성
CloudFormation 스택을 생성합니다. 파라미터에는 유저 이름과 비밀번호를 입력합니다.
AWS Secrets Manager로 들어가 보면, IAM User가 생성되고, 해당 IAM User의 자격 증명(액세스 키 및 시크릿 키)가 저장된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 kis2702@naver.com로 보내주시면 감사하겠습니다.