プロジェクト メンバーに対するアクセス権の付与、変更、取り消し

このページでは、プロジェクト メンバーに対してアクセス権を付与、変更、取り消す方法について説明します。プロジェクトのオーナーは、自分が所有するプロジェクトにチームメンバーを追加し、そのメンバーにプロジェクトのリソースと API に対するさまざまなレベルのアクセス権を付与できます。プロジェクトへのアクセス権を付与するには、プロジェクト オーナーが新しいユーザーを追加し、Cloud IAM の特定の役割を付与することができます。

Cloud IAM と Cloud Identity-Aware Proxy(Cloud IAP)を連携してアプリケーションへのアクセスを保護するには、Cloud Identity-Aware Proxy のドキュメントをご覧ください。

始める前に

チームメンバーにアクセスを付与する

プロジェクトのリソースと API にチームメンバーがアクセスできるようにするには、プロジェクト オーナーがユーザーに IAM の役割を付与します。ユーザーに役割を付与するには、GCP Console、gcloud コマンドライン ツール、または setIamPolicy() メソッドを使用できます。ユーザーに役割を付与するためにポリシーを設定するかバインディングを追加したとき、ユーザーは招待メールを受信しません。代わりに、ユーザーのアクセス権が直接更新されます。

setIamPolicy() メソッドを使用すると、Cloud IAM ポリシーをリソースに付加することにより、ユーザーに役割を付与できます。IAM ポリシーとは、誰がどんなアクセス権を持つかを定義するステートメントの集合です。付与できる役割は、有効になっている API サービスに関連しています。Compute Engine などのサービスがこのプロジェクトで有効ではない場合、Computing Engine API へのアクセス権を付与する役割をコンソールまたは grantable に表示できる方法はありません。詳細については、API を有効または無効にするをご覧ください。

読み取り - 変更 - 書き込み: リソースのメタデータ(policy など)を更新する場合、現在の状態を読み取り、データをローカルで更新して、変更後のデータを書き込みのために送信するのが一般的なパターンです。このような処理では、2 つ以上の独立したプロセスが一連の操作を同時に試行する場合に競合が発生することがあります。たとえば、1 つのプロジェクトの 2 人のオーナーが、ポリシーに対して相反する変更を同時に行うと、一部の変更が失敗する可能性があります。Cloud IAM では、Cloud IAM ポリシーの etag プロパティを使用してこの問題を解決します。このプロパティは、ポリシーが最後のリクエスト以降に変更されたかどうか確認するために使用されます。Cloud IAM に対し、etag 値を指定したリクエストを出すと、Cloud IAM はリクエスト内の etag 値と、ポリシーに関連付けられている既存の etag 値を比較し、etag 値が一致した場合にのみポリシーを書き込みます。

policy を更新するときには、最初に getIamPolicy() を使用して policy を取得し、policy を更新した後、setIamPolicy() を使用して更新した policy を書き込みます。policy を設定するときに etag 値を使用するのは、GetPolicyResponse 内の対応するポリシーに etag 値が含まれている場合だけです。

以下の例で、PROJECT-ID は GCP プロジェクトの ID です。プロジェクト ID、名前、番号の違いの詳細については、プロジェクトの識別を参照してください。

gcloud

gcloud コマンドを実行してリソースのポリシーを取得または設定するときは、JSON または YAML ファイルを使用できます。このセクションの例では、JSON を使用します。

gcloud コマンドを使用してプロジェクトの Cloud IAM ポリシーを取得するには:

  1. gcloud projects get-iam-policy コマンドを実行して、変更するポリシーを取得します。

    gcloud projects get-iam-policy PROJECT-ID --format json > iam.json
    

  2. JSON ファイルの内容は次のようになります。version フィールドは読み取り専用であるため、これを指定する必要はありません。

    {
      "bindings":[
        {
          "members":[
            "user:email1@gmail.com"
          ],
          "role":"roles/owner"
        },
        {
          "members":[
            "serviceAccount:our-project-123@appspot.gserviceaccount.com",
            "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
          ],
          "role":"roles/editor"
        }
      ],
      "etag":"BwUjMhCsNvY=",
      "version":1
    }
    
  3. テキスト エディタを使用して、グループのメンバーとメンバーの役割を定義する bindings 配列に新しいオブジェクトを追加します。たとえば、役割 roles/viewer をユーザー email2@gmail.com に付与するには、上記の例を次のように変更します。

    {
      "bindings":[
        {
          "members":[
            "user:email1@gmail.com"
          ],
          "role":"roles/owner"
        },
        {
          "members":[
            "serviceAccount:our-project-123@appspot.gserviceaccount.com",
            "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
          ],
          "role":"roles/editor"
        },
        {
          "members":[
            "user:email2@gmail.com"
          ],
          "role":"roles/viewer"
        }
      ],
      "etag":"BwUjMhCsNvY="
    }
    
  4. gcloud projects set-iam-policy コマンドを実行し、新しいポリシーを含む JSON ファイルへのパスを指定して、プロジェクトのポリシーを更新します。

    gcloud projects set-iam-policy PROJECT-ID iam.json
    

  5. コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

プロジェクトの既存の Cloud IAM ポリシーにバインドを 1 つ追加するには:

GCP プロジェクトの ID、新しいメンバー、役割を指定して、gcloud projects add-iam-policy-binding コマンドを実行します。

gcloud projects add-iam-policy-binding PROJECT-ID \
      --member user:email3@gmail.com --role roles/editor

コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
      - user:email3@gmail.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
    role: roles/viewer
    etag: BwUm38GGAQk=
    version: 1

Console

チームメンバーを追加して、そのメンバーに Cloud IAM の役割を付与するには:

  1. GCP Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択して [開く] をクリックします。

  4. [メンバーを追加] をクリックして、プロジェクトに新しいメンバーを追加し、その権限を設定します。[役割を選択] プルダウンで、サービス名をクリックして、そのサービスに属する役割を探します。

同じプロジェクト メンバーに複数の役割を付与するには、次のように操作します。

  1. GCP Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択して [開く] をクリックします。

  4. メンバーのメールアドレスを入力し、メンバーに付与するすべての役割を選択します。[追加する] をクリックします。

複数のプロジェクトに関して、1 人のメンバーに 1 つの役割を付与するには、次のようにします。

  1. GCP Console で [IAM と管理] ページを開きます。

    [IAM と管理] ページを開く

  2. 権限を付与するプロジェクトをすべて選択します。

  3. 右側のペインにある [IAM] タブで、新しいメンバーを追加し、役割を選択すると、選択したすべてのプロジェクトにその役割が付与されます。

API

新しい GCP ポリシーを設定するには:

setIamPolicy() を呼び出して既存のポリシーを取得します。

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT-ID:setIamPolicy

{ "policy":{ "bindings":[ { "role":"roles/owner", "members":[ "user:email1@gmail.com", "user:email2@gmail.com", "user:email3@gmail.com" ] }, { "role":"roles/editor", "members":[ "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] } ] } }

レスポンス:

{
  "bindings":[
    {
      "role":"roles/owner",
      "members":[
        "user:email1@gmail.com",
        "user:email2@gmail.com",
        "user:email3@gmail.com"
      ]
    },
    {
      "role":"roles/editor",
      "members":[
        "serviceAccount:my-other-app@appspot.gserviceaccount.com"
      ]
    }
  ]
}
 

Java

以下の Java のコード スニペットでは、読み取り - 変更 - 書き込みのパターンに従って policy を追加しています。

import com.google.api.services.cloudresourcemanager.model.Policy;
import com.google.api.services.cloudresourcemanager.model.SetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.model.Binding;
import java.util.LinkedList;
import java.util.Arrays;

...

String[] myViewers = new String[] {"user:testviewer1@gmail.com",
    "user:testviewer2@gmail.com"};

// The name of the role, using the format `roles/<role-name>`.
String targetRole = "roles/viewer";

Policy policy =
    client.projects().getIamPolicy(projectId,
    new GetIamPolicyRequest()).execute();

Binding targetBinding = null;

// Make a local copy of the bindings for modification.
LinkedList<Binding> bindings =
    new LinkedList<Binding>(policy.getBindings());

// Search for the existing binding having role name of
// targetRole.
for (Binding binding : bindings) {
    if (binding.getRole().equals(targetRole)) {
        targetBinding = binding;
    break;
    }
}

// If no matching targetBinding is found, construct a new Binding object
// and add it to the bindings list.
if (targetBinding == null) {
    targetBinding = new Binding();
targetBinding.setRole(targetRole);
bindings.add(targetBinding);
}

// Finally, set the list of members as the members of targetBinding.
targetBinding.setMembers(Arrays.asList(myViewers));

// Write the policy back into the project by calling SetIamPolicy.
SetIamPolicyRequest setIamPolicyRequest = new SetIamPolicyRequest();
    setIamPolicyRequest.setPolicy(policy);
client.projects().setIamPolicy(projectId,
    setIamPolicyRequest).execute();

...

チームメンバーのアクセス権を変更する

gcloud

gcloud コマンドを使用してプロジェクトの Cloud IAM ポリシーを変更するには:

  1. gcloud projects get-iam-policy コマンドを実行し、出力を JSON ファイルに書き込むことによって、変更するポリシーを取得します。

    gcloud projects get-iam-policy PROJECT-ID --format json > iam.json
    

  2. JSON ファイルの内容は次のようになります。version フィールドは読み取り専用であるため、これを指定する必要はありません。

    {
      "bindings":[
        {
          "members":[
            "user:email1@gmail.com"
          ],
          "role":"roles/owner"
        },
        {
          "members":[
            "serviceAccount:our-project-123@appspot.gserviceaccount.com",
            "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
          ],
          "role":"roles/editor"
        }
      ],
      "etag":"BwUjMhCsNvY=",
      "version":1
    }
    
  3. テキスト エディタを使用して、グループのメンバーとメンバーの役割を定義する bindings 配列に新しいオブジェクトを追加します。たとえば、役割 roles/viewer をユーザー email2@gmail.com に付与するには、上記の例を次のように変更します。

    {
      "bindings":[
        {
          "members":[
            "user:email1@gmail.com"
          ],
          "role":"roles/owner"
        },
        {
          "members":[
            "serviceAccount:our-project-123@appspot.gserviceaccount.com",
            "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
          ],
          "role":"roles/editor"
        },
        {
          "members":[
            "user:email2@gmail.com"
          ],
          "role":"roles/viewer"
        }
      ],
      "etag":"BwUjMhCsNvY="
    }
    
  4. gcloud projects set-iam-policy コマンドを実行し、更新されたポリシーを含む JSON ファイルへのパスを指定して、プロジェクトのポリシーを更新します。

    gcloud projects set-iam-policy PROJECT-ID iam.json
    

  5. コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

Console

  1. Google Cloud Platform Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択して [開く] をクリックします。

  4. アクセス権を変更するメンバーを探します。

  5. メンバーの行の [役割] プルダウンで、以前に付与された役割をオフにし、新しく付与する役割をオンにします。

  6. [保存] をクリックします。

API

既存のポリシーを変更するには:

  1. getIamPolicy() を呼び出して既存のポリシーを取得します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT-ID:getIamPolicy
    

  2. このコマンドは、レスポンスでポリシーを返します。

    {
      "bindings":[
        {
          "role":"roles/editor",
          "members":[
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/owner",
          "members":[
            "user:email1@gmail.com",
            "user:email2@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  3. ポリシーに必要な変更を加えます。

  4. setIamPolicy() を呼び出し、更新されたポリシーをリクエスト本文に含めることによって、更新されたポリシーを設定します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT-ID:setIamPolicy

    { "policy":{ "bindings":[ { "role":"roles/owner", "members":[ "user:email1@gmail.com", "user:email2@gmail.com", "user:email3@gmail.com" ] }, { "role":"roles/viewer", "members":[ "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] } ] } }

  5. setIamPolicy() リクエストは、レスポンスでポリシーを返します。

    {
      "bindings":[
        {
          "role":"roles/owner",
          "members":[
            "user:email1@gmail.com",
            "user:email2@gmail.com",
            "user:email3@gmail.com"
          ]
        },
        {
          "role":"roles/viewer",
          "members":[
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        }
      ]
    }
    

チームメンバーのアクセス権を取り消す

gcloud

ユーザーのプロジェクトへのアクセス権を取り消すには:

  1. gcloud projects get-iam-policy コマンドを実行し、出力を JSON ファイルに書き込むことによって、変更するポリシーを取得します。

    gcloud projects get-iam-policy PROJECT-ID --format json > iam.json
    

  2. JSON ファイルの内容は次のようになります。version フィールドは読み取り専用であるため、これを指定する必要はありません。

    {
      "bindings":[
        {
          "members":[
            "user:email1@gmail.com"
          ],
          "role":"roles/owner"
        },
        {
          "members":[
            "serviceAccount:our-project-123@appspot.gserviceaccount.com",
            "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
          ],
          "role":"roles/editor"
        }
      ],
      "etag":"BwUjMhCsNvY=",
      "version":1
    }
    
  3. テキスト エディタを使用して、権限を取り消すユーザーを削除します。たとえば、ユーザー serviceAccount:our-project-123@appspot.gserviceaccount.com から役割 roles/editor を取り消すには、上記の例を次のように変更します。

    {
      "bindings":[
        {
          "members":[
            "user:email1@gmail.com"
          ],
          "role":"roles/owner"
        },
        {
          "members":[
            "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
          ],
          "role":"roles/editor"
        }
      ],
      "etag":"BwUjMhCsNvY="
    }
    
  4. gcloud projects set-iam-policy コマンドを実行し、更新されたポリシーを含む JSON ファイルへのパスを指定して、プロジェクトのポリシーを更新します。

    gcloud projects set-iam-policy PROJECT-ID iam.json
    

  5. コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    etag: BwUjMhXbSPU=
    version: 1
    

ポリシーからバインディングを削除するには:

削除する GCP プロジェクトの ID、メンバー、役割を指定して、gcloud projects remove-iam-policy-binding コマンドを実行します。

gcloud projects remove-iam-policy-binding PROJECT-ID \
    --member user:email3@gmail.com --role roles/editor

コマンドから更新したポリシーが出力されます。

    bindings:
    - members:
      - user:email1@gmail.com
      role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
      role: roles/editor
    - members:
      - user:email2@gmail.com
      role: roles/viewer
    etag: BwUf0bMcTwg=
    version: 1

Console

  1. Google Cloud Platform Console で [IAM] ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択して [開く] をクリックします。

  4. アクセスを取り消すメンバーを探します。

  5. メンバーの行の [役割] プルダウンで、取り消す役割をオフにして [保存] をクリックします。

API

既存のポリシーを変更するには:

  1. getIamPolicy() を呼び出して既存のポリシーを取得します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT-ID:getIamPolicy
    

  2. リクエストがポリシーを返します。

    {
      "bindings":[
        {
          "role":"roles/editor",
          "members":[
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/owner",
          "members":[
            "user:email1@gmail.com",
            "user:email2@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  3. メンバーのバインディングからユーザーを削除し、setIamPolicy() を呼び出して更新されたポリシーを設定します。たとえば、email2@gmail.com のオーナーの役割を取り消すリクエストは次のようになります。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT-ID:setIamPolicy

    { "policy":{ "bindings":[ { "role":"roles/owner", "members":[ "user:email1@gmail.com", "user:email3@gmail.com" ] }, { "role":"roles/viewer", "members":[ "serviceAccount:my-other-app@appspot.gserviceaccount.com" ] } ] } }

  4. レスポンスには、更新されたポリシーが含まれます。

    {
      "bindings":[
        {
          "role":"roles/owner",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        },
        {
          "role":"roles/viewer",
          "members":[
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        }
      ]
    }
    

次のステップ

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

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

Cloud Identity and Access Management のドキュメント