구성에서 액세스 제어 설정

Google Cloud Platform에서 리소스에 대한 액세스를 제어하기 위해서는 IAM(Identity and Access Management)을 사용합니다. IAM을 사용하면 프로젝트에서 어떤 리소스에 대해 어떤 종류의 액세스 권한을 갖고 있는 사용자가 누구인지를 지정하여 권한을 설정할 수 있습니다. IAM 소개는 IAM 개요를 참조하세요.

리소스를 배포할 때는 구성에서 우선적으로 Cloud IAM 정책을 설정하여 이러한 리소스에 액세스할 수 있는 사용자를 제어할 수도 있습니다. 예를 들어 특정 사용자가 관리할 수 있는 Pub/Sub 항목을 만들려는 경우, 구성에서 IAM 정책을 지정하여 Deployment Manager에 이를 명시적으로 표시할 수 있습니다. 배포를 만들거나 업데이트할 때, Deployment Manager는 IAM(Identity and Access Management) API를 호출하여 리소스에 대해 적절한 권한을 설정합니다.

시작하기 전에

Deployment Manager에서 IAM 정책 사용

IAM 정책은 사용자 및 해당 역할의 모음입니다. 기본 또는 미리 정의된 역할을 사용하여 프로젝트 수준에서 IAM 정책을 설정합니다. Cloud Pub/Sub와 같은 일부 서비스는 리소스 수준에서 IAM 정책 설정도 지원합니다.

서비스가 리소스 수준에서 IAM 정책 설정을 지원하지 않는 경우, Deployment Manager가 NO_METHOD_TO_UPDATE_ACCESS_CONTROL 오류를 반환합니다.

역할 목록 및 이를 적용할 수 있는 리소스는 역할 이해를 참조하세요.

IAM 정책 설정을 위한 Deployment Manager 권한 부여

Deployment Manager는 Google API 서비스 계정을 사용하여 다른 Google API를 호출하고 사용자를 대신하여 Google Cloud Platform 리소스를 관리합니다. 구성에 정의한 IAM 정책을 적용할 수 있도록 프로젝트의 Google API 서비스 계정에 기본 roles/owner 역할을 부여해야 합니다.

  1. 프로젝트의 GCP 콘솔에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 메시지가 나타나면 목록에서 프로젝트를 선택합니다.
  3. 다음과 같은 형식의 이메일 주소를 사용하는 Google API 서비스 계정을 찾습니다.

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. API 서비스 계정에 roles/owner 역할을 부여합니다.

    콘솔

    1. Google Cloud Platform 콘솔에서 Google API 서비스 계정에 대해 역할 드롭다운을 확장하고 프로젝트 > 소유자를 선택합니다.
    2. 저장을 클릭하여 변경사항을 저장합니다.

    gcloud

    gcloud 명령줄 도구를 사용하여 프로젝트에 대한 Cloud IAM 정책에 바인딩을 추가합니다.

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/owner

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

    • [PROJECT_ID]는 프로젝트의 ID입니다.
    • [SERVICE_ACCOUNT_EMAIL]은 서비스 계정의 이메일입니다.

    예를 들면 다음과 같습니다.

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/owner

    API

    API에서 다음 URL로 POST 요청을 수행합니다. 여기서 [PROJECT_ID]는 프로젝트의 ID입니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
    

    프로젝트에 적용할 바인딩 목록이 요청 본문에 포함되어야 하며 roles/owner 역할이 바인딩의 일부여야 합니다. 예를 들면 다음과 같습니다.

    {
        "policy": {
            "version": "0",
            "bindings": [
                {
                    "role": "roles/owner",
                    "members": [
                        "user:example@gmail.com",
                        "serviceAccount:123456789012@cloudservices.gserviceaccount.com"
                    ]
                }
            ]
        }
    }
    

구성에서 IAM 정책 설정

그런 다음 구성 또는 템플릿에서 다음 안내에 따라 IAM 정책을 설정할 수 있습니다.

  1. 액세스 제어 정책을 적용하려는 각 리소스의 최상위 구성에 accessControl 섹션을 추가합니다.

  2. 리소스에 대해 원하는 gcpIamPolicy를 지정합니다. 각 IAM 정책은 바인딩 목록을 포함할 수 있습니다. 각 바인딩은 구성원 목록을 역할에 바인딩합니다.

예를 들어 다음 accessControl 섹션은 해당 역할을 사용자에게 부여하는 바인딩을 추가합니다.

사용자 역할
alice@example.com roles/pubsub.editor
  • my-other-app@appspot.gserviceaccount.com
  • jane@example.com
roles/pubsub.publisher
resources:
- name: a-new-pubsub-topic
  type: pubsub.v1.topic
  properties:
    ...

  accessControl:
    gcpIamPolicy:
      bindings:
      - role: roles/pubsub.editor
        members:
        - "user:alice@example.com"
      - role: roles/pubsub.publisher
        members:
        - "user:jane@example.com"
        - "serviceAccount:my-other-app@appspot.gserviceaccount.com"

IAM 정책에 대한 자세한 내용은 IAM 문서를 참조하세요.