워크플로에 Google Cloud 리소스에 대한 액세스 권한 부여

Workflows는 서비스 계정을 사용하여 워크플로에 Google Cloud 리소스에 대한 액세스 권한을 부여합니다. 서비스 계정은 함수, 애플리케이션, VM과 같이 사람이 아닌 사용자의 ID로 사용되는 특수 계정입니다. 이런 계정은 사람이 아닌 사용자를 인증하는 방법을 제공합니다. 서비스 계정은 ID 및 리소스로 간주될 수 있습니다.

  • 서비스 계정을 ID로 간주하면 서비스 계정에 역할을 부여하여 워크플로와 같은 리소스에 액세스할 수 있습니다.

  • 서비스 계정을 리소스로 간주하면 다른 사용자에게 해당 서비스 계정에 액세스하거나 관리할 역할을 부여할 수 있습니다.

서비스 계정은 계정 고유의 이메일 주소로 식별됩니다.

프로덕션 애플리케이션에서의 인증 설정에 대한 자세한 내용은 서비스 계정으로 인증을 참조하세요.

기본 서비스 계정

모든 워크플로는 워크플로 생성 시 Identity and Access Management(IAM) 서비스 계정과 연결됩니다. 워크플로 생성 중 서비스 계정을 지정하지 않으면 워크플로가 해당 ID로 기본 Compute Engine 서비스 계정을 사용합니다. 워크플로의 연결된 서비스 계정을 확인할 수 있습니다. 이 문서에서 워크플로의 연결된 서비스 계정 확인을 참조하세요.

기본 서비스 계정은 테스트 및 개발 용도로만 사용하는 것이 좋습니다.

서비스 계정 권한

서비스 계정은 ID이므로 다른 주 구성원에게 역할을 부여했던 것과 마찬가지로 서비스 계정에 역할을 부여하여 프로젝트의 리소스에 액세스하도록 할 수 있습니다. 예를 들어 워크플로에서 Cloud Logging으로 로그를 전송하도록 하려면 워크플로를 실행하는 서비스 계정에 logging.logEntries.create 권한이 포함된 역할(예: Logs Writer 역할)이 부여되었는지 확인합니다.

워크플로가 자체적으로 호출하거나 다른 워크플로를 호출하지 않는 한(즉, 새 워크플로 실행을 생성) 워크플로 서비스 계정에 workflows.invoker 역할이 필요하지 않습니다. 자세한 내용은 Workflows 호출을 참조하세요.

서비스 계정을 포함하여 주 구성원에게 역할을 부여하는 방법을 알아보려면 프로젝트, 폴더, 조직 액세스 관리를 참조하세요.

리소스에 서비스 계정 연결

리소스를 만들고 서비스 계정을 연결하려면 리소스를 만들고 서비스 계정을 리소스에 연결할 수 있는 권한이 필요합니다. iam.serviceAccounts.actAs 권한을 포함하는 모든 역할에서 서비스 계정을 리소스에 연결할 수 있는 권한을 제공합니다.

자세한 내용은 서비스 계정 인증 역할을 참조하세요.

Cloud Functions(2세대) 호출

Cloud Functions(2세대)에서 기본 Cloud Run 서비스를 관리하여 호출 권한을 사용할 수 있습니다. 워크플로가 Cloud Functions(2세대) 서비스를 호출하는 경우 호출자의 서비스 계정에 Cloud Functions 호출자(roles/cloudfunctions.invoker) 역할을 부여할 필요가 없습니다. 대신 Cloud Run 호출자(roles/run.invoker) 역할을 부여해야 합니다.

자세한 내용은 Cloud Functions 버전 비교를 참조하세요.

커스텀 서비스 계정으로 워크플로 배포

자체 사용자 관리형 서비스 계정을 만들어 워크플로에 대한 액세스를 더 유연하게 제어할 수 있습니다.

  1. 서비스 계정을 만들고 이름을 메모하세요.

  2. 워크플로가 작업을 수행하기 위해 액세스해야 하는 리소스에 따라 적절한 역할서비스 계정에 부여하세요.

  3. 워크플로를 배포하는 모든 주 구성원이 서비스 계정을 리소스에 연결할 수 있는지 확인합니다. 서비스 계정을 만든 경우 이 권한이 자동으로 부여됩니다. 자세한 내용은 서비스 계정 인증 역할을 참조하세요.

    서비스 계정을 리소스에 연결하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트 또는 서비스 계정에 대한 서비스 계정 사용자(roles/iam.serviceAccountUser) IAM 역할을 부여해달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

    이 사전 정의된 역할에는 서비스 계정을 리소스에 연결하는 데 필요한 iam.serviceAccounts.actAs 권한이 포함되어 있습니다.

    커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

    프로젝트 수준의 역할을 부여합니다.

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    또는 서비스 계정 수준의 역할을 부여합니다.

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    다음을 바꿉니다.

    • WORKFLOWS_PROJECT_ID: 워크플로 리소스가 포함된 Google Cloud 프로젝트 ID
    • PRINCIPAL: user|group|serviceAccount:email 또는 domain:domain 형식의 워크플로 배포자 식별자 예를 들면 다음과 같습니다.

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
    • SERVICE_ACCOUNT_RESOURCE_NAME: 서비스 계정의 전체 리소스 이름 예를 들면 다음과 같습니다.

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      각 항목의 의미는 다음과 같습니다.

      • SERVICE_ACCOUNT_PROJECT_ID는 서비스 계정이 포함된 Google Cloud 프로젝트 ID입니다.
      • SERVICE_ACCOUNT_NAME은 서비스 계정의 이름입니다.
  4. 커스텀 서비스 계정을 사용하여 워크플로를 배포합니다.

프로젝트 간 서비스 계정으로 워크플로 배포

기본적으로 한 프로젝트에서 서비스 계정을 만들어 다른 프로젝트의 리소스에 연결할 수 없습니다. 다음 안내에서는 한 프로젝트의 서비스 계정을 다른 프로젝트의 워크플로에 연결하는 방법을 보여줍니다. 그런 다음 서로 다른 프로젝트의 서비스 계정을 사용하여 워크플로를 배포할 수 있습니다.

서비스 계정과 워크플로 리소스가 다른 프로젝트에 있는 경우 서비스 계정이 있는 프로젝트에서 다음을 수행합니다.

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

    조직 정책으로 이동

    프로젝트의 조직 정책을 확인하고 iam.disableCrossProjectServiceAccountUsage 불리언 제약조건이 프로젝트에 적용되지 않는지 확인합니다. 자세한 내용은 프로젝트 간 서비스 계정 연결 사용 설정을 참조하세요.

  2. 서비스 계정을 만들고 이름을 메모하세요.

  3. 워크플로가 작업을 수행하기 위해 액세스해야 하는 리소스에 따라 적절한 역할서비스 계정에 부여하세요.

  4. Workflows 서비스 에이전트에 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)을 부여합니다. 그러면 서비스 에이전트가 프로젝트 간 서비스 계정 액세스를 관리할 수 있습니다. 서비스 에이전트는 특정 프로젝트에 대해 지정된 Google Cloud 서비스의 ID입니다. 자세한 내용은 서비스 에이전트를 참조하세요.

    콘솔

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

      Workflows로 이동

    2. 만들기를 클릭하여 워크플로를 만들거나 업데이트할 워크플로의 이름을 선택합니다.

    3. 서비스 계정 목록에서 프로젝트 전환을 클릭합니다.

    4. 다른 프로젝트에서 서비스 계정을 선택합니다.

    5. 메시지가 표시되면 Workflows 서비스 에이전트에 roles/iam.serviceAccountTokenCreator 역할을 부여합니다.

    gcloud

    1. Workflows 서비스 에이전트에 roles/iam.serviceAccountTokenCreator 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
          --member='serviceAccount:service-WORKFLOWS_PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com' \
          --role='roles/iam.serviceAccountTokenCreator'

      다음을 바꿉니다.

      • SERVICE_ACCOUNT_RESOURCE_NAME: 서비스 계정의 전체 리소스 이름 예를 들면 다음과 같습니다.

        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

        각 항목의 의미는 다음과 같습니다.

        • SERVICE_ACCOUNT_PROJECT_ID는 서비스 계정이 포함된 Google Cloud 프로젝트 ID입니다.
        • SERVICE_ACCOUNT_NAME은 서비스 계정의 이름입니다.
      • WORKFLOWS_PROJECT_NUMBER는 워크플로 리소스가 포함된 Google Cloud 프로젝트 번호입니다.

  5. 워크플로를 배포하는 모든 주 구성원이 서비스 계정을 리소스에 연결할 수 있는지 확인합니다. 서비스 계정을 만든 경우 이 권한이 자동으로 부여됩니다. 자세한 내용은 서비스 계정 인증 역할을 참조하세요.

    서비스 계정을 리소스에 연결하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트 또는 서비스 계정에 대한 서비스 계정 사용자(roles/iam.serviceAccountUser) IAM 역할을 부여해달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

    이 사전 정의된 역할에는 서비스 계정을 리소스에 연결하는 데 필요한 iam.serviceAccounts.actAs 권한이 포함되어 있습니다.

    커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

    콘솔

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

      Workflows로 이동

    2. 만들기를 클릭하여 워크플로를 만들거나 업데이트할 워크플로의 이름을 선택합니다.

    3. 서비스 계정 목록에서 프로젝트 전환을 클릭합니다.

    4. 다른 프로젝트에서 서비스 계정을 선택합니다.

    5. 메시지가 표시되면 프로젝트에 대한 roles/iam.serviceAccountUser 역할을 부여합니다.

    gcloud

    프로젝트 수준의 역할을 부여합니다.

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    또는 서비스 계정 수준의 역할을 부여합니다.

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    다음을 바꿉니다.

    • WORKFLOWS_PROJECT_ID: 워크플로 리소스가 포함된 Google Cloud 프로젝트 ID
    • PRINCIPAL: user|group|serviceAccount:email 또는 domain:domain 형식의 워크플로 배포자 식별자 예를 들면 다음과 같습니다.
      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com

    • SERVICE_ACCOUNT_RESOURCE_NAME: 서비스 계정의 전체 리소스 이름 예를 들면 다음과 같습니다.

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      각 항목의 의미는 다음과 같습니다.

      • SERVICE_ACCOUNT_PROJECT_ID는 서비스 계정이 포함된 Google Cloud 프로젝트 ID입니다.
      • SERVICE_ACCOUNT_NAME은 서비스 계정의 이름입니다.
  6. 프로젝트 간 서비스 계정을 사용하여 워크플로를 배포합니다.

워크플로와 연결된 서비스 계정 확인

특정 워크플로에 연결된 서비스 계정을 확인할 수 있습니다.

콘솔

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

    Workflows로 이동

  2. Workflows 페이지에서 워크플로 이름을 클릭합니다.

  3. 워크플로 세부정보 페이지에서 세부정보 탭을 클릭합니다.

    워크플로의 연결된 서비스 계정이 표시됩니다.

gcloud

  1. 터미널을 엽니다.

  2. 다음 명령어를 입력합니다.

    gcloud workflows describe MY_WORKFLOW
    

    MY_WORKFLOW을 워크플로의 이름으로 바꿉니다.

    연결된 서비스 계정이 포함된 전체 워크플로 설명이 반환됩니다. 예를 들면 다음과 같습니다.

    createTime: '2020-06-05T23:45:34.154213774Z'
    name: projects/myProject/locations/us-central1/workflows/myWorkflow
    serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com
    sourceContents: [...]

다음 단계