Assume Role 세팅

Console과 CLI에서 Assume Role 사용하기

AWS Console 세팅

  • ID 계정에서 다른 계정으로 Assume하는 방법에 관한 가이드입니다.

  • 실습을 위해서 id 계정으로 로그인 하시기 바랍니다.

오른쪽 위 Account 이름을 선택 > Switch Role 클릭

Switch Role을 클릭하고, 아래와 같이 정보를 입력합니다.

  • Account: Assume할 대상 계정의 alias

  • Role : 자신이 Assume할 수 있는 대상 계정의 역할 이름

    • 관리자가 부여해준 권한에 따라 역할이 다를 수 있습니다.

    • 예시

      • Admin 권한 : assume-dayone-prod-admin

      • Readonly 권한 : assume-dayone-prod-readonly

  • Display Name : 계정 구분을 위한 이름 (마음대로 정하시면 됩니다.)

Switch Role 을 클릭하시면 해당 계정으로 로그인을 하실 수 있습니다.

앞으로는 모든 계정에 접근할 때 위와 같은 방식으로 접근하시면 됩니다.

참고로, 이런 Assume 기능을 편리하게 하기 위해 Chrome extension을 사용하실 수 있습니다.

Command Line에서 계정 간 Assume 하기

  • Terraform으로 작업을 하다보면 특정 계정 권한을 assume해야 하는 경우가 많습니다.

  • Command Line에서 Assume하기 위해서 Custom한 script를 사용합니다.

Assume을 위해서 ~/.aws/credentialsID 계정의 access key와 secret access key 가 입력되어 있어야 합니다.

먼저, 아래의 스크립트를 특정 경로에 저장합니다. (/path/to/folder )

#!/bin/bash
 
REGION="ap-northeast-2" # Set default region
AWS_OPS=""
declare -r TRUE=0
declare -r FALSE=1
 
ASSUME_ROLE_ARN=""
 
# Please set the vairables below.
# Need to change the role's ARN properly.
PRD_ASSUME_ROLE_ARN="" # Production IAM Role ARN that a user can assume
 
# Please change to your e-mail.
SESSION_NAME="admin@dayone.com"  # Username
 
usage (){
 
  echo "usage: terraform_setup.sh
 
  --profile   AWS profile name
  --setup setup temperate AWS key pair
  --clean clean up environment variables"
 
}
 
is_jq_installed(){
 
  if ! type jq >> /dev/null ; then
    echo "You don't have 'jq' installed, please install it first"
    exit 1
  fi
}
 
setup () {
  raw_output=$(aws sts $AWS_OPS \
  assume-role --role-arn $ASSUME_ROLE_ARN \
  --role-session-name $SESSION_NAME)
  
  aws_key_id=$(echo $raw_output | jq .Credentials.AccessKeyId)
  aws_secret_key=$(echo $raw_output | jq .Credentials.SecretAccessKey)
  session_token=$(echo $raw_output | jq .Credentials.SessionToken)
 
  echo "export AWS_ACCESS_KEY_ID=$aws_key_id"
  echo "export AWS_SECRET_ACCESS_KEY=$aws_secret_key"
  echo "export AWS_SESSION_TOKEN=$session_token"
 
}
 
clean (){
 
  export outputvar="unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN"
  echo "unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN"
  eval $outputvar
 
}
 
while [ "$1" != "" ]; do
 
  case $1 in
 
    "--profile")
      shift
      AWS_OPS="--profile $1"
      ;;
 
    "--setup")
      # You can add option if you add another account 
      while [ "$2" != "" ]; do
        case $2 in
          "-p")
            ASSUME_ROLE_ARN=${PRD_ASSUME_ROLE_ARN}
            ;;
          * )
            "usage"
            exit 1
            ;;
 
        esac
        shift
      done
 
      is_jq_installed
      setup
      exit 0
      ;;
 
    "--clean")
      clean
      exit 0
      ;;
 
    * )
      "usage"
      exit 1
      ;;
 
  esac
  shift
done

해당 경로에서 아래와 같이 명령어를 입력하면 Clipboard에 필요한 정보가 저장됩니다.

$ ./terraform_setup.sh --setup -p | pbcopy

저장된 내용을 붙여넣기하여 환경변수를 덮어씁니다.

$ export AWS_ACCESS_KEY_ID="ASIATK24WCGAONY7B2VD"
export AWS_SECRET_ACCESS_KEY="92+f/piVGGKhd4tN..."
export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjENL//////////wEaDmFwLW..."

이후부터는 대상 계정(예시에서는 production)에 작업을 진행하실 수 있습니다.

ID 계정으로 다시 돌아가기 위해서는 덮어 썼던 환경변수만 삭제하시면 됩니다.

$ unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

편의를 위한 alias 세팅

  • 명령어는 편하신대로 변경하시면 됩니다!

vim ~/.zshrc 또는 ~/.bash_profile
alias awsunset="unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN"
alias setup-p="/path/to/folder/terraform_setup.sh --setup -p | pbcopy"

Last updated