概要
このラボでは、Identity and Access Management(IAM) を構成して、ロールを付与し、カスタムロールを作成します。IAM を使用すると、Google Cloud リソースの権限を作成および管理できます。IAM は、Google Cloud サービスに関するアクセス制御を 1 つのシステムに統合し、一貫性のあるオペレーションを提供します。
目標
このラボでは、次の方法について学びます。
IAM を使用してアクセス制御を実装する
特定の機能やリソースへのアクセスを制限する
事前定義ロールを使用して Google Cloud へのアクセス権を付与する
カスタム IAM ロールを作成して、職務に基づく権限を付与する
カスタムロールを変更する
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
Qwiklabs にシークレット ウィンドウ でログインします。
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
準備ができたら、[ラボを開始 ] をクリックします。
ラボの認証情報(ユーザー名 とパスワード )をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
[Google Console を開く ] をクリックします。
[別のアカウントを使用 ] をクリックし、この ラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求 が発生したりします。
利用規約に同意し、再設定用のリソースページをスキップします。
タスク 1. 2 つのユーザー アカウントでログインする
このタスクでは、2 つの異なるユーザー アカウントを使用してログインします。それらのアカウントは、特定のリソースへの IAM アクセス権を調べるために、後ほど使用されます。
1 人目のユーザーとして Google Cloud コンソールにログインする
Qwiklabs の [接続の詳細 ] ダイアログで、このラボ用の 2 つのユーザー名が提供されています。
Chrome のシークレット ウィンドウを開いて、Qwiklabs で提供されている Username 1 を使用して Cloud コンソール にログインします。どちらのユーザー名でも同じパスワードを使用します。
この一時的な Google アカウントの利用規約に同意します。
これは一時的なアカウントであるため、再設定オプションの情報を追加したり、無料トライアルに登録したりしないでください。
プロンプトが表示されたら、Google Cloud の利用規約に同意します。
2 人目のユーザーとして Cloud コンソールにログインする
シークレット ウィンドウで別のブラウザタブを開きます。
Cloud コンソール に移動します。
画面右上にあるユーザー アイコンをクリックし、[アカウントを追加 ] をクリックします。
Qwiklabs で提供されている Username 2 を使用して、Cloud コンソールにログインします。
注: このラボの特定の時点で Username 1 アカウントからログアウトすると、Qwiklabs によって Username 2 アカウントが削除されます。そのため、Username 1 でログインしたままにしてください。
タスク 2. IAM コンソールで現在のロールを調べる
このタスクでは、Username 1 および Username 2 の現在のロールを確認していきます。
IAM コンソールに移動してロールを調べる
Cloud コンソールの [Username 1 ] タブが開いていることを確認します。
IAM コンソールを表示するには、ナビゲーション メニュー で [IAM と管理] > [IAM] をクリックします。
IAM コンソールで、Username 1 の行を見つけます。Username 1 にはいくつかのロールが割り当てられています(プロジェクト オーナー など)。
Username 2 の行を見つけます。Username 2 にはプロジェクト閲覧者 のロールが割り当てられています。
注: 次の 3 つのステップでは、権限を変更しない でください。ここで編集機能を使用するのは、割り当てられているロールを確認するためだけです。
Username 2 の行の [プリンシパルを編集します] ボタン をクリックします。
[閲覧者 ] をクリックして、選択できるロールのリストを表示します。
Username 1 はプロジェクト オーナーなのでロールを変更できますが、ここではまだ変更しないでください。
ロールのリストの外側をクリックしてリストを閉じ、[キャンセル ] をクリックします。
Username 2 の Cloud コンソールのタブに切り替えます。
ナビゲーション メニュー で、[IAM と管理] > [IAM] をクリックします。
Username 2 の行の [プリンシパルを編集します] ボタン をクリックします。今度はロールを編集できません。Username 2 には現在、プロジェクトを表示するためのアクセス権(プロジェクト閲覧者)はありますが、変更の権限はありません。
タスク 3. アクセステストのためにリソースを準備する
このタスクでは、Cloud Storage バケットおよびサンプル テキスト ファイルを作成します。Username 2 を使用したサンプル ファイルへのアクセスをテストします。
バケットを作成してサンプル ファイルをアップロードする
Cloud コンソールの [Username 1 ] タブに切り替えます。
Google Cloud コンソールのタイトルバーで、Cloud Shell をアクティブにする アイコン( )をクリックします。プロンプトが表示された場合、[続行 ] をクリックします。
次のコマンドを実行して、 に新しい Storage バケットを作成します。
gcloud storage buckets create -l {{{project_0.default_region | Region}}} gs://$DEVSHELL_PROJECT_ID
次のコマンドを実行して、Cloud Shell でサンプル テキスト ファイルを作成します。
echo "this is a sample file" > sample.txt
次のコマンドを実行して、先ほど作成したバケットにそのファイルをコピーします。
gcloud storage cp sample.txt gs://$DEVSHELL_PROJECT_ID
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
アクセステストのためのリソースを準備する
プロジェクト閲覧者ロールのアクセス権を確認する
Cloud コンソールの [Username 2 ] タブに切り替えます。
Cloud Shell をアクティブにする アイコン をクリックして Cloud Shell を開きます。プロンプトが表示されたら、[続行 ] をクリックします。
次のコマンドを実行して、Username 2 がバケット内のファイルを表示できることを確認します。
gcloud storage ls gs://$DEVSHELL_PROJECT_ID
次のコマンドを実行して、ファイルを作成してバケットにアップロードできるか試してみます。
echo "this is another file" > sample2.txt
gcloud storage cp sample2.txt gs://$DEVSHELL_PROJECT_ID
Username 2 にはプロジェクト閲覧者のロールしかないため、Cloud Storage にファイルをアップロードすることはできません。
出力:
Copying file://sample2.txt
ERROR: User xxx does not have permission to access b instance (or it may not exist): student-xx-xxxx@qwiklabs.net does not have storage.objects.create access to the Google Cloud Storage object.
タスク 4. プロジェクトへのアクセス権を削除する
このタスクでは、Username 2 のプロジェクト閲覧者のロールを削除します。Username 2 が Cloud Storage バケットへのアクセス権を失ったことを確認します。
Username 2 のプロジェクト閲覧者のロールを削除する
Cloud コンソールの [Username 1 ] タブに切り替えます。
ナビゲーション メニュー で、[IAM と管理] > [IAM] をクリックします。
Username 2 の鉛筆アイコンの編集ボタン( )をクリックします。
割り当てられているロールの横にある削除アイコンをクリックします。
[保存 ] をクリックします。
このユーザーがリストから消去されていると、アクセス権が取り消されていることになります。Username 2 には引き続き Google Cloud アカウントがありますが、プロジェクトへのアクセス権はありません。
Username 2 がアクセス権を失ったことを確認する
Cloud コンソールの [Username 2 ] タブに切り替えます。
Cloud Shell で次のコマンドを実行して、Username 2 がバケット内のファイルを表示できなくなったことを確認します。
gcloud storage ls gs://$DEVSHELL_PROJECT_ID
出力:
ERROR: User xxx does not have permission to access b instance (or it may not exist): student-xx-xxxx@qwiklabs.net does not have storage.objects.list access to the Google Cloud Storage bucket.
引き続きファイルを表示できる場合は、アクセス権の変更がまだ反映されていません。しばらくしてからもう一度コマンドを実行してみてください。Permission denied on resource
が表示されるまで繰り返してください。
Username 2 のコンソールから Compute Engine サービスにアクセスできるか試してみます。ナビゲーション メニュー で、[Compute Engine] > [VM インスタンス] をクリックします。Compute Engine ダッシュボードを表示することもできません。
注: Username 2 には引き続き Google Cloud アカウントがありますが、Cloud コンソールからも CLI からもプロジェクトにアクセスできません。
タスク 5. ストレージへのアクセス権を追加する
このタスクでは、Username 2 に Storage オブジェクト閲覧者の権限を追加し、ユーザーが Cloud Storage バケットのコンテンツを閲覧できることを確認します。
Username 2 に Storage オブジェクト閲覧者の権限のみを追加する
Qwiklabs の [接続の詳細 ] ダイアログから Username 2 の値をコピーします。
Cloud コンソールの [Username 1 ] タブに切り替えます。
ナビゲーション メニュー で、[IAM と管理] > [IAM] をクリックします。
[アクセスを許可 ] をクリックしてユーザーを追加します。
[新しいプリンシパル ] に、Qwiklabs の [接続の詳細 ] ダイアログからコピーした Username 2 の値を貼り付けます。
次のステップでは、事前定義ロールを使用して Username 2 に Storage オブジェクト閲覧者の権限を付与します。どのような事前定義ロールがあるか自由にご覧いただいてかまいません。
[ロールを選択 ] で、[Cloud Storage] > [Storage オブジェクト閲覧者] をクリックします。
[保存 ] をクリックします。
Username 2 がストレージへのアクセス権を得たことを確認する
Cloud コンソールの [Username 2 ] タブに切り替えます。
注: Username 2 にはプロジェクト閲覧者のロールがないため、引き続き Cloud コンソールでプロジェクトやプロジェクトのリソースを表示することはできません。たとえば、Compute Engine ダッシュボードは引き続き表示できません。ただし、Cloud Storage の表示に特化したアクセス権があるため、API 呼び出しでストレージを表示できます。
Cloud Shell で次のコマンドを実行して、前に作成したバケットの内容を表示します。
gcloud storage ls gs://$DEVSHELL_PROJECT_ID
これで、Cloud Storage の表示に限定されたアクセス権が Username 2 に付与されたことがわかります。
タスク 6. カスタムロールを作成する
このタスクでは、プライバシー審査担当者の職務に合わせたカスタムロールを作成します。プライバシー審査担当者は、データ プライバシーのレビューを行います。そのため、Cloud Storage、Cloud Bigtable、Cloud Spanner など、さまざまなサービスのデータを表示する権限が必要です。
Google Cloud には、「カスタムロール」を作成する機能があります。カスタムロールは、組織の特定の職務を Google Cloud の権限にマッピングするために利用できます。複数の Google Cloud サービスの権限を 1 つのロールにまとめて、その新しいロールを組織全体で共有できます。
注: 一般的に、まずは Google によって管理されている事前定義ロールを使用することをおすすめします。カスタムロールを作成して使用すると、より自在に権限を設定できますが、手動での管理が必要となるため運用上のオーバーヘッドが増加します。
カスタムロールは、既存の事前定義ロールに基づいて作成することもできます。ただし、ベースとなった事前定義ロールがカスタムロールの作成後に変更された場合、それらの変更はカスタムロールに継承されません。
カスタムロールを作成するには、iam.roles.createpermission
権限が必要です。デフォルトでは、プロジェクトや組織のオーナーがこの権限を持ち、カスタムロールを作成して管理できます。このラボでは、Username 1 がプロジェクト オーナーです。
Cloud コンソールを使用してカスタムロールを作成する
Cloud コンソールの [Username 1 ] タブに切り替えます。
ナビゲーション メニュー で、[IAM と管理] > [ロール] をクリックします。このページには現在、すべての事前定義ロールが表示されています。数多くのロールがあることがわかります(数百ページあります)。
[ロールを作成 ] をクリックします。
以下の値を使用してロールを作成します。
タイトル
説明
ID
ロールのリリース段階
Privacy Reviewer
Custom role to perform data reviews
privacyreviewer
アルファ版
各プレースホルダ値の詳細は、以下のとおりです。
タイトル : ロールのわかりやすいタイトル(例: Role Viewer)
説明 : ロールについての短い説明(例: My custom role description)
ID : 一意の ID
ロールのリリース段階 : リリース ライフサイクルにおけるロールの段階(例: アルファ版、ベータ版、一般提供、無効)
[権限を追加 ] をクリックします。
[フィルタ ] フィールドに「storage
」と入力して、Enter キーを押します。
storage.buckets.list 、storage.objects.list 、storage.objects.get を選択し、[追加 ] をクリックします。
注: 必要な権限が表示されていない場合、次のページを参照する必要がある場合があります。
再び [権限を追加 ] をクリックします。
[フィルタ ] フィールドに「spanner
」と入力して、Enter キーを押します。
spanner.databases.get と spanner.databases.list を選択し、[追加 ] をクリックします。
再び [権限を追加 ] をクリックします。
[フィルタ ] フィールドに「bigtable
」と入力して、Enter キーを押します。
bigtable.tables.get 、bigtable.tables.list 、bigtable.tables.readRows を選択し、[追加 ] をクリックします。
権限が次のようになるはずです。
[作成 ] をクリックします。
作成した新しいカスタムロールがロールの表の一番上に表示されます。
CLI と YAML ファイルを使用してカスタムロールを作成する
CLI と YAML ファイルを使用してロールを作成することもできます。YAML ファイルに次のような形式でロールの定義を含めます。
title: [ROLE_TITLE]
description: [ROLE_DESCRIPTION]
stage: [LAUNCH_STAGE]
includedPermissions:
- [PERMISSION_1]
- [PERMISSION_2]
したがって、先ほど Cloud コンソールで作成したロールの YAML は次のようになります。
title: Privacy Reviewer
description: Custom role to perform data reviews
stage: ALPHA
includedPermissions:
- storage.buckets.list
- storage.objects.list
- storage.objects.get
- spanner.databases.get- spanner.databases.list
- bigtable.tables.get
- bigtable.tables.list
- bigtable.tables.readRows
この YAML ファイルをコピーしないでください。ここでは別のロールを CLI で作成します。
引き続き Username 1 のブラウザタブを表示していることを確認し、まだ Cloud Shell を開いていない場合は開きます。
次のコマンドを実行して、role.yaml という新しいファイルを作成します。
nano role.yaml
次のロール定義をコピーして、Cloud Shell の nano エディタに貼り付けます。
title: App Viewer
description: Custom role to view apps
stage: ALPHA
includedPermissions:
- compute.instances.get
- compute.instances.list
- appengine.versions.get
- appengine.versions.list
Ctrl+X 、Y 、Enter の順にキーを押して、ファイルを保存します。
次のコマンドを実行して、新しいロールを作成します。
gcloud iam roles create app_viewer --project \
$DEVSHELL_PROJECT_ID --file role.yaml
次のような出力が表示されます。
出力:
Created role [app_viewer].
description: Custom role to view apps
etag: BwVshqVuvBs=
includedPermissions:
- appengine.versions.get
- appengine.versions.list
- compute.instances.get
- compute.instances.list
name: projects/xxxxxxxxxx/roles/app_viewer
stage: ALPHA
title: App Viewer
次のコマンドを実行して、プロジェクトのすべてのカスタムロールを一覧表示します。
gcloud iam roles list --project $DEVSHELL_PROJECT_ID
作成したロールが両方とも表示されます。
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
カスタムロールを作成する
タスク 7. カスタムロールを使用する
このタスクでは、カスタムロールを作成して、Username 2 に割り当てます。
Cloud コンソールの [Username 1 ] タブが開いていることを確認します。
ナビゲーション メニュー で、[IAM と管理] > [IAM] をクリックします。
IAM コンソールで、Username 2 の行を見つけて [プリンシパルを編集します] ボタン( )をクリックします。Username 2 には現在、Storage オブジェクト閲覧者 のロールが割り当てられているはずです。
[別のロールを追加 ] をクリックし、[ロールを選択 ] をクリックします。
[Custom ] カテゴリで、作成したロールのいずれかを選択します。
[保存 ] をクリックします。
これで、作成したカスタムロールの 1 つが Username 2 に割り当てられました。
タスク 8. カスタムロールを管理する
このタスクでは、カスタムロールの変更、無効化、削除、削除の取り消しを行います。
Google Cloud サービスで利用できる権限は時間が経つと変更されることもあるため、カスタムロールを使用する際には、作成したロールに関連付けられている権限を把握しておくことが重要です。Google Cloud の事前定義ロールとは異なり、権限の追加や削除をご自身で管理する必要があります。
ロールの権限を変更する
既存のロールに変更を加えるには、まずそのロールの定義を取得して更新してから、ロールそのものを更新します。
Cloud コンソールの [Username 1 ] タブが開いていることを確認します。
Cloud Shell で次のコマンドを実行して、app_viewer ロールの定義を取得します。
gcloud iam roles describe app_viewer --project \
$DEVSHELL_PROJECT_ID
describe コマンドは次の出力を返します。
出力:
description: Custom role to view apps
etag: [Etag value]
includedPermissions:
- appengine.versions.get
- appengine.versions.list
- compute.instances.get
- compute.instances.list
name: projects/[Project_ID]/roles/app_viewer
stage: DISABLED
title: App Viewer
describe コマンドの出力をコピーします。description
の行から title
の行までをコピーしてください。
次のコマンドを実行して、新しい YAML ファイルを作成します。
nano update-role.yaml
describe コマンドの出力を nano エディタに貼り付けます。
includedPermissions:
の一連の行のすぐ下に次の 2 行を追加します。
- container.clusters.get
- container.clusters.list
Ctrl+X 、Y 、Enter の順にキーを押して、ファイルを保存します。
次のコマンドを実行して、app_viewer ロールを更新します。
gcloud iam roles update app_viewer --project \
$DEVSHELL_PROJECT_ID --file update-role.yaml
app_viewer ロールが更新されて、2 つの権限が追加されました。
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
ロールの権限を変更する
ロールを無効にする
カスタムロールは、無効化することができます。ロールを無効にすると、そのロールに関連するポリシー バインディングはすべて無効になります。つまり、ユーザーにロールを付与してもロールの権限は付与されません。
Cloud コンソールの [Username 1 ] タブが開いていることを確認します。
Cloud Shell で次のコマンドを実行して、このラボで作成した app_viewer ロールを無効にします。
gcloud iam roles update app_viewer --project \
$DEVSHELL_PROJECT_ID --stage DISABLED
ロールを削除する
削除されたロールは停止され、新しい IAM ポリシー バインディングの作成に使用できなくなります。ロールが削除された後、既存のバインディングは残りますが無効になります。ロールの削除は、7 日以内は取り消し可能です。7 日が過ぎるとロールの完全削除プロセスが開始され、これは 30 日間続きます。
Cloud コンソールの [Username 1 ] タブが開いていることを確認します。
Cloud Shell で次のコマンドを実行して、このラボで作成した app_viewer ロールを削除します。
gcloud iam roles delete app_viewer --project \
$DEVSHELL_PROJECT_ID
次のコマンドを実行して、プロジェクトのすべてのロールを一覧表示します。
gcloud iam roles list --project $DEVSHELL_PROJECT_ID
削除した app_viewer ロールは表示されません。
削除したロールも含めてプロジェクトのすべてのロールを一覧表示するには、次のコマンドを実行します。
gcloud iam roles list --project $DEVSHELL_PROJECT_ID \
--show-deleted
ロールの削除を取り消す
7 日以内であれば、ロールの削除を取り消すことができます。
app_viewer ロールの削除を取り消すには、Cloud Shell で次のコマンドを実行します。
gcloud iam roles undelete app_viewer --project \
$DEVSHELL_PROJECT_ID
次のコマンドを実行して、プロジェクトのすべてのロールを一覧表示します。
gcloud iam roles list --project $DEVSHELL_PROJECT_ID
再び app_viewer ロールが表示されます。
まとめ
このラボでは次の作業を行いました。
IAM を使用してアクセス制御を実装する
特定の機能やリソースへのアクセスを制限する
事前定義ロールを使用して Google Cloud へのアクセス権を付与する
カスタム IAM ロールを作成して独自の職務に基づく権限を付与する
カスタムロールを変更する
ラボを終了する
ラボが完了したら、[ラボを終了 ] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信 ] をクリックします。
星の数は、それぞれ次の評価を表します。
星 1 つ = 非常に不満
星 2 つ = 不満
星 3 つ = どちらともいえない
星 4 つ = 満足
星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート ] タブをご利用ください。
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。