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

このページでは、プロジェクト メンバーに対してアクセス権を付与、変更、取り消す方法について説明します。プロジェクトのオーナーは、自分が所有するプロジェクトにチームメンバーを追加し、そのメンバーにプロジェクトのリソースと 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 値が含まれている場合だけです。

gcloud

gcloud コマンドでは、JSON ファイルまたは YAML ファイルを使用できます。この例では JSON を使用します。

gcloud コマンドを使用してプロジェクトの Cloud IAM ポリシーを取得するには、次のように操作します。

  1. 変更するポリシーを入手して、これを 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 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 つ追加するには:

    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

次のコード スニペットは、プロジェクトのポリシーを設定します。

リクエスト:

POST https://cloudresourcemanager.googleapis.com/v1/projects/our-project-123: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"};

String targetRole = "viewers";

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

Binding targetBinding = null;

// Make a local copy of the bindings for modifying
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 コマンドでは、JSON ファイルまたは YAML ファイルを使用できます。この例では JSON を使用します。

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

  1. 変更するポリシーを入手して、これを 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 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. 次のリクエストを送信し、既存のポリシーを取得します。

    POST
    https://cloudresourcemanager.googleapis.com/v1beta1/projects/$our-project-123: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/$our-project-123: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

gcloud コマンドでは、JSON ファイルまたは YAML ファイルを使用できます。この例では JSON を使用します。

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

  1. 変更するポリシーを入手して、これを 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 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
    

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

    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. 次のリクエストを送信し、既存のポリシーを取得します。

    POST
    https://cloudresourcemanager.googleapis.com/v1beta1/projects/$our-project-123: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/$our-project-123: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 のドキュメント