構成でアクセス制御を設定する

Google Cloud 内のリソースへのアクセスを制御するには、Identity and Access Management(IAM)を使用します。IAM では、プロジェクト内のどのリソースに対するどのような種類のアクセスをに許可するかを設定します。IAM の概要については、IAM の概要をご覧ください。

リソースをデプロイするときに、設定でプリエンプティブに IAM ポリシーを設定することで、これらのリソースにアクセスできるユーザーを制御することもできます。たとえば、作成する Pub/Sub トピックを特定のユーザーが管理できるようにしたい場合に、このことを Deployment Manager に伝えるには、構成の中で IAM ポリシーを指定します。デプロイを作成または更新するときに、Deployment Manager は IAM API を呼び出して、リソースに対する適切な権限を設定します。

始める前に

IAM のポリシーを Deployment Manager で使用する

IAM ポリシーとは、ユーザーとその役割の集合です。IAM ポリシーの設定はプロジェクト レベルで行い、基本の役割または定義済みの役割を使用します。サービスによっては、Cloud Pub/Sub のように、リソースレベルでの IAM ポリシーの設定もサポートされています。

リソースレベルでの IAM ポリシーの設定がサポートされていないサービスについては、Deployment Manager から NO_METHOD_TO_UPDATE_ACCESS_CONTROL エラーが返されます。

役割の一覧と、それぞれに適用できるリソースについては、役割についてをご覧ください。

Deployment Manager に IAM ポリシーを設定するための権限を付与する

Deployment Manager は Google API サービス アカウントを使用して、他の Google API を呼び出し、Google Cloud Platform リソースを管理します。プロジェクトの Google API サービス アカウントに基本の roles/owner 役割を付与して、構成で定義した IAM ポリシーを適用できるようにする必要があります。

  1. プロジェクトの Google Cloud コンソールで IAM ページに移動します。

    IAM ページに移動

  2. プロンプトが表示されたら、リストからプロジェクトを選択します。
  3. 次の形式のメールアドレスが設定された Google API サービス アカウントを見つけます。

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. API のサービス アカウントに roles/owner の役割を付与します。

    コンソール

    1. Google Cloud Console 内で、Google API サービス アカウントの [役割] プルダウンを展開し、[プロジェクト] > [オーナー] を選択します。
    2. [保存] をクリックして、変更を保存します。

    gcloud

    Google Cloud CLI で、プロジェクトの 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 ポリシーには、バインディングのリストを含めることができます。バインドによって、1 つの役割にメンバーのリストが結び付けられます。

    accessControl を使用してサービス アカウントを管理している場合は、サービス アカウントの管理の詳細について参照してください

たとえば、次の 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 のドキュメントをご覧ください。