Kubernetes のセキュリティ ポスチャー スキャンについて


このページでは、Kubernetes のセキュリティ ポスチャー スキャンについて説明します。これは、セキュリティ ポスチャー ダッシュボードの機能であり、Kubernetes ワークロードにおける一般的なセキュリティ構成の問題点、対処可能なセキュリティに関する公開情報、GKE Enterprise クラスタのアクティブな脅威を検出するものです。

Kubernetes のセキュリティ ポスチャー スキャンを有効にして使用するには、次のリソースをご覧ください。

Kubernetes のセキュリティ ポスチャー スキャンは次の機能を提供します。

料金

  • Standard ティア: GKE で追加料金なしで利用できます。
  • Advanced ティア: GKE Enterprise に含まれています。

Cloud Logging に追加されたエントリには、Cloud Logging の料金が適用されます。

ワークロード構成監査について

GKE にデプロイするワークロードには、攻撃対象領域を制限する、強化された構成を含める必要があります。クラスタ全体のワークロードの確認では、構成の問題がないか手動で大規模に確認するのが難しい場合があります。セキュリティ ポスチャー ダッシュボードを使用すると、複数のクラスタにまたがって実行されているワークロードの構成を自動的に監査し、スコア付きの結果と推奨事項を確認でき、セキュリティ ポスチャーを強化できます。

ワークロード構成監査では、デプロイされたワークロードを Pod セキュリティ標準のポリシーのサブセットと照合します。ワークロード構成監査は Google のインフラストラクチャ上で実行され、ノード上のコンピューティング リソースを使用しません。

ワークロード構成監査のメリット

  • すべてのワークロードにわたって構成に関する既知の問題を自動的に検出します。
  • セキュリティ ポスチャーを改善するための実用的な推奨事項を提供します。
  • Google Cloud コンソールで、構成に関する懸念の概要を確認できます。
  • Logging で懸念事項に関する監査証跡を確認できます。これにより、レポーティングとオブザーバビリティが改善されます。

ワークロード構成監査の仕組み

GKE は、デプロイされた対象のワークロードごとにワークロードの仕様を継続的にスキャンし、そのフィールドと値を基盤となるセキュリティ ポリシーで定義されているコントロールと比較します。たとえば、spec.containers.securityContext.privileged=true の Pod は、ベースライン Pod セキュリティ標準に違反しており、spec.securityContext.runAsNonRoot フィールドが false に設定されている Pod は制限付きの標準に違反しています。GKE がチェックするセキュリティ ポリシーのリストについては、ワークロード構成監査のチェック対象をご覧ください。

スキャンで問題が検出されると、GKE は組み込みのセキュリティ強化対策に基づいて、検出された問題の重大度を評価します。GKE が割り当てる重大度の評価により、すぐに対応すべき懸念事項を確認することができます。Google Cloud コンソールには、評価結果だけでなく、問題の解決に推奨される対応も表示されます。また、GKE はトレースと監査のために Cloud Logging にエントリを追加します。

ワークロード構成監査のチェック対象

懸念事項 フィールド 使用できる値 重大度

ホストの Namespace

ホストの Namespace を共有する Pod では、Pod プロセスがホストプロセスと通信してホスト情報を収集できるため、コンテナ エスケープが生じる可能性があります。

  • spec.hostNetwork
  • spec.hostIPC
  • spec.hostPID
  • 未定義または nil
  • false

特権コンテナ

特権コンテナを使用すると、ほぼ無制限のホストアクセスが許可されます。特権コンテナは Namespace をホストと共有します。また、特権コンテナには、コントロール グループ、seccomp、AppArmor、機能制限はありません。

  • spec.containers[*].securityContext.privileged
  • spec.initContainers[*].securityContext.privileged
  • spec.ephemeralContainers[*].securityContext.privileged
  • 未定義または nil
  • false

ホストポートへのアクセス

ホストポートが公開されているコンテナは、そのポートを使用するホストサービスへのネットワーク トラフィックをインターセプトしたり、ネットワーク アクセス制御のルール(NetworkPolicy のルールなど)をバイパスする可能性があります。

  • spec.containers[*].ports[*].hostPort
  • spec.initContainers[*].ports[*].hostPort
  • spec.ephemeralContainers[*].ports[*].hostPort
  • 未定義または nil
  • 0

デフォルト以外の機能

コンテナが、コンテナ エスケープを許容する可能性がある機能を割り当てています。

  • spec.containers[*].securityContext.capabilities.add
  • spec.initContainers[*].securityContext.capabilities.add
  • spec.ephemeralContainers[*].securityContext.capabilities.add
  • 未定義または nil
  • AUDIT_WRITE
  • CHOWN
  • DAC_OVERRIDE
  • FOWNER
  • FSETID
  • KILL
  • MKNOD
  • NET_BIND_SERVICE
  • SETFCAP
  • SETGID
  • SETPCAP
  • SETUID
  • SYS_CHROOT

ホストパス ボリュームのマウント

hostPath ボリュームは、ホストからファイルまたはディレクトリをマウントします。これらのボリュームには、コンテナ エスケープにつながる可能性のあるセキュリティ リスクが存在します。

spec.volumes[*].hostPath 未定義または nil

デフォルト以外の /proc マスク

デフォルトの /proc マウントタイプを使用すると、/proc 内の特定のパスがマスクされ、情報漏洩やコンテナ エスケープにつながる可能性のあるパスの公開が回避されます。デフォルト以外のタイプを使用すると、こうしたリスクが高くなります。

  • spec.containers[*].securityContext.procMount
  • spec.initContainers[*].securityContext.procMount
  • spec.ephemeralContainers[*].securityContext.procMount
  • 未定義または nil
  • デフォルト

安全ではない sysctls マスク

/proc/sys 仮想ファイル システムを使用して、安全でないカーネル パラメータを変更できるように Pod を構成できます。安全ではないパラメータは、Namespace の設定をサポートせず、Pod 間で影響を適切に分離しません。また、ノードの健全性に悪影響を及ぼす可能性があり、Pod が制限を超えてリソースを取得することを許容する場合があります。

spec.securityContext.sysctls[*].name
  • 未定義または nil
  • kernel.shm_rmid_forced
  • net.ipv4.ip_local_port_range
  • net.ipv4.ip_unprivileged_port_start
  • net.ipv4.tcp_syncookies
  • net.ipv4.ping_group_range

root 以外として実行

イメージの runAsUser ディレクティブまたは USER ディレクティブで root ユーザーを指定している場合は、コンテナを root ユーザーとして実行することを明示的に許可できます。root ユーザーとしての実行時に予防的なセキュリティ管理がないため、コンテナ エスケープのリスクが高くなります。

  • spec.securityContext.runAsNonRoot
  • spec.containers[*].securityContext.runAsNonRoot
  • spec.initContainers[*].securityContext.runAsNonRoot
  • spec.ephemeralContainers[*].securityContext.runAsNonRoot
true

権限昇格

実行時に権限昇格を許可するようにコンテナを明示的に構成できます。これにより、コンテナ内で作成されたプロセスは、set-user-id、set-group-id、または file 機能の実行可能ファイルを実行して、その実行可能ファイルで指定されている権限を取得できます。予防的なセキュリティ管理がないため、コンテナ エスケープのリスクが高くなります。

  • spec.containers[*].securityContext.allowPrivilegeEscalation
  • spec.initContainers[*].securityContext.allowPrivilegeEscalation
  • spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
false

制約を受けない AppArmor プロファイル

AppArmor による制約を受けないようにコンテナを明示的に構成できます。これにより、AppArmor プロファイルはコンテナに適用されないため、制約を受けません。予防的なセキュリティ管理が無効であるため、コンテナ エスケープのリスクが高くなります。

metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"] false

また、GKE は、次のいずれかのユーザーまたはグループを参照する RBAC RoleBinding または ClusterRoleBinding を確認します。

  • system:anonymous
  • system:authenticated
  • system:unauthenticated

これらのユーザーまたはグループを参照する RBAC バインディングが存在する場合、セキュリティ ポスチャー ダッシュボードに「事実上、匿名ユーザーに GKE クラスタへのアクセス権が付与されている」という検出結果(重大度: 中程度)が表示されます。これらのユーザーとグループは実質的に匿名であるため、RoleBinding または ClusterRoleBinding で使用しないでください。詳細については、デフォルトのロールとグループを使用しないをご覧ください。

セキュリティに関する公開情報の表示について

GKE で脆弱性が発見された場合、Google では脆弱性にパッチを適用し、脆弱性についてセキュリティに関する公開情報を公表します。識別、パッチ、タイムラインについては、GKE セキュリティ パッチをご覧ください。

セキュリティ ポスチャー ダッシュボードには、クラスタ、ワークロード、Standard モードのノードプールに影響するセキュリティに関する公開情報が表示されます。この機能は、セキュリティ ポスチャー ダッシュボードの Kubernetes セキュリティ ポスチャー機能の一部であり、Autopilot クラスタまたは Standard クラスタを作成すると自動的に有効になります。Kubernetes のセキュリティ ポスチャー スキャンを有効にするには、ワークロード構成の問題を自動的に監査するの手順を実施します。

Google Cloud コンソールには、影響を受けるクラスタ、バージョン、脆弱性を軽減するためのアップグレードの推奨パッチ バージョンなどが表示されます。この情報は、クラスタの Google Cloud リージョンまたはゾーンで緩和策を利用できる場合にのみ表示されます。

Kubernetes のセキュリティ ポスチャー スキャンに登録したクラスタの情報を表示するには、セキュリティ ポスチャー ダッシュボードに移動します。

セキュリティ対策に移動

環境に影響する公開情報はすべて、[セキュリティに関する公開情報] セクションに表示されます。

GKE Threat Detection について

GKE Threat Detection は、登録済みのクラスタの監査ログをスキャンしてアクティブな脅威を検出し、推奨される緩和対策を提供します。GKE Threat Detection は、Security Command Center の Event Threat Detection サービスを利用しています。詳細については、GKE Enterprise のドキュメントの GKE Threat Detection についてをご覧ください。

次のステップ