背景
Cloud Identity and Access Management のカスタムロールを使用すると、ユーザー アカウントとサービス アカウントに細かな権限を付与できます。Google により管理されて適宜更新される事前定義ロールとは異なり、カスタムロールは、新しい権限が使用可能になったときに組織により保守されます。
Cloud Deployment Manager を使用すると、カスタム役割の構成と保守が容易になります。Deployment Manager で構成ファイルを使用して役割を記述できます。その後、この役割を任意のソース管理システムにチェックインできます。Deployment Manager とソース管理を組み合わせることで、次の目的で「config-as-code(設定コード化)」を簡単に行うことができます。
- 時間の経過とともに変化するカスタム役割の追跡
- カスタム役割のテストと検証を行いつつ、リリースの各段階を通してカスタム役割の使用を進める
- 組織全体でロールがデプロイされる方法の自動化
始める前に
-
Enable the IAM and Cloud Deployment Manager APIs.
Deployment Manager を使用したカスタムロールを保守するシナリオ
Deployment Manager を使用してカスタムロールを保守する利点を示す次のシナリオについて考慮してください。
- 新しい権限へのアクセスを制御する: Google Cloud サービスへの権限を含むカスタムロールがあるとします。このサービスはベータ版の新しい機能を追加し、新しい権限を公開します。カスタム役割はこうした新しい権限を自動的には継承しないため、手動で追加する必要があります。新しい権限をカスタム役割に追加するまで、組織内のユーザーはベータ版の機能にアクセスできません。Deployment Manager の構成ファイルとソース管理機能を使用すると、既存の権限の監査、必要に応じたカスタム役割の更新、変更履歴の保守が容易になります。
- ロールのライフサイクルを管理する:
ALPHA
リリース ステージを割り当てた新しいカスタムロールがあるとします。カスタムロールをテストして検証したら、Google Cloud Console を使用せずに Deployment Manager でカスタムロールの構成を更新し、BETA
ステージに進めます。 - カスタムロールを導入する利点を把握する: ソース管理での組織によるカスタムロールの定義を増やすことで、共有、使用パターンからの情報の把握、複数プロジェクトでの制限の適用が容易になります。
Deployment Manager の構成ファイルについて
Deployment Manager は、デプロイを記述するため 3 種類のファイルを使用します。それぞれの種類について以下で説明します。
- 構成は、リソースとそのプロパティ記述する YAML ファイルです。Identity and Access Management(IAM)カスタムロールの場合、各 YAML ファイルに 1 つ以上のカスタムロールのすべてのプロパティ(名前、説明、権限など)を指定します。
- スキーマは、特定のリソースで使用できるすべてのプロパティとそのデフォルト値を指定します。IAM のカスタムロールには、プロジェクト レベルと組織レベルのカスタムロールのスキーマがあります。
- テンプレートは、構成を再利用可能な部品に分割することで構成を拡張する Jinja ファイルまたは Python ファイルです。IAM のカスタムロールでは、プロジェクト レベルのカスタムロールに 1 つ、組織レベルのカスタムロールに 1 つ、合計 2 つのテンプレートが用意されています。
これらのタイプの詳細については、Deployment Manager の基礎知識をご覧ください。
始める前に
Deployment Manager に慣れていない場合は、まずクイックスタートを完了します。その後、次の手順に従います。- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Enable the Deployment Manager and IAM APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Enable the Deployment Manager and IAM APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
この前提条件の手順が完了したら、Deployment Manager と IAM を使用してカスタムロールを保守できます。
Google API サービス アカウントに権限を付与する
Deployment Manager を使用してカスタム役割を保守するには、まず Google API サービス アカウントに適切な権限を付与する必要があります。デフォルトでは、組織とプロジェクトごとにこのアカウントが作成されます。
Google Cloud コンソールの [IAM] ページに移動します。
プリンシパルのリストから、Google API サービス エージェントという名前のプリンシパルを見つけます。
サービス アカウントのロールを編集するには、[編集
] ボタンをクリックして、[ロール] > [ロールの管理者] のロールを追加します。[保存] をクリックしてロールを適用します。
これで、カスタム役割を保守する権限が Google API サービス アカウントに付与されました。次に Deployment Manager を使用してサンプルのカスタム役割をデプロイできます。
プロジェクトにカスタム役割をデプロイする
上記のセクションで説明したように、Deployment Manager は構成ファイルの組み合わせを使用してデプロイを記述します。IAM では、プロジェクトのカスタムロール用の次に示す 2 つのサンプル ファイルを考慮してください。
project_custom_role.yaml
imports: - path: project_custom_role.jinja resources: - name: custom-role type: project_custom_role.jinja properties: roleId: myCustomRole title: My Title description: My description. includedPermissions: - iam.roles.get - iam.roles.list
この YAML ファイルでは、iam.roles.get
と iam.roles.list
の権限を付与する custom-role
という名前のカスタム役割のプロパティが指定されます。.jinja ファイルが 2 回参照されていることに注意してください。次に示すように、これらの参照では Jinja テンプレートで提供される値が使用されます。
project_custom_role.jinja
# Copyright 2017 Google LLC. All rights reserved. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. resources: - name: custom-role type: gcp-types/iam-v1:projects.roles properties: parent: projects/{{ env["project"] }} roleId: {{ properties["roleId"] }} role: title: {{ properties["title"] }} description: {{ properties["description"] }} stage: {{ properties["stage"] }} includedPermissions: {{ properties["includedPermissions"] }}
この Jinja ファイルは、複数の役割で同じプロパティが重複することを最小限に抑えるためのカスタム役割用テンプレートを提供します。対応する YAML ファイルで各プロパティの値が指定されていない場合は、.schema ファイルからデフォルト値が挿入されます。
このカスタムロールを Deployment Manager でデプロイするには:
- この GitHub リポジトリの内容をローカルマシンにダウンロードします。
- ターミナル ウィンドウで、ダウンロードしたリポジトリの
examples/v2/iam_custom_role/jinja
ディレクトリに移動します。ここには project_custom_role.yaml ファイルと、関連する Jinja ファイルがあります。 次のコマンドを実行してサンプルのカスタム役割をデプロイします。your-deployment-name プレースホルダの値は、任意のデプロイ名で置き換えます。
gcloud deployment-manager deployments create \ your-deployment-name --config project_custom_role.yaml
オペレーションが完了するのを待ちます。デプロイ フィンガープリントと進捗状況インジケータが表示されます。
The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q== Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
オペレーションが正常に完了した場合は、次のステータス メッセージが表示されます。
Create operation operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc completed successfully. NAME TYPE STATE ERRORS INTENT custom-role gcp-types/iam-v1:projects.roles COMPLETED []
デプロイされたカスタムロールを表示する
Deployment Manager でカスタムロールを表示するには:
ターミナル ウィンドウで、次のコマンドを実行します。
gcloud deployment-manager deployments describe your-deployment-name
デプロイの説明(ステータス、エラーなどの包括的な情報を含む)が表示されます。
fingerprint: oaJoGesEFYvsAldP2bm5jQ== id: '3222872306422524501' insertTime: '2018-01-29T13:40:10.822-08:00' manifest: manifest-1517262010855 name: your-deployment-name operation: endTime: '2018-01-29T13:40:26.500-08:00' name: operation-1517262010573-563f1172be0c9-ce5f0242-239fe1af operationType: insert progress: 100 startTime: '2018-01-29T13:40:11.535-08:00' status: DONE user: id-7201362145@my-example-project.iam.gserviceaccount.com NAME TYPE STATE INTENT custom-role gcp-types/iam-v1:projects.roles COMPLETED
また、デプロイのマニフェストを取得して、カスタム役割の構成に関する詳細情報を確認することもできます。上記の手順 2 の
describe
コマンドの出力に含まれるmanifest
ID をメモしてください。この ID(manifest-
接頭辞を含む)をコピーして、次のプレースホルダ値と置き換えます。gcloud deployment-manager manifests describe your-manifest-id \ --deployment your-deployment-name
マニフェストには、ソースの project_custom_role.yaml ファイルおよび project_custom_role.jinja ファイルの未加工のコンテンツなど、カスタム役割のデプロイに関する網羅的な情報が含まれています。特に、マニフェストの末尾にある
resources
ブロックに注目してください。ここには、次のようにカスタムロールの情報がまとめられています。... resources: - name: custom-role properties: description: My description. includedPermissions: - iam.roles.get - iam.roles.list roleId: aCustomRole stage: ALPHA title: My Title resources: - name: custom-role type: gcp-types/iam-v1:projects.roles type: project_custom_role.jinja ...
Google Cloud コンソールでカスタムロールを表示するには:
Google Cloud コンソールの [IAM] ページに移動します。
プロジェクトを選択して [開く] をクリックします。
左側のメニューで、[ロール] をクリックします。
リストで、新しく作成したカスタムロールの名前をクリックします。次に示すスクリーンショットのようになります。