【概要】

WafCharm for Google Cloud を利用するためには Cloud Armor への read / write 権限と Logging 機能へのアクセス権限を WafCharm に提供する必要があります。以下の作業はプロジェクトのオーナー相当の権限を持ったアカウントで実施してください。Google Cloud の IAM 設計に習熟された方であれば必ずしも以下のドキュメントに沿う必要はございません。必要な権限をもったサービスアカウントを WafCharm にご提供いただければ WafCharm は動作いたします。

目次

  1. 1. カスタムロールの登録
  2. 2. サービスアカウントの作成
  3. 3. コマンドでの実行
  4. 4. サービスアカウントのキー発行
  5. 5. まとめ

1. カスタムロールの登録

WafCharm 利用に伴い、2種類のカスタムロールを作成します。
2つに分けているのは最低限のリソースを最低限の権限を振るための工夫です。便宜上リスト用と更新用というような呼び方をします。

1-1. Google Cloud Platform にて対象のプロジェクトを選択して、「IAMと管理」→「ロール」を選択します。

1-2. 「ロールを作成」を選択します。

1-3. タイトルを WafCharm で利用するものとわかるように変更してください。本手順では「Custom Role 4 WafCharm List」として作成します。変更後に「権限を追加」を選択してください。

1-4. フィルタ部分で以下の権限を検索し、チェックボックスを選択して追加を行ってください。

  • compute.backendServices.list
  • compute.securityPolicies.list




1-5. 画面下部の作成を選択して完了です。

1-6. 同様の手順で以下の権限をもつロールを別名で作成してください。本手順では「Custom Role 4 WafCharm Update」として作成します。

  • compute.securityPolicies.get
  • compute.securityPolicies.update

以上でカスタムロールの準備は完了です。

2. サービスアカウントの作成

作成した2種類のカスタムロールとデフォルトで設定されているログ取得用のロール3つを紐付けます。

2-1. Google Cloud Platform にて対象のプロジェクトを選択して、「IAMと管理」→「サービスアカウント」を選択します。

2-2. 「サービスアカウントを作成」を選択します。

2-3. サービスアカウント名を入力し、「作成して続行」を選択します。
※アカウント作成後にロールの付与も可能です。

2-4. ロールを選択から以下の5つのロールを付与します。
・1の手順で作成したリスト用カスタムロール(Custom Role 4 WafCharm List)
・1の手順で作成した更新用カスタムロール(Custom Role 4 WafCharm Update)
・ログ閲覧者( GCP のデフォルトロール)
・ログフィールド アクセス者( GCP のデフォルトロール)
・ログ表示アクセス者( GCP のデフォルトロール)


2-5. 5つのロールを登録後に更新用カスタムロール(Custom Role 4 WafCharm Update)とログ表示アクセス者に条件を付与します。対象のロールの条件から「条件の追加」を選択してください。
※サービスアカウントの権限付与対象のリソースを絞る設定になります。必須の設定ではないため状況やご自身の Google Cloud 習熟度に応じてご利用ください。

設定する条件は以下となります。

・更新用カスタムロール(Custom Role 4 WafCharm Update)

ーーー
条件タイプ:名前
オペレーター: =
値: projects/<PROJECT NAME>/global/securityPolicies/<SECURITY POLICY NAME>
※ <PROJECT NAME>と<SECURITY POLICY NAME>置き換え必要

条件エディタで入力の場合は以下
resource.name == "projects/<PROJECT NAME>/global/securityPolicies/<SECURITY POLICY NAME>"
※ <PROJECT NAME>と<SECURITY POLICY NAME>置き換え必要
ーーー

・ログ表示アクセス者

ーーー
条件タイプ:名前
オペレーター: =
値: projects/<PROJECT NAME>/locations/<リージョン>/buckets/<BUCKET NAME>/views/_AllLogs
※ <PROJECT NAME>と<リージョン>と<BUCKET NAME>置き換え必要

条件エディタで入力の場合は以下
resource.name == "projects/<PROJECT NAME>/locations/<リージョン>/buckets/<BUCKET NAME>/views/_AllLogs"
※ <PROJECT NAME>と<リージョン>と<BUCKET NAME>置き換え必要
※ Cloud Logging バケットを利用する例となります
ーーー


条件を付与した後に「完了」を選択して終了です。

2-6. 作成されたサービスアカウントのロールはIAMにて対象アカウントの行で確認可能です。
右側の鉛筆のマークから編集することも可能です。

3. コマンドでの実行

手動での実行以外にコマンドでの実行方法もご案内します。
手動で対応済みの場合は実行不要です。
コマンドのテンプレート内に編集箇所が多いため注意して実行してください。

3-1. カスタムロールの作成

以下必要なロールを記載した YAML ファイルを作成します。

・リスト用カスタムロール

title: "WafCharm_List”
description: ""
stage: "ALPHA"
includedPermissions:
- compute.backendServices.list
- compute.securityPolicies.list

・更新用カスタムロール

title: "WafCharm_Update”
description: ""
stage: "ALPHA"
includedPermissions:
- compute.securityPolicies.get
- compute.securityPolicies.update

リスト用カスタムロール作成コマンド

gcloud iam roles create WafCharm_List --project <PROJECT NAME> \
--file <リスト用カスタムロールを記載したYAMLファイル名>

<PROJECT NAME>と<リスト用カスタムロールを記載したYAMLファイル名>は適宜変更してください。

更新用カスタムロール作成コマンド

gcloud iam roles create WafCharm_Update --project <PROJECT NAME> \
--file <更新用カスタムロールを記載したYAMLファイル名>

作成されたカスタムロールのIDは「ロール」から対象のカスタムロールを開くことで確認可能です。

3-2. サービスアカウントの作成

gcloud iam service-accounts create wafcharm \
--display-name=“WafCharm”

作成されたサービスアカウントのメールは<サービスアカウントID@プロジェクトネーム.iam.gserviceaccount.com>の形式です。

3-3. サービスアカウントに条件なしのカスタムロール付与

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='roles/logging.viewer'

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='roles/logging.fieldAccessor'

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='<リスト用カスタムロールのID>'

※<PROJECT NAME>及び<作成したサービスアカウントのメール>、<リスト用カスタムロールのID>の置き換え必要

3-3. サービスアカウントに条件付きカスタムロール付与

※サービスアカウントの権限付与対象のリソースを絞る設定になります。必須の設定ではないため状況やご自身の Google Cloud 習熟度に応じてご利用ください。

以下必要な条件を記載した YAML ファイルを作成します。

・ログ表示アクセス者の条件

"title": "Filtering conditions"
"description": ""
"expression": "resource.name == \"projects/<PROJECT NAME>/locations/<リージョン>/buckets/<BUCKET NAME>/views/_AllLogs\""

※ <PROJECT NAME>と<リージョン>と<BUCKET NAME>置き換え必要

・更新用カスタムロールの条件

"title": "Filtering conditions"
"description": ""
"expression": "resource.name == \"projects/<PROJECT NAME>/global/securityPolicies/<SECURITY POLICY NAME>\""

※ <PROJECT NAME>と<SECURITY POLICY NAME>置き換え必要

ログ表示アクセス者の条件なしでの実行の場合

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='roles/logging.viewAccessor'

ログ表示アクセス者の条件ありでの実行の場合

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='roles/logging.viewAccessor' \
--condition-from-file=<ログ表示アクセス者の条件を記載したYAMLファイル名>

更新用カスタムロールの条件なしでの実行の場合

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='<更新用カスタムロールのID>' 

更新用カスタムロールの条件ありでの実行の場合

gcloud projects add-iam-policy-binding <PROJECT NAME> \
--member='serviceAccount:<作成したサービスアカウントのメール>' \
--role='<更新用カスタムロールのID>' \
--condition-from-file=<更新用カスタムロールの条件を記載したYAMLファイル名>

※<PROJECT NAME>及び<作成したサービスアカウントのメール>、<更新用カスタムロールのID>、<ログ表示アクセス者の条件を記載したYAMLファイル名>、<更新用カスタムロールの条件を記載したYAMLファイル名>の置き換え必要

4. まとめ

作成したサービスアカウントのキーを発行します。
作成したサービスアカウントの詳細を開き「キー」を選択します。

新しい鍵を作成します。

キーのタイプを JSON で作成してください。WafCharm との連携時に作成した JSON の中身をコピー&ペーストすることになります。
※ 重要な情報になりますので大切に保管してください。

5. まとめ

以上 WafCharm for Google Cloud を利用するためのアカウントの作成と権限の設定についての説明となります。