서비스 ID 구성

Cloud Run 작업에는 Cloud Run 인스턴스 컨테이너에서 Google Cloud API에 액세스할 수 있도록 인증된 계정으로 사용되는 서비스 ID가 있습니다. 서비스 ID에 대한 자세한 내용은 서비스 ID 소개 가이드를 참조하세요.

서비스 ID 사용 방법

Cloud Run에서 서비스 ID는 리소스이자 주 구성원인 서비스 계정입니다.

  • 리소스로 서비스 ID: 서비스 계정을 서비스 ID로 연결하려면 배포자 계정에 서비스 ID 리소스에 대한 액세스 권한이 있어야 합니다. 작업 만들기 또는 업데이트와 같은 특정 작업을 수행하려면 배포자 계정에 서비스 ID 리소스에 대한 권한이 있어야 합니다.
  • 주 구성원으로 서비스 ID: Cloud Run 작업에서 Google Cloud API에 액세스하려면 서비스 ID에 수행하려는 작업에 필요한 역할이나 권한을 부여해야 합니다.

다음 섹션에서는 배포자 계정에 서비스 ID 리소스에 대한 액세스 권한을 부여하고 서비스 계정 주 구성원에 대한 액세스 권한을 부여하는 데 필요한 역할을 설명합니다.

필요한 역할

개발자나 관리자가 배포자 계정과 서비스 ID에 대한 IAM 역할과 권한을 부여해야 합니다.

클릭하여 배포자 계정에 필요한 역할 보기

서비스 계정을 작업에서 서비스 ID로 연결하는 데 필요한 권한을 얻으려면 개발자나 관리자가 배포자 계정에 서비스 ID로 사용되는 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 부여해야 합니다.

이 사전 정의된 역할에는 작업에서 서비스 계정을 연결하는 데 필요한 iam.serviceAccounts.actAs 권한이 포함되어 있습니다. 커스텀 역할을 구성하거나 다른 사전 정의된 역할을 사용하여 이 권한을 얻을 수도 있습니다.

배포자 계정에 서비스 ID에 대한 이 역할을 부여하는 방법은 배포 권한을 참조하세요. 서비스 계정이 Cloud Run 작업과 다른 프로젝트에 있으면 개발자나 또는 관리자가 Cloud Run 서비스 에이전트에 대한 IAM 역할을 구성하고 조직 정책을 설정해야 합니다. 자세한 내용은 다른 프로젝트에서 서비스 계정 사용을 참조하세요.

클릭하여 서비스 ID에 필요한 역할 보기

서비스 ID가 Cloud Run에서 Google Cloud API에 액세스하도록 허용하려면 개발자나 관리자가 서비스 ID에 수행하려는 작업에 필요한 권한이나 역할을 부여해야 합니다. 특정 Cloud 클라이언트 라이브러리에 액세스하려면 Google Cloud 서비스에 대한 Google Cloud 문서를 참조하세요.

Cloud Run 작업에서 다른 Google Cloud 서비스에 액세스하지 않는 경우에는 서비스 ID에 역할이나 권한을 부여할 필요가 없으며 프로젝트에 할당된 기본 서비스 계정을 사용할 수 있습니다.

전용 서비스 계정 생성을 위한 추천 받기

Google Cloud 콘솔에서 새 서비스 계정을 만들 때 추가 액세스 권한에 선택적 단계 '이 서비스 계정에 프로젝트에 대한 액세스 권한 부여'가 필요합니다. 예를 들어 Cloud Run 서비스 하나에서 다른 비공개 Cloud Run 서비스를 호출하거나 Cloud SQL 데이터베이스에 액세스할 수 있으며 둘 다 특정 IAM 역할이 필요합니다. 자세한 내용은 액세스 관리 문서를 참조하세요.

추천자 서비스는 필요한 권한 집합이 최소한으로 포함된 전용 서비스 계정을 만들 수 있도록 추천을 자동으로 제공합니다.

서비스 ID 구성

Cloud Run에서 서비스 ID를 구성하거나 지정하려면 새 작업을 만들고 실행할 때 Google Cloud 콘솔, gcloud CLI 또는 API(YAML)를 사용합니다.

Console

  1. Google Cloud 콘솔에서 Cloud Run 작업 페이지로 이동합니다.

    Cloud Run으로 이동

  2. 새 작업을 구성하는 경우 작업 탭을 클릭하고 원하는 대로 초기 작업 설정 페이지를 작성합니다. 기존 작업을 구성하는 경우 작업을 클릭한 후 수정을 클릭합니다.

  3. 컨테이너, 변수 및 보안 비밀, 연결, 보안을 클릭하여 작업 속성 페이지를 펼칩니다.

  4. 보안 탭을 클릭합니다.

    이미지

    • 서비스 계정 드롭다운을 클릭하고 기존 서비스 계정을 선택하거나새 서비스 계정 만들기를 클릭합니다(해당하는 경우).
  5. 만들기 또는 업데이트를 클릭합니다.

gcloud

다음 명령어를 사용하여 새 작업을 만들고 서비스 계정을 지정할 수 있습니다.

gcloud run jobs create JOB_NAME --service-account SERVICE_ACCOUNT

다음과 같이 바꿉니다.

  • JOB_NAME를 서비스 이름으로 바꿉니다.
  • SERVICE_ACCOUNT를 새 ID와 연결된 서비스 계정으로 바꿉니다. 이 값은 서비스 계정의 이메일 주소입니다(예를 들어 example@myproject.iam.gserviceaccount.com).

다음 명령어로 기존 작업을 업데이트하여 새 서비스 계정을 만들 수 있습니다.

gcloud run jobs update JOB_NAME --image IMAGE_URL --service-account SERVICE_ACCOUNT

다음과 같이 바꿉니다.

  • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
  • SERVICE_ACCOUNT를 새 ID와 연결된 서비스 계정으로 바꿉니다. 이 값은 서비스 계정의 이메일 주소입니다(예를 들어 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

YAML

아직 서비스 계정을 만들지 않았으면 IAM에서 사용자 관리형 서비스 계정을 만들 수 있습니다.

YAML 형식으로 정리된 결과를 생성하는 gcloud run jobs describe --format export 명령어를 사용하여 기존 작업 구성을 다운로드하고 봅니다. 그런 다음 아래에 설명된 필드를 수정하고 gcloud run jobs replace 명령어를 사용하여 수정된 YAML을 업로드합니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. serviceAccountName: 속성을 업데이트합니다.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      template:
        spec:
          template:
            spec:
              serviceAccountName: SERVICE_ACCOUNT

    바꾸기

    • JOB_NAME을 Cloud Run 작업 이름으로 바꿉니다.
    • SERVICE_ACCOUNT를 새 ID와 연결된 서비스 계정으로 바꿉니다. 이 값은 서비스 계정의 이메일 주소입니다(예를 들어 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).
  3. 기존 작업 구성을 업데이트합니다.

    gcloud run jobs replace job.yaml

다른 프로젝트에서 서비스 계정 사용

Cloud Run 리소스와 다른 Google Cloud 프로젝트에서 서비스 계정을 구성하는 경우 다음을 수행합니다.

  1. 개발자나 관리자가 서비스 ID로 사용하는 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 부여해야 합니다.

    Console

    1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

      서비스 계정으로 이동

    2. 서비스 ID로 사용하고 있는 서비스 계정 이메일 주소를 선택합니다.

    3. 권한 탭을 클릭합니다.

    4. 액세스 권한 부여 버튼을 클릭합니다.

    5. 관리자 또는 개발자 역할을 부여할 주 구성원과 일치하는 배포자 계정 이메일 주소를 입력합니다.

    6. 역할 선택 드롭다운에서 서비스 계정 > 서비스 계정 사용자 역할을 선택합니다.

    7. 저장을 클릭합니다.

    gcloud

    gcloud iam service-accounts add-iam-policy-binding 명령어를 사용하여 강조표시된 변수를 적절한 값으로 바꿉니다.

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"
    

    다음과 같이 바꿉니다.

    • SERVICE_ACCOUNT_NAME: Cloud Run 리소스를 연결할 서비스 계정의 이름입니다.
    • SERVICE_ACCOUNT_PROJECT_ID: 서비스 계정이 있는 프로젝트 ID입니다.
    • PRINCIPALuser|group|serviceAccount:email 또는 domain:domain 형식을 사용하여 바인딩을 추가할 배포자 계정으로 바꿉니다. 예를 들면 다음과 같습니다.

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. 개발자나 관리자가 Cloud Run 리소스의 서비스 에이전트에 서비스 ID로 사용하는 서비스 계정에 대한 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)을 부여해야 합니다. 서비스 에이전트는 service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com 형식을 따릅니다.

    Console

    1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

      서비스 계정으로 이동

    2. 서비스 ID로 사용하고 있는 서비스 계정 이메일 주소를 선택합니다.

    3. 권한 탭을 클릭합니다.

    4. 액세스 권한 부여 버튼을 클릭합니다.

    5. 서비스 에이전트 이메일 주소를 입력합니다. 예를 들면 service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com입니다.

    6. 역할 선택 드롭다운에서 서비스 계정 > 서비스 계정 토큰 생성자 역할을 선택합니다.

    7. 저장을 클릭합니다.

    gcloud

    gcloud iam service-accounts add-iam-policy-binding 명령어를 사용합니다.

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    다음 값을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: Cloud Run 리소스를 연결할 서비스 계정의 이름입니다.
    • SERVICE_ACCOUNT_PROJECT_ID: 서비스 계정이 있는 프로젝트 ID입니다.
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: Cloud Run이 있는 프로젝트 번호입니다.

    이 명령어는 사용자 관리 서비스 계정의 업데이트된 허용 정책을 출력합니다.

  3. 이 서비스 계정이 포함된 프로젝트를 사용하려면 조직 정책 iam.disableCrossProjectServiceAccountUsage를 폴더 수준에서 false 또는 unenforced로 설정하거나 프로젝트 수준 설정에서 상속해야 합니다. 기본적으로 true로 설정됩니다.

    Console

    1. Google Cloud 콘솔의 조직 정책 페이지로 이동합니다.

      조직 정책으로 이동

    2. 프로젝트 선택 도구에서 프로젝트 간 서비스 계정 사용을 중지할 조직과 프로젝트를 선택합니다.

    3. 프로젝트 간 서비스 계정 사용 중지 정책을 선택합니다.

    4. 정책 관리를 클릭합니다.

    5. 정책 소스에서 상위 정책 재정의를 선택합니다.

    6. 규칙 추가를 클릭합니다.

    7. 시행에서 사용 안함을 선택합니다.

    8. 정책을 시행하려면 정책 설정을 클릭합니다.

    gcloud

    서비스 계정이 있는 프로젝트에서 iam.disableCrossProjectServiceAccountUsage 조직 정책 제약조건이 적용되지 않았는지 확인합니다. 이 제약조건은 기본적으로 적용됩니다.

    이 조직 정책 제약조건을 중지하려면 다음을 실행합니다.

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID
    

    SERVICE_ACCOUNT_PROJECT_ID를 서비스 계정이 포함된 프로젝트 ID로 바꿉니다.

역할 멤버십을 서비스 계정 리소스에 직접 적용하거나 리소스 계층 구조의 상위 수준에서 상속받을 수 있습니다.

다음 단계