베하 !
문땅훈과 루피입니다.
오늘은 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 에 대해 자세히 설명되어 있는 글이 있습니다. 참고 부탁드립니다 ~ :)
<참고링크>
이제 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 |
댓글