組織ポリシーのドライラン機能を使ってみた

記事タイトルとURLをコピーする

G-gen の藤岡です。当記事では、Google Cloud (旧称 GCP) で 2023 年 12 月に GA (一般公開) された組織ポリシーのドライラン機能の使い方を紹介します。

概要

組織ポリシー

組織ポリシー (Organization Policy) は、組織やフォルダ、プロジェクトに対して、統制を効かせるためのルールを強制的に適用できるサービスです。 例えば、以下のようなルールが適用できます。

  • 特定のリージョン (ロケーション) 以外は使わせないようにする
  • 特定のサービス (Compute Engine 等) 以外は使わせないようにする

組織ポリシーの詳細な解説は、以下の記事をご参照ください。

blog.g-gen.co.jp

ドライラン機能

組織ポリシーではカスタム制約と、一部の事前定義された制約でドライラン機能を利用できます。ドライラン機能は、実際に制約を適用する前に影響を確かめることができる機能です。制約違反があった場合、操作自体は拒否されずに、Cloud Logging へのログ出力のみが行われます。

当機能は2024年1月現在で、カスタム制約への利用のみが GA であり、事前定義された制約は Restrict Resource Service Usage への利用のみが Preview (プレビュー) 版で提供されています。

Restrict Resource Service Usage

Restrict Resource Service Usage の組織ポリシーは、Google Cloud で利用できるサービス (Compute Engine や Cloud Storage など) を制限できる制約です。

Google Cloud では複数のサービスが連携して使われます。ユーザーからは 1 サービスしか利用していないように見えても、裏側では他のサービスも併せて利用されているケースもあります。そのため、ドライラン機能を使って本番影響を事前に検証することが重要になります。

以下の記事は、Cloud Functions の裏側で多くのサービスが動作していることを示しています。

blog.g-gen.co.jp

検証

前提

当記事では以下の前提とします。

  • Restrict Resource Service Usage の制約でドライランを検証
  • 組織ポリシーはプロジェクトレベルで適用
  • 設定に必要な権限は既に付与されていること

ドライランポリシーの作成

組織ポリシーの画面から Restrict Resource Service Usage を検索し、以下の画面遷移をします。

ドライランポリシーの作成①

今回は Cloud Storage (storage.googleapis.com) の利用を制限するよう設定します。

ドライランポリシーの作成②

ログの確認

ドライランのため、Cloud Storage のコンソール画面の閲覧やバケット作成などの操作は、問題なく実行できました。

その一方で、Cloud Logging のログを確認すると、Cloud Storage API の操作で警告のログが出力されていました。

適用確認

ログの中身は以下のようになっています。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 7,
      "message": "Request is disallowed by organization's Org Policy for 'projects/012345' attempting to use service 'storage.googleapis.com'."
    },
    "authenticationInfo": {
      "principalEmail": "fu...a@g-...p"
    },
    "requestMetadata": {
      "callerIp": "xxxxx",
      "requestAttributes": {},
      "destinationAttributes": {}
    },
    "serviceName": "storage.googleapis.com",
    "methodName": "google.storage.buckets.getIamPolicy",
    "resourceName": "projects/012345",
    "metadata": {
      "checkedValue": "storage.googleapis.com",
      "@type": "type.googleapis.com/google.cloud.audit.OrgPolicyDryRunAuditMetadata",
      "liveResult": "ALLOWED",
      "dryRunResult": "DENIED",
      "constraint": "constraints/gcp.restrictServiceUsage"
    }
  },
  "insertId": "xxxxx",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "project_id": "xxxxx",
      "method": "google.storage.buckets.getIamPolicy",
      "service": "storage.googleapis.com"
    }
  },
  "timestamp": "xxxxx",
  "severity": "WARNING",
  "logName": "projects/xxxxx/logs/cloudaudit.googleapis.com%2Fpolicy",
  "receiveTimestamp": "xxxxx"
}

ドライラン機能のログは protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.OrgPolicyDryRunAuditMetadata" として記録されています。

ログの中で、protoPayload.metadata.dryRunResult (ドライランの結果)が DENIED になっている一方、protoPayload.metadata.liveResult (実際にアクションが拒否されたかどうか)は ALLOWED になっています。

藤岡 里美 (記事一覧)

クラウドソリューション部

数年前までチキン売ったりドレスショップで働いてました!2022年9月 G-gen にジョイン。今期は「おっさんずラブ」がイチオシです :)

Google Cloud All Certifications Engineer / Google Cloud Partner Top Engineer 2024