4.15. セキュリティーポリシーの管理
指定したセキュリティー標準、カテゴリー、および制御に基づいてクラスターのコンプライアンスを報告および検証するためのセキュリティーポリシーを作成します。
以下のセクションを参照してください。
4.15.1. セキュリティーポリシーの作成
コマンドラインインターフェイス (CLI) またはコンソールからセキュリティーポリシーを作成できます。
必要なアクセス権限: クラスターの管理者
重要: * ポリシーを特定のクラスターに適用するには、配置および配置バインディングを定義する必要があります。PlacementBinding
リソースは配置をバインドします。クラスターの Label selector フィールドに有効な値を入力して、Placement
および PlacementBinding
リソースを定義してください。* Placement
リソースを使用するには、ManagedClusterSetBinding
リソースを使用して、ManagedClusterSet
リソースを Placement
リソースの namespace にバインドする必要があります。詳細は、ManagedClusterSetBinding リソースの作成 を参照してください。
4.15.1.1. コマンドラインインターフェイスからのセキュリティーポリシーの作成
コマンドラインインターフェイス (CLI) からポリシーを作成するには、以下の手順を実行します。
以下のコマンドを実行してポリシーを作成します。
oc create -f policy.yaml -n <policy-namespace>
ポリシーが使用するテンプレートを定義します。YAML ファイルを編集し、
policy-templates
フィールドを追加してテンプレートを定義します。ポリシーは以下の YAML ファイルのようになります。apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy1 spec: remediationAction: "enforce" # or inform disabled: false # or true namespaceSelector: include: - "default" - "my-namespace" policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: operator # namespace: # will be supplied by the controller via the namespaceSelector spec: remediationAction: "inform" object-templates: - complianceType: "musthave" # at this level, it means the role must exist and must have the following rules apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: example objectDefinition: rules: - complianceType: "musthave" # at this level, it means if the role exists the rule is a musthave apiGroups: ["extensions", "apps"] resources: ["deployments"] verbs: ["get", "list", "watch", "create", "delete","patch"]
PlacementBinding
リソースを定義して、ポリシーをPlacement
リソースにバインドします。PlacementBinding
リソースは、次の YAML の例のようになります。apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding1 placementRef: name: placement1 apiGroup: cluster.open-cluster-management.io kind: Placement subjects: - name: policy1 apiGroup: policy.open-cluster-management.io kind: Policy
4.15.1.1.1. CLI からのセキュリティーポリシーの表示
以下の手順を実行して、CLI からセキュリティーポリシーを表示します。
以下のコマンドを実行して、特定のセキュリティーポリシーの詳細を表示します。
oc get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> -o yaml
以下のコマンドを実行して、セキュリティーポリシーの詳細を表示します。
oc describe policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
4.15.1.2. コンソールからのクラスターセキュリティーポリシーの作成
Red Hat Advanced Cluster Management にログインしたら、Governance ページに移動し、Create policy をクリックします。コンソールから新規ポリシーを作成すると、YAML エディターで YAML ファイルも作成されます。YAML エディターを表示するには、Create policy フォームの最初にトグルを選択して有効にします。
Create policy フォームに入力し、Submit ボタンを選択します。YAML ファイルは以下のポリシーのようになります。
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-pod annotations: policy.open-cluster-management.io/categories: 'SystemAndCommunicationsProtections,SystemAndInformationIntegrity' policy.open-cluster-management.io/controls: 'control example' policy.open-cluster-management.io/standards: 'NIST,HIPAA' policy.open-cluster-management.io/description: spec: complianceType: musthave namespaces: exclude: ["kube*"] include: ["default"] pruneObjectBehavior: None object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Pod metadata: name: pod1 spec: containers: - name: pod-name image: 'pod-image' ports: - containerPort: 80 remediationAction: enforce disabled: false
次の
PlacementBinding
の例を参照してください。apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-pod placementRef: name: placement-pod kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-pod kind: Policy apiGroup: policy.open-cluster-management.io
次の
Placement
の例を参照してください。apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-pod spec: predicates: - requiredClusterSelector: labelSelector: matchLabels: cloud: "IBM"
- オプション: ポリシーの説明を追加します。
- Create Policy をクリックします。コンソールからセキュリティーポリシーが作成されました。
4.15.1.2.1. コンソールからのセキュリティーポリシーの表示
コンソールからセキュリティーポリシーとステータスを表示します。
- Governance ページに移動し、ポリシー表の一覧を表示します。注記: ポリシー表の一覧をフィルタリングするには、Policies タブまたは Cluster violations タブを選択します。
-
詳細を表示するポリシーを 1 つ選択します。Details、Clusters、および Templates タブが表示されます。クラスターまたはポリシーのステータスを判断できない場合は、
No status
メッセージが表示されます。 - または、Policies タブを選択してポリシーのリストを表示します。ポリシーの行をデプロイメントすると、Description、Standards、Controls、および Categories の詳細が表示されます。
4.15.1.3. CLI からのポリシーセットの作成
デフォルトでは、ポリシーまたは配置のないポリシーセットが作成されます。ポリシーセットの配置を作成し、クラスターに存在するポリシーを 1 つ以上設定する必要があります。ポリシーセットを作成する場合は、多くのポリシーを追加できます。
以下のコマンドを実行して CLI からポリシーセットを作成します。
oc apply -f <policyset-filename>
4.15.1.4. コンソールからのポリシーセットの作成
- ナビゲーションメニューから Govern を選択します。
- Policy sets タブを選択します。
- Create policy set ボタンを選択し、フォームを完了します。
- ポリシーセットの詳細を追加し、送信 ボタンを選択します。
ポリシーがポリシーテーブルからリスト表示されます。
4.15.2. セキュリティーポリシーの更新
セキュリティーポリシーを更新する方法を学びます。
4.15.2.1. CLI からのポリシーセットへのポリシーの追加
次のコマンドを実行して、ポリシーセットを編集します。
oc edit policysets <your-policyset-name>
-
ポリシーセットの
policies
セクションのリストにポリシー名を追加します。 - 次のコマンドを使用して、追加したポリシーをポリシーセットの配置セクションに適用します。
oc apply -f <your-added-policy.yaml>
PlacementBinding
と Placement
の両方が作成されます。
注記: 配置バインディングを削除すると、ポリシーはポリシーセットによって配置されます。
4.15.2.2. コンソールからのポリシーセットへのポリシーの追加
- Policy sets タブを選択して、ポリシーセットにポリシーを追加します。
- Actions アイコンを選択し、Edit を選択します。Edit policy set フォームが表示されます。
- フォームの Policies セクションに移動し、ポリシーセットに追加するポリシーを選択します。
4.15.2.3. セキュリティーポリシーの無効化
デフォルトでは、ポリシーは有効です。コンソールからポリシーを無効にします。
Red Hat Advanced Cluster Management for Kubernetes コンソールにログインしたら、Governance ページに移動し、ポリシー表のリストを表示します。
Actions アイコン > Disable policy の順に選択します。Disable Policy ダイアログボックスが表示されます。
Disable policy をクリックします。ポリシーが無効化されました。
4.15.3. セキュリティーポリシーの削除
CLI またはコンソールからセキュリティーポリシーを削除します。
CLI からセキュリティーポリシーを削除します。
以下のコマンドを実行してセキュリティーポリシーを削除します。
oc delete policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
ポリシーを削除すると、ターゲットクラスターから削除されます。
oc get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
コマンドを実行して、ポリシーが削除されたことを確認します。
コンソールからセキュリティーポリシーを削除します。
ナビゲーションメニューから Governance をクリックし、ポリシー表のリストを表示します。ポリシー違反表で、削除するポリシーの Actions アイコンをクリックします。
Remove をクリックします。Remove policy ダイアログボックスから、Remove policy をクリックします。
4.15.3.1. コンソールからのポリシーセットの削除
- Policy sets タブから、ポリシーセットの Actions アイコンを選択します。Delete をクリックすると、Permanently delete Policyset? ダイアログボックスが表示されます。
- Delete ボタンをクリックします。
4.15.4. ポリシーによって作成されたリソースのクリーンアップ
ポリシーによって作成されたリソースをクリーンアップするには、設定ポリシーで pruneObjectBehavior
パラメーターを使用します。pruneObjectBehavior
が設定されていると、関連するオブジェクトは、関連する設定ポリシー (または親ポリシー) が削除された後にのみクリーンアップされます。
パラメーターに使用できる値は、次の説明を参照してください。
-
DeleteIfCreated
: ポリシーによって作成されたすべてのリソースをクリーンアップします。 -
DeleteAll
: ポリシーによって管理されるすべてのリソースをクリーンアップします。 -
None
: これはデフォルト値であり、関連するリソースが削除されない以前のリリースと同じ動作を維持します。
コマンドラインからポリシーを作成するときに、YAML ファイルに値を直接設定できます。
コンソールから、Policy templates ステップの Prune Object Behavior セクションで値を選択できます。
注記:
-
Operator をインストールするポリシーに
pruneObjectBehavior
パラメーターが定義されている場合は、Operator のアンインストールを完了するのに追加のクリーンアップが必要です。このクリーンアップの一環として、Operator のClusterServiceVersion
オブジェクトを削除する必要がある場合があります。 -
マネージドクラスターで
config-policy-addon
リソースを無効にすると、pruneObjbectBehavior
は無視されます。ポリシーの関連リソースを自動的にクリーンアップするには、アドオンを無効にする前に、マネージドクラスターからポリシーを削除する必要があります。
4.15.5. ポリシーコマンドラインインターフェイス
policytools
コマンドラインインターフェイス (CLI) を使用すると、ポリシーをローカルで操作して、作成とデバッグを支援できます。
template-resolver
template-resolver
はポリシーに埋め込まれているマネージドクラスターとハブクラスターテンプレートを解決するpolicytools
のサブコマンドです。template-resolver
は、ファイルまたは標準入力から読み取ります。ハブクラスターテンプレートを使用してポリシーを解決するには、Red Hat Advanced Cluster Management にインポートされるマネージドクラスターの名前を
--cluster-name
引数に指定し、ハブクラスターを指すkubeconfig
ファイルへのパスを--hub-kubeconfig
引数に指定する必要があります。
policytools
CLI は、ハブクラスターコンソールからダウンロードできます。コマンドラインツール を参照してください。
4.15.6. 関連情報
- ポリシー YAML ファイルの詳細な説明は、ハブクラスターポリシーフレームワーク [ポリシーの概要] を参照してください。
- 有効な式は、Kubernetes ドキュメントの セットベースの要件をサポートするリソース を参照してください。
-
安定した
Policysets
を表示します。これには、デプロイメントにポリシージェネレーターが必要です (PolicySets--Stable)。 - ポリシーに関する他のトピックは、ガバナンス を参照してください。
4.15.7. 非接続環境での Operator ポリシーの管理
インターネットに接続していない (切断状態の) Red Hat OpenShift Container Platform クラスターへの Red Hat Advanced Cluster Management for Kubernetes ポリシーのデプロイが必要になる場合があります。デプロイするポリシーを、Operator Lifecycle Manager Operator をインストールするポリシーのデプロイに使用する場合は、Operator カタログのミラーリング の手順に従う必要があります。
Operator イメージへのアクセスを検証するには、次の手順を実行します。
ポリシーで使用するために必要なパッケージが利用可能であることを検証するには、必要なパッケージが利用可能であることの確認 を参照してください。次のポリシーがデプロイされているマネージドクラスターで使用される各イメージレジストリーの可用性を検証する必要があります。
-
container-security-operator
-
非推奨:
gatekeeper-operator-product
-
compliance-operator
-
ソースが利用可能であることを検証するには、イメージコンテンツソースポリシーの設定 を参照してください。イメージコンテンツソースポリシーは、切断されたマネージドクラスターのそれぞれに存在する必要があり、プロセスを簡素化するためにポリシーを使用してデプロイできます。次のイメージソースの場所の表を参照してください。
ガバナンスポリシーの種類 イメージソースの場所 コンテナーのセキュリティー
registry.redhat.io/quay
コンプライアンス
registry.redhat.io/compliance
ゲートキーパー
registry.redhat.io/rhacm2
4.15.8. ポリシーセットを使用した Red Hat OpenShift Platform Plus のインストール
Red Hat Openshift Platform Plus ポリシーセットを適用するためのガイダンスは、引き続きお読みください。Red Hat OpenShift ポリシーセットを適用すると、Red Hat Advanced Cluster Security で保護されたクラスターサービスと Compliance Operator がすべての OpenShift Container Platform マネージドクラスターにデプロイされます。
4.15.8.1. 前提条件
ポリシーセットを適用する前に、次の手順を完了してください。
サブスクリプションをクラスターに適用できるようにするには、
policy-configure-subscription-admin-hub.yaml
ポリシーを適用し、修復アクションをenforce
に設定する必要があります。次の YAML をコピーして、コンソールの YAML エディターに貼り付けます。apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-configure-subscription-admin-hub annotations: policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration spec: remediationAction: inform disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-configure-subscription-admin-hub spec: remediationAction: inform severity: low object-templates: - complianceType: musthave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: open-cluster-management:subscription-admin rules: - apiGroups: - app.k8s.io resources: - applications verbs: - '*' - apiGroups: - apps.open-cluster-management.io resources: - '*' verbs: - '*' - apiGroups: - "" resources: - configmaps - secrets - namespaces verbs: - '*' - complianceType: musthave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: open-cluster-management:subscription-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: open-cluster-management:subscription-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: kube:admin - apiGroup: rbac.authorization.k8s.io kind: User name: system:admin --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-configure-subscription-admin-hub placementRef: name: placement-policy-configure-subscription-admin-hub kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-configure-subscription-admin-hub kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-policy-configure-subscription-admin-hub spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - {key: name, operator: In, values: ["local-cluster"]}
コマンドラインインターフェイスから以前の YAML を適用するには、以下のコマンドを実行します。
oc apply -f policy-configure-subscription-admin-hub.yaml
- Policy Generator kustomize プラグインをインストールします。Kustomize v4.5 以降を使用してください。Operator をインストールするためのポリシーの生成 を参照してください。
ポリシーは
policies
namespace にインストールされます。その namespace をClusterSet
にバインドする必要があります。たとえば、以下のサンプル YAML をコピーして適用し、namespace をデフォルトのClusterSet
にバインドします。apiVersion: cluster.open-cluster-management.io/v1beta2 kind: ManagedClusterSetBinding metadata: name: default namespace: policies spec: clusterSet: default
次のコマンドを実行して、コマンドラインインターフェイスから
ManagedClusterSetBinding
リソースを適用します。oc apply -f managed-cluster.yaml
前提条件を満たしたら、ポリシーセットを適用できます。
4.15.8.2. Red Hat OpenShift Platform Plus ポリシーセットの適用
-
Red Hat OpenShift Plus の前提条件設定が含まれている
openshift-plus/policyGenerator.yaml
ファイルを使用します。openshift-plus/policyGenerator.yaml
を参照してください。 Kustomize
コマンドを使用して、ポリシーをハブクラスターに適用します。kustomize build --enable-alpha-plugins | oc apply -f -
注記: インストールしたくない OpenShift Platform Plus のコンポーネントは、
policyGenerator.yaml
ファイルを編集し、それらのコンポーネントのポリシーを削除またはコメントアウトします。
4.15.8.3. 関連情報
- ポリシーセットの概要は、Red Hat OpenShift Platform Plus policy set を参照してください。
- トピックの最初の ポリシーセットを使用した Red Hat OpenShift Platform Plus のインストール に戻ります。
4.15.9. OperatorPolicy リソースを使用して Operator をインストールする
マネージドクラスターに Operator Lifecycle Manager (OLM) マネージドオペレーターをインストールするには、Policy
定義で OperatorPolicy
ポリシーテンプレートを使用します。
4.15.9.1. Quay をインストールするための OperatorPolicy リソースの作成
Red Hat Operator カタログを使用して stable-3.11
チャネルに最新の Quay Operator をインストールする次の Operator ポリシーサンプルを参照してください。
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: install-quay namespace: open-cluster-management-global-set spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1beta1 kind: OperatorPolicy metadata: name: install-quay spec: remediationAction: enforce severity: critical complianceType: musthave upgradeApproval: None subscription: channel: stable-3.11 name: quay-operator source: redhat-operators sourceNamespace: openshift-marketplace
OperatorPolicy
ポリシーテンプレートを追加すると、コントローラーを使用してクラスター上に operatorGroup
オブジェクトおよび subscription
オブジェクトが作成されます。その結果、インストールの残りの部分は OLM によって完了します。マネージドクラスターの OperatorPolicy
リソースの .status.Conditions
フィールドと .status.relatedObjects
フィールドで、所有リソースの正常性を確認できます。
Operator ポリシーのステータスを確認するには、マネージドクラスターで次のコマンドを実行します。
oc -n <managed cluster namespace> get operatorpolicy install-quay
4.15.9.2. 関連情報
Operator ポリシーコントローラー を参照してください。