このドキュメントでは、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 インスタンスを指定します。
|
| 対象プロダクト |
|
| パス | constraints/compute.vmCanIpForward |
| 演算子 | = |
| 値 |
|
| 型 | リスト |
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
VM のネストされた仮想化を無効にする
| Google コントロール ID | VPC-CO-6.6 |
|---|---|
| 実装 | 必須 |
| 説明 | compute.disableNestedVirtualization ブール値制約により、Compute Engine VM のハードウェア アクセラレーションによりネストされた仮想化が無効になります。 |
| 対象プロダクト |
|
| パス | constraints/compute.disableNestedVirtualization |
| 演算子 | Is |
| 値 |
|
| 型 | ブール値 |
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
VM の外部 IP アドレスを制限する
| Google コントロール ID | VPC-CO-6.2 |
|---|---|
| 実装 | 必須 |
| 説明 | 必要がない限り、パブリック IP アドレスを持つ Compute Engine インスタンスの作成を禁止します。 Compute Engine インスタンスに外部 IP アドレスが割り当てられないようにして、インターネットへの露出を大幅に減らします。外部 IP アドレスを持つインスタンスはすぐに検出され、自動スキャン、総当たり攻撃、脆弱性の悪用を試みる攻撃の直接の標的になります。代わりに、インスタンスでプライベート IP アドレスを使用し、Identity-Aware Proxy(IAP)トンネルや踏み台インスタンスなどの制御、認証、ロギングされたパスウェイを介してアクセスを管理します。 このデフォルト拒否の姿勢を採用することは、攻撃対象領域を最小限に抑え、ネットワークに対するゼロトラスト アプローチを適用するのに役立つ基本的なセキュリティのベスト プラクティスです。この制約は遡及的ではありません。 |
| 対象プロダクト |
|
| パス | constraints/compute.vmExternalIpAccess |
| 演算子 | = |
| 値 |
|
| 型 | リスト |
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
VM インスタンスに対して許可されている外部 IP アドレスを定義する
| Google コントロール ID | CBD-CO-6.3 |
|---|---|
| 実装 | 必須 |
| 説明 |
|
| 対象プロダクト |
|
| パス | compute.vmExternalIpAccess |
| 演算子 | = |
| 値 |
|
| 型 | リスト |
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
Cloud Run functions の VPC コネクタを必須にする
| Google コントロール ID | CF-CO-4.4 |
|---|---|
| 実装 | 必須 |
| 説明 |
|
| 対象プロダクト |
|
| パス | constraints/cloudfunctions.requireVPCConnector |
| 演算子 | = |
| 値 |
|
| 型 | ブール値 |
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
メッセージ ストレージ ポリシーの構成
| Google コントロール ID | PS-CO-4.1 |
|---|---|
| 実装 | 省略可 |
| 説明 | メッセージをグローバル Pub/Sub エンドポイントにパブリッシュすると、Pub/Sub は最も近い Google Cloud リージョンにメッセージを自動的に保存します。メッセージを保存するリージョンを制御するには、トピックにメッセージ ストレージ ポリシーを構成します。次のいずれかの方法で、トピックのメッセージ ストレージ ポリシーを構成します。
|
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
Dataflow ジョブの外部 IP アドレスをオフにする
| Google コントロール ID | DF-CO-6.1 |
|---|---|
| 実装 | 省略可 |
| 説明 | Dataflow ジョブに関連する管理タスクとモニタリング タスクの外部 IP アドレスをオフにします。代わりに、SSH を使用して Dataflow ワーカー VM へのアクセスを構成します。 プライベート Google アクセスを有効にして、Dataflow ジョブで次のいずれかのオプションを指定します。
ここで
|
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
ファイアウォール ルールにネットワーク タグを使用する
| Google コントロール ID | DF-CO-6.2 |
|---|---|
| 実装 | 省略可 |
| 説明 | ネットワーク タグは、Dataflow ワーカー VM などの Compute Engine VM に付加されるテキスト属性です。ネットワーク タグを使用すると、VPC ネットワーク ファイアウォール ルールと一部のカスタム静的ルートを特定の VM インスタンスに適用できます。Dataflow では、特定の Dataflow ジョブを実行するすべてのワーカー VM にネットワーク タグを追加できます。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
コンテナ コントロール
これらの制御は、GKE 内のコンテナに適用されます。
コントロール プレーンへのアクセスを制限する
| Google コントロール ID | GKE-CO-1.1 |
|---|---|
| 実装 | 必須 |
| 説明 | デフォルトでは、Google Kubernetes Engine(GKE)クラスタのコントロール プレーンとノードには、任意の IP アドレスからアクセスできる、インターネット上でルーティング可能なアドレスが割り当てられます。DNS ベースのエンドポイントを使用してプライベート クラスタを作成し、コントロール プレーンへのネットワーク アクセスを制限します。コントロール プレーンは Kubernetes クラスタの管理センターであり、インターネットに公開すると攻撃者の標的になりやすくなります。この構成により、コントロール プレーンがプライベートになり、インターネットから削除されます。 コントロール プレーンへのアクセスを制限すると、組織のプライベート ネットワーク内の信頼できるデバイスのみがクラスタを管理できるようになり、外部攻撃のリスクが大幅に軽減されます。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
最小権限のファイアウォール ルールを使用する
| Google コントロール ID | GKE-CO-1.2 |
|---|---|
| 実装 | 必須 |
| 説明 | ファイアウォール ルールを作成する場合は、最小権限の原則に従って、必要な目的に限りアクセス権を付与します。可能な場合は、ファイアウォール ルールが GKE のデフォルトのファイアウォール ルールと競合しないようにしてください。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
RBAC 向け Google グループを使用する
| Google コントロール ID | GKE-CO-1.3 |
|---|---|
| 実装 | 必須 |
| 説明 | ロールベースのアクセス制御(RBAC)に Google グループを使用します。これにより、既存のユーザー アカウント管理プラクティスと連携することもできます。たとえば、社員が退職したときに、そのユーザーのアクセス権を取り消すことができます。RBAC 用 Google グループは、Identity and Access Management(IAM)と Google グループを使用してクラスタ アクセスを効率的に管理するのに役立ちます。これは、Google グループを使用するほとんどの組織に適しています。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
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 がデフォルトで有効になります。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
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 デーモンよりもはるかに簡潔なので、攻撃対象領域が小さくなります。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
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 は、サービス アカウント キーを使用するよりも簡単で安全な方法です。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
GKE Sandbox を有効にする
| Google コントロール ID | GKE-CO-1.7 |
|---|---|
| 実装 | 必須 |
| 説明 | GKE Sandbox を使用すると、セキュリティに新たなレイヤを追加し、信頼できないコードから Google Kubernetes Engine(GKE)クラスタノードのホストカーネルを保護できます。GKE Sandbox は、信頼できないワークロードや機密性の高いワークロードのワークロード分離を強化し、コンテナ エスケープ攻撃に対する保護レイヤを追加します。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
kubelet 読み取り専用ポートを無効にする
| Google コントロール ID | GKE-CO-1.9 |
|---|---|
| 実装 | 必須 |
| 説明 | kubelet 読み取り専用ポート 10255 を無効にして、より安全なポート 10250 を使用します。Kubernetes は、このポートに対して認証や認可のチェックを行いません。kubelet は、より安全な認証済みのポート 10250 で同じエンドポイントにサービスを提供します。 GKE バージョン 1.26.4-gke.500 以降でのみ安全でない kubelet 読み取り専用ポートを無効にできます。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
Namespace と RBAC を使用してクラスタ リソースへのアクセスを制限する
| Google コントロール ID | GKE-CO-1.10 |
|---|---|
| 実装 | 必須 |
| 説明 | 各チームと環境に個別の Namespace またはクラスタを作成して、Kubernetes への最小権限アクセスを実装します。アカウンタビリティとチャージバックのために、各 Namespace にコストセンターと適切なラベルを割り当てます。特に本番環境では、デベロッパーがアプリケーションのデプロイと管理に必要なレベルのアクセス権限のみを Namespace に付与します。ユーザーがクラスタに対して行う必要があるタスクをマッピングし、各タスクの実行に必要な権限を定義します。 Google Kubernetes Engine(GKE)に適した Identity and Access Management(IAM)ロールをグループやユーザーに割り当て、プロジェクト レベルでの権限を付与します。また、RBAC を使用してクラスタと Namespace レベルで権限を付与します。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
Pod 間のトラフィックを制限する
| Google コントロール ID | GKE-CO-1.11 |
|---|---|
| 実装 | 必須 |
| 説明 | デフォルトでは、クラスタ内のすべての Pod が相互に通信できます。ワークロードのニーズに応じて Pod 間通信を制御します。サービスへのネットワーク アクセスを制限することで、攻撃者によるクラスタ内での横移動の難易度を大幅に上げることができ、偶発的または意図的な DoS 攻撃に対してサービスをある程度は保護できます。 トラフィックを制御する方法は 2 つあります。
|
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
アドミッション コントローラを使用してポリシーを適用する
| Google コントロール ID | GKE-CO-1.12 |
|---|---|
| 実装 | 必須 |
| 説明 | アドミッション コントローラは、クラスタの使用方法を管理し、適用するプラグインです。アドミッション コントローラは、クラスタを強化するための多層防御アプローチの重要な部分であるため、Kubernetes の高度なセキュリティ機能の一部を使用できるようにします。デフォルトでは、Kubernetes の Pod は、必要とする以上の機能で動作します。アドミッション コントロールを使用して、Pod の機能をそのワークロードに必要な機能だけに制限します。 GKE は、明示的に付与された機能のみを使用して Pod を実行するように制限する制御手段を多数サポートしています。たとえば、フリート内のクラスタで Policy Controller を使用できます。Kubernetes には、個々のクラスタに Pod セキュリティ標準を適用できる PodSecurity アドミッション コントローラも組み込まれています。Policy Controller は、宣言型ポリシーを使用して GKE クラスタにセキュリティを大規模に適用し、検証できる GKE の機能です。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
ワークロードの自己変更機能を制限する
| Google コントロール ID | GKE-CO-1.13 |
|---|---|
| 実装 | 必須 |
| 説明 | 特定の Kubernetes ワークロード(特にシステム ワークロード)には、自己変更の権限があります。たとえば、一部のワークロードは垂直方向に自動スケーリングされます。これは便利ですが、すでにノードを不正使用した攻撃者がクラスタ内でさらに攻撃を行う可能性があります。たとえば、攻撃者がノード上のワークロード自体を変更して、同じ Namespace 内に存在する、より権限の高いサービス アカウントとして実行するおそれがあります。 ワークロードに自分自身を変更する権限をデフォルトで付与しないでください。自己変更が必要な場合は、オープンソースの Gatekeeper ライブラリから NoUpdateServiceAccount などの Gatekeeper または Policy Controller の制約を適用して権限を制限します。これにより、いくつかの有用なセキュリティ ポリシーが提供されます。 ポリシーをデプロイする場合は、クラスタのライフサイクルを管理するコントローラがポリシーをバイパスできるようにします。コントローラは、クラスタのアップグレードの適用など、クラスタに変更を加える必要があります。たとえば、GKE に NoUpdateServiceAccount ポリシーをデプロイする場合は、制約で次のパラメータを設定する必要があります。 parameters: allowedGroups: - system:masters allowedUsers: - system:addon-manager |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
クラスタ構成をモニタリングする
| Google コントロール ID | GKE-CO-1.14 |
|---|---|
| 実装 | 必須 |
| 説明 | クラスタ構成を監査し、定義した設定から逸脱がないかどうかを確認します。これらのベスト プラクティスで説明されている設定や、その他の一般的な構成ミスは、Security Command Center を使用して自動的に確認できます。 |
| 対象プロダクト |
|
| 関連する NIST-800-53 コントロール |
|
| 関連情報 |
Binary Authorization を適用する
| Google コントロール ID | BIN-CO-1.1 |
|---|---|
| 実装 | 必須 |
| 説明 | Binary Authorization を使用して、信頼できるイメージが Google Kubernetes Engine(GKE)と Cloud Run にデプロイされるようにします。Binary Authorization を使用すると、検証済みの信頼できるコンテナ イメージのみをクラスタにデプロイできるようになり、ソフトウェア サプライ チェーンのセキュリティが強化されます。 |
| 対象プロダクト |
|
| パス | constraints/binaryauthorization.requireBinauthz |
| 演算子 | == |
| 値 |
|
| 関連する NIST-800-53 コントロール |
|
| 関連する CRI プロファイル コントロール |
|
| 関連情報 |
次のステップ
データ管理コントロールを確認する。