Red Hat OpenShift on IBM Cloudのセキュリティー
Red Hat® OpenShift® on IBM Cloud® の標準装備のセキュリティー・フィーチャーをリスク分析とセキュリティー保護に使用できます。 これらのフィーチャーは、クラスター・インフラストラクチャーとネットワーク通信を保護し、コンピュート・リソースを分離し、インフラストラクチャー・コンポーネントとコンテナー・デプロイメントにおけるセキュリティー・コンプライアンスを確保するためのものです。
クラスターのセキュリティー脅威の概要
クラスターをセキュリティー侵害から保護するためには、想定されるクラスターのセキュリティー脅威と、脆弱性の露出を減らすためにできる対策について理解しておく必要があります。
- 外部攻撃
- クラスター、デプロイ済みリソース、アプリ、または個人情報にアクセスする攻撃者。
- 脆弱なデプロイメント
- 既知の脆弱性を悪用してクラウド環境にアクセスし、悪意のあるソフトウェアを実行する。
- データ漏えいまたはデータ消失
- 機密データの不適切な保存や暗号化の欠落。
- インサイダーと第三者ベンダー
- ネットワークの分離とセグメンテーションが欠けていると、正当なパーミッションが悪用される可能性がある。
企業のワークロードがパブリック・クラウドに移行され続けているために、ここ数年の間、クラウドのセキュリティーと、システム、インフラストラクチャー、データを攻撃から保護することが非常に重要になりました。 クラスターを構成する複数のコンポーネントのそれぞれが、悪意のある攻撃を受けるリスクに環境をさらす可能性を持っています。 これらのセキュリティーの脅威からクラスターを保護するには、すべてのクラスター・コンポーネント内で、Red Hat OpenShift on IBM Cloud、Red Hat OpenShift、および Kubernetes の最新のセキュリティー機能や更新プログラムを適用する必要があります。
これらのコンポーネントには以下のものがあります。
Red Hat OpenShift API サーバーと etcd
Red Hat OpenShift API サーバーと etcd データ・ストアは、Red Hat OpenShift マスターで実行される最も機密性の高いコンポーネントです。 これらのコンポーネントは、アプリケーションの一部のセキュリティー設定を含め、クラスター内で実行されるすべてのリソースの構成を設定および保管するため、無許可アクセスを禁止する必要があります。
Red Hat OpenShift は、これらのコンポーネントを保護し、サイバー攻撃のリスクを低減するために、セキュリティ制御とアクセス制限を提供する。
APIサーバーへのアクセスはどのように許可されますか?
Kubernetes ではデフォルトで、どの要求も複数の段階を経て初めて API サーバーへのアクセスを許可されるようになっています。
- 認証
- 登録済みユーザーまたはサービス・アカウントの ID を検証します。
- 許可
- 認証済みのユーザーおよびサービス・アカウントの許可を制限し、必要なクラスター・コンポーネントにのみアクセスして操作できるようにします。
- アドミッション制御
- 要求が Red Hat OpenShift API サーバーによって処理される前に、検証または変更します。 多くの Kubernetes 機能が正しく機能するためには、アドミッションコントローラーが必要です。
APIサーバーと etcd データストアを保護するために、 Red Hat OpenShift on IBM Cloud は何をしますか?
次の図は、認証、許可、アドミッション・コントロール、Kubernetes マスターとワーカー・ノードの間のセキュア接続に対応するクラスターのデフォルトのセキュリティー設定を示しています。
Red Hat OpenShift API サーバーおよび etcd の以下のセキュリティー機能を確認してください。
- 完全に管理される専用 Red Hat OpenShift マスター
-
Red Hat OpenShift on IBM Cloud に含まれるクラスターはすべて、IBM が所有する Red Hat OpenShift アカウントにおいて、IBM が管理する専用 IBM Cloud マスターによって制御されます。 Red Hat OpenShift マスターは、他の IBM のお客様とは共用されない、以下の専用コンポーネントを使用してセットアップされます。
- etcd データ・ストア:
Services
、Deployments
、Pods
などのクラスターのすべての Kubernetes リソースを保管します。 KubernetesConfigMaps
およびSecrets
は、ポッドで実行されるアプリで使用できるように、キー値ペアとして保管されるアプリ・データです。 etcd のデータは Red Hat OpenShift マスターのローカル・ディスクに保管され、IBM Cloud Object Storage にバックアップされます。 IBM Cloud Object Storage に転送中のデータも保存されたデータも暗号化されています。 クラスターの IBM Key Protect 暗号化の有効によって、Red Hat OpenShift マスターのローカル・ディスク上の etcd データの暗号化を有効にすることができます。 etcd データがポッドに送信されるときには、データの保護と保全性を確保するために、データが TLS で暗号化されます。 - openshift-api: ワーカー・ノードから Red Hat OpenShift マスターへのすべてのクラスター管理要求のメインエントリー・ポイントとなります。 API サーバーは、ポッドやサービスなどのクラスター・リソースの状態を変更する要求を検証および処理してから、この状態を etcd データ・ストアに保管します。
- openshift-controller: 新しく作成されたポッドを監視し、容量、パフォーマンスのニーズ、ポリシー制約、アンチアフィニティー仕様、およびワークロード要件に基づいて、それらのポッドをデプロイする場所を決定します。 要件に合致するワーカー・ノードが見つからなければ、ポッドはクラスターにデプロイされません。 コントローラーでは、レプリカ・セットなどのクラスター・リソースの状態も監視されます。 リソースの状態が変化する (例えば、レプリカ・セット内のポッドがダウンする) と、コントローラー・マネージャーは、必要な状態を実現するための修正アクションを開始します。
- cloud-controller-manager: クラウド・コントローラー・マネージャーは、IBM Cloud ロード・バランサーなどのクラウド・プロバイダー固有コンポーネントを管理します。
- Konnectivity: Red Hat OpenShift マスターノードからワーカーノードへのすべての通信に安全なネットワーク接続を提供する、 Red Hat OpenShift on IBM Cloud 特有のコンポーネント。 KonnectivityサーバーはKonnectivityエージェントと連携し、マスターとワーカーノードを安全に接続します。 この接続は、ポッドやサービスに対する
apiserver proxy
要求と、kubelet に対するoc
exec
、attach
、logs
要求をサポートしています。 ワーカー・ノードからマスターへの接続は、TLS 証明書で自動的に保護されます。
- etcd データ・ストア:
- IBM サイト信頼性エンジニア (SRE) による継続的なモニタリング
-
Red Hat OpenShift マスター (すべてのマスター・コンポーネント、コンピュート・リソース、ネットワーキング・リソース、ストレージ・リソースを含む) は、IBM サイト信頼性エンジニア (SRE) によって継続的にモニターされます。 SRE は、最新のセキュリティー規格を適用し、悪意のあるアクティビティーを検出して対処し、Red Hat OpenShift on IBM Cloud の信頼性と可用性を確保するための作業を行います。
- CIS Kubernetes マスター・ベンチマーク
-
Red Hat OpenShift on IBM Cloud を構成するために、IBM エンジニアは、インターネット・セキュリティーのセンター (CIS) によって公開されている Kubernetes マスター・ベンチマークからの関連サイバー・セキュリティー・プラクティスに従います。 クラスター・マスターおよびすべてのワーカー・ノードは、ベンチマークを満たすイメージを使用してデプロイされます。
- TLS によるセキュア通信
-
Red Hat OpenShift on IBM Cloud を使用するユーザーは、資格情報を使用してサービスから認証を受ける必要があります。 認証を受けると、Red Hat OpenShift on IBM Cloud が、Red Hat OpenShift API サーバーおよび etcd データ・ストアとの間の通信を暗号化する TLS 証明書を生成して、ワーカー・ノードと Red Hat OpenShift マスターの間のセキュアなエンドツーエンド通信を確立します。 これらの証明書は、クラスター間で共有されたり、Red Hat OpenShift マスター・コンポーネント間で共有されたりすることはありません。
- ワーカー・ノードへの接続
-
Kubernetes は、
https
プロトコルを使用してマスターとワーカー・ノードの間の通信を保護しますが、デフォルトでは、ワーカー・ノードで認証は行われません。 この通信をセキュアにするために、 Red Hat OpenShift on IBM Cloud はクラスタの作成時に Red Hat OpenShift マスターとワーカー・ノードの間に Konnectivity 接続を自動的にセットアップする。 - 微細化されたアクセス制御
-
アカウント管理者は、IBM Cloud Identity and Access Management (IAM) を使用して Red Hat OpenShift on IBM Cloud に対するアクセス権限の他のユーザーへの付与ができます。IBM Cloud IAM は、IBM Cloud プラットフォーム、Red Hat OpenShift on IBM Cloud、およびアカウント内のすべてのリソースを使用したセキュア認証を提供します。 リソースにアクセスできるユーザーを制限し、ユーザーが正当な権限を悪用した場合に被る可能性がある損害を抑えるためには、適切なユーザー役割と権限をセットアップすることが重要です。 ユーザーが実行できる一連の操作を決定する、以下の事前定義ユーザー役割の中から選択することができます。
- プラットフォーム役割: ユーザーが Red Hat OpenShift on IBM Cloud で実行できるクラスターとワーカー・ノードの管理関連の操作を決定します。 また、プラットフォーム・アクセスの役割を介して、ユーザーには RBAC 役割の
basic-users
およびself-provisioners
が割り当てられます。 これらの RBAC ロールを使用して、クラスタ内に Red Hat OpenShift プロジェクトを作成し、そこにアプリや Kubernetes リソースをデプロイできます。 プロジェクトの作成者は、プロジェクトのadmin
RBAC 役割を自動的に割り当てられるので、プロジェクトにデプロイして実行するものを完全に制御できます。 ただし、これらの RBAC 役割では、他の Red Hat OpenShift プロジェクトへのアクセス権限を付与するものではありません。 他の Red Hat OpenShift プロジェクトを表示してアクセスするには、IAM で適切なサービス・アクセス役割を割り当てられる必要があります。 - サービス・アクセス・ロール: ユーザーに割り当てられる Kubernetes RBAC ロールと、ユーザーが Red Hat OpenShift API サーバーに対して実行できるアクションを決定します。 プラットフォーム・アクセス役割が割り当てられた
basic-users
およびself-provisioners
RBAC 役割では、独自の Red Hat OpenShift プロジェクトを作成および管理できますが、サービス・アクセス役割が割り当てられるまで、他の Red Hat OpenShift プロジェクトを表示、アクセス、または操作することはできません。 ユーザーに割り当てられる対応するRBACロールと関連する権限の詳細については、 IAMサービス・アクセス・ロールを 参照してください。 - クラシック・インフラストラクチャ: 従来のインフラリソースへのアクセスを可能にします。 クラシック・インフラストラクチャー役割によって許可されるアクションの例としては、クラスター・ワーカー・ノード・マシンの詳細を表示したり、ネットワーク・リソースやストレージ・リソースを編集したりするアクションがあります。
- VPC インフラストラクチャー: VPC インフラストラクチャー・リソースへのアクセスを有効にします。 VPC インフラストラクチャー役割で許可されるアクションの例として、VPC の作成、サブネットの追加、浮動 IP アドレスの変更、VPC ブロック・ストレージ・インスタンスの作成などがあります。
クラスタ内のアクセス制御の詳細については、 クラスタアクセスの割り当て を参照してください。
- プラットフォーム役割: ユーザーが Red Hat OpenShift on IBM Cloud で実行できるクラスターとワーカー・ノードの管理関連の操作を決定します。 また、プラットフォーム・アクセスの役割を介して、ユーザーには RBAC 役割の
- アドミッション・コントローラー
-
アドミッション・コントローラーは、Kubernetes と Red Hat OpenShift on IBM Cloud の特定の機能のために実装されています。 アドミッション・コントローラーにより、クラスター内で特定の操作を許可するかどうかを決定するポリシーを、クラスター内にセットアップできます。 ポリシーでは、このアクションが、RBAC 役割を使用してユーザーに割り当てた一般許可の一部である場合でも、そのユーザーがアクションを実行できないときの条件を指定できます。 したがって、アドミッション・コントローラーは Red Hat OpenShift API サーバーで API 要求が処理される前に適用されるセキュリティー層をクラスターに追加できます。
クラスタを作成すると、 Red Hat OpenShift on IBM Cloud は自動的にデフォルトの Kubernetes アドミッションコントローラを Red Hat OpenShift マスターに特定の順序でインストールします。
kube-apiserver
コンポーネント参照情報内のクラスター・バージョン別のデフォルトのアドミッション・コントローラーの順序を確認します。
クラスタに独自のアドミッションコントローラをインストールしたり、オプションのアドミッションコントローラを選択したりできます。 Portieris. Portieris を使用すると、署名されていないイメージからのコンテナーのデプロイをブロックできます。
手動でインストールしたアドミッション・コントローラーが不要になった場合は、必ず、完全に削除してください。 アドミッション・コントローラーを完全に削除しておかないと、クラスターに対して実行する必要がある操作がすべてブロックされる可能性があります。
APIサーバーを保護するために、他に何ができますか?
クラスタマスタへのネットワーク接続は、いくつかの方法で制限できます
- プライベート・クラウド・サービス・エンドポイントのみを有効にします :パブリック・サービス・エンドポイントは、クラシック OpenShift クラスタにのみ必要です。 すべてのVPCクラスタで無効にできます。 また、アカウントで VRFとService Endpointが有効になって いる限り、クラシック Kubernetes クラスタで無効にすることもできる。 これにより、パブリック・ネットワーク上の攻撃からクラスタ・マスターを保護します。
- コンテキストベースの制限を有効にします:コンテキスト・ベースの制限(CBR)を使用して、クラスタのプライベートおよびパブリック・サービス・エンドポイントへのネットワーク・アクセスを保護できます。 CBRルール内のサブネットから発信されるクラスタ・マスタへの許可された要求のみが許可されます。 詳しくは、コンテキスト・ベースの制限を使用する を参照のこと。
ワーカー・ノード
ワーカー・ノードには、アプリを構成するデプロイメントとサービスが保持されます。 パブリック・クラウドでワークロードをホストする場合は、不正なユーザーやソフトウェアにアクセス、変更、監視されないようにアプリを保護する必要があります。
ワーカー・ノードは誰のもので、私はそれを確保する責任がありますか?
ワーカー・ノードの所有権は、作成するクラスターのタイプやインフラストラクチャー・プロバイダーの選択によって異なります。
- クラシッククラスタ :ワーカーノードは IBM Cloud アカウントにプロビジョニングされます。 ワーカー・ノードはお客様専用のものです。このためお客様は、ワーカー・ノードの OS および IBM Cloud Kubernetes Service コンポーネントに最新のセキュリティー更新とパッチが適用されるように、ワーカー・ノードに対するタイムリーな更新を要求する責任があります。
- VPCクラスタ :ワーカーノードは、 IBM が所有する IBM Cloud アカウントにプロビジョニングされ、悪意のあるアクティビティの監視とセキュリティアップデートの適用を可能にする。 VPC ダッシュボードを使用してワーカー・ノードにアクセスすることはできません。 ただし、IBM Cloud Kubernetes Service コンソール、CLI、または API を使用してワーカー・ノードを管理することはできます。 ワーカー・ノードを構成する仮想マシンはお客様専用のものです。このためお客様は、ワーカー・ノードの OS と IBM Cloud Kubernetes Service コンポーネントに最新のセキュリティー更新とパッチが適用されるように、タイムリーな更新を要求する責任があります。
詳しくは、Red Hat OpenShift on IBM Cloud を使用するうえでの責任を参照してください。
ibmcloud oc worker update
コマンドを定期的 (毎月など) に使用して、更新とセキュリティー・パッチをオペレーティング・システムに導入し、ワーカー・ノードで実行される Red Hat OpenShift バージョンを更新してください。 更新が有効になると、IBM
Cloud コンソールまたは CLI でマスター・ノードとワーカー・ノードに関する情報を (例えば、ibmcloud oc clusters ls
コマンドや ibmcloud oc workers ls --cluster <cluster_name>
コマンドで) 表示したときに通知を受けます。 ワーカー・ノードの更新は、最新のセキュリティー・パッチを含む完全なワーカー・ノード・イメージとして IBM
から提供されます。 更新を適用するには、ワーカー・ノードのイメージを再作成し、新しいイメージを再ロードする必要があります。 root ユーザーの鍵は、ワーカー・ノードが再ロードされると自動的にローテーションされます。
ワーカーノードのセットアップはどうなっていますか?
以下の図は、悪意のある攻撃からワーカー・ノードを保護するために、すべてのワーカー・ノードにセットアップされているコンポーネントを示しています。
この図には、ワーカー・ノードとの間のセキュアなエンドツーエンド通信を保証するコンポーネントは含まれていません。 詳しくは、ネットワーク・セキュリティーを参照してください。
- CIS-コンプライアントイメージ
- すべてのワーカーノードには、Center of Internet Security ( CIS )が公表しているベンチマークを実装したオペレーティングシステムがセットアップされている。 ユーザーもマシンの所有者も、このオペレーティング・システムを別のオペレーティング・システムに変更することはできません。 現在のOSバージョンを確認するには、
oc get nodes -o wide
を実行してください。 IBM は、社内と社外のセキュリティー顧問チームと協力して、セキュリティー・コンプライアンスにおける潜在的な脆弱性と取り組んでいます。 オペレーティング・システムのセキュリティー更新およびパッチは、Red Hat OpenShift on IBM Cloud で提供されるので、ユーザーがインストールを実行してワーカー・ノードをセキュアに保つ必要があります。
Red Hat OpenShift on IBM Cloud Linux カーネルをワーカーノードに使用しています。 Red Hat OpenShift on IBM Cloud ではすべての種類の Linux ディストリビューションに基づいてコンテナーを実行できます。 コンテナ・イメージのベンダーに問い合わせて、コンテナ・イメージがカーネル上で実行できることを確認する。
- サイト信頼性エンジニア (SRE) による継続的なモニタリング
- ワーカー・ノードにインストールされたイメージは、脆弱性およびセキュリティー・コンプライアンスの問題を検出するために、IBM サイト信頼性エンジニア (SRE) によって継続的にモニターされます。 SRE は、脆弱性に対処するため、ワーカー・ノードのためのセキュリティー・パッチとフィックスパックを作成します。 ワーカーノードとその上で実行するアプリケーションの安全な環境を確保するために、これらのパッチが利用可能になったら必ず適用してください。
- CIS Kubernetes ワーカー・ノードのベンチマーク
- Red Hat OpenShift on IBM Cloud を設定するために、 IBM のエンジニアは、 Center of Internet Security(CIS) が公開している Kubernetes ワーカー・ノード・ベンチマークから、関連するサイバーセキュリティのプラクティスに従う。 CIS Kubernetes ベンチマークおよび Red Hat OpenShift ベンチマークの規格を基準にして、ワーカー・ノードの準拠性を評価できます。
- コンピュート分離
- ワーカー・ノードはあるクラスターに専用のものであり、他のクラスターのワークロードをホストしません。 クラシッククラスタを作成する場合、ワーカーノードを物理マシン(ベアメタル)としてプロビジョニングするか、共有または専用の物理ハードウェア上で動作する仮想マシンとしてプロビジョニングするかを選択できます。 VPCクラスタ内のワーカーノードは、共有インフラストラクチャ上の仮想マシンとしてのみプロビジョニングできます。
- クラシックでベアメタルをデプロイするオプション
- 標準クラシック・クラスターを作成する場合、ワーカー・ノードを、仮想サーバー・インスタンスではなく、ベアメタル物理サーバーにプロビジョンすることを選択できます。 ベア・メタル・マシンでは、メモリーや CPU などのコンピュート・ホストの細かい制御が可能です。 このセットアップには、ホスト上で稼働する仮想マシンに物理リソースを割り振る仮想マシン・ハイパーバイザーは含まれません。 代わりに、ベア・メタル・マシンのすべてのリソースはワーカー専用であるため、リソースを共有したりパフォーマンスを低下させたりする「うるさい隣人」について心配する必要はありません。 ベア・メタル・サーバーはお客様専用であり、そのすべてのリソースをクラスターに使用できます。
- 暗号化されたディスク
- デフォルトでは、すべてのワーカー・ノードに、ローカルの SSD、AES 256 ビット暗号化データ・パーティション 2 つがプロビジョンされます。 最初のパーティションには、ワーカー・ノードのブートに使用され、暗号化されていないカーネル・イメージが含まれています。 2 番目のパーティションは、コンテナー・ファイル・システムを保持し、LUKS 暗号キーを使用してアンロックされます。 クラスター内の各ワーカー・ノードには、独自の固有の LUKS 暗号キーがあり、Red Hat OpenShift on IBM Cloud によって管理されます。 クラスターを作成する際やワーカー・ノードを既存のクラスターに追加する際に、この鍵は安全にプルされてから、暗号化ディスクのアンロック後に破棄されます。 暗号化はディスク入出力のパフォーマンスに影響します。 高性能のディスク入出力が必要なワークロードの場合、暗号化を有効/無効にした両方のクラスターをテストし、暗号化をオフにするかどうかの決定に役立ててください。
- SELinux
- すべてのワーカーノードは、ブートストラップ中にワーカーノードにロードされる Security-Enhanced Linux(SELinux) プロファイルによって強制されるセキュリティとアクセスポリシーでセットアップされます。 SELinux プロファイルをマシンのユーザーまたは所有者が変更することはできません。
- SSH の無効化
- デフォルトでは、クラスターを悪意のある攻撃から保護するために、ワーカー・ノード上の SSH アクセスは無効になっています。 SSH アクセスが無効な場合、クラスターへのアクセスは Red Hat OpenShift API サーバーを経由するように強制されます。 Red Hat OpenShift API サーバーでは、すべての要求をクラスター内で実行する前に、認証、許可、およびアドミッション制御モジュールで設定されたポリシーと照合するする必要があります。
- 標準的なクラスタを使用していて、ワーカーノードにより多くの機能をインストールしたい場合、 Red Hat OpenShift on IBM Cloud が提供するアドオンの中から選択するか、すべてのワーカーノードで実行したいすべてのものに対して Kubernetes デーモンセットを使用することができます。 一度だけ実行する必要があるアクションには、 Kubernetes ジョブを使用します。
ネットワーク
会社のネットワークを保護する従来の方法は、ファイアウォールをセットアップして、アプリに対する不要なネットワーク・トラフィックをブロックすることでした。 この方法は今でも有効ですが、悪意のある攻撃の多くは、割り当てられた権限を悪用した内部関係者や許可ユーザーによるものであることが調査で示されています。
クラシック・クラスターのネットワーク・セグメンテーションとプライバシー
ネットワークを保護し、ネットワークへのアクセスを許可されたユーザーから被る可能性がある損害の範囲を制限するために、ワークロードを可能な限り分離し、公開するアプリとワーカー・ノードの数を制限する必要があります。
Classicクラスタでは、デフォルトでどのようなネットワーク・トラフィックが許可されますか?
すべてのコンテナーが、事前定義の Calico ネットワーク・ポリシー設定で保護されます。この設定は、クラスターの作成時にすべてのワーカー・ノードに構成されます。 デフォルトでは、すべてのワーカー・ノードに対して、すべてのアウトバウンド・ネットワーク・トラフィックが許可されます。 インバウンド・ネットワーク・トラフィックは、以下の例外を除き、ブロックされます。
- NodePort: NodePort サービスで アプリを公開できるように、デフォルトで Kubernetes NodePort の範囲がオープンされています。 クラスターの NodePorts のインバウンド・ネットワーク・トラフィックをブロックするには、NLB サービスまたは NodePort サービスへのインバウンド・トラフィックの制御を参照してください。
- IBM モニター・ポート: デフォルトで、クラスター上には IBM がネットワーク・トラフィックをモニターするためのポートや、IBM が Red Hat OpenShift マスターのセキュリティー更新を自動的にインストールするためのポートがいくつか開かれています。
Red Hat OpenShift マスターからワーカー・ノードの kubelet へのアクセスは、Konnectivity トンネルによって保護されます。 詳しくは、Red Hat OpenShift on IBM Cloud アーキテクチャーを参照してください。
ネットワーク・セグメンテーションとは何ですか?
ネットワーク・セグメンテーションとは、1 つのネットワークを複数のサブネットワークに分割する方式を表すものです。 組織内の特定のグループからアクセスできるように、アプリと関連データをグループ化できます。 1 つのサブネットワーク内で実行されるアプリは、別のサブネットワーク内のアプリを表示することも、別のサブネットワーク内のアプリにアクセスすることもできません。 ネットワーク・セグメンテーションは、内部関係者やサード・パーティー製ソフトウェアに提供されているアクセスも制限するので、さまざまな悪意のあるアクティビティーを制限できます。
Red Hat OpenShift on IBM Cloud には、ワーカー・ノードのために高品質のネットワーク・パフォーマンスとネットワークの分離を実現する IBM Cloud VLAN が用意されています。 VLAN では、ワーカー・ノードとポッドをまとめたグループが同じ物理ワイヤーに接続されているかのように構成されます。 VLAN は各 IBM Cloud アカウントに専用のものであり、複数の IBM カスタマーの間で共有されることはありません。 クラシック・クラスターで、1
つのクラスターに複数の VLAN がある場合、同じ VLAN 上に複数のサブネットがある場合、または複数ゾーン・クラシック・クラスターである場合は、IBM Cloud インフラストラクチャー・アカウントの仮想ルーター機能 (VRF) を有効にして、ワーカー・ノードがプライベート・ネットワーク上で相互に通信できるようにする必要があります。
VRF を有効にするには、VRF の有効化を参照してください。 VRF が既に有効になっているかどうかを確認するには、ibmcloud account show
コマンドを使用します。 VRF を有効にできない、または有効にしない場合は、VLAN スパンニングを有効にします。
このアクションを実行するには、 [ネットワーク] > [ネットワークVLANスパニングインフラストラクチャの管理] 権限が必要です。 VLANスパニングがすでに有効になっているかどうかを確認するには、 ibmcloud oc vlan spanning get --region <region>
コマンドを 使用します。
アカウントで VRF または VLAN スパンニングを有効にすると、クラスターのネットワーク・セグメンテーションが失われます。
アカウントで VRF または VLAN スパンニングを有効にした状況でネットワーク・セグメンテーションを実現する方法を、以下の表で確認してください。
セキュリティー機能 | 説明 |
---|---|
Calico を使用してカスタム・ネットワーク・ポリシーをセットアップする | 組み込みの Calico インターフェースを使用して、ワーカー・ノード用にカスタムの Calico ネットワーク・ポリシーをセットアップできます。 例えば、特定のネットワーク・インターフェース上で、特定のポッドまたはサービスのネットワーク・トラフィックを許可またはブロックすることができます。 カスタムのネットワーク・ポリシーをセットアップするには、
calicoctl CLI をインストールする必要があります。 |
IBM Cloud ネットワーク・ファイアウォールのサポート | Red Hat OpenShift on IBM Cloud は、すべての IBM Cloud ファイアウォール・オファリングと互換性があります。 例えば、カスタム・ネットワーク・ポリシーをファイアウォールにセットアップして、標準クラスターのための専用ネットワーク・セキュリティーを設定し、ネットワーク侵入を検出して対処することができます。 例えば、ファイアウォールとして機能し、不要なトラフィックをブロックするように Virtual Router Appliance をセットアップできます。 ファイアウォールをセットアップする場合は、マスター・ノードとワーカー・ノードが通信できるように、リージョンごとに必要なポートと IP アドレスを開く必要もあります。 |
クラシック・クラスタに対する外部からの攻撃の可能性を減らすために、他にできることはありますか?
公開するアプリやワーカー・ノードの数が多いほど、外部からの悪意のある攻撃を防止するために必要なステップの数も多くなります。 以下の表で、アプリとワーカー・ノードをプライベートにするために取れる方法を確認してください。
セキュリティー機能 | 説明 |
---|---|
公開するアプリの数を制限する | デフォルトでは、クラスター内で実行されるアプリとサービスには、公共のインターネットからはアクセスできません。 アプリを公開するか、それとも、プライベート・ネットワークでしかアプリとサービスにアクセスできないようにするかを選択できます。 アプリとサービスをプライベートのままにする場合は、組み込みのセキュリティー機能を利用してワーカー・ノードとポッドの間のセキュアな通信を確保できます。 サービスとアプリを公共のインターネットに公開する場合は、Red Hat OpenShift の経路を使用するか、または NLB と Ingress ALB のサポートを活用してサービスを安全に公開することができます。 必要なサービスだけを公開し、公開アプリのリストを定期的に見直して、まだ有効であることを確認してください。 |
公共のインターネットとエッジ・ノードの接続を制限する | すべてのワーカー・ノードが、アプリ・ポッドおよび関連するロード・バランサーまたは Ingress ポッドを受け入れるように構成されています。 ワーカー・ノードにエッジ・ノードのラベルを付けて、ロード・バランサー・ポッドがそれらのワーカー・ノードにだけデプロイされるようにすることができます。 さらに、ワーカー・ノードにテイントを適用して、アプリ・ポッドをエッジ・ノードにスケジュールできないようにすることができます。 エッジ・ノードを使用することで、クラスター内の少数のワーカー・ノード上にネットワーク・ワークロードを分離し、クラスター内の他のワーカー・ノードはプライベートのままにすることができます。 |
クラスタをオンプレミスのデータセンターに接続したい場合はどうすればよいですか?
ワーカー・ノードとアプリをオンプレミス・データ・センターに接続するには、strongSwan サービス、仮想ルーター・アプライアンス、または Fortigate Security Appliance を使用して VPN IPsec エンドポイントを構成します。
VPC クラスターのネットワーク・セグメンテーションとプライバシー
ネットワークを保護し、ネットワークへのアクセスを許可されたユーザーから被る可能性がある損害の範囲を制限するために、ワークロードを可能な限り分離し、公開するアプリとワーカー・ノードの数を制限する必要があります。
デフォルトでVPCクラスタに許可されるネットワーク・トラフィックは何ですか?
デフォルトでは、ワーカー・ノードはプライベート・ネットワーク上の VPC サブネットにのみ接続されるため、ワーカー・ノードにパブリック・ネットワーク・インターフェースは存在しません。 ワーカー・ノードへのすべてのパブリック受信がブロックされます。 ワーカー・ノードからのパブリック送信は、ワーカーがパブリック・ゲートウェイを持つ VPC サブネットに接続されている場合にのみ許可されます。
VPC のプライベート・ネットワークに接続することなく、Red Hat OpenShift のデフォルトのコンポーネント (Web コンソールや OperatorHub など) にアクセスするには、ワーカー・ノードをデプロイする VPC サブネットにパブリック・ゲートウェイを接続する必要があります。 パブリック・ゲートウェイを接続したサブネットのワーカー・ノードでは、すべての送信が許可されるようになります。ただし、受信は引き続きすべてブロックされます。
インターネットからのトラフィック要求を受信する必要があるアプリをクラスターにデプロイする場合は、VPC ロード・バランサーを作成してアプリを公開します。 アプリへの受信ネットワーク・トラフィックを許可するには、VPC ロード・バランサーに、受け取りたい受信ネットワーク・トラフィックを構成する必要があります。
セキュリティグループは、デフォルトでVPCインスタンスとVPC ALBに適用されます。 詳しくは、VPC セキュリティー・グループによるトラフィックの制御を参照してください。
ネットワーク・セグメンテーションとは何ですか?
ネットワーク・セグメンテーションとは、1 つのネットワークを複数のサブネットワークに分割する方式を表すものです。 組織内の特定のグループからアクセスできるように、アプリと関連データをグループ化できます。 1 つのサブネットワーク内で実行されるアプリは、別のサブネットワーク内のアプリを表示することも、別のサブネットワーク内のアプリにアクセスすることもできません。 ネットワーク・セグメンテーションは、内部関係者やサード・パーティー製ソフトウェアに提供されているアクセスも制限するので、さまざまな悪意のあるアクティビティーを制限できます。
Red Hat OpenShift on IBM Cloud には、ワーカー・ノードのために高品質のネットワーク・パフォーマンスとネットワークの分離を実現する IBM Cloud VPC サブネットが用意されています。 VPC サブネットは、指定したプライベート IP アドレス範囲 (CIDR ブロック) から構成され、一連のワーカー・ノードとポッドを、物理的に同じ線に接続されているかのように構成します。 VPC サブネットは各 IBM Cloud アカウントに専用のものであり、複数の IBM カスタマーの間で共有されることはありません。
VPC サブネットは、クラスター内のワーカー・ノード間の接続チャネルとして機能します。 同じ VPC であれば、どのプライベート・サブネットであろうとプライベート・サブネットに接続したシステムはワーカーと通信できます。 例えば、1 つの VPC 内のすべてのサブネットは、標準装備の VPC ルーターによるレイヤー 3 のプライベートなルーティングを介して通信できます。 クラスターが通信を行う必要がない場合は、別個の VPC にクラスターを作成することで最適なネットワーク・セグメンテーションを実現できます。 複数のクラスターが相互に通信する必要がある場合は、それらのクラスターを同じ VPC 内に作成することができます。 1 つの VPC 内のサブネットはその VPC 内の複数のクラスターで共有できますが、VPC 内のクラスターごとに別のサブネットを使用するほうが、ネットワーク・セグメンテーションは細かくなります。
アカウントの VPC のサブネット間でプライベート・ネットワーク・セグメンテーションをさらに細かくするには、VPC アクセス制御リスト (ACL) を使用してカスタム・ネットワーク・ポリシーをセットアップします。 VPC を作成すると、VPC のデフォルト ACL が allow-all-network-acl-<VPC_ID>
のフォーマットで作成されます。 VPC に作成するサブネットは、デフォルトでこの ACL にアタッチされます。
この ACL には、特定のサブネット上のワーカー・ノードと、同じ VPC 内の各サブネット上のシステムの間のトラフィックをすべて許可するインバウンド・ルールとアウトバウンド・ルールが入っています。 VPC サブネット上のワーカー・ノードに許可するプライベート・ネットワーク・トラフィックを指定するには、VPC 内のサブネットごとにカスタム ACL を作成します。 例えば、クラスターのインバウンド/アウトバウンドのプライベート・ネットワーク・トラフィックの大部分をブロックする一方で、クラスターが機能するために必要な通信を許可するように
一連の ACL ルールを作成することができます。
VPCクラスタの外部攻撃の可能性を減らすために、他に何ができますか?
公開するアプリやワーカー・ノードの数が多いほど、外部からの悪意のある攻撃を防止するために必要なステップの数も多くなります。 以下の表で、アプリとワーカー・ノードをプライベートにするために取れる方法を確認してください。
セキュリティー機能 | 説明 |
---|---|
公開するアプリの数を制限する | デフォルトでは、クラスター内で実行されるアプリとサービスには、公共のインターネットからはアクセスできません。 アプリを公開するか、それとも、プライベート・ネットワークでしかアプリとサービスにアクセスできないようにするかを選択できます。 アプリとサービスをプライベートのままにする場合は、組み込みのセキュリティー機能を利用してワーカー・ノードとポッドの間のセキュアな通信を確保できます。 サービスとアプリを公共のインターネットに公開する場合は、VPC ロード・バランサーと Ingress ALB のサポートを利用してサービスを安全に公開することができます。 必要なサービスだけを公開し、公開アプリのリストを定期的に見直して、まだ有効であることを確認してください。 |
パブリック・ネットワークへの送信を、パブリック・ゲートウェイに接続した 1 つのサブネットだけに制限する | ワーカー・ノード上のポッドがパブリック外部エンドポイントに接続する必要がある場合は、それらのワーカー・ノードが存在するサブネットにパブリック・ゲートウェイを接続できます。 |
ワーカー・ノードを接続したいネットワークに応じて、VPN ソリューションを選択できます。
経路を使用したアプリの安全な公開
インターネットからのネットワーク・トラフィックの着信を許可したい場合は、 routesを使ってアプリを公開することができる。
すべての Red Hat OpenShift クラスターには、一意のドメイン名が割り当てられ、TLS証明書で保護された Red Hat OpenShift ルーターが自動的にセットアップされます。 経路を使用してアプリを公開すると、Red Hat OpenShift ルーターから URL がアプリに割り当てられます。
アプリの経路を作成する場合は、保護された (HTTPS) 経路または非セキュア (HTTP) 経路のどちらを作成するかを決定できます。 保護された経路の場合、ルーターやポッドなど、TLS 終端処理を実装する場所を決定できます。 詳しくは、経路を使用したアプリの公開を参照してください。
LoadBalancer サービスと Ingress サービスを使用したアプリの安全な公開
ネットワーク・ロード・バランサー (NLB) および Ingress アプリケーション・ロード・バランサー (ALB) のネットワーク・サービスを使用して、アプリを公共のインターネットまたは外部プライベート・ネットワークに接続できます。 以下に記載している NLB および ALB のオプションの設定を使用して、バックエンド・アプリのセキュリティー要件を満たしたり、クラスター内を移動するトラフィックを暗号化したりできます。
セキュリティ・グループを使ってクラスタのネットワーク・トラフィックを管理できますか?
クラシック・クラスター: IBM Cloud セキュリティー・グループは、単一仮想サーバーのネットワーク・インターフェースに適用され、ハイパーバイザー・レベルでトラフィックをフィルタリングします。 ワーカー・ノードごとにトラフィックを管理する場合は、セキュリティー・グループを使用できます。 セキュリティー・グループを作成する場合は、NLB の IP アドレスを管理するために Red Hat OpenShift on IBM Cloud で使用される VRRP プロトコルを許可する必要があります。 すべてのワーカーノードでクラスタのトラフィックを一様に管理するには、 Calico と Kubernetes ポリシーを 使用します。
VPC クラスター: VPC セキュリティー・グループは、ハイパーバイザー・レベルでトラフィックをフィルタリングするために単一仮想サーバーのネットワーク・インターフェースに適用されます。 クラスターのデフォルトのセキュリティー・グループにインバウンドおよびアウトバウンドのルールを追加して、VPC クラスターのインバウンドおよびアウトバウンドのトラフィックを管理できます。 デフォルト設定を含むセキュリティー・グループについて詳しくは、 VPC セキュリティー・グループによるトラフィックの制御 を参照してください。
VPC クラスターのワーカー・ノードはサービス・アカウントで存在し、VPC インフラストラクチャー・ダッシュボードにはリストされないため、セキュリティー・グループを作成してワーカー・ノード・インスタンスに適用することはできません。 自動的に作成された既存のセキュリティー・グループを変更することだけが可能です。
LoadBalancer、IngressサービスでTLSターミネーションを行うには?
Ingress サービスは、トラフィック・フロー内の次の 2 つのポイントで TLS 終端処理を実行します。
- 到着時にパッケージを復号化: デフォルトでは、Ingress ALBはクラスタ内のアプリに HTTP ネットワークトラフィックを負荷分散します。 着信 HTTPS 接続のロード・バランシングも行う場合は ALB でその機能を構成できます。つまり、ネットワーク・トラフィックを復号し、復号した要求をクラスター内で公開されているアプリに転送するように構成します。 IBM 提供の Ingress サブドメインを使用する場合は、IBM 提供の TLS 証明書を使用できます。 カスタム・ドメインを使用する場合は、独自の TLS 証明書を使用して TLS 終端を管理できます。
- パッケージをアップストリーム・アプリに転送する前に再暗号化する: ALB は、トラフィックをアプリに転送する前に HTTPS 要求を復号します。 HTTPS を必要とするアプリがあり、それらのアップストリームのアプリに転送する前にトラフィックを暗号化する必要がある場合は、
ssl-services
アノテーションを使用できます。 アップストリーム・アプリが TLS を処理できる場合は、片方向認証または双方向認証の TLS シークレットに含まれる証明書をオプションで提供できます。
永続ストレージ
IBM Cloud の永続ストレージのデータを暗号化および保護するためにサポートされるオプションを確認します。
デフォルトでは、IBM Cloud のすべてのストレージ・ソリューションは、IBM 管理の暗号鍵を使用して、追加費用なしで保存データを自動的に暗号化します。 詳しくは、以下のリンクを参照してください。
選択したストレージのタイプによっては、さらに IBM Key Protect で暗号化をセットアップして、転送中のデータや保存データを独自の暗号鍵で保護することができます。
IBM Cloud NoSQL DB などの IBM Cloudant のデータベース・サービスを使用して、クラスター外のマネージド・データベースにデータを保存することもできます。 クラウド・データベース・サービスを使用して保管されたデータには、すべてのクラスター、ゾーン、領域からアクセスできます。 セキュリティー関連の情報については、データベース・サービスについての IBM Cloud の資料を参照してください。
モニタリングとロギング
クラスター内で悪意のある攻撃を検出するためには、メトリックおよびクラスター内で発生したすべてのイベントを適切にモニターしてロギングすることが重要です。 モニタリングとロギングにより、クラスターの容量とアプリによるリソースの利用状況も理解できるため、それに応じてアプリのダウン時間の発生を防ぐ計画を立てることができます。
- IBM は私のクラスタを監視していますか?
- すべてのクラスタマスタは、 IBM によって継続的に監視され、プロセスレベルのサービス拒否(DOS)攻撃を制御し、修復します。 Red Hat OpenShift on IBM Cloud は、 Kubernetes、 Red Hat OpenShift、および OS 固有のセキュリティ修正で発見された脆弱性について、マスタが配置されているすべてのノードを自動的にスキャンします。 脆弱性が見つかった場合、Red Hat OpenShift on IBM Cloud はユーザーに代わって自動的に修正を適用し、脆弱性を解決して、マスター・ノードが確実に保護されるようにします。
- どのような情報がログに記録されますか?
- デフォルトでは、Red Hat OpenShift on IBM Cloud は以下のクラスター・コンポーネントのログを自動的に収集します。
- コンテナー:
STDOUT
またはSTDERR
に書き込まれるログ。 - アプリ: アプリ内の特定のパスに書き込まれるログ。
- ワーカー:
/var/log/syslog
および/var/log/auth.log
に送られる Red Hat Enterprise Linux オペレーティング・システムのログ。 - Red Hat OpenShift API サーバー: Red Hat OpenShift API サーバーに送られるすべてのクラスター関連操作が、監査のためにログに記録されます。これには、時刻、ユーザー、および対象リソースが含まれます。 詳細については、 Kubernetes 監査ログを参照。 これらのログには、IBM Cloud Logs を使用してアクセスできます。
- ルーター: 経路のインバウンド・ネットワーク・トラフィックをログに記録します。
- Kubernetes システム・コンポーネント:
kubelet
、kube-proxy
、およびkube-system
名前空間で実行されるその他のコンポーネントからのログ。
- コンテナー:
クラスタ・コンポーネントのログにアクセスするには、次のように設定します。 IBM Cloud LogsIBM Cloud Logs はすべてのログへのアクセスを提供し、ログを集約して複数のクラスタにまたがる独自のカスタマイズされたビューを構築できます。
- クラスタの健全性とパフォーマンスを監視するにはどうすればよいですか?
- Red Hat OpenShift on IBM Cloud コンソールまたは CLI からクラスターのコンポーネントとコンピュート・リソース (CPU やメモリーの使用量など) をモニターすることによって、アプリ、サービス、ワーカー・ノードの正常性、容量、パフォーマンスを確認できます。 クラスタのより詳細なメトリクスを表示するには、 Prometheus や Grafana などのオープンソース技術に基づく組み込みの監視機能を使用できます。 Prometheus は、クラスターの作成時に自動的にインストールされます。このツールを使用すると、クラスターおよびアプリのメトリックにリアルタイムでアクセスできます。 Prometheus メトリックは永続的に保管されるわけではありません。 履歴メトリックへのアクセス、および複数のクラスター間でのメトリックの比較には、代わりに IBM Cloud Monitoring を使用してください。
ホストベースの侵入検知システム(HIDS)とセキュリティ・イベント・ログ監視(SELM)をセットアップするには、クラスタやコンテナ化されたアプリを監視して侵入や悪用を検知するように設計されたサードパーティ製ツール、例えば Twistlockや Sysdig Falco
プロジェクトなどをインストールする。
- クラスタで発生したイベントを監査するにはどうすればよいですか?
- IBM Cloud Logs クラスターで Red Hat OpenShift on IBM Cloud をセットアップすることができます。 詳しくは、 IBM Cloud Logs のドキュメントを ご覧ください。
- クラスタの信頼を有効にするには、どのようなオプションがありますか?
- セキュリティー機能が豊富な環境でコンテナー化アプリをデプロイできるように、Red Hat OpenShift on IBM Cloud はクラスター・コンポーネント向けの機能をデフォルトで数多く提供します。 クラスターの信頼レベルを高めて、より確実に、意図したことだけがクラスターで行われるようにします。 以下の図に示すように、さまざまな方法でクラスターに信頼を実装できます。
-
イメージのコンテンツの信頼: IBM Cloud Container Registry でコンテンツの信頼を有効にして、イメージの完全性を確保します。 信頼できるコンテンツを使用する場合は、信頼できるイメージとしてイメージに署名できるユーザーを制御できます。 信頼できる署名者がイメージをレジストリーにプッシュすると、ユーザーはその署名付きのコンテンツをプルして、イメージのソースを確認できます。 詳しくは、信頼できるコンテンツのイメージへの署名を参照してください。
-
Container Image Security Enforcement: コンテナー・イメージを検証してからデプロイできるように、アドミッション・コントローラーとカスタム・ポリシーを使用します。 コンテナー・イメージ・セキュリティー制約プロジェクト (Portieris など) を使用すると、イメージのデプロイ元を制御し、イメージが コンテンツの信頼要件を満たしていることを確認できます。 設定したポリシーをデプロイメントが満たしていなければ、Security Enforcement によって、クラスターの変更が防止されます。
-
イメージ脆弱性スキャナー: デフォルトでは、脆弱性アドバイザーが、IBM Cloud Container Registry に保管されたイメージをスキャンして、潜在的なセキュリティー脆弱性がないか調べます。 詳しくは、Vulnerability Advisorを使用したイメージ・セキュリティーの管理を参照してください。
-
IBM Cloud Security and Compliance Center: IBM Cloud Security and Compliance Center を有効にすると、疑わしい着信ネットワーク・トラフィックおよび発信ネットワーク・トラフィックに関するレポートを表示できます。 詳しくは、IBM Cloud Security and Compliance Center の概要を参照してください。
-
IBM Cloud® Secrets Manager: Ingress と Kubernetes のシークレットを IBM Cloud® Secrets Manager に保管できます。 Secrets Manager をクラスターに統合するときに、すべての Ingress サブドメイン・シークレットがアップロードされるデフォルトの Secrets Manager インスタンスを設定します。 詳しくは、 Kubernetes Service クラスターでの Secrets Manager のセットアップ を参照してください。
コンテナー・ランタイム
ワーカーノードは CRI-O でインストールされ、 Security-Enhanced Linux(SELinux) ラベリングシステムで保護されています。
Kubernetes を使用して (ポッドの作成などで) コンテナー・イメージと対話するときには、kubelet が UNIX ソケット crio.sock
を介して CRI-O と通信します。 この Unix ソケットは、以下の表の SELinux ラベルを使用して、適切なシステム・アクセス・ポリシーを適用します。 これらのラベルによって、ユーザー・コンテナーがコンテナー・ランタイムのソケットにアクセスできないようにしています。
プロセス | SELinux ラベル |
---|---|
CRI-O | system_u:system_r:container_runtime_t:s0 |
kubelet | system_u:system_r:unconfined_service_t:s0 |
crio.sock |
system_u:object_r:container_var_run_t:s0 |
コンテナー・プロセス (c14 など) |
system_u:system_r:container_t:s0:c14 |
要求フローの例
以下の図は、kubelet と CRI-O の間の要求フローの例を示しています。
イメージとレジストリー
すべてのデプロイメントは、アプリを実行するコンテナーの起動方法についての命令が入ったイメージをベースとします。 これらの命令には、コンテナー内のオペレーティング・システムや、インストールする追加のソフトウェアが含まれています。 アプリを保護するには、イメージを保護し、イメージの整合性を確保する検査を実施する必要があります。
- 画像を保存するレジストリとして、パブリックレジストリとプライベートレジストリのどちらを使うべきですか?
- Docker Hub などのパブリック・レジストリーは、Docker イメージおよび Kubernetes の入門として最初のコンテナー化アプリをクラスター内に作成する時に使用できます。 ただし、エンタープライズ・アプリケーションの場合は、クラスターを悪意のあるイメージから保護するために、知らないレジストリーや信頼できないレジストリーの使用は避けてください。 イメージは、 IBM Cloud Container Registry で提供されているレジストリや、 Red Hat OpenShift クラスタに自動的にセットアップされる 内部レジストリのようなプライベートレジストリに保管し、レジストリへのアクセスやプッシュできるイメージコンテンツを制御できるようにします。
- なぜ、画像の脆弱性をチェックすることが重要なのか?
- 悪意のある攻撃のほとんどがソフトウェアの既知の脆弱性や脆弱なシステム構成を利用したものであることが調査で示されています。 イメージからコンテナーをデプロイすると、そのコンテナーは、イメージに記述されている OS と追加バイナリーを使用して起動します。 仮想マシンや物理マシンを保護する場合と同様に、不正なユーザーによるアクセスからアプリを保護するために、コンテナー内で使用する OS とバイナリーの既知の脆弱性を除去する必要があります。
アプリを保護するために、以下の領域の対策を採ることを検討してください。
-
ビルド・プロセスの自動化と権限の制限: ソース・コードからコンテナー・イメージをビルドするプロセスを自動化して、ソース・コードのバリエーションや欠陥を除去します。 ビルド・プロセスを CI/CD パイプラインに統合すれば、イメージをスキャンして、指定したセキュリティー検査に合格したイメージだけをビルドすることができます。 開発者が機密性の高いイメージにホット・フィックスを適用しないようにするには、ビルド・プロセスにアクセスできる組織内の人数を制限します。
-
イメージを実稼働環境にデプロイする前にスキャンする: 必ず、イメージからコンテナーをデプロイする前に、すべてのイメージをスキャンしてください。 例えば、IBM Cloud Container Registry を使用する場合は、すべてのイメージが、名前空間にプッシュされたときに自動的にスキャンされ、脆弱性がないか調べられます。 脆弱性が検出された場合は、脆弱性を除去することを検討するか、そのイメージのデプロイメントをブロックします。 脆弱性の監視と除去を担当する組織内の人またはチームを見つけます。 組織構造によって、セキュリティー・チーム、運用チーム、またはデプロイメント・チームのメンバーが担当者になります。 コンテンツ・トラストを有効にして、信頼できる署名者が承認しないとイメージをコンテナー・レジストリーにプッシュできないようにしてください。 次に、 オープンソースの Portieris プロジェクトのアドミッションコントローラーをインストールして、署名されていないイメージからのコンテナデプロイメントをブロックする。
-
実行中のコンテナーを定期的にスキャンします。 脆弱性検査に合格したイメージからコンテナーをデプロイした場合でも、時間が経つと、コンテナー内で実行されるオペレーティング・システムやバイナリーが脆弱になる場合があります。 アプリを保護するには、脆弱性を検出して対処できるように、実行中のコンテナーを定期的にスキャンする必要があります。 アプリによっては、セキュリティをさらに強化するために、脆弱なコンテナが検出された後にそれを削除するジョブを確立することもできる。
組み込みのコンテナー・レジストリーを使用して、外部ソース・リポジトリー内のソース・コードからコンテナー・イメージをビルドして内部レジストリーに入れるプロセスを自動化できます。 ただし、内部レジストリーにプッシュされるときには、イメージの脆弱性スキャンは自動実行されません。 イメージのスキャンをセットアップするには、代わりに、レジストリーの名前空間をセットアップしてイメージを管理対象の IBM Cloud Container Registry にプッシュします。
セキュリティー機能 | 説明 |
---|---|
IBM Cloud Container Registry における保護された Docker プライベート・イメージ・リポジトリー | 独自の Docker イメージ・リポジトリー (IBM によってホストおよび管理されるもの) を、可用性が高くマルチテナントでスケーラブルなプライベート・イメージ・レジストリーにセットアップします。 レジストリーを使用することで、Docker イメージをビルドし、安全に保管し、クラスター・ユーザー間で共有することができます。 /n コンテナー・イメージを処理する場合は、個人情報の保護について詳しく理解してください。 |
信頼できるコンテンツのみを含むイメージをプッシュ | イメージ・リポジトリーでコンテンツ・トラストを有効にすることで、イメージの整合性を確保します。 信頼できるコンテンツを使用する場合は、信頼できるイメージとしてイメージに署名して特定のレジストリー名前空間にプッシュできる人を制限できます。 信頼できる署名者がイメージをレジストリー名前空間にプッシュすると、ユーザーはパブリッシャーを検証したりイメージの整合性を検証したりできるように署名付きのコンテンツをプルできます。 |
自動脆弱性スキャン | IBM Cloud Container Registry を使用すれば、Vulnerability Advisor によって提供される組み込みセキュリティー・スキャンを活用できます。 レジストリー名前空間にプッシュされるどのイメージも、CentOS、Debian、Red Hat、および Ubuntu の既知の問題のデータベースに基づいて、脆弱性が自動的にスキャンされます。 脆弱性が検出されると、Vulnerability Advisor は、イメージの整合性とセキュリティーを確保するために脆弱性を解決する方法について指示を出します。 |
脆弱なイメージまたは信頼できないユーザーからのデプロイメントをブロック | コンテナー・イメージをデプロイ前に検証できるようにカスタム・ポリシーを使用してアドミッション・コントローラーを作成します。 オープンソースの Portieris プロジェクトを使用すると、画像がどこから展開されるかを制御し、コンテンツの信頼性要件を満たしていることを確認できます。 設定されたポリシーをデプロイメントが満たしていない場合、アドミッション・コントローラーはクラスターにおけるデプロイメントをブロックします。 |
コンテナーの分離とセキュリティー
クラスター内で複数のアプリを実行する際には、ワークロードを相互に分離して実行したり、迷惑な他の利用者やサービス妨害攻撃を回避するためにクラスター内のポッドの許可を制限したりすることもできます。
- Red Hat OpenShift プロジェクトとは何ですか?
- Red Hat OpenShift プロジェクトは、クラスターを仮想的に分割して、デプロイメントの分離や、ワークロードをクラスターに移行したいユーザー・グループの分離を可能にするための手段です。 プロジェクトを使用することで、ワーカー・ノード間でリソースを編成できます。また、複数ゾーン・クラスターの場合にはゾーン間で編成できます。
- すべてのクラスターに、デフォルトの Red Hat OpenShift プロジェクトのセットがセットアップされます。これらのプロジェクトには、Red Hat OpenShift on IBM Cloud を適切に実行してクラスターを管理するために必要なデプロイメントとサービスが含まれています。 詳しくは、サービス・アーキテクチャーを参照してください。
- クラスターの管理者は、何もしなくても、これらのプロジェクトにアクセスできます。クラスター内に追加のプロジェクトをセットアップすることもできます。 また、クラスターへのアクセス権限を付与されたクラスター・ユーザーも独自のプロジェクトを作成できます。そして、プロジェクトの作成者として管理者権限でそのプロジェクトを管理できます。 ただし、クラスター・ユーザーは、クラスター管理者によってアクセス権限が付与されていない限り、デフォルトでは他のプロジェクトにアクセスできません。
クラスタ内にあるすべてのプロジェクトについて、適切な RBACポリシーを 設定して、このプロジェクトへのアクセスを制限し、デプロイされるものを制御し、適切な リソース・クォータと制限範囲を設定する。
シングルテナントとマルチテナント、どちらを設定すべきでしょうか?
単一テナント・クラスターでは、クラスターでワークロードを実行する必要があるユーザー・グループごとに、クラスターを 1 つ作成します。 通常、そのチームが、クラスターを管理し、正しく構成して保護します。 マルチテナント・クラスターは、複数のプロジェクトを使用してテナントとそのワークロードを分離します。
シングル・テナント・クラスターとマルチテナント・クラスターのどちらにするかは、クラスター内でワークロードを実行するチーム数、各チームのサービス要件、サービスのサイズ、およびワークロードに必要な分離レベルに基づいて決定します。
複雑なサービスを実行するチームが多く、チームごとにクラスターのライフサイクルを管理する必要がある場合には、シングル・テナント・クラスターが適しているでしょう。 クラスターの更新時期や、クラスターにデプロイできるリソースを自由に決められます。 他のテナントをセキュリティー侵害の危険にさらさずに特権ポッドを使用したい場合も、シングル・テナント・クラスターを構成できます。 クラスターを管理するには、デプロイメントに応じたクラスターの容量とセキュリティーを確保するために、Kubernetes、Red Hat OpenShift、およびインフラストラクチャーに関する詳細な知識が必要であることに注意してください。
マルチテナント・クラスターでは、Red Hat OpenShift プロジェクトを使用してテナントを分離します。通常、クラスターの管理は、どのテナントにも属さない別のチームが行います。 クラスターで小さなワークロードを実行する必要があるチームが複数存在するが、複数のゾーンをまたぐ高可用性のシングル・テナント・クラスターを作成することでは必要な費用便益が得られないという場合は、マルチテナント・クラスターが適しているでしょう。 マルチテナント・クラスターは、通常、少ない人数でクラスターを操作および管理するので、必要な分離レベルが得られず、また、以下の領域の複雑さが増す可能性があります。
- アクセス: 複数のプロジェクトをセットアップする場合は、プロジェクトごとに適切な RBAC ポリシーを構成して、確実にリソースを分離する必要があります。 RBAC ポリシーは複雑であるため、Kubernetes に関する詳細な知識が必要です。
- 特権ポッド: マルチテナント・クラスターの 1 つのテナントが特権ポッドを実行する必要がある場合、そのポッドがクラスター内の他のプロジェクトにアクセスしたり、共有コンピュート・ホストに損害を与えたりする可能性があります。 特権ポッドの制御は複雑な作業であり、手間と深い技術的専門知識が必要です。 セキュリティー・コンテキスト制約 (SCC) を使用して、テナントがクラスターにデプロイできるリソースを制御できます。
- ネットワーク・ポリシー: ワーカー・ノードが同じプライベート・ネットワークに接続されているため、ポッドが他の名前空間内のポッドにアクセスできないように、厳しいネットワーク・ポリシーを設定する必要があります。
- コンピュート・リソースの制限: 各チームがクラスタ内でサービスをデプロイしてアプリを実行するために必要なリソースを確保するには、ネームスペースごとに リソース・クォータを設定する必要があります。 リソースクォータは、配置できる Kubernetes リソースの数や、それらのリソースが消費できる CPU とメモリの量など、配置の制約を決定します。 割り当て量を設定すると、ユーザーは、そのデプロイメントにリソース要求と制限を含める必要があります。
- 共有クラスター・リソース: 1 つのクラスターで複数のテナントを実行する場合は、Red Hat OpenShift ルーター、Ingress アプリケーション・ロード・バランサー (ALB)、使用可能なポータブル IP アドレスなどの一部のクラスター・リソースが、複数のテナント間で共有されます。 小規模なサービスは、クラスター内の大規模なサービスと競合する場合、共有リソースを使用できないことがあります。
- 更新: 同時に実行できる Red Hat OpenShift API のバージョンは 1 つだけです。 1 つのクラスター内で実行されるすべてのアプリは、そのアプリを所有しているチームにかかわらず、現行の Red Hat OpenShift API バージョンに準拠していなければなりません。 クラスターを更新する場合は、すべてのチームが新しい Red Hat OpenShift API バージョンに切り替える準備ができていること、また、アプリが適切に更新されていることを確認する必要があります。 つまり、個々のチームが、実行する Red Hat OpenShift API のバージョンを制御することはほぼできないということです。
- クラスター・セットアップの変更: クラスターのセットアップを変更したり、ワークロードを新しいワーカー・ノードにスケジュール変更したりする場合は、その変更をテナント間にロールアウトする必要があります。 このロールアウトには、単一テナント・クラスターの場合よりも多くの調整とテストが必要です。
- コミュニケーション・プロセス: 複数のテナントを管理する場合は、クラスターに問題があるときやサービス用に追加のリソースが必要になったときに問い合わせる場所がテナントにわかるように、コミュニケーション・プロセスをセットアップすることを検討してください。 このコミュニケーション・プロセスには、クラスターのセットアップのあらゆる変更や更新予定をテナントに知らせることも含まれます。
シングル・テナント・クラスターとマルチテナント・クラスターのコストはほぼ同じですが、シングル・テナント・クラスターのほうが、マルチテナント・クラスターのプロジェクトよりも高い分離レベルを提供します。 高いワークロード分離が必要な場合は、シングル・テナント・クラスターを使用してください。
Kubernetes ネットワーク・ポリシーは、内部ネットワーク・トラフィックからポッドを保護します。 例えば、多くのポッドまたはすべてのポッドで特定ポッド/サービスへのアクセスが不要である場合に、デフォルトでポッドがそのポッド/サービスにアクセスできないようにしたいのであれば、Kubernetes ネットワーク・ポリシーを作成して、そのポッド/サービスへの ingress トラフィックをブロックできます。 また Kubernetes ネットワーク・ポリシーは、別々の名前空間内のポッドとサービスの通信方法を制御して、名前空間の間のワークロードの分離を実施するのに役立ちます。
- ポッドのパーミッションをコントロールするには?
- プロジェクト内またはプロジェクト間でポッド権限を制御するために、Red Hat OpenShift on IBM Cloud はセキュリティー・コンテキスト制約 (SCC) を使用します。 デフォルトで、すべてのクラスターに、Red Hat OpenShift の SCC と IBM 提供の SCC のセットがセットアップされるので、これらをサービス・アカウント、ポッド、デプロイメント、またはプロジェクトに割り当ててクラスター内の権限を制限できます。 SCC を明示的に割り当てない場合、ポッドは
restricted
SCC を使用します。Red Hat OpenShift SCC は、コミュニティー Kubernetes クラスターのデフォルトのポッド・セキュリティー・ポリシーよりも厳格です。 コミュニティー Kubernetes クラスターで実行されるアプリを Red Hat OpenShift で実行するには、変更が必要になる場合があります。 詳しくは、セキュリティー・コンテキスト制約の構成を参照してください。 - コンテナを保護するために他にできることはありますか?
- 特権コンテナの数を制限する。 コンテナーは、他のプロセスから分離された独立した Linux プロセスとしてコンピュート・ホスト上で実行されます。 他の Linux プロセス、ホスト・ファイル・システム、ホスト・デバイスを保護するために、コンテナーの中で root 権限を持つユーザーでも、コンテナーの外では権限が制限されます。 一部のアプリは、ホスト・ファイル・システムへのアクセス権限や高い権限がないと、正しく機能しません。 コンテナーを特権モードで実行すると、コンピュート・ホストで実行されるプロセスと同じアクセス権限を、そのコンテナーに許可できます。
- 特権コンテナーが乗っ取られると、クラスターおよび基礎コンピュート・ホストに甚大な損害がもたらされる可能性があることに注意してください。 特権モードで実行するコンテナーの数を制限し、高い権限がなくても実行できるようにアプリの構成を変更することを検討してください。
特権コンテナーをクラスター内で実行できないようにする場合は、カスタムのセキュリティー・コンテキスト制約をセットアップすることを検討してください。
- OS セキュリティー設定をポッドに適用する
- デフォルトの セキュリティ・コンテキスト制約をカスタマイズして、コンテナ内で実行できるユーザーIDとグループID、またはボリューム・マウント・パスを所有するユーザーIDとグループIDを制御できます。 特定のユーザー ID を設定すると、最小特権モデルが円滑化されます。 セキュリティー・コンテキストによってユーザーが指定されない場合、Kubernetes は、コンテナー・イメージで指定されているユーザーを自動的に使用します。 詳しくは、セキュリティー・コンテキスト制約の構成を参照してください。
- コンテナー用の CPU とメモリーの制限を設定する
- どのコンテナーも、正常に起動して実行し続けるためには、特定の量の CPU とメモリーが必要です。 コンテナやポッドに Limit Rangeを定義して、消費できるCPUとメモリの量を制限できます。 CPU とメモリーの制限を設定しない場合、コンテナーがビジーになると、使用可能なすべてのリソースが使用されます。 このようなリソースの大量消費は、正常に始動/稼働するだけの十分なリソースを持たないワーカー・ノード上の他のコンテナーに影響を与える可能性があり、ワーカー・ノードをサービス妨害攻撃のリスクにさらします。
個人情報の保管
Kubernetes リソースおよびコンテナー・イメージ内の個人情報のセキュリティーを確保する責任を持ちます。 個人情報には、自分の名前、住所、電話番号、E メール・アドレス、および自分自身や顧客、その他の人を特定したり、連絡を取ったり、居場所を見つけたりすることができるその他の情報が含まれます。
- Kubernetes シークレットを使用した個人情報の保管
-
個人情報は、個人情報を保持するように設計された Kubernetes リソースにのみ保管してください。 たとえば、 Red Hat OpenShift プロジェクト、デプロイメント、サービス、または設定マップの名前に自分の名前を使用しないでください。 適切な保護と暗号化のために、個人情報は代わりに 秘密に保存する。
-
クラスター全体におけるすべてのシークレットの集中管理、およびアプリケーション・ランタイムでの注入には、IBM Cloud Secrets Manager を試してください。
- Kubernetes
imagePullSecret
を使用したイメージ・レジストリー資格情報の保管 -
個人情報をコンテナー・イメージまたはレジストリー名前空間に保管しないでください。 適切な保護と暗号化のために、レジストリ認証情報は Kubernetes
imagePullSecrets
に、その他の個人情報は secretsに保存します。 個人情報がイメージの前のレイヤーに保管されている場合、イメージを削除するだけではこの個人情報を削除できない場合があることに注意してください。
Kubernetes セキュリティー情報
Kubernetes に脆弱性が見つかった場合、Kubernetes は、セキュリティー情報で CVE を発表してユーザーに通知し、脆弱性に対処するためにユーザーが実行する必要があるアクションについて説明します。 Red Hat OpenShift on IBM Cloud ユーザーや IBM Cloud プラットフォームに影響のある Kubernetes のセキュリティー情報は、IBM Cloud のセキュリティー情報で公開されています。
一部の CVE では、Red Hat OpenShift 内の定期的なクラスター更新プロセスの一部としてインストールできる、Red Hat OpenShift on IBM Cloud バージョンの最新パッチ更新が必要になります。 悪意のある攻撃からクラスターを保護するために、時機を逃さずセキュリティー・パッチを適用してください。 セキュリティ・パッチに含まれる内容の詳細については、 Red Hat OpenShift on IBM Cloud のバージョン情報を 参照してください。