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

背景

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

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

  • 時間の経過とともに変化するカスタム役割の追跡
  • カスタム役割のテストと検証に伴う、リリース段階におけるカスタム役割のプロモート
  • 組織全体で役割がデプロイされる方法の自動化

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

Deployment Manager を使用してカスタム役割を保守する利点を示す次のシナリオについて考慮してください。

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

Deployment Manager の設定ファイルについて

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

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

これらのタイプの詳細については、Deployment Manager の基礎知識をご覧ください。

始める前に

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

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

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

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

    [プロジェクト] ページに移動

  3. プロジェクトの課金を有効にします。

    課金の有効化

  4. Deployment Manager and Cloud IAM API(複数)を有効にする。

    Enable the APIs

  5. gcloud をダウンロードして認証します

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

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

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

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

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

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

上記のセクションで説明したように、Deployment Manager は設定ファイルの組み合わせを使用してデプロイを記述します。Cloud IAM では、プロジェクトのカスタム役割用の次に示す 2 つのサンプル ファイルを考慮してください。

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:
    - bigquery.config.get
    - bigquery.datasets.get

この YAML ファイルでは、bigquery.config.getbigquery.datasets.get の権限を付与する custom-role という名前のカスタム役割のプロパティが指定されます。.jinja ファイルが 2 回参照されていることに注意してください。次に示すように、これらの参照では Jinja テンプレートで提供される値が使用されます。

project_custom_role.jinja

{#
Copyright 2017 Google Inc. 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 レポジトリの内容をローカルマシンにダウンロードします。これには、サンプル custom-role.yaml ファイルとその依存関係が含まれています。
  2. 端末ウィンドウで、custom-role.yaml のダウンロード場所に移動します。次のコマンドを実行してサンプルのカスタム役割をデプロイします。このとき [YOUR-DEPLOYMENT-NAME] プレースホルダを実際の値に置き換えます。

    gcloud deployment-manager deployments create \
       [YOUR-DEPLOYMENT-NAME] --config custom-role.yaml
    

  3. オペレーションが完了するのを待ちます。デプロイ フィンガープリントと進捗状況インジケーターが表示されます。

    The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q==
    Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
    

  4. 操作が正常に完了した場合は、次のステータス メッセージが表示されます。

    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: PUo2fmKdoFdJqiLViHjT3Q==
    id: '4184503157438526636'
    insertTime: '2017-12-13T21:21:07.136-08:00'
    manifest: manifest-1513228867140
    name: [YOUR-DEPLOYMENT-NAME]
    operation:
      endTime: '2017-12-13T21:21:10.747-08:00'
      name: operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc
      operationType: insert
      progress: 100
      startTime: '2017-12-13T21:21:07.296-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 をコピーし、以下のプレースホルダ値をこの ID に置き換えます。

    gcloud deployment-manager manifests describe [YOUR-MANIFEST-ID] \
        --deployment [YOUR-DEPLOYMENT-NAME]
    

Google Cloud Platform Console でカスタム役割を表示するには:

  1. [IAM] ページを開きます。
  2. [プロジェクトを選択] をクリックします。
  3. プロジェクトを選択して [開く] をクリックします。
  4. 左側のメニューで、[役割] をクリックします。
  5. リストで、新しく作成したカスタム役割の名前をクリックします。次に示すスクリーンショットのようになります。

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

Cloud Identity and Access Management のドキュメント