Workload Identity Federation을 사용한 Keyless API Authentication

김민형·2023년 4월 21일
0

GCP - Infra

목록 보기
3/14

Workload Identity Federation

보통 타 클라우드 플랫폼, 온프레미스에서 실행되는 애플리케이션 같은 경우 GCP API를 호출할 때 서비스 계정을 사용한다. 하지만 이는 보안적인 측면에서 위험성이 있다. 또한 조직의 클라우드상에서의 애플리케이션 배포와 같은 워크로드가 증가할 경우 키 관리에 있어서도 많은 공수를 들여야 한다.

여기서 가장 좋은 방법은 키를 사용하지 않는 것이다. 이를 위한 솔루션이 바로 워크로드 아이덴티티 제휴.

워크로드 아이덴티티 제휴는 온프레미스, AWS 또는 Azure에서 실행되는 워크로드가 외부 ID 공급업체(IdP)와 제휴하고 서비스 계정 키를 사용하지 않고 Google Cloud 리소스를 호출할 수 있도록 하는 새로운 Keyless 애플리케이션 인증 메커니즘이다. 워크로드는 보안 토큰 서비스(STS) 엔드포인트를 호출하여 IdP에서 얻은 인증 토큰을 단기 GCP 액세스 토큰으로 교환한다. 그런 다음 이 액세스 토큰을 사용하여 서비스 계정을 가장하고 서비스 계정의 권한을 상속하여 GCP 리소스에 액세스한다.

여기선 AWS에서 GCP BigQuery에 액세스 해볼 것이다.

즉, AWS의 역할이 이 액세스 토큰을 사용하여 서비스 계정을 가장하고 서비스 계정의 권한을 상속해 BigQuery에 액세스 하게 되는 것이다.

먼저 AWS에서 EC2에 대한 역할을 생성한 후 인스턴스 프로파일 설정을 하여 EC2를 하나 생성해주자. (ec2-admin이란 이름으로 역할 생성)

서비스 계정 생성

프로젝트에 대한 액세스 권한은 BigQuery Job User 권한 부여

프로젝트에 대한 권한은 실행하려는 워크로드에 대한 권한을 부여해주면 되고 서비스 계정의 권한에서 이 서비스 계정을 사용할 수 있게끔 아래의 구성원에 Workload Identity User 권한을 부여해줘야 한다.

principalSet://iam.googleapis.com/projects/<GCP 프로젝트 번호>/locations/global/workloadIdentityPools/< ID>/attribute.aws_role/arn:aws:sts::<AWS 계정 번호>:assumed-role/<역할 이름>

워크로드 아이덴티티 제휴 문서에 나오는 것처럼 AWS 역할의 특성을 가진 식별자 형식으로 등록해준 것이다.

Workload Identity Federation 생성

워크로드 아이덴티티 제휴에는 풀,공급자가 있다.

  • 풀 : 외부 아이덴티티(AWS roles, Azure managed identities 등).
  • 공급자 : 아이덴티티 공급자(AWS, Azure 등).

풀 생성

gcloud iam workflow-identity-pools create < ID> \
--location="global" \
--description="<설명>" \
--display-name="<표시 이름>"

공급자 생성

gcloud iam workload-identity-pools providers create-aws <공급자 이름> \
--workload-identity-pool="< ID>" \
--account-id="<AWS 계정 번호>" \
--location="global"

예시 명령어

Google 자격 증명 생성
클라이언트 라이브러리 파일을 다운받는다.

gcloud iam workflow-identity-pools create-cred-config \
projects/<GCP 프로젝트 번호>/locations/global/workloadIdentityPools/< ID>/providers/ <공급자 이름> \
--service-account=<서비스 계정 메일> \
--output-file=<output 파일명>.json \
--aws

예시 명령어

콘솔에서 확인

EC2에서 BigQuery 액세스

구성파일을 처음에 만들어둔 EC2에 넣어주고 필요한 파이썬 패키지들을 설치.

# 파이썬 환경 설정이 되어있지 않은 경우 여기서부터 실행
sudo apt update
sudo apt install python3-pip

# 파이썬 환경 설정이 되어있는 경우 아래 패키지만 설치
pip install google-auth
pip install --upgrade google-cloud-bigquery

BigQuery의 COVID 퍼블릭 데이터 세트를 조회하는 파이썬 파일 실행

keyless-api.py

import os
from google.cloud import bigquery
# Reference the SA
os.environ["GOOGLE_CLOUD_PROJECT"] ='<프로젝트 ID>' #The GCP project ID 
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] ='<output 파일 >.json' #configuration file
# BigQuery client object.
client = bigquery.Client()
query = """
SELECT daily_confirmed_cases, daily_deaths, country_territory_code
FROM `bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide`
ORDER BY daily_confirmed_cases DESC
LIMIT 10
"""
query_job = client.query(query) # API request.
print("Query result")
for row in query_job:
    print(row)

결과

[Workload Identity Federation을 사용한 Keyless API Authentication 참고]

profile
Solutions Architect (rlaalsgud97@gmail.com)

0개의 댓글