第2章 Pod Security Admission (PSA)
Red Hat OpenShift は、Pod Security Admission (PSA) を使用して、同じ Red Hat OpenShift クラスター内にあるアプリケーション Pod に一連のセキュリティールールを適用します。Cryostat のコンテキストでは、これらのアプリケーション Pod には、Cryostat Pod と Report サイドカー Pod が含まれます。オプションで、Cryostat カスタムリソース (CR) で Report サイドカー Pod を有効にすることができます。アプリケーションがポリシー基準を満たしていない場合、そのアプリケーションを Red Hat OpenShift クラスターで実行することはできません。
Red Hat OpenShift 4.8 では PodSecurityPolicy
API が非推奨となり、代わりに PSA が使用されます。PSA には以下のメリットがあります。
- アプリケーション Pod に Pod セキュリティー標準を適用できる組み込みコントローラーが含まれています。
-
Privileged
、Baseline
、Restricted
の 3 つの異なるポリシーを定義する Pod セキュリティー標準のセットが含まれています。
Red Hat OpenShift では、Security Context Constraints (SCC) で PSA を使用して、Red Hat OpenShift クラスターのポリシーを定義できます。デフォルトでは、restricted-v2
SCC は Restricted
Pod セキュリティー標準に準拠しています。
デフォルトでは、Cryostat Pod のセキュリティーコンテキストは restricted-v2
SCC に準拠します。つまり、Red Hat OpenShift は、Restricted
Pod セキュリティー標準を強制する namespace で Pod を許可できます。
Restricted
ポリシーでは、Red Hat build of Cryostat Operator がコンテナーセキュリティーコンテキストを次のように設定する必要があります。
-
ALL
機能を停止します。 -
allowPrivilegeEscaltion
をfalse
に設定します。
Restricted
ポリシーでは、Red Hat build of Cryostat Operator が Pod セキュリティーコンテキストを次のように設定する必要があります。
-
runAsNonRoot
をtrue
に設定します。 -
seccompProfile
をRuntimeDefault
に設定します。
さらに、Red Hat build of Cryostat Operator は、Cryostat アプリケーション Pod の Pod セキュリティーコンテキストで fsGroup
を定義し、Cryostat が Red Hat OpenShift の永続ストレージボリューム内のファイルを読み書きできるようにします。
Restricted
Pod セキュリティー標準への準拠以外に追加の要件がある場合は、Cryostat が使用するデフォルトのセキュリティーコンテキストをオーバーライドできます。
2.1. セキュリティーコンテキストの設定
Red Hat OpenShift の Cryostat カスタムリソース (CR) で、Pod とコンテナーのセキュリティーコンテキストを指定できます。セキュリティーコンテキストは、Cryostat Pod、Report サイドカー Pod (使用中の場合)、および各 Pod のコンテナーにパーミッションを適用します。
CR の設定を変更すると、これらの設定はデフォルトのセキュリティーコンテキスト設定をオーバーライドします。
セキュリティーコンテキストは、Pod 内に存在するアプリケーションに特定のパーミッションを適用します。セキュリティーコンテキストは、SCC ポリシーの基準を変更できません。カスタム SCC を作成して、Pod が実行できるアクションや Pod がアクセスできるリソースなど、厳密なパーミッションを Pod に適用するように Red Hat OpenShift クラスターに指示できます。
カスタム SCC を作成するには、クラスター管理パーミッションが必要です。また、クラスターで動作するすべての Pod のセキュリティーコンテキストを作成して、これらの Pod がカスタム SCC 要件を満たすようにする必要があります。
SCC は Red Hat OpenShift のクラスターレベルと namespace レベルで変更を強制的に適用するため、このクラスター内部で動作するすべての Pod がポリシー基準を受け取ります。これに対して、セキュリティーコンテキストは Pod 固有のものになります。
デフォルトでは、Red Hat build of Cryostat Operator は Cryostat Pod の restricted-v2
SCC ポリシーに準拠しています。
デフォルトでは、Red Hat build of Cryostat Operator は、Cryostat とそのコンポーネント (jfr-datasource
や grafana
など) のサービスアカウントを作成します。
このサービスアカウントでカスタム SCC を使用できるようにするには、以下のいずれかの手順を実行します。
-
カスタム SCC を
使用
するロールに Cryostat サービスアカウントをバインドするRole Binding
を作成します。 -
Label Syncer
コンポーネントを使用して、プロジェクトの名前空間が PSA ポリシーに従うように指示します。
Label Syncer
コンポーネントは、このドキュメントの範囲外になります。通常、openshift-
タグの接頭辞が付けられた Red Hat OpenShift システムの namespace で Label Syncer
コンポーネントは使用できません。
特定のパーミッションをアプリケーション Pod に適用するようにセキュリティーコンテキストを設定する前に、Red Hat OpenShift 上のクラスターにもたらされる可能性があるセキュリティーリスクを考慮してください。PSA では、通常、ほとんどの要件を満たす 3 つの段階的なポリシーレベルが用意されています。Red Hat は、Red Hat OpenShift Pod のセキュリティー標準に準拠しないセキュリティーコンテキストの変更について一切の責任を負いません。
前提条件
- Red Hat OpenShift Web コンソールを使用して OpenShift Container Platform にログインしている。
- Red Hat build of Cryostat Operator を Red Hat OpenShift のプロジェクトにインストールしている。Red Hat build of Cryostat Operator を使用した Red Hat OpenShift への Cryostat のインストール (Cryostat のインストール) を参照してください。
- オプション: PSA と SCC の新しいポリシーを参照している。セキュリティーコンテキスト制約の管理 (OpenShift Container Platform) を参照してください。
オプション: PSA が提供する 3 つのポリシーのいずれかを使用するようにプロジェクトを設定している。
- カスタム SCC を使用して Pod に特定のポリシーを適用する場合は、Pod のサービスアカウントがそれにアクセスできるように SCC を設定する必要があります。
手順
- Red Hat OpenShift Web コンソールから、Operators > Installed Operators をクリックします。
- 使用可能な Operator のリストから、Red Hat build of Cryostat を選択します。
- Provided APIs > Create をクリックします。Red Hat build of Cryostat Operator は、Report サイドカー Pod のサービスアカウントを作成しません。代わりに、これらの Pod は独自の namespace でデフォルトのサービスアカウントを使用します。
セキュリティーコンテキストを設定するには、次のいずれかのオプションを完了します。
YAML view をクリックします。
spec:
要素から、セキュリティー要件に一致するようにsecurityOptions
プロパティーおよびreportOptions
プロパティーを編集します。セキュリティーコンテキストの設定例
apiVersion: operator.cryostat.io/v1beta1 kind: Cryostat metadata: name: cryostat-sample spec: securityOptions: podSecurityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault coreSecurityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL runAsUser: 1001 dataSourceSecurityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL grafanaSecurityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL reportOptions: replicas: 1 podSecurityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault reportsSecurityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL runAsUser: 1001
Advanced Configurations を展開して、Red Hat OpenShift Web コンソールで追加のオプションを開きます。
図2.1 詳細設定メニューオプション
- Core Security Context を展開します。使用可能なオプションのリストから、セキュリティーコンテキストの設定を定義します。
- Create をクリックします。
- 必要に応じて、Data Source Security Context、Grafana Security Context、および Pod Security Context の手順 1 - 5 を繰り返します。
オプション: Report Generator サービスを使用している場合は、以下のように、このサービスのセキュリティーコンテキストを設定することもできます。
- Report Options から、Advanced Configurations を展開します。
- Security Options を展開します。必要に応じて、Reports Security Context および Pod Security Context を定義します。
関連情報