구글 클라우드 인사이트 Access S3 Data From GCP without using keys 구글 인사이트 by Miyeon. Jo 2022년 11월 24일 2022년 11월 24일 506 목차AWS IAM User Key 개요BAWS IAM Role Web Identity를 이용한 GCP Service Account 신뢰정책 설정GCP VM Instance에서 IAM Role을 통한 인증방식 설정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 ClickUnique ID에 해당하는 부분을 AWS IAM Role 설정시 사용해야 함으로 Copy 해둔다.2) AWS Role 생성필요한 S3의 권한을 가진 AWS Role을 생성AWS Console > IAM > Roles > Create role(Button Click)웹 자격 증명 선택 후 하기 사항을 입력합니다.자격 증명 공급자 : GoogleAudience : GCP Service Account 에서 확인한 Unique IDS3에 대해 사전 정의된 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/janusGCP 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를 호출할 수 있습니다. 출처https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_credentials_access-keys.htmlhttps://www.doit.com/assume-an-aws-role-from-a-google-cloud-without-using-iam-keys/