본문 바로가기
CSP (Cloud Service Provider)/GCP

AWS -> GCP Workload Identity Federation 구성

by BTC_루피 2023. 7. 25.

베하 !

문땅훈과 루피입니다.

 

오늘은 GCP와 AWS WIF 구성하는 방법에 대해 자세히 알아보겠습니다.

 


개요

  • WIF 란? 
  • AWS 설정
  • GCP 설정

 

 

1. WIF란?

  • WIF란 ? 
    • Workload Identity Federation 라고 하며, 외부 ID로 GCP 단기 액세스 토큰을 발급받고 서비스 계정을 가장하여 GCP 리소스에 접속하는 개념입니다.
    • WIF 풀에서 인증된 공급자만 단기 액세스 토큰이 살아있는 시간에 접속이 가능합니다.
    • 이러한 방식을 사용하면, 해당 토큰이 탈취되어도 서비스 계정의 key file 보다 보안성이 더 높습니다.
    • GCP의 WIF 풀 공급 업체는 AWS, OICD(github action, Okta, Kubernetes,), Azure 등을 지원합니다.

 

  • 기존의 리소스 접근 방식은 ?  
    • 기존의 방식은 외부 어플리케이션에서 GCP의 리소스를 접근하기 위해선 보통 서비스 계정을 발급받고 해당 계정에 권한을 부여한 뒤, key file을 외부 어플리케이션에 전달하여야 합니다.
    • 이러한 방식은 보안에 매우 취약하기 때문에 워크로드 아이덴티티 제휴를 통해서 이를 해결할 수 있습니다.

 

 


🤔WIF에 대해 더 자세히 알고 싶다면?

 

아래 링크에 Workload Identity Federation 에 대해 자세히 설명되어 있는 글이 있습니다. 참고 부탁드립니다 ~ :)

 

<참고링크>

https://btcd.tistory.com/1061


 

 

이제 AWS와 GCP WIF 설정 방법에 대해 알아보겠습니다!

 

2. AWS 설정

  • Role 생성 (AWS)
    • AWS 계정에서 구성을 변경할 필요가 없습니다.
    • AWS 계정을 신뢰하도록 워크로드 아이덴티티 풀을 구성한 후에는 AWS 사용자 및 AWS 역할이 영구 또는 임시 AWS 보안 사용자 인증 정보를 사용하여 단기 Google Cloud 사용자 인증 정보를 가져오도록 허용할 수 있습니다.
    • 기존에 사용하는 Role 또는 신규 Role을 생성합니다.

 

3. Google Cloud 설정

1. Service Account 생성

  • 사용할 계정을 생성합니다. 존재하는 계정을 사용할 수도 있습니다.
  • gcloud iam service-accounts create "my-service-account" \\ --project "${PROJECT_ID}"

2. IAM 부여

  • (Optional) 활성되지 않은경우 API 활성합니다.
  • gcloud services enable iamcredentials.googleapis.com \\ --project "${PROJECT_ID}"

3. Workload identity pool 생성

  • Workload identity Provider(외부 ID) 를 관리하는 그룹의 개념인 Pool을 생성합니다.
  • Google Cloud 이외의 환경마다 새로운 Pool을 생성하는 것이 좋습니다.
  • gcloud iam workload-identity-pools create "aws-pool" \\ --project="${PROJECT_ID}" \\ --location="global" \\ --display-name="AWS SA pool"

4. Workload identity providers 생성

  • Workload identity Pool에 Provider를 생성합니다.
  • 공급업체 : AWS 선택
gcloud iam workload-identity-pools providers create-aws "my-provider" \
  --project="${PROJECT_ID}" \
  --location="global" \
  --workload-identity-pool="my-pool" \
  --account-id="603220706330" \
  --attribute-mapping="google.subject=assertion.arn,attribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arn" \
  • 속성 설명
    PROVIDER_ID 공급업체의 고유 ID
    POOL_ID 풀의 ID
    ACCOUNT_ID AWS 계정을 식별하는 12자리 숫자
    MAPPINGS 쉼표로 구분된 이전에 식별한 속성 매핑의 목록
    CONDITIONS 이전에 식별한 속성 조건. 속성 조건이 없는 경우 매개변수를 삭제

5. OIDC 공급자와 Binding

  • Workload Identity Provider의 Service Account 가장을 위해 "roles/iam.workloadIdentityUser" 역할 부여해야합니다.
  • ID 식별자 형식(IAM Pricipal)
단일 IDprincipal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT_NAME
그룹의 모든 ID principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP_NAME\
특정 속성값 IDprincipalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Pool 모든 대상 IDprincipalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
  • Service Account Binding
gcloud iam service-accounts add-iam-policy-binding "workload-identity-my-pool@projectname.iam.gserviceaccount.com" \
  --project="projectname" \
  --role="roles/iam.workloadIdentityUser" \
  --member="principalSet://iam.googleapis.com/projects/project_nuber/locations/global/workloadIdentityPools/aws-pool/attribute.aws_role/arn:aws:sts::aws_number:assumed-role/role_name"

 

<참고링크>

https://cloud.google.com/iam/docs/workload-identity-federation-with-other-clouds?hl=ko#prepare


 

지금까지 AWS -> GCP WIF 설정을 알아보았습니다.

 

많은 도움이 되셨나요?

다음에도 유용한 지식 들고 오겠습니다~

그럼 베빠 !

 

'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글

GCP의 Image Service : Cusotm Image & Instance Template  (0) 2023.08.03
Workforce Identity (IdP)  (0) 2023.07.31
Big Query 요금제  (0) 2023.07.21
GCP의 Image Service : Machine Image & Snapshot  (0) 2023.07.21
[GCP] DataSet  (0) 2023.07.21

댓글