Google Kubernetes Engine(GKE) 대상의 역할 및 권한

이 문서에서는 GKE 클러스터에서 실행 중인 비공개 및 공개 서비스의 공개 엔드포인트를 포함하여 GKE 대상에 대해 Google Cloud 및 기타 소스에서 Eventarc를 사용하는 라우팅 이벤트를 지원하도록 Identity and Access Management(IAM) 역할 및 권한을 부여하는 방법을 보여줍니다.

  1. Eventarc API를 호출하는 주 구성원에 프로젝트 전체 권한 부여(예: Eventarc 트리거 생성자):

    1. Eventarc 관리자 역할이 있으면 트리거를 만들 때 트리거의 서비스 계정 지정을 포함하여 모든 Eventarc 리소스를 완전히 제어할 수 있습니다.
    2. 서비스 계정 사용자 역할이 있으면 주 구성원이 서비스 계정을 가장하고 사용할 수 있습니다. 서비스 계정은 Eventarc 트리거와 연결되며 트리거의 ID를 나타냅니다.
  2. 트리거 서비스 계정에 Eventarc 트리거 권한을 부여합니다.

    1. Eventarc 이벤트 수신자 역할이 있으면 Eventarc 트리거가 이벤트 제공자로부터 이벤트를 수신할 수 있습니다. Cloud Pub/Sub에서 직접 이벤트를 라우팅하는 경우 이 역할을 부여할 필요가 없습니다.
    2. Pub/Sub 구독자 역할이 있으면 Eventarc 트리거가 Pub/Sub에서 메시지를 사용하고 주제에 구독을 연결할 수 있습니다.
    3. 모니터링 측정항목 작성자 역할이 있으면 Eventarc의 이벤트 전달자가 Cloud Monitoring 및 측정항목을 제공하는 기타 시스템을 사용해서 측정항목을 작성할 수 있습니다.
  3. Google 서비스 에이전트에 권한 부여:

    1. Cloud Storage에서 직접 이벤트의 트리거를 만드는 경우 Pub/Sub 게시자 역할을 부여합니다.
    2. 2021년 4월 8일 또는 그 전에 Cloud Pub/Sub 서비스 에이전트를 사용 설정한 경우 서비스 계정 토큰 생성자 역할을 부여합니다.

IAM 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요. 커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

프로젝트 전체 권한 부여

프로젝트 생성자에게는 기본 소유자 역할(roles/owner)이 부여됩니다. 기본적으로 이 역할에는 대부분의 Google Cloud 리소스에 대한 전체 액세스에 필요한 권한이 포함됩니다. 그렇지 않으면 관리자가 적절한 주 구성원(구성원이라고도 부름)에게 적절한 리소스에 대해 필요한 역할을 부여해야 합니다.

예를 들어 주 구성원은 Google 계정(최종 사용자)이거나 서비스 계정(애플리케이션 및 컴퓨팅 워크로드)일 수 있습니다. 주 구성원마다 고유 식별자(일반적으로 이메일 주소)가 있습니다.

  1. Eventarc 관리자 역할(roles/eventarc.admin)이 있으면 모든 Eventarc 리소스를 완전히 제어할 수 있습니다.

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

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • PRINCIPAL: 일반적으로 PRINCIPAL_TYPE:ID 형식의 트리거 생성자의 식별자입니다. 예를 들면 user:my-user@example.com입니다. 가능한 PRINCIPAL_TYPE 값의 전체 목록은 정책 바인딩 참조를 확인하세요.
  2. 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)이 있으면 주 구성원이 서비스 계정으로 작업을 실행할 수 있습니다.

    Eventarc 트리거를 만들 때 사용자 관리 서비스 계정을 트리거와 연결하고 해당 ID를 나타낼 수 있도록 하려면 이 역할이 필요합니다. 자세한 내용은 서비스 계정 인증 역할을 참조하세요.

    주 구성원이 여러 서비스 계정을 가장할 수 있도록 프로젝트에 역할을 부여하거나 주 구성원이 특정 서비스 계정만 가장할 수 있도록 서비스 계정에 역할을 부여할 수 있습니다.

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

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

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

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

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_PROJECT_ID: 서비스 계정이 포함된 Google Cloud 프로젝트 ID입니다.
    • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름입니다.

Eventarc 트리거 권한 부여

모든 Eventarc 트리거는 트리거가 생성될 때 IAM 서비스 계정과 연결됩니다. 트리거가 기본 ID로 사용하는 사용자 관리 서비스 계정을 지정할 수 있습니다. 트리거를 만들 때 서비스 계정을 지정하지 않으면 트리거에 Compute Engine 기본 서비스 계정이 해당 ID로 사용됩니다.

트리거를 관리할 때 제어 기능과 및 유연성을 높이기 위해서는 고유한 사용자 관리 서비스 계정을 만드는 것이 좋습니다.

  1. 서비스 계정을 만들고 이름을 기록해 둡니다.

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름. 이 이름은 서비스 계정을 식별하는 이메일 주소에 표시됩니다.
    • DESCRIPTION: 서비스 계정에 대한 선택적인 설명
    • DISPLAY_NAME: Google Cloud 콘솔에 표시할 서비스 계정 이름
  2. 트리거가 이벤트 제공업체에서 이벤트를 수신할 수 있도록 프로젝트에 Eventarc 트리거와 연결된 서비스 계정에 대해 Eventarc 이벤트 수신자 역할(roles/eventarc.eventReceiver)을 부여합니다.

    Cloud Pub/Sub에서 직접 이벤트를 라우팅하는 경우에는 Eventarc 이벤트 수신자 역할을 부여할 필요가 없습니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver

    SERVICE_ACCOUNT_NAME을 이전 단계에서 확인한 서비스 계정의 이름으로 바꿉니다.

  3. Pub/Sub의 메시지를 사용하고 주제에 구독을 연결할 수 있도록 프로젝트에서 Eventarc 트리거와 연결된 서비스 계정에 대해 Pub/Sub 구독자 역할(roles/pubsub.subscriber)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/pubsub.subscriber

    SERVICE_ACCOUNT_NAME을 앞에서 확인한 서비스 계정 이름으로 바꿉니다.

  4. Eventarc의 이벤트 전달자가 Cloud Monitoring 및 측정항목을 제공하는 기타 시스템을 사용하여 측정항목을 작성할 수 있도록 프로젝트에서 Eventarc 트리거와 연결된 서비스 계정에 대해 Monitoring 측정항목 작성자 역할(roles/monitoring.metricWriter)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter

Google 서비스 에이전트에 권한 부여

일부 Google Cloud 서비스에는 서비스가 리소스에 액세스하도록 허용하는 서비스 에이전트가 있습니다. API에 서비스 에이전트가 필요한 경우 API를 활성화하고 사용한 후 Google이 서비스 에이전트를 만듭니다.

  1. Cloud Storage에서 직접 이벤트에 대한 트리거를 만드는 경우 주제에 메시지 게시를 지원하기 위해 프로젝트에서 Google Storage 서비스 에이전트에 대해 Pub/Sub 게시자 역할(roles/pubsub.publisher)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    PROJECT_NUMBER를 Google Cloud 프로젝트 번호로 바꿉니다. Google Cloud 콘솔의 시작 페이지에서 또는 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. 2021년 4월 8일 또는 이전에 Cloud Pub/Sub 서비스 에이전트를 사용 설정한 경우 인증된 Pub/Sub 푸시 요청을 지원하려면 프로젝트에서 Pub/Sub 서비스 에이전트에 대해 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)을 부여합니다. 그렇지 않으면 기본적으로 이 역할이 부여됩니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

다음 단계