Dev 계정의 EC2에서 Prod 계정의 S3 버킷 리스트를 조회해야 하는 상황
- AWS 계정 두 개(Dev. Prod) 준비
- Dev 계정에 EC2 생성
- Dev 계정의 EC2에 jq 설치 - 문자열 추출 목적
-
sudo yum -y install jq
-
- Dev 계정에 아무 권한이 없는 IAM Role 생성 후, EC2에 연결
- Role 이름 - EmptyRole
- Prod 계정에 테스트 용 S3 버킷 준비
Prod 계정에 S3 권한이 있는 IAM Role 생성
DEV 계정의 EC2가 권한을 빌려서 사용할 IAM Role
- Dev 계정의 EC2에 연결된 IAM Role(EmptyRole)을 신뢰하는 정책 추가
Dev 계정의 EC2에 연결된 IAM Role(EmptyRole)에 Prod 계정에서 만든 IAM Role(CrossAccountRole-EC2ToS3) 권한 부여
정책 생성 후 연결해도 무방하나, 편의상 인라인 정책으로 진행
Dev 계정의 EC2에 접근 후 작업 진행
# <변수 명>=$(aws sts assume-role --role-arn "arn:aws:iam::<Prod 계정 ID>:role/CrossAccountRole-EC2ToS3" --role-session-name <세션 이름>)
OUT=$(aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session)
# AWS_ACCESS_KEY_ID=$(echo $<변수 명> | jq -r '.Credentials''.AccessKeyId')
# AWS_SECRET_ACCESS_KEY=$(echo $<변수 명> | jq -r '.Credentials''.SecretAccessKey')
# AWS_SESSION_TOKEN=$(echo $<변수 명> | jq -r '.Credentials''.SessionToken')
AWS_ACCESS_KEY_ID=$(echo $OUT | jq -r '.Credentials''.AccessKeyId')
AWS_SECRET_ACCESS_KEY=$(echo $OUT | jq -r '.Credentials''.SecretAccessKey')
AWS_SESSION_TOKEN=$(echo $OUT | jq -r '.Credentials''.SessionToken')
~/.aws/credentials에 Profile 등록
여기선 Profile 이름을 Demo라고 지정
# aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID" --profile <Profile 이름>
# aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY" --profile <Profile 이름>
# aws configure set aws_session_token "$AWS_SESSION_TOKEN" --profile <Profile 이름>
aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID" --profile Demo
aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY" --profile Demo
aws configure set aws_session_token "$AWS_SESSION_TOKEN" --profile Demo
# Profile 이름, aws_access_key_id, aws_secret_access_key, aws_session_token 확인
cat ~/.aws/credentials
# aws sts get-caller-identity --profile <Profile 이름>
aws sts get-caller-identity --profile Demo
Dev 계정의 EC2에서 Prod 계정의 S3 버킷 리스트 조회
- AWS CLI를 사용하여 IAM 역할 위임 - https://aws.amazon.com/ko/premiumsupport/knowledge-center/iam-assume-role-cli/