Workload Identity를 사용하여 AWS Lambda에서 BigQuery로 키 없이 연결

개시하다
AWS Lambda에서 BigQuery에 연결하고 이 결과를 사용해서 후속 처리를 하려면 GCP 서비스 계정의 인증 키를 Lambda에 설정할 수 있지만 가능하면 인증 키를 발행하거나 Lambda에 설정하고 싶지 않습니다.
이때 GCP의 Workload Identity가 편리합니다.
이 방법은 GCP의 서비스 계정과 AWS 등 캐릭터를 연결시켜 서비스 계정의 권한을 빌려 인증할 수 있다.
이번에는 이 방법으로 람보다에서 빅큐리로 연결하는 방법을 확인한다.
실행 준비
다음은 완성을 전제로 한 것이다.
  • GCP 측
  • 프로젝트
  • BigQuery가 작동하는 GCP에 대한 서비스 계정
  • BigQuery 테이블
  • AWS 측
  • Lamba 함수
  • Lamba 함수의 실행 역할
  • 또한 CLI를 통해 GCP의 자원을 조작하려면 gcloud을 실행할 수 있는 상태로 설정하십시오.
    $ 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가 포함되어야 합니다.
    시험해 보다
    이번에는 다음 순서에 따라 진행한다.
  • Workload Identity 구축/계정 연결
  • Lambda 측에서 인증 확인 정보 파일을 구성, 실행
  • Workload Identity 구축·계정 링크
    당장 구축해.
    ※ 코드 중 <hoge>는 적절히 고쳐 쓰십시오
    1. 다음 API가 GCP에서 유효한지 확인합니다.
  • Identity and Access Management (IAM) API
  • Cloud Resource Manager API
  • IAM Service Account Credentials API
  • Security Token Service API
  • 2. 미리 만들어진 lambda 함수와 관련된 실행 작용 명칭 확인

    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으로 구축된 기사를 만들어보자.
    그럼 이번에는 여기까지!

    좋은 웹페이지 즐겨찾기