Deployment Manager を使用したカスタムロールの保守

背景

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

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

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

始める前に

  • IAM and Cloud Deployment Manager API を有効にします。

    API を有効にする

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 に慣れていない場合は、まずクイックスタートを完了します。その後、次の手順に従います。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

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

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

  9. Deployment Manager and IAM API を有効にします。

    API を有効にする

  10. Google Cloud CLI をインストールします。
  11. gcloud CLI を初期化するには:

    gcloud init

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

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

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

  1. Google Cloud コンソールの [IAM] ページに移動します。

    [IAM] ページに移動

  2. プリンシパルのリストから、Google API サービス エージェントという名前のプリンシパルを見つけます。

  3. サービス アカウントのロールを編集するには、[編集] ボタンをクリックして、[ロール] > [ロールの管理者] のロールを追加します。

  4. [保存] をクリックしてロールを適用します。

これで、カスタム役割を保守する権限が 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.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 ファイルからデフォルト値が挿入されます。

このカスタムロールを Deployment Manager でデプロイするには:

  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  []
    

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

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- 接頭辞を含む)をコピーして、次のプレースホルダ値と置き換えます。

    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 コンソールでカスタムロールを表示するには:

  1. Google Cloud コンソールの [IAM] ページに移動します。

    [IAM] ページに移動

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

  3. 左側のメニューで、[ロール] をクリックします。

  4. リストで、新しく作成したカスタムロールの名前をクリックします。次に示すスクリーンショットのようになります。