CloudFormation으로 IAM User를 생성해 보고, 자격 증명을 AWS Secrets Manager로 관리해 보기

CloudFormation으로 IAM User를 생성해 보고, 자격 증명을 AWS Secrets Manager로 관리해 보는 방법을 정리해 봤습니다.
2024.01.12

안녕하세요 클래스메소드 김재욱(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의 자격 증명(액세스 키 및 시크릿 키)가 저장된 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 kim.jaewook@classmethod.jp 로 연락 주시면 회신 드릴 수 있도록 하겠습니다 !