Overview
Kubernetesセキュリティとは、コンテナオーケストレーションプラットフォームであるKubernetes(K8s)環境において、クラスタ、ノード、Pod、コンテナの各レイヤーにわたってセキュリティを確保するための包括的な取り組みです。Kubernetesは大規模なコンテナ運用を自動化する強力なツールですが、その複雑なアーキテクチャは多くの攻撃対象面を生み出します。
Kubernetesのセキュリティは、4C(Cloud、Cluster、Container、Code)のセキュリティモデルに基づいて多層的に考える必要があります。クラウドインフラの設定、クラスタコンポーネントの保護、コンテナイメージの安全性、アプリケーションコードの品質のすべてが、環境全体のセキュリティに直結します。いずれか一つの層が侵害されれば、他の層にも影響が及ぶ可能性があります。
特にKubernetesでは、API Serverが全操作の中心であるため、API Serverへのアクセス制御、認証・認可の適切な設定、監査ログの取得が極めて重要です。また、マネージドKubernetesサービス(EKS、GKE、AKS)を利用する場合でも、ワークロードレベルのセキュリティはユーザーの責任であり、共有責任モデルの理解が不可欠です。
Details
RBAC(ロールベースアクセス制御)
KubernetesのRBACは、クラスタ内のリソースに対するアクセス権限を細かく制御する仕組みです。Role(名前空間スコープ)とClusterRole(クラスタスコープ)でアクセス権限のルールを定義し、RoleBindingとClusterRoleBindingでユーザーやサービスアカウントに紐づけます。
RBACの設計では最小権限の原則が重要です。すべてのリソースへのアクセスを許可するワイルドカード(*)の使用を避け、必要なリソースタイプと操作(get、list、watch、create、update、delete)のみを明示的に許可するべきです。特にcluster-adminロールの付与は厳格に管理し、定期的な権限の棚卸しを実施してください。
Pod Security Standards
Pod Security Standards(PSS)は、Kubernetes 1.25以降で正式導入されたPodのセキュリティプロファイルです。Privileged(制限なし)、Baseline(既知の特権エスカレーションの防止)、Restricted(最も厳格なセキュリティプラクティス)の3段階のセキュリティレベルが定義されています。
PSS以前に使われていたPodSecurityPolicy(PSP)はKubernetes 1.25で廃止されました。新規クラスタではPod Security Admissionを利用し、名前空間ごとにenforce(違反を拒否)、audit(監査ログに記録)、warn(警告を表示)のモードで適用します。本番環境では少なくともBaselineレベルの適用が推奨されます。
ネットワークポリシー
KubernetesのNetworkPolicyは、Pod間およびPodと外部との通信を制御するファイアウォールルールです。デフォルトでは、同一クラスタ内のすべてのPodが相互に通信可能(フラットネットワーク)であるため、NetworkPolicyを適用して不要な通信を遮断することが不可欠です。
NetworkPolicyはCNIプラグイン(Calico、Cilium、Weave Netなど)によって実装されます。デフォルト拒否ポリシーを設定した上で、必要な通信のみをホワイトリスト形式で許可するアプローチが推奨されます。Ciliumを使用する場合は、L7レベル(HTTP、gRPC)での詳細なポリシー制御も可能です。
Secretsの管理
Kubernetes Secretsは、パスワード、トークン、証明書などの機密情報を管理するためのリソースです。しかし、デフォルトではSecretsはBase64エンコードされるだけで暗号化されていません。etcd(Kubernetesのデータストア)に平文で保存されるため、etcdへの不正アクセスにより機密情報が漏洩するリスクがあります。
etcdの保存時暗号化(Encryption at Rest)を有効化し、KMS(Key Management Service)と統合することで、Secretsをより安全に管理できます。さらに、External Secrets OperatorやHashiCorp Vaultとの連携により、外部のシークレット管理システムとKubernetesを統合する方法も広く採用されています。
監査ログとモニタリング
KubernetesのAudit Loggingは、API Serverに対するすべてのリクエストを記録し、誰が・いつ・何を・どのように操作したかを追跡できます。監査ポリシーにより、記録するイベントのレベル(None、Metadata、Request、RequestResponse)を制御可能です。
監査ログは、不正アクセスの検出、インシデント調査、コンプライアンス対応に不可欠です。Prometheus、Grafana、Falcoなどのツールと組み合わせることで、リアルタイムの異常検知とアラートを実現できます。
Security Measures
- 01RBACの最小権限設定と定期的な棚卸し:すべてのユーザーとサービスアカウントに対して、業務に必要な最小限の権限のみを付与してください。cluster-adminロールの使用を厳格に制限し、不要なRoleBinding/ClusterRoleBindingを定期的に検出・削除しましょう。
- 02Pod Security Standardsの適用:すべての名前空間にPod Security Admissionを設定し、少なくともBaselineレベルを強制適用してください。特権コンテナの実行、HostPIDやHostNetworkの使用、root実行を制限するRestrictedレベルの導入を段階的に進めましょう。
- 03NetworkPolicyによるマイクロセグメンテーション:デフォルト拒否ポリシーを全名前空間に適用し、アプリケーション間で必要最小限の通信のみを許可するNetworkPolicyを定義してください。CalicoやCiliumなどのCNIプラグインを活用し、L3/L4レベルの制御を実施しましょう。
- 04Secretsの暗号化と外部管理:etcdの保存時暗号化を有効化し、AWS KMSやGoogle Cloud KMSとの統合でSecretsを暗号化してください。可能であればExternal Secrets OperatorやHashiCorp Vaultを導入し、機密情報の一元管理を実現しましょう。
- 05API Serverの保護と認証強化:API Serverへの匿名アクセスを無効化し、OIDC認証やクライアント証明書認証を導入してください。API Serverのエンドポイントはプライベートネットワーク内に配置し、インターネットからの直接アクセスを遮断しましょう。
- 06監査ログの有効化と継続的な監視:Kubernetes Audit Loggingを有効化し、すべてのAPI操作を記録してください。FalcoやPrometheus/Grafanaと統合して不審なAPIコール(大量のSecrets取得、RoleBindingの変更など)をリアルタイムで検知・アラートする体制を構築しましょう。
Incidents
📋 Tesla Kubernetesダッシュボード不正アクセス事件(2018年)
2018年、Teslaが使用するKubernetesダッシュボードがパスワード保護なしでインターネットに公開されていることが発見されました。攻撃者はダッシュボードを通じてKubernetesクラスタにアクセスし、AWS S3バケットに保存されたテレメトリデータなどの機密情報にもアクセス可能な状態でした。
攻撃者はコンテナリソースを利用して暗号通貨マイニングを実行しており、CPU使用率の異常上昇を回避するためリソース制限を低く設定するなど、検知を回避する高度な手法を用いていました。この事件により、Kubernetesの管理インターフェースに対する認証設定の重要性が広く認識されました。
📋 Kubernetesの重大な権限昇格脆弱性 CVE-2018-1002105
2018年、Kubernetesに重大な権限昇格脆弱性(CVE-2018-1002105、CVSS 9.8)が発見されました。この脆弱性により、通常のユーザーがKubernetes API Serverを介してkubeletに対する任意のリクエストを送信し、クラスタ全体の管理者権限を取得できる状態でした。
この脆弱性はKubernetesのWebSocket接続のアップグレード処理に存在し、認証済みの低権限ユーザーが接続ハイジャックを通じてkubelet APIに直接アクセスできるというものでした。影響範囲は広く、Kubernetes 1.0以降のすべてのバージョンが対象となり、すべてのクラウドプロバイダのマネージドサービスにも影響しました。
📋 Azureコンテナインスタンスのクロステナント脆弱性(2021年)
2021年、Palo Alto Networksの研究チームが「Azurescape」と呼ばれるAzure Container Instances(ACI)の脆弱性を発見しました。この脆弱性により、悪意のあるコンテナが他のテナントのコンテナに侵入し、データの窃取や改ざんが可能な状態でした。
この攻撃は、コンテナランタイム(runC)の古いバージョンに存在する既知の脆弱性を悪用してコンテナエスケープを実行し、マルチテナントのKubernetesクラスタ上で他顧客のコンテナにアクセスするものでした。Microsoftは報告を受けて速やかにパッチを適用し、影響を受けた顧客への通知とトークンのローテーションを実施しました。