1. AWS IAM User Key 개요
AWS IAM User Key?
- 액세스 키는 IAM 사용자의 장기 자격 증명입니다. 액세스 키를 사용하여 AWS CLI 또는 AWS API에 대한 프로그래밍 요청에 서명할 수 있습니다(직접 또는 AWS SDK를 사용)
- 액세스 키는 액세스 키 ID(예: AKIAIOSFODNN7EXAMPLE)와 보안 액세스 키 (예: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)의 두 가지 부분으로 구성됩니다.
- 사용자 이름 및 암호와 같이 액세스 키 ID와 보안 액세스 키를 함께 사용하여 요청을 인증해야 합니다.
AWS IAM User Key 유의사항
- 사용자 이름과 암호를 관리하는 것처럼 안전하게 액세스 키를 관리합니다.
- 액세스 키를 타사에 제공하지 마시기 바랍니다. 이로 인해 다른 사람에게 계정에 대한 영구 액세스를 제공하게 될 수 있습니다.
- 보안을 위해 IAM 사용자 액세스 키를 정기적으로 교체(변경)하는 것이 좋습니다.
- 가장 좋은 방법은 액세스 키 대신 임시 보안 자격 증명(IAM Role)을 사용하고 액세스 키는 비활성화하는 것입니다.
2. AWS IAM Role Web Identity를 이용한 GCP Service Account 신뢰정책 설정
1) GCP VM Service Account 의 Unique ID 확인
S3에 접근할 GCP VM Instance 의 Service Account 의 Unique ID 확인
GCP Console > IAM & Admin > Service Accounts > Service Account Click

- Unique ID에 해당하는 부분을 AWS IAM Role 설정시 사용해야 함으로 Copy 해둔다.
2) AWS Role 생성
필요한 S3의 권한을 가진 AWS Role을 생성
AWS Console > IAM > Roles > Create role(Button Click)

- 웹 자격 증명 선택 후 하기 사항을 입력합니다.
- 자격 증명 공급자 : Google
- Audience : GCP Service Account 에서 확인한 Unique ID

- S3에 대해 사전 정의된 Policy가 있다면 선택, 없다면 Inline Policy를 생성
- Next 선택 후 차후에 설정 가능

- Role 명과 Description 작성 후 Create role 버튼 Click 하여 Role 생성
3) 생성된 AWS Role의 ARN 획득
생성한 Role의 ARN 확인
AWS Console > IAM > Roles > 생성한 Role명(Click)

- AWS Role의 ARN을 GCP VM Instance에서 사용해야 함으로 Copy 해둔다.
3. GCP VM Instance에서 IAM Role을 통한 인증방식 설정
Janus란?
- GCP에서 AWS Role을 맡을 수 있으므로 Google의 웹 ID로 절차를 실행하기 위한 도구입니다.
- Janus 는 지원되는 모든 AWS SDK 및 AWS CLI에 임시 aws 자격 증명을 반환합니다.
Janus 구현방법
- 루트 사용자로 다음 명령을 실행하면 됩니다.
$ apt install python3-pip awscli
$ pip3 install boto3 requests
$ wget https://raw.githubusercontent.com/doitintl/janus/master/janus.py
-O /usr/local/bin/janus
$ chmod 555 /usr/local/bin/janus
GCP VM Instance 설정
- aws credentials 파일에 설정을 진행합니다.
$ vi ~/.aws/credentials
[default]
credential_process = /usr/local/bin/janus arn:aws:iam::~~~~~
- credentials 파일의 arn:aws:iam::~~~~~ 부분에 미리 획득한 AWS Role의 ARN을 입력합니다.
$ aws s3 ls s3://{bucket-name}
- default에 설정했음으로 별도의 profile을 호출하지 않고 권한 부여받은 bucket의 데이터가 조회되는지 확인합니다.
Janus 작동원리
- AWS SDK 또는 AWS CLI 가 AWS에 액세스해야 할 때마다 다음에서 기본 프로필을 검색합니다.
~/.aws/credentials(Mac, Linux 및 Unix)
C:\Users\USERNAME\.aws\credentials.(Windows)
- AWS Profile 이름으로 Janus를 실행합니다.
- Janus 는 Compute Engine 메타데이터 서버에서 JWT 토큰을 요청한 다음 AWS Role 이름을 사용하여 AWS Role을 맡습니다.
- AWS는 JWT 토큰이 AWS Role 설정과 일치하는지 확인하고 임시 액세스 키를 반환합니다.
- 이 임시 액세스 키를 사용하여 이제 AWS Role을 대신하여 AWS에 액세스하고 API를 호출할 수 있습니다.