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

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

リソースをデプロイするときに、そのリソースに誰がアクセスできるかを制御することもできます。このようにするには、構成で Cloud IAM ポリシーを前もって設定しておきます。たとえば、作成する Pub/Sub トピックを特定のユーザーが管理できるようにしたい場合に、このことを Deployment Manager に伝えるには、構成の中で IAM ポリシーを指定します。デプロイメントを作成または更新するときに、Deployment Manager が Identity and Access Management(IAM)API を呼び出して、そのリソースに対する適切な権限を設定します。

始める前に

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

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

リソースレベルでの IAM ポリシーの設定がサポートされていないサービスについては、Deployment Manager から NO_METHOD_TO_UPDATE_ACCESS_CONTROL エラーが返されます。たとえば、現在、Compute Engine にはリソースレベルで IAM ポリシーを設定できません。そこで Compute Engine のリソースに IAM ポリシーを設定しようとすると、エラーが発生します。ただし、プロジェクト レベルで IAM の役割を許可することは可能です。

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

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

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

  1. プロジェクトの GCP Console の IAM ページに移動します。

    [IAM] ページに移動

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

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

    コンソール

    1. Google Cloud Platform Console 内で、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.gservbiceaccount.com"
               ]
           }
           ]
       }
    

    }

構成に IAM ポリシーを設定する

次に、以下の指示に沿って、構成またはテンプレートに IAM ポリシーを設定することができます。

  1. アクセス制御ポリシーを適用する各リソースの最上位の構成に accessControl セクションを追加します。

  2. リソースに目的の gcpIamPolicy を指定します。IAM ポリシーには、バインドのリストを含めることができます。バインドによって、1 つの役割にメンバーのリストが結び付けられます。

たとえば、以下の accessControl セクションは、alice@example.comroles/pubsub.editor 役割のバインドを追加し、jane@example.com とサービス アカウント my-other-app@appspot.gserviceaccount.comroles/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 のドキュメントをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Deployment Manager のドキュメント