Workload Identity를 사용하여 AWS Lambda에서 BigQuery로 키 없이 연결
AWS Lambda에서 BigQuery에 연결하고 이 결과를 사용해서 후속 처리를 하려면 GCP 서비스 계정의 인증 키를 Lambda에 설정할 수 있지만 가능하면 인증 키를 발행하거나 Lambda에 설정하고 싶지 않습니다.
이때 GCP의 Workload Identity가 편리합니다.
이 방법은 GCP의 서비스 계정과 AWS 등 캐릭터를 연결시켜 서비스 계정의 권한을 빌려 인증할 수 있다.
이번에는 이 방법으로 람보다에서 빅큐리로 연결하는 방법을 확인한다.
실행 준비
다음은 완성을 전제로 한 것이다.
$ gcloud version
Google Cloud SDK 367.0.0
bq 2.0.72
core 2021.12.10
gsutil 5.5
BigQuery 테이블표에 관해서 우리는 간단한 표를 준비했는데 표명
users
, 표명user_id
, 열name
이다.Lambda 함수
Lambda 함수는 다음과 같이 미리 설계되어 있습니다.
users
의 표에 조회를 던져 결과를 얻는 것은 매우 간단하다.import os
from google.cloud import bigquery
def lambda_handler(event, context):
client = bigquery.Client(project="<プロジェクト名>")
query = """
SELECT user_id, name FROM `<プロジェクトID>.<dataset名>.users`
"""
query_job = client.query(query)
print("The query data:")
for row in query_job:
print("user_id={}, name={}".format(row["user_id"], row["name"]))
return event
※ 적당히 고쳐 쓰세요<プロジェクトID>
, <dataset名>
※ from google.cloud import bigquery
를 위해서는 가방에 google-cloud-bigquery
의build가 포함되어야 합니다.시험해 보다
이번에는 다음 순서에 따라 진행한다.
당장 구축해.
※ 코드 중
<hoge>
는 적절히 고쳐 쓰십시오1. 다음 API가 GCP에서 유효한지 확인합니다.
3. Workload Identity 수영장 만들기
새로 설치한 수영장의 명칭
$ gcloud iam workload-identity-pools create "<Workload Identity プール名>" --location="global"
4. Workload Identity 수영장에 AWS 계정 ID를 제공자로 추가새로 구성된 심판 이름
$ gcloud iam workload-identity-pools providers create-aws "<プロバイダー名>" --location="global" --workload-identity-pool="<Workload Identity プール名>" --account-id="<AWSアカウントID>"
5. Lambda 함수의 역할을 대여 권한의 GCP 서비스 계정과 연결먼저 방금 만든 수영장의name을 확인하세요.
$ gcloud iam workload-identity-pools list --location="global"
---
name: <POOL_NAME>
state: ACTIVE
Updates are available for some Cloud SDK components. To install them,
please run:
$ gcloud components update
확인된<POOL_NAME>
과 AWS 람다의 캐릭터명을 사용해 둘을 연결한다.$ gcloud iam service-accounts add-iam-policy-binding "<プロジェクト名>@<サービスアカウント名>.iam.gserviceaccount.com" \
--role="roles/iam.workloadIdentityUser" \
--member="principalSet://iam.googleapis.com/<POOL_NAME>/attribute.aws_role/arn:aws:sts::<AWSアカウントID>:assumed-role/<Lambdaのロール名>"
6. 서비스 계정의 인증 정보 파일 다운로드링크를 종료하고 인증 정보 파일을 다운로드합니다.
$ gcloud iam workload-identity-pools create-cred-config \
"<POOL_NAME>/providers/<プロバイダー名>" \
--service-account="<プロジェクト名>@<サービスアカウント名>.iam.gserviceaccount.com" \
--output-file="<path/to/file.json>" \
--aws
다운로드한 파일의 내용을 확인하면 알겠지만 열쇠 정보가 포함되지 않은 파일입니다.따라서 이 인증 정보 파일과 AWS 측의 역할을 이용하여 빅Query에 접근할 준비를 하세요!
Lambda 측에서 인증 정보 파일 구성, 실행
위 단계에 따라 생성된 인증 정보 파일을 Lambda 실행 환경에서 구성하고 Lambda 함수의 환경 변수에 다음 내용을 설정하십시오.
GOOGLE_APPLICATION_CREDENTIALS = "<path/to/file.json>"
람바다 측 설정은 이것뿐이다.이로써 Workload Identity의 합작이 완료되었습니다!
그럼 실행을 실제로 확인해 보세요.
Lambda 테스트가 성공적으로 실행되어 BigQuery 데이터에 액세스할 수 있습니다.
그나저나 람다에 붙은 캐릭터를 벗기면 접근이 불가능해 IAM 캐릭터의 협업 여부를 확인할 수 있다.
최후
Workload Identity를 통해 AWS 측의 IAM 역할을 GCP의 서비스 계정과 연결시켜 Lambda->BigQuery의 접근을 확인할 수 있습니다.
열쇠 없이 인증할 수 있어서 인증키 제작, 복사 안 해도 돼서 좋네요!
이번엔 CLI를 통해 순차적으로 조작했고 다음엔 테라form으로 구축된 기사를 만들어보자.
그럼 이번에는 여기까지!
Reference
이 문제에 관하여(Workload Identity를 사용하여 AWS Lambda에서 BigQuery로 키 없이 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hisaaki-Kato/items/1b4f20ca00e4f8eeb843텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)