Ready to Boost Your Startup? Click to Start Up Your Free Subscription!

セキュリティ

混沌から秩序へ: マルチクラウドKubernetesアクセス制御の革新

Authored by Sam Kim

November 22, 2024

はじめに

Kubernetesは、アプリケーションのデプロイおよび管理において強力なオーケストレーションツールです。私は、Search Service、MLOps、API Gatewayなど、さまざまなシステムを Kubernetesクラスターで開発および運用してきた経験から、Kubernetesがアプリケーションを簡単にデプロイし、管理できることを確認しました。Kubernetesは宣言型の構造を採用しており、リソースの状態を自動的に維持し、クラスターの状態を常に監視してアプリケーションを適切なノードにスケジュールするため、デプロイと運用が便利であり、自動化も非常に容易です。また、モニタリング、CICD、認証、ワークフローなどのさまざまなエコシステムが整っており、サービス環境の構築に非常に適しています。

しかし、運用規模が大きくなるにつれて、特にマルチクラウドのような複雑な環境で複数のクラスターを管理または使用する際には、Kubernetesに対する深い理解が必要となります。各クラスターに対するユーザーアクセス制御やセキュリティ管理においてさまざまな課題が発生します。この記事では、複数のKubernetesクラスターを運用する際に直面した問題点と、それらを解決するための方法を共有したいと思います。

Kubernetes運用時の課題

Kubernetesはアプリケーションのデプロイや自動化において便利で効率的ですが、実際の運用ではKubernetesに依存する部分が大きいにもかかわらず、担当者のKubernetesに対する理解が不足していることが多いため、問題が発生した際に困難を伴うことがよくあります。

Kubernetes Innovation

1. Kubernetesの理解不足と専任組織の不在

Kubernetesはコンテナベースのプラットフォームで、アプリケーションとインフラの間で中間層として機能します。しかし、Kubernetes専任の組織や専門的な人材が不足している場合、従来のインフラ、アプリケーション、セキュリティ管理の役割と責任が明確に定義されていないことから、混乱が生じることがあります。その結果、Kubernetesをインストールした担当者がほとんどの運用負担を抱えることになり、十分な理解がないままで運用を行うと、セキュリティ脆弱性が露呈したり、障害対応が遅れるなどの問題が発生する可能性が高くなります。

  • 権限設定の漏れと誤り
    • 他のチームのnamespaceのリソースにアクセスしたり、誤って削除してしまう事故が発生する可能性があります。
  • ログとイベント設定の漏れ
    • 異常なリクエストやアクティビティを検出できず、セキュリティインシデントにつながったり、障害の発生が遅れる可能性があります。

2. 管理者 Kubeconfig ファイルの管理問題

Kubeconfigファイルは、クラスター認証情報、API サーバーの URL、ユーザー証明書など、セキュリティ上重要なデータを含んでいます。Kubernetes はユーザー情報を内部で保存しないため、アクセス認証には管理者 Kubeconfig ファイルが必要です。

  • 共有の問題
    • 複数のユーザー間で管理者Kubeconfigファイルを共有すると、その認証情報が不特定多数に公開され、クラスターアクセス権限が広がり、意図しないコマンドの実行やデータの漏洩、クラスター全体の制御喪失につながる可能性があります。
  • 役割とコンテキストの混乱
    • Kubeconfigファイルには複数のクラスターに関する証明書が含まれることがあり、クラスターを確認して選択せずにコマンドを実行すると、間違ったクラスターで作業を行うリスクがあります。これにより、開発作業が本番環境で誤って実行されたり、重要なリソースが削除されるなどの危険な状況が発生する可能性があります。
  • ファイル保管の問題
    • KubeconfigファイルがユーザーのPCのローカルディスクに平文で保存されている場合、攻撃者がファイルを盗んだり、誤ってファイルが漏洩することでセキュリティインシデントにつながるリスクがあります。 

3. 多数のクラスター管理の困難

マルチクラウド環境では、パブリッククラウドの Kubernetesサービス(EKS、AKS、GKEなど)とオンプレミスのKubernetesクラスターが混在して運用されることが多いです。これらの環境で発生する技術的な問題は以下の通りです。

  • ポリシー管理の一貫性の欠如
    • 各クラスターごとにRBAC(Role-Based Access Control)ポリシーを独立して設定する必要があり、ポリシー間で不一致が発生する可能性があります。例えば、開発クラスターでは特定のユーザーが制限された権限しか持たない一方で、本番クラスターでは同じユーザーが過剰な権限を持っているなど、ポリシーの漏れや誤設定の問題が発生することがあります。
  • 証明書管理の困難
    • クラスターごとに証明書の有効期限を追跡し、更新作業を手動で行う必要があるため、更新の遅延や漏れが発生する可能性が高いです。これにより、APIサーバーへのアクセスが制限されたり、突然サービスが中断する事態が発生することがあります。
  • 新規クラスター追加時の複雑さ
    • 新しいクラスターを追加する際に、すべてのユーザーに対してKubeconfigファイルを発行し、認証書やRBACポリシーを更新・検証するなど、多くの管理作業が必要となります。

4. 過剰権限による障害事例

Kubernetesは基本的にcluster-adminのような広範な権限を提供しており、これを細分化して管理しないと、過剰権限による問題や副作用が発生する可能性があります。

  • 広範なアクセス権限
    • 特定のユーザーがcluster-admin権限を持つと、すべてのnamespaceの機密リソースにアクセスできるだけでなく、Kubernetesの主要コンポーネントが配置されている kube-system namespaceにも制御権を持つことになります。例えば、誤って kube-system内のすべてのコンポーネントを削除した場合、Kubernetesクラスター全体がダウンする可能性があります。
  • 役割分離の失敗
    • 開発環境と運用環境で同じ過剰な権限が与えられた場合、運用環境を開発環境と誤認し、危険なコマンドを誤って実行する状況が発生する可能性があります。
  • 権限の濫用
    • 退職や職務変更などでユーザー権限の回収が適切に行われない場合、そのアカウントの権限が無断または悪意で使用される可能性があります。

5. 監査管理とセキュリティ規制要件遵守の困難

監査ログはクラスター内で発生するすべてのユーザーアクティビティを追跡するために非常に重要なデータです。しかし、デフォルト設定では監査ログの管理が適切に行われず、次のような問題が発生します。

  • ユーザー識別不可
    • Kubernetesはデフォルトでユーザーデータを管理しないため、イベントからユーザーを識別できません。
  • ポリシー設定の複雑さ
    • 監査ポリシーを構成しないと、クラスターイベントが記録されません。また、重要なイベント(例:Secretアクセス、API呼び出し失敗など)が欠落する可能性があります。ポリシーが適切に設定されていないと、特定のイベント(例:不正アクセス試行)を検出できず、セキュリティ脅威をタイムリーにブロックできないことがあります。
  • ログ分析と保存の問題
    • デフォルトでは監査ログはKubernetesの各マスターノード(基本3台)のディスクに保存され、中央集約されません。そのため、すべてのマスターノードからログファイルを集めて分析する必要があり、クラスターが複数ある場合、ログの収集と分析がさらに難しくなります。
  • 規制遵守の困難
    • GDPR、ISO 27001/27017、NISTなどの規制要件により、監査ログの長期保存と分析が求められますが、Kubernetesのデフォルト構成ではこれらの要件を満たすことができず、複数のクラスター間で一貫したログ保持ポリシーを適用するのは難しいです。

問題解決策

Kubernetesの運用における効果的な管理とセキュリティの問題を解決するために必要な主要な解決策を整理しました。これらの解決策は、マルチクラウド環境における安全な認証とアクセス制御、権限管理、監査ポリシーの一貫した適用を通じて、運用効率を高め、安定性を強化することを重視しています。

Kubernetes Innovation

1. 企業ユーザー/組織情報との統合によるKubernetes認証の強化

LDAP、AD、OktaなどのIdP(Identity Provider)システムと連携することで、ユーザーの認証とアクセス権限を中央で管理し、セキュリティと利便性を強化できます。

  • 動的ユーザー認証: ユーザーがIdPを通じてログインすると、一時的な認証情報が発行され、Kubeconfigファイルの漏洩リスクを最小限に抑えることができます。
  • 組織構造と役割のマッピング: ユーザーグループごとに役割(Role)を定義し、namespaceやリソースに対するアクセス権を細かく設定します。
  • アカウント管理の自動化: 新しい従業員には自動的に権限を付与し、退職者のアクセス権は即座に回収するよう、IdPと連携してアカウントを管理します。
  • マルチクラスター統合認証: 単一の認証体制を通じて、すべてのクラスターに一貫したアクセス方法を提供します。

2. RBAC/ABACに基づいた細かいアクセス制御

KubernetesのRBAC(Role-Based Access Control)およびABAC(Attribute-Based Access Control)を活用し、アクセス権限を細かく制御する必要があります。これにより、不必要な権限を削除し、セキュリティと運用効率を向上させることができます。

  • namespace単位の役割定義: 各namespaceについて特定の役割(Role)を定義し、チームごとにリソースアクセスを制限します。
    • 例:開発チームはdev namespace、運用チームはprod namespaceのみアクセス可能。
  • リソース単位でのアクセス制限: Pod、Secret、ConfigMapなどの特定のリソースに対して、必要な操作(読み取り、書き込み、削除)のみを許可します。
    • 例:データベース管理者はSecretの読み取り権限のみを持ち、修正や削除は制限されます。
  • Pod セキュリティポリシーの適用: Podの実行時にセキュリティ要件(例えば、privileged: false、イメージ署名の確認など)を適用し、セキュリティを強化し、個別のPodに対してもアクセス制御と監視を行います。
  • 条件付きアクセス制御: ABACを活用し、特定の時間帯やネットワーク範囲など、ユーザーコンテキストに基づいてアクセスを制御します。

3. 異なる環境でのマルチクラスター統合管理

マルチクラスター環境では、パブリッククラウド(EKS、AKS、GKE)とオンプレミス環境が混在し、管理の複雑さが増します。この環境を解決するために、すべてのクラスターを統合的に管理し、ポリシーと権限を一貫して適用することが求められます。

  • 中央管理ダッシュボード: すべてのクラスターの状態(リソース使用量、ネットワーク状態、主要なイベント)をリアルタイムで監視し、運用効率を強化します。
  • ポリシーの一貫性を維持: RBACおよびネットワークポリシーを中央で定義し、すべてのクラスターに一貫して適用することで、設定ミスを防ぎます。
  • 権限変更の中央化: ユーザー権限の変更を中央で管理し、すべてのクラスターにリアルタイムで同期します。
  • アクセス記録および監査管理: ユーザーの作業履歴をクラスターごとに記録し、異常な作業パターンをリアルタイムで検出し、問題を迅速に追跡します。

4. 監査ログおよび中央集約された監査ポリシー管理

複数のクラスターの監査ログを中央で集約し、ポリシーを一貫して設定することで、セキュリティインシデントを追跡し、規制遵守をサポートします。

  • 中央集約ログストレージ: すべてのクラスターの監査ログ(Podの作成、削除、Secret のアクセス試行など)を中央ストレージに統合し、分析および管理します。
  • 監査ポリシーの標準化: すべてのクラスターで同じログ収集および分析ポリシーを適用し、管理の効率を高めます。
  • リアルタイムログ監視およびアラート: リアルタイムのログ分析を通じて、不正なアクセスや設定変更が発生した場合、即座にアラートを生成します。
  • 規制遵守データの提供: GDPR、ISO 27001 などの主要な規制要件を満たすために必要なデータを体系的に管理します。

5. Kubernetesリクエストに対するリアルタイム検証

Kubernetesのリソース作成、削除、更新リクエストをリアルタイムで検証し、セキュリティおよび運用ポリシーに適合しないリクエストを事前にブロックします。

  • リソース検証: ユーザーがリクエストしたリソース(Pod、Deployment など)の設定がセキュリティおよび運用ポリシーに一致しているか確認します。
    • 例:コンテナイメージが信頼できるレジストリから取得されているかを検証します。
  • 権限超過リクエストのブロック: ユーザーの権限で実行できないリクエスト(例:権限外リソースの削除試行)を即座にブロックします。
  • ポリシーの自動化: リソース作成時に運用標準に従って適切なラベル、アノテーション、リソース制限などを自動で適用できるように設定します。
  • Pod 接続監視: Podターミナルアクセス時にリアルタイムでセッションを記録します。

QueryPie KAC(Kubernetes Access Controller)ソリューションと導入効果

QueryPieチームは、Kubernetesの運用とセキュリティの問題を実際に解決するソリューションを開発しました。主な機能は以下の通りです。

  • 企業ユーザー/組織情報との連携
  • RBAC/ABACに基づいた細かなアクセス制御
  • 様々な環境でのマルチクラスター統合管理
  • 監査ログと中央集約された監査ポリシー管理
  • Kubernetesリクエストに対するリアルタイム検証
Kubernetes Innovation

1. 最小権限アクセス制御によるセキュリティ強化

導入前の課題:

  • ユーザーごとの権限設定を手動で管理する必要があり、過剰または不足した権限設定が行われることが多かった。
  • 退職者のアカウント削除漏れや、不必要な権限の乱用などにより、セキュリティ事故のリスクが増加していた。
  • 特定のユーザーが必要以上のリソースにアクセスできる場合、機密データの漏洩の可能性があった。

導入後:

KACを使用することで、ユーザーごとに必要なクラスター、namespace、リソースレベルまで細かくアクセス制御を設定でき、セキュリティが強化され、権限の乱用リスクが減少しました。

2. マルチクラスター環境での一貫したセキュリティ管理

導入前の課題:

  • パブリッククラウドとオンプレミスなど、異なる環境でクラスターごとにセキュリティポリシーを個別に設定する必要があり、管理が複雑で非効率的だった。
  • クラスターごとのポリシーの不一致により、セキュリティ設定の一貫性が保てなかった。
  • マルチクラスター管理中に設定漏れが発生し、クラスター間でセキュリティ格差が生じるリスクがあった。

導入後:

パブリッククラウドおよびオンプレミスクラスターを含むマルチクラスター環境で統一されたセキュリティポリシーを適用し、管理効率を向上させ、管理負担を軽減しました。

3. 自動化されたKubeconfig管理

導入前の課題:

  • Kubeconfigファイルを手動で作成、配布、更新する必要があり、ユーザーや権限の変更時にこれをすべてのクラスターで繰り返し管理しなければならなかった。
  • 誤ったファイルの配布や更新漏れにより、アクセス問題が発生したり、権限が過剰に与えられるリスクがあった。
  • 作業に時間がかかり、ミスによる運用障害が発生する可能性が高かった。

導入後:

KACはIdPと連携し、従業員情報に基づいてKubeconfigファイルを自動作成・管理し、権限設定の一貫性を保ち、ミスや乱用のリスクを最小限に抑えます。

4. リアルタイムモニタリングと作業の透明性の確保

導入前の課題:

  • クラスター内で誰がどのような作業を行ったかを追跡するのが難しく、問題が発生しても原因の特定に時間がかかる。
  • 高リスク作業に対する事前検証や承認ができず、セキュリティ事故のリスクが増加していた。
  • オペレーターやユーザーの作業に対するリアルタイム監視や記録機能が不足していた。

導入後:

KACはIdPと連携し、従業員情報に基づいてKubeconfigファイルを自動作成・管理することで、権限設定の一貫性を保ち、ミスや乱用のリスクを最小限に抑えました。

5. セキュリティ規制遵守の支援

導入前の課題:

  • ユーザーの身元を効果的に確認できない、または不必要なリソースへのアクセスを許可し、規制遵守要件を満たさないリスクがあった。
  • Kubernetesのみではセキュリティ要件を満たすことが難しく、運用効率の低下やセキュリティ格差が生じていた。
  • 規制遵守のためにセキュリティシステムを逐一監査するのに時間とコストがかかっていた。

導入後:

KACはKubernetesセキュリティガイドラインに加えて、NIST、CIS、ISO 27001/27017、PCI-DSS、GDPRなどの主要なグローバルセキュリティ規制に準拠し、変化する規制にもKACを通じて効果的に対応し、遵守することを保証します。

終わりに

企業のシステム環境が、パブリッククラウド、プライベートクラウド、オンプレミスのレガシーシステムなど、さまざまな環境にまたがる中で、各環境におけるKubernetesの管理はますます複雑化しています。これらの環境には、それぞれ異なるインフラやネットワーク設定が要求され、クラスターごとに管理方法が異なるため、統合的な運用が難しくなります。その結果、開発、運用、インフラ、セキュリティなどのチーム間で協力の負担が増し、一貫したセキュリティやアクセス制御ポリシーの適用が困難になります。

要約すると、KAC(Kubernetes Access Controller)は以下の機能を提供します:

  • Kubernetesのユーザーアクセスを制御および監視し、不必要なリスクを軽減し、運用の安定性を向上させます。
  • Kubernetesの権限ポリシーを細かく、統合的に管理することが可能です。
  • 複雑な環境でリソースを安全かつ効率的に管理するためのサポートを行います。
  • 中央集約された監査ログを通じて、一貫したポリシー適用を実現します。

このブログが、マルチクラウド環境でのKubernetesのセキュリティおよびアクセス制御の重要性を理解する一助となれば幸いです。

3 Minutes to Wow !

Let us show you how QueryPie can transform the way you govern and share your sensitive data.

Take a Virtual Tour