インフラストラクチャの制御

このドキュメントでは、Google Cloudでワークロードを実行する際の Compute Engine、Google Kubernetes Engine(GKE)、Pub/Sub、Dataflow、Cloud Run functions などの Google Cloudサービスのベスト プラクティスとガイドラインについて説明します。

コンピューティングの制御

これらの制御は、コンピューティング サービスに適用されます。

IP 転送を有効にできる VM インスタンスを定義する

Google コントロール ID VPC-CO-6.3
実装 必須
説明
compute.vmCanIpForward 制約により、IP 転送を有効にできる VM インスタンスを定義します。デフォルトでは、すべての VM がすべての仮想ネットワークで IP 転送を有効にすることができます。次のいずれかの形式で VM インスタンスを指定します。
  • under:organizations/ORGANIZATION_ID
  • under:folders/FOLDER_ID
  • under:projects/PROJECT_ID
  • projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
この制約は遡及的ではありません。
対象プロダクト
  • 組織ポリシー サービス
  • Virtual Private Cloud(VPC)
  • Compute Engine
パス constraints/compute.vmCanIpForward
演算子 =
  • Your list of VM instances that can enable IP forwarding.
リスト
関連する NIST-800-53 コントロール
  • SC-7
  • SC-8
関連する CRI プロファイル コントロール
  • PR.AC-5.1
  • PR.AC-5.2
  • PR.DS-2.1
  • PR.DS-2.2
  • PR.DS-5.1
  • PR.PT-4.1
  • DE.CM-1.1
  • DE.CM-1.2
  • DE.CM-1.3
  • DE.CM-1.4
関連情報

VM のネストされた仮想化を無効にする

Google コントロール ID VPC-CO-6.6
実装 必須
説明
compute.disableNestedVirtualization ブール値制約により、Compute Engine VM のハードウェア アクセラレーションによりネストされた仮想化が無効になります。
対象プロダクト
  • 組織ポリシー サービス
  • Virtual Private Cloud(VPC)
  • Compute Engine
パス constraints/compute.disableNestedVirtualization
演算子 Is
  • True
ブール値
関連する NIST-800-53 コントロール
  • SC-7
  • SC-8
関連する CRI プロファイル コントロール
  • PR.AC-5.1
  • PR.AC-5.2
  • PR.DS-2.1
  • PR.DS-2.2
  • PR.DS-5.1
  • PR.PT-4.1
  • DE.CM-1.1
  • DE.CM-1.2
  • DE.CM-1.3
  • DE.CM-1.4
関連情報

VM の外部 IP アドレスを制限する

Google コントロール ID VPC-CO-6.2
実装 必須
説明

必要がない限り、パブリック IP アドレスを持つ Compute Engine インスタンスの作成を禁止します。compute.vmExternalIpAccess リスト型制約により、外部 IP アドレスを持つことができる一連の Compute Engine VM インスタンスを定義します。

Compute Engine インスタンスに外部 IP アドレスが割り当てられないようにして、インターネットへの露出を大幅に減らします。外部 IP アドレスを持つインスタンスはすぐに検出され、自動スキャン、総当たり攻撃、脆弱性の悪用を試みる攻撃の直接の標的になります。代わりに、インスタンスでプライベート IP アドレスを使用し、Identity-Aware Proxy(IAP)トンネルや踏み台インスタンスなどの制御、認証、ロギングされたパスウェイを介してアクセスを管理します。

このデフォルト拒否の姿勢を採用することは、攻撃対象領域を最小限に抑え、ネットワークに対するゼロトラスト アプローチを適用するのに役立つ基本的なセキュリティのベスト プラクティスです。この制約は遡及的ではありません。

対象プロダクト
  • 組織ポリシー サービス
  • Virtual Private Cloud(VPC)
  • Compute Engine
パス constraints/compute.vmExternalIpAccess
演算子 =
  • The list of VM instances in your organization that can have external IP addresses.
リスト
関連する NIST-800-53 コントロール
  • SC-7
  • SC-8
関連する CRI プロファイル コントロール
  • PR.AC-5.1
  • PR.AC-5.2
  • PR.DS-2.1
  • PR.DS-2.2
  • PR.DS-5.1
  • PR.PT-4.1
  • DE.CM-1.1
  • DE.CM-1.2
  • DE.CM-1.3
  • DE.CM-1.4
関連情報

VM インスタンスに対して許可されている外部 IP アドレスを定義する

Google コントロール ID CBD-CO-6.3
実装 必須
説明

compute.vmExternalIpAccess リスト型制約を使用すると、外部 IP アドレスを割り当てないことで、仮想マシンへの外部アクセスを制限できます。このリスト型制約を構成して、仮想マシンへのすべての外部 IP アドレスを拒否します。

対象プロダクト
  • 組織ポリシー サービス
  • Compute Engine
パス compute.vmExternalIpAccess
演算子 =
  • Deny All
リスト
関連する NIST-800-53 コントロール
  • AC-3
  • AC-12
  • AC-17
  • AC-20
関連する CRI プロファイル コントロール
  • PR.AC-3.1
  • PR.AC-3.2
  • PR.AC-4.1
  • PR.AC-4.2
  • PR.AC-4.3
  • PR.AC-6.1
  • PR.AC-7.1
  • PR.AC-7.2
  • PR.PT-3.1
  • PR-PT-4.1
関連情報

Cloud Run functions の VPC コネクタを必須にする

Google コントロール ID CF-CO-4.4
実装 必須
説明

cloudfunctions.requireVPCConnector ブール値制約により、管理者は Cloud Run 関数をデプロイするときにサーバーレス VPC アクセス コネクタを指定する必要があります。適用されると、関数でコネクタを指定する必要があります。

対象プロダクト
  • 組織ポリシー サービス
  • Cloud Run functions
パス constraints/cloudfunctions.requireVPCConnector
演算子 =
  • True
ブール値
関連する NIST-800-53 コントロール
  • SC-7
  • SC-8
関連する CRI プロファイル コントロール
  • PR.AC-5.1
  • PR.AC-5.2
  • PR.DS-2.1
  • PR.DS-2.2
  • PR.DS-5.1
  • PR.PT-4.1
  • DE.CM-1.1
  • DE.CM-1.2
  • DE.CM-1.3
  • DE.CM-1.4
関連情報

メッセージ ストレージ ポリシーの構成

Google コントロール ID PS-CO-4.1
実装 省略可
説明
メッセージをグローバル Pub/Sub エンドポイントにパブリッシュすると、Pub/Sub は最も近い Google Cloud リージョンにメッセージを自動的に保存します。メッセージを保存するリージョンを制御するには、トピックにメッセージ ストレージ ポリシーを構成します。次のいずれかの方法で、トピックのメッセージ ストレージ ポリシーを構成します。
  • リソース ロケーション制限(gcp.resourceLocations)の組織のポリシーの制約を使用して、メッセージ ストレージ ポリシーを設定します。
  • トピックの作成時にメッセージ ストレージ ポリシーを構成します。例:

    gcloud pubsub topics create TOPIC_ID \--message-storage-policy-allowed-regions=REGION1, REGION2

対象プロダクト
  • 組織ポリシー サービス
  • Pub/Sub
関連する NIST-800-53 コントロール
  • AC-3
  • AC-17
  • AC-20
関連する CRI プロファイル コントロール
  • PR.AC-3.1
  • PR.AC-3.2
  • PR.AC-4.1
  • PR.AC-4.2
  • PR.AC-4.3
  • PR.AC-6.1
  • PR.PT-3.1
  • PR.PT-4.1
関連情報

Dataflow ジョブの外部 IP アドレスをオフにする

Google コントロール ID DF-CO-6.1
実装 省略可
説明

Dataflow ジョブに関連する管理タスクとモニタリング タスクの外部 IP アドレスをオフにします。代わりに、SSH を使用して Dataflow ワーカー VM へのアクセスを構成します。

プライベート Google アクセスを有効にして、Dataflow ジョブで次のいずれかのオプションを指定します。

  • --usePublicIps=false--network=NETWORK-NAME
  • --subnetwork=SUBNETWORK-NAME

ここで

  • NETWORK-NAME: Compute Engine ネットワークの名前。
  • SUBNETWORK-NAME: Compute Engine サブネットワークの名前。
対象プロダクト
  • Compute Engine
  • Dataflow
関連する NIST-800-53 コントロール
  • SC-7
  • SC-8
関連する CRI プロファイル コントロール
  • PR.AC-5.1
  • PR.AC-5.2
  • PR.DS-2.1
  • PR.DS-2.2
  • PR.DS-5.1
  • PR.PT-4.1
  • DE.CM-1.1
  • DE.CM-1.2
  • DE.CM-1.3
  • DE.CM-1.4
関連情報

ファイアウォール ルールにネットワーク タグを使用する

Google コントロール ID DF-CO-6.2
実装 省略可
説明

ネットワーク タグは、Dataflow ワーカー VM などの Compute Engine VM に付加されるテキスト属性です。ネットワーク タグを使用すると、VPC ネットワーク ファイアウォール ルールと一部のカスタム静的ルートを特定の VM インスタンスに適用できます。Dataflow では、特定の Dataflow ジョブを実行するすべてのワーカー VM にネットワーク タグを追加できます。

対象プロダクト
  • Compute Engine
  • Dataflow
関連する NIST-800-53 コントロール
  • SC-7
  • SC-8
関連する CRI プロファイル コントロール
  • PR.AC-5.1
  • PR.AC-5.2
  • PR.DS-2.1
  • PR.DS-2.2
  • PR.DS-5.1
  • PR.PT-4.1
  • DE.CM-1.1
  • DE.CM-1.2
  • DE.CM-1.3
  • DE.CM-1.4
関連情報

コンテナ コントロール

これらの制御は、GKE 内のコンテナに適用されます。

コントロール プレーンへのアクセスを制限する

Google コントロール ID GKE-CO-1.1
実装 必須
説明

デフォルトでは、Google Kubernetes Engine(GKE)クラスタのコントロール プレーンとノードには、任意の IP アドレスからアクセスできる、インターネット上でルーティング可能なアドレスが割り当てられます。DNS ベースのエンドポイントを使用してプライベート クラスタを作成し、コントロール プレーンへのネットワーク アクセスを制限します。コントロール プレーンは Kubernetes クラスタの管理センターであり、インターネットに公開すると攻撃者の標的になりやすくなります。この構成により、コントロール プレーンがプライベートになり、インターネットから削除されます。

コントロール プレーンへのアクセスを制限すると、組織のプライベート ネットワーク内の信頼できるデバイスのみがクラスタを管理できるようになり、外部攻撃のリスクが大幅に軽減されます。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • SC-7
関連する CRI プロファイル コントロール
  • PR.AC-3.1
関連情報

最小権限のファイアウォール ルールを使用する

Google コントロール ID GKE-CO-1.2
実装 必須
説明

ファイアウォール ルールを作成する場合は、最小権限の原則に従って、必要な目的に限りアクセス権を付与します。可能な場合は、ファイアウォール ルールが GKE のデフォルトのファイアウォール ルールと競合しないようにしてください。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • AC-3
  • AC-4
  • AC-17
  • SC-7
関連情報

RBAC 向け Google グループを使用する

Google コントロール ID GKE-CO-1.3
実装 必須
説明

ロールベースのアクセス制御(RBAC)に Google グループを使用します。これにより、既存のユーザー アカウント管理プラクティスと連携することもできます。たとえば、社員が退職したときに、そのユーザーのアクセス権を取り消すことができます。RBAC 用 Google グループは、Identity and Access Management(IAM)と Google グループを使用してクラスタ アクセスを効率的に管理するのに役立ちます。これは、Google グループを使用するほとんどの組織に適しています。

対象プロダクト
  • Google Kubernetes Engine(GKE)
関連する NIST-800-53 コントロール
  • AC-2
関連する CRI プロファイル コントロール
  • PR.AC-1.1
関連情報

Shielded GKE Nodes を有効にする

Google コントロール ID GKE-CO-1.4
実装 必須
説明

クラスタ内のノードの暗号検証に Shielded GKE Nodes を有効にします。Shielded GKE Nodes は、強固で検証可能なノード ID と整合性を提供します。クラスタを作成または更新するときに、Shielded GKE Nodes を有効にします。可能な場合は、セキュアブートで Shielded GKE Node を使用して、ブートプロセス中にノード VM のブート コンポーネントも認証します。サードパーティの未署名のカーネル モジュールが必要な場合は、セキュアブートを使用しないでください。

クラスタを作成すると、Shielded GKE Nodes がデフォルトで有効になります。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • AC-3
  • AC-4
  • AC-17
  • SC-7
関連情報

containerd ランタイムで Container-Optimized OS を使用する

Google コントロール ID GKE-CO-1.5
実装 必須
説明

Container-Optimized OS を使用して、強化されたマネージド コンテナ OS を実装します。汎用オペレーティング システムには、コンテナの実行に不要なプログラムが多数含まれているため、攻撃者にとって不要なターゲットが大きくなります。Container-Optimized OS は、必要なものだけを含む最小限のロックダウンされたオペレーティング システムであるため、この攻撃対象領域を大幅に削減できます。マネージド OS として、Container-Optimized OS には Google によって自動的に適用されるセキュリティ パッチも含まれているため、重大な脆弱性が修正され、運用ワークロードが軽減されます。

Containerd を使用した Container-Optimized OS(cos_containerd)を含むイメージには、Kubernetes と直接統合されているメイン コンテナ ランタイムとして containerd が含まれています。containerd は Docker のコア ランタイム コンポーネントであり、Kubernetes Container Runtime Interface(CRI)のコア コンテナ機能を配信するように設計されています。これは、完全な Docker デーモンよりもはるかに簡潔なので、攻撃対象領域が小さくなります。

対象プロダクト
  • Container-Optimized OS
関連する NIST-800-53 コントロール
  • CM-7
  • SC-7
  • SC-38
  • SI-2
  • SI-7
関連する CRI プロファイル コントロール
  • PR.PT-3.1
関連情報

Workload Identity Federation for GKE を使用する

Google コントロール ID GKE-CO-1.6
実装 必須
説明

Workload Identity Federation for GKE を使用して、Google Kubernetes Engine(GKE)ワークロードから Google Cloud API への認証を安全に行います。Workload Identity Federation for GKE は、サービス アカウント キーを使用するよりも簡単で安全な方法です。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • IA-2
関連する CRI プロファイル コントロール
  • PR.AC-1.1
関連情報

GKE Sandbox を有効にする

Google コントロール ID GKE-CO-1.7
実装 必須
説明

GKE Sandbox を使用すると、セキュリティに新たなレイヤを追加し、信頼できないコードから Google Kubernetes Engine(GKE)クラスタノードのホストカーネルを保護できます。GKE Sandbox は、信頼できないワークロードや機密性の高いワークロードのワークロード分離を強化し、コンテナ エスケープ攻撃に対する保護レイヤを追加します。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • SC-39
関連する CRI プロファイル コントロール
  • PR.DS-1.1
関連情報

kubelet 読み取り専用ポートを無効にする

Google コントロール ID GKE-CO-1.9
実装 必須
説明

kubelet 読み取り専用ポート 10255 を無効にして、より安全なポート 10250 を使用します。Kubernetes は、このポートに対して認証や認可のチェックを行いません。kubelet は、より安全な認証済みのポート 10250 で同じエンドポイントにサービスを提供します。

GKE バージョン 1.26.4-gke.500 以降でのみ安全でない kubelet 読み取り専用ポートを無効にできます。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • AC-3
  • SC-7
関連情報

Namespace と RBAC を使用してクラスタ リソースへのアクセスを制限する

Google コントロール ID GKE-CO-1.10
実装 必須
説明

各チームと環境に個別の Namespace またはクラスタを作成して、Kubernetes への最小権限アクセスを実装します。アカウンタビリティとチャージバックのために、各 Namespace にコストセンターと適切なラベルを割り当てます。特に本番環境では、デベロッパーがアプリケーションのデプロイと管理に必要なレベルのアクセス権限のみを Namespace に付与します。ユーザーがクラスタに対して行う必要があるタスクをマッピングし、各タスクの実行に必要な権限を定義します。

Google Kubernetes Engine(GKE)に適した Identity and Access Management(IAM)ロールをグループやユーザーに割り当て、プロジェクト レベルでの権限を付与します。また、RBAC を使用してクラスタと Namespace レベルで権限を付与します。

対象プロダクト
  • GKE
  • IAM
関連する NIST-800-53 コントロール
  • AC-3
  • AC-4
  • AC-6
関連情報

Pod 間のトラフィックを制限する

Google コントロール ID GKE-CO-1.11
実装 必須
説明

デフォルトでは、クラスタ内のすべての Pod が相互に通信できます。ワークロードのニーズに応じて Pod 間通信を制御します。サービスへのネットワーク アクセスを制限することで、攻撃者によるクラスタ内での横移動の難易度を大幅に上げることができ、偶発的または意図的な DoS 攻撃に対してサービスをある程度は保護できます。

トラフィックを制御する方法は 2 つあります。

  • ロード バランシング、サービス認可、スロットリング、割り当て、指標などには、Cloud Service Mesh または Istio を使用します。
  • Kubernetes ネットワーク ポリシーを使用します。Kubernetes で公開されている基本的なアクセス制御機能をお探しの場合は、このオプションを選択します。
対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • AC-3
  • AC-4
  • SC-7
関連情報

アドミッション コントローラを使用してポリシーを適用する

Google コントロール ID GKE-CO-1.12
実装 必須
説明

アドミッション コントローラは、クラスタの使用方法を管理し、適用するプラグインです。アドミッション コントローラは、クラスタを強化するための多層防御アプローチの重要な部分であるため、Kubernetes の高度なセキュリティ機能の一部を使用できるようにします。デフォルトでは、Kubernetes の Pod は、必要とする以上の機能で動作します。アドミッション コントロールを使用して、Pod の機能をそのワークロードに必要な機能だけに制限します。

GKE は、明示的に付与された機能のみを使用して Pod を実行するように制限する制御手段を多数サポートしています。たとえば、フリート内のクラスタで Policy Controller を使用できます。Kubernetes には、個々のクラスタに Pod セキュリティ標準を適用できる PodSecurity アドミッション コントローラも組み込まれています。Policy Controller は、宣言型ポリシーを使用して GKE クラスタにセキュリティを大規模に適用し、検証できる GKE の機能です。

対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • CM-2
  • CM-3
  • CM-6
  • CM-7
関連情報

ワークロードの自己変更機能を制限する

Google コントロール ID GKE-CO-1.13
実装 必須
説明

特定の Kubernetes ワークロード(特にシステム ワークロード)には、自己変更の権限があります。たとえば、一部のワークロードは垂直方向に自動スケーリングされます。これは便利ですが、すでにノードを不正使用した攻撃者がクラスタ内でさらに攻撃を行う可能性があります。たとえば、攻撃者がノード上のワークロード自体を変更して、同じ Namespace 内に存在する、より権限の高いサービス アカウントとして実行するおそれがあります。

ワークロードに自分自身を変更する権限をデフォルトで付与しないでください。自己変更が必要な場合は、オープンソースの Gatekeeper ライブラリから NoUpdateServiceAccount などの Gatekeeper または Policy Controller の制約を適用して権限を制限します。これにより、いくつかの有用なセキュリティ ポリシーが提供されます。

ポリシーをデプロイする場合は、クラスタのライフサイクルを管理するコントローラがポリシーをバイパスできるようにします。コントローラは、クラスタのアップグレードの適用など、クラスタに変更を加える必要があります。たとえば、GKE に NoUpdateServiceAccount ポリシーをデプロイする場合は、制約で次のパラメータを設定する必要があります。

parameters: allowedGroups: - system:masters allowedUsers: - system:addon-manager
対象プロダクト
  • GKE
関連する NIST-800-53 コントロール
  • AC-3
  • CM-3
  • SI-7
関連情報

クラスタ構成をモニタリングする

Google コントロール ID GKE-CO-1.14
実装 必須
説明

クラスタ構成を監査し、定義した設定から逸脱がないかどうかを確認します。これらのベスト プラクティスで説明されている設定や、その他の一般的な構成ミスは、Security Command Center を使用して自動的に確認できます。

対象プロダクト
  • GKE
  • Security Command Center
関連する NIST-800-53 コントロール
  • SI-4
  • SI-5
  • RA-5
関連情報

Binary Authorization を適用する

Google コントロール ID BIN-CO-1.1
実装 必須
説明

Binary Authorization を使用して、信頼できるイメージが Google Kubernetes Engine(GKE)と Cloud Run にデプロイされるようにします。Binary Authorization を使用すると、検証済みの信頼できるコンテナ イメージのみをクラスタにデプロイできるようになり、ソフトウェア サプライ チェーンのセキュリティが強化されます。

対象プロダクト
  • GKE
  • Binary Authorization
  • Cloud Run
パス constraints/binaryauthorization.requireBinauthz
演算子 ==
  • True
関連する NIST-800-53 コントロール
  • SI-7
関連する CRI プロファイル コントロール
  • PR.DS-6.1
関連情報

次のステップ