Access S3 Data From GCP without using keys

구글 인사이트

by Miyeon. Jo
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를 호출할 수 있습니다.
문의하기 베스픽 구독하기
궁금한 점이 있다면 클릭해주세요.