コンテンツに移動
Containers & Kubernetes

Google Kubernetes Engine 上で Ray のセキュリティを確保する方法

2024年4月4日
Google Cloud Japan Team

※この投稿は米国時間 2024 年 3 月 22 日に、Google Cloud blog に投稿されたものの抄訳です。

開発者がイノベーションを急速に進めているとき、セキュリティは後回しになりがちです。これは AI / ML ワークロードでも同様で、貴重なモデルやデータを保護しようとする組織にとって高いリスクとなり得ます。

AI ワークロードを Google Kubernetes EngineGKE)にデプロイすると、Google Cloud インフラストラクチャで利用可能な多くのセキュリティ ツールのメリットが得られます。このブログ投稿では、AI / ML トレーニング ワークロードのセキュリティに関する知見とセキュリティ強化手法について、特に Ray というフレームワークを使用する場合に焦点を絞って説明します。

Ray にはセキュリティの強化が必要

AI アプリケーションの分散型コンピューティング フレームワークである Ray は、近年人気の高まりを見せており、よく GKE にデプロイして使用されますが、これは柔軟性と構成可能なオーケストレーションが提供されるという利点があるからです。Ray GKE を使用することを Google がおすすめする理由の詳細をぜひご覧ください。

ただし、Ray には認証と認可のメカニズムが組み込まれておらず、ユーザーが Ray のクラスタヘッドにリクエストを送信できた場合、ユーザーに代わって、そのクラスタヘッドが任意のコードを実行してしまうという問題があります。

では、Ray のセキュリティを確保するにはどうすればよいでしょうか。Ray のドキュメントには、セキュリティを Ray クラスタの外部で適用すべきだと書かれていますが、実際にどうやってセキュリティを強化すればよいのでしょうか。Ray GKE 上で実行すると、Identity-Aware ProxyIAP)などの Google の既存のグローバル インフラストラクチャ コンポーネントを活用して、より安全でスケーラブルな信頼性の高い Ray のデプロイを達成できます。

Google Cloud は、KubeRay を使用して Kubernetes Ray を実行するためのより安全なデフォルトを設定することにおいても、Ray コミュニティで重要な役割を果たしています。特に重点を置いているのが、制限付きの Pod Security Standards プロファイルに対する Ray コンポーネントの準拠状況を改善し、オペレーターを root 以外で実行するなどのセキュリティ上のベスト プラクティスを追加することにより、権限昇格を防止することです。  

セキュリティの分離でマルチクラスタ運用をサポート

Kubernetes 内で Ray を実行する主要な利点の一つは、1 つの Kubernetes クラスタ内で、複数のチームが管理する多様なワークロードの Ray クラスタを複数実行できることです。これにより、アクセラレータを備えたノードを複数のチームが使用できるため、より効果的にリソースを共有、利用でき、既存の GKE クラスタ上で Ray をスピンアップすることで、VM のプロビジョニングを待たずにワークロードが実行を開始できます。

Kubernetes のセキュリティ機能を使用して Ray クラスタを分離することで、これらのマルチクラスタの利点を活かす際に、セキュリティが補助的な役割を果たします。分離する目的は、偶発的なサービス拒否攻撃や偶発的なテナント間のアクセスを回避することです。ここで説明しているセキュリティの分離は、強固なマルチテナンシーではなく、信頼できるコードを実行するクラスタと、お互いのデータを信頼し合っているチームに十分な程度のものです。さらに分離が必要な場合は、個別の GKE クラスタを使用することを検討してください。

次の図にアーキテクチャを示します。GKE クラスタ内では異なる Ray クラスタは Namespaceで分離されるため、認証されたユーザーは、他のクラスタにアクセスすることなく、割り当てられた Ray クラスタを呼び出すことができます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Hardening_Ray_on_GKE_-_blog_diagram.max-2200x2200.jpg

図: GKE 上の Ray のアーキテクチャ

GKE 上の Ray のセキュリティを確保する方法

Google Cloud は、KubeRay コンポーネントのセキュリティの向上に取り組んでおり、再利用可能なサンプル セキュリティ構成を含む Terraform テンプレートを使用して、複数チームの環境をより簡単にスピンアップできるようにしています。

以下に、サンプル テンプレートに含まれているセキュリティに関する基本的なベスト プラクティスをまとめます。

  • Namespace: Namespace ごとに 1 つの Ray クラスタを配置して Ray クラスタを異なる Namespace に分離し、Namespace の境界に基づく Kubernetes ポリシーを活用します。

  • ロールベース アクセス制御(RBAC: Ray クラスタがある Namespace ごとに Kubernetes サービス アカウント(KSA)を作成して、最小権限の原則を実践します。Ray クラスタがある各 Namespace に関連付けられているデフォルトの KSA は使用せず、必要になるまでは、権限を RoleBinding なしにまで最小化します。また、Ray ジョブが Kubernetes API を呼び出すことは想定されていないので、必要に応じて KSA automountServiceAccountToken:false を設定し、KSA のトークンが Ray クラスタ Pod で使用されないようにします。

  • リソースの割り当て: Ray クラスタがある Namespace で(特に CPUGPUTPU、メモリに対する)リソースの割り当て制限を設定して、リソースの枯渇によるサービス拒否攻撃が発生しないようにします。

  • NetworkPolicy: ジョブを送信するための認証や認可がないため、重要な Ray セキュリティ対策として Ray API を保護します。GKE Dataplane V2 Kubernetes NetworkPolicy を使用して、Ray コンポーネントに到達するトラフィックを制御します。

  • セキュリティ コンテキスト: 強化した設定を使用して実行されるように Pod を構成して、権限昇格や root としての実行を防止し、危険な可能性があるシステムコールを制限することにより、Kubernetes Pod Security Standards に準拠するようにします。

  • Workload Identity 連携: 必要に応じて Google Cloud IAM ポリシーの KSA を活用して、Ray Deployment Pod から Cloud Storage などの他の Google Cloud サービスへのアクセスを Workload Identity 連携で保護します。

その他のセキュリティ ツール

以下のツールと参考資料を活用すると、GKE 上の Ray クラスタのセキュリティを強化できます。

  • Identity-Aware PolicyIAP: IAP を搭載した Google の分散型グローバル エンドポイントで Ray クラスタへのアクセスを制御します。また、Kubernetes Ingress または Gateway サービスとしてデプロイされた Ray でユーザー認証およびグループ認証を提供します。

  • Pod Security StandardsPSS: Namespace Pod Security Standards を有効にし、HostVolume マウントなどのよくある安全でない構成ミスを防止します。さらにポリシーをカスタマイズする必要がある場合は、Policy Controller も使用できます。

  • GKE Sandbox: gVisor に基づく GKE Sandbox Pod を利用して、Pod の周囲に第 2 のセキュリティ層を追加し、Ray クラスタでブレイクアウトが発生する可能性を低減します。これは現在のところ、CPU(およびいくつかの制限付き GPU)でご利用いただけます。

  • クラスタのセキュリティの強化: デフォルトで、GKE Autopilot によりクラスタのセキュリティを強化するためのベスト プラクティスがすでに多く適用されていますが、クラスタへのアクセスを制限する方法は他にもいくつかあります。プライベート ノードを使用してインターネットからのアクセス権を削除すると、Ray API のセキュリティを強化できます。

  • 組織のポリシー: すべての GKE クラスタを確実に Autopilot にするなどのカスタム組織ポリシーを設定して、組織のクラスタがセキュリティと強化基準を満たすようにします。

Google は、安全でスケーラブルなデプロイを実現するための取り組みを通じて、コミュニティへの貢献を続けています。今後も、Ray Kubernetes クラスタで安全に実行できるよう、コラボレーションを継続していきたいと考えています。フィードバックがございましたら、ray-on-gke@google.com までご連絡いただくか、GitHub リポジトリにコメントしてください。

詳しくは以下のリソースをご覧ください。

-セキュリティ エンジニア Bill Bernsen

-プロダクト マネージャー Cynthia Thomas

投稿先