Deployment Manager を使用したカスタム役割の保守

背景

Cloud Identity and Access Management のカスタム役割を使用すると、ユーザー アカウントとサービス アカウントに細かな権限を付与できます。Google により管理されて適宜更新される定義済みの役割とは異なり、カスタム役割は、新しい権限が使用可能になったときに組織により保守されます。

Cloud Deployment Manager を使用すると、カスタム役割の構成と保守が容易になります。Cloud Deployment Manager で構成ファイルを使用して役割を記述できます。その後、この役割を任意のソース管理システムにチェックインできます。Cloud Deployment Manager とソース管理を組み合わせることで、次の目的で「config-as-code(構成コード化)」を簡単に行うことができます。

  • 時間の経過とともに変化するカスタム役割を追跡する
  • カスタム役割のテストと検証を行いつつ、リリースの各段階を通してカスタム役割の使用を進める
  • 組織全体で役割をデプロイする方法を自動化する

Deployment Manager を使用したカスタム役割を保守するシナリオ

以下のシナリオを通して、Cloud Deployment Manager によるカスタム役割の保守の利点を検討してください。

  • 新しい権限へのアクセスを制御する: Google Cloud Platform サービスへの権限を含むカスタム役割があるとします。GCP サービスでは、ベータ版の新しい機能を追加し、新しい権限を公開しています。カスタム役割はこうした新しい権限を自動的には継承しないため、手動で追加する必要があります。新しい権限をカスタム役割に追加するまで、組織内のユーザーはベータ版の機能にアクセスできません。Cloud Deployment Manager の構成ファイルとソース管理機能を使用すると、既存の権限の監査、必要に応じたカスタム役割の更新、変更履歴の保守が容易になります。
  • 役割のライフサイクル管理: ALPHA リリース段階を割り当てた新しいカスタム役割があるとします。カスタム役割のテストと検証が完了したら、Cloud Deployment Manager を使用してカスタム役割の構成を更新し、Google Cloud Platform Console を使用せずに BETA 段階に進めることができます。
  • カスタム役割の導入による利点を把握する: ソース管理に組織のカスタム役割定義をより多く含めることで、それらの共有、使用パターンからの学習、複数プロジェクトにまたがる制限の適用が容易になります。

Deployment Manager の構成ファイルについて

Cloud Deployment Manager は、デプロイを記述するため 3 種類のファイルを使用します。それぞれの種類について以下で説明します。

  • 構成は、リソースとそのプロパティ記述する YAML ファイルです。Cloud IAM のカスタム役割では、各 YAML ファイルで 1 つ以上のカスタム役割のすべてのプロパティ(名前、説明、権限など)を指定します。
  • スキーマは、特定のリソースで使用できるすべてのプロパティとそのデフォルト値を指定します。Cloud IAM のカスタム役割には、プロジェクト レベルおよび組織レベルのカスタム役割のスキーマがあります。
  • テンプレートは、構成を再利用可能な部品に分割することで構成を拡張する Jinja ファイルまたは Python ファイルです。Cloud IAM のカスタム役割では、プロジェクト レベルのカスタム役割と組織レベルのカスタム役割に 1 つずつ、合計 2 つのテンプレートが用意されています。

これらの種類の詳細については、Cloud Deployment Manager の基礎をご覧ください。

始める前に

Cloud Deployment Manager に慣れていない場合は、まずクイックスタートを完了してください。その後、次の手順に従います。

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 詳しくは、課金を有効にする方法をご覧ください。

  4. Deployment Manager と Cloud IAM API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。

この前提条件の手順が完了したら、Cloud Deployment Manager と Cloud IAM を使用してカスタム役割を保守できます。

Google API サービス アカウントに権限を付与する

Cloud Deployment Manager を使用してカスタム役割を保守するには、まず Google API サービス アカウントに適切な権限を付与する必要があります。デフォルトでは、組織とプロジェクトごとにこのアカウントが作成されます。

  1. Google Cloud Platform Console で [IAM] ページを開きます。
    [IAM] ページを開く
  2. [プロジェクトを選択] をクリックします。
  3. プロジェクトを選択して [開く] をクリックします。
  4. メンバーのリストの中から、Google API サービス アカウントという名前のメンバーを見つけます。
  5. [Google API サービス アカウント] の [**役割**] プルダウン メニューをクリックし、[役割] > [役割の管理者] の役割をクリックします。
  6. [保存] をクリックして役割を適用します。

これで、カスタム役割を保守する権限が Google API サービス アカウントに付与されました。次に Cloud Deployment Manager を使用してサンプルのカスタム役割をデプロイできます。

プロジェクトにカスタム役割をデプロイする

上記のセクションで説明したように、Cloud Deployment Manager は構成ファイルの組み合わせを使用してデプロイを記述します。Cloud 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.getiam.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 ファイルからデフォルト値が挿入されます。

  1. この GitHub リポジトリの内容をローカルマシンにダウンロードします。
  2. 端末ウィンドウで、ダウンロードしたリポジトリの examples/v2/iam_custom_role/jinja ディレクトリに移動します。ここには project_custom_role.yaml ファイルと、関連する Jinja ファイルがあります。
  3. 次のコマンドを実行してサンプルのカスタム役割をデプロイします。[YOUR-DEPLOYMENT-NAME] プレースホルダは実際の値に置き換えてください。

    gcloud deployment-manager deployments create \
       [YOUR-DEPLOYMENT-NAME] --config project_custom_role.yaml
    
  4. オペレーションが完了するのを待ちます。デプロイ フィンガープリントと進捗状況インジケータが表示されます。

    The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q==
    Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
    
  5. オペレーションが正常に完了した場合は、次のステータス メッセージが表示されます。

    Create operation operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc completed successfully.
    NAME         TYPE                             STATE      ERRORS  INTENT
    custom-role  gcp-types/iam-v1:projects.roles  COMPLETED  []
    

デプロイされたカスタム役割を表示する

Cloud Deployment Manager でカスタム役割を表示するには:

  1. 端末ウィンドウで、次のコマンドを実行します。

    gcloud deployment-manager deployments describe [YOUR-DEPLOYMENT-NAME]
    
  2. デプロイの説明(ステータス、エラーなどの包括的な情報を含む)が表示されます。

    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
    
  3. また、デプロイのマニフェストを取得して、カスタム役割の構成に関する詳細情報を確認することもできます。上記の手順 2 の describe コマンドの出力に含まれる manifest ID に注目してください。この ID を manifest- 接頭辞を含めてコピーし、次のプレースホルダ値をこの ID に置き換えます。

    gcloud deployment-manager manifests describe [YOUR-MANIFEST-ID] \
        --deployment [YOUR-DEPLOYMENT-NAME]
    
  4. マニフェストには、ソースの 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 Platform Console でカスタム役割を表示するには:

  1. Google Cloud Platform Console で [IAM] ページを開きます。
    [IAM] ページを開く
  2. [プロジェクトを選択] をクリックします。
  3. プロジェクトを選択して [開く] をクリックします。
  4. 左側のメニューで、[役割] をクリックします。
  5. リストで、新しく作成したカスタム役割の名前をクリックします。次のスクリーンショットのような画面が表示されます。
このページは役立ちましたか?評価をお願いいたします。

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

Cloud IAM のドキュメント