7.8. Security Profiles Operator の高度なタスク
高度なタスクを使用して、メトリックを有効にしたり、Webhook を設定したり、syscall を制限したりします。
7.8.1. seccomp プロファイルで許可されるシステムコールを制限する リンクのコピーリンクがクリップボードにコピーされました!
Security Profiles Operator は、デフォルトでは seccomp プロファイル内の syscalls を制限しません。spod 設定で、許可される syscalls のリストを定義できます。
手順
allowedSyscallsのリストを定義するには、次のコマンドを実行してspecパラメーターを調整します。oc -n openshift-security-profiles patch spod spod --type merge \ -p '{"spec":{"allowedSyscalls": ["exit", "exit_group", "futex", "nanosleep"]}}'$ oc -n openshift-security-profiles patch spod spod --type merge \ -p '{"spec":{"allowedSyscalls": ["exit", "exit_group", "futex", "nanosleep"]}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この Operator は seccomp プロファイルのみをインストールします。このプロファイルには、許可リストに定義されている syscalls の一部が含まれています。このルールセットに準拠していないすべてのプロファイルは拒否されます。
許可される syscalls のリストが spod 設定で変更されると、Operator はすでにインストールされている非準拠のプロファイルを特定し、それを自動的に削除します。
7.8.2. コンテナーランタイムのベースシステムコール リンクのコピーリンクがクリップボードにコピーされました!
baseProfileName 属性を使用すると、特定のランタイムがコンテナーを起動するために必要な最小限の syscalls を設定できます。
手順
SeccompProfilekind オブジェクトを編集し、baseProfileName: runc-v1.0.0をspecフィールドに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.3. spod デーモンでのメモリー最適化の有効化 リンクのコピーリンクがクリップボードにコピーされました!
プロファイルの記録が有効になっている場合、spod デーモンプロセス内で実行されているコントローラーは、クラスター内の使用可能な Pod をすべて監視します。そこれにより、大規模なクラスターではメモリー使用量が非常に多くなり、その結果、spod デーモンがメモリー不足になったり、クラッシュしたりする可能性があります。
クラッシュを防ぐために、プロファイル記録用にラベル付けされた Pod のみをキャッシュメモリーにロードするように spod デーモンを設定できます。
デフォルトで SPO メモリーの最適化は有効になっていません。
手順
次のコマンドを実行してメモリー最適化を有効にします。
oc -n openshift-security-profiles patch spod spod --type=merge -p '{"spec":{"enableMemoryOptimization":true}}'$ oc -n openshift-security-profiles patch spod spod --type=merge -p '{"spec":{"enableMemoryOptimization":true}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のセキュリティープロファイルを記録するには、Pod に
spo.x-k8s.io/enable-recording: "true"のラベルを付ける必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.4. デーモンリソース要件のカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
デーモンコンテナーのデフォルトのリソース要件は、spod 設定の daemonResourceRequirements フィールドを使用して調整できます。
手順
デーモンコンテナーのメモリーと CPU の要求と制限を指定するには、次のコマンドを実行します。
oc -n openshift-security-profiles patch spod spod --type merge -p \ '{"spec":{"daemonResourceRequirements": { \ "requests": {"memory": "256Mi", "cpu": "250m"}, \ "limits": {"memory": "512Mi", "cpu": "500m"}}}}'$ oc -n openshift-security-profiles patch spod spod --type merge -p \ '{"spec":{"daemonResourceRequirements": { \ "requests": {"memory": "256Mi", "cpu": "250m"}, \ "limits": {"memory": "512Mi", "cpu": "500m"}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.5. spod デーモン Pod のカスタム優先クラス名の設定 リンクのコピーリンクがクリップボードにコピーされました!
spod デーモン Pod のデフォルトの優先クラス名は system-node-critical に設定されます。カスタム優先クラス名は、spod 設定の priorityClassName フィールドに値を入力して設定できます。
手順
次のコマンドを実行して、優先クラス名を設定します。
oc -n openshift-security-profiles patch spod spod --type=merge -p '{"spec":{"priorityClassName":"my-priority-class"}}'$ oc -n openshift-security-profiles patch spod spod --type=merge -p '{"spec":{"priorityClassName":"my-priority-class"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
securityprofilesoperatordaemon.openshift-security-profiles.x-k8s.io/spod patched
securityprofilesoperatordaemon.openshift-security-profiles.x-k8s.io/spod patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.6. メトリクスの使用 リンクのコピーリンクがクリップボードにコピーされました!
openshift-security-profiles namespace は、kube-rbac-proxy コンテナーによって保護されるメトリクスエンドポイントを提供します。すべてのメトリクスは、openshift-security-profiles namespace 内の metrics サービスによって公開されます。
Security Profiles Operator には、クラスター内からメトリックを取得するためのクラスターロールと、対応するバインディング spo-metrics-client が含まれています。次の 2 つのメトリクスパスを使用できます。
-
metrics.openshift-security-profiles/metrics: コントローラーのランタイムメトリック用 -
metrics.openshift-security-profiles/metrics-spod: Operator デーモンメトリクス用
手順
メトリクスサービスのステータスを表示するには、次のコマンドを実行します。
oc get svc/metrics -n openshift-security-profiles
$ oc get svc/metrics -n openshift-security-profilesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metrics ClusterIP 10.0.0.228 <none> 443/TCP 43s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metrics ClusterIP 10.0.0.228 <none> 443/TCP 43sCopy to Clipboard Copied! Toggle word wrap Toggle overflow メトリクスを取得するには、次のコマンドを実行して、
openshift-security-profilesnamespace でデフォルトのServiceAccountトークンを使用してサービスエンドポイントをクエリーします。oc run --rm -i --restart=Never --image=registry.fedoraproject.org/fedora-minimal:latest \ -n openshift-security-profiles metrics-test -- bash -c \ 'curl -ks -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://metrics.openshift-security-profiles/metrics-spod'$ oc run --rm -i --restart=Never --image=registry.fedoraproject.org/fedora-minimal:latest \ -n openshift-security-profiles metrics-test -- bash -c \ 'curl -ks -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://metrics.openshift-security-profiles/metrics-spod'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
HELP security_profiles_operator_seccomp_profile_total Counter about seccomp profile operations. TYPE security_profiles_operator_seccomp_profile_total counter
# HELP security_profiles_operator_seccomp_profile_total Counter about seccomp profile operations. # TYPE security_profiles_operator_seccomp_profile_total counter security_profiles_operator_seccomp_profile_total{operation="delete"} 1 security_profiles_operator_seccomp_profile_total{operation="update"} 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別の namespace からメトリックを取得するには、次のコマンドを実行して
ServiceAccountをspo-metrics-clientClusterRoleBindingにリンクします。oc get clusterrolebinding spo-metrics-client -o wide
$ oc get clusterrolebinding spo-metrics-client -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS spo-metrics-client ClusterRole/spo-metrics-client 35m openshift-security-profiles/default
NAME ROLE AGE USERS GROUPS SERVICEACCOUNTS spo-metrics-client ClusterRole/spo-metrics-client 35m openshift-security-profiles/defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.6.1. コントローラーランタイムメトリクス リンクのコピーリンクがクリップボードにコピーされました!
controller-runtime metrics と DaemonSet エンドポイント metrics-spod は、一連のデフォルトメトリクスを提供します。デーモンによって追加のメトリックが提供され、常に security_profiles_operator_ という接頭辞が付けられます。
| メトリックキー | 可能なラベル | 型 | 目的 |
|---|---|---|---|
|
|
| カウンター | seccomp プロファイル操作の量。 |
|
|
| カウンター | seccomp プロファイル監査操作の量。ログエンリッチャーを有効にする必要があります。 |
|
|
| カウンター | seccomp プロファイル bpf 操作の量。bpf レコーダを有効にする必要があります。 |
|
|
| カウンター | seccomp プロファイルエラーの量。 |
|
|
| カウンター | SELinux プロファイル操作の量。 |
|
|
| カウンター | SELinux プロファイルの監査操作の量。ログエンリッチャーを有効にする必要があります。 |
|
|
| カウンター | SELinux プロファイルエラーの量。 |
7.8.7. ログエンリッチャーの使用 リンクのコピーリンクがクリップボードにコピーされました!
Security Profiles Operator にはログ強化機能が含まれており、デフォルトでは無効になっています。ログエンリッチャーコンテナーは、ローカルノードから監査ログを読み取るための privileged 権限で実行されます。ログエンリッチャーは、ホスト PID namespace hostPID 内で実行されます。
ログエンリッチャーには、ホストプロセスを読み取る権限が必要です。
手順
次のコマンドを実行して、
spod設定にパッチを適用し、ログエンリッチャーを有効にします。oc -n openshift-security-profiles patch spod spod \ --type=merge -p '{"spec":{"enableLogEnricher":true}}'$ oc -n openshift-security-profiles patch spod spod \ --type=merge -p '{"spec":{"enableLogEnricher":true}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
securityprofilesoperatordaemon.security-profiles-operator.x-k8s.io/spod patched
securityprofilesoperatordaemon.security-profiles-operator.x-k8s.io/spod patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Security Profiles Operator は、
spodデーモンセットを自動的に再デプロイします。次のコマンドを実行して、監査ログを表示します。
oc -n openshift-security-profiles logs -f ds/spod log-enricher
$ oc -n openshift-security-profiles logs -f ds/spod log-enricherCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
I0623 12:51:04.257814 1854764 deleg.go:130] setup "msg"="starting component: log-enricher" "buildDate"="1980-01-01T00:00:00Z" "compiler"="gc" "gitCommit"="unknown" "gitTreeState"="clean" "goVersion"="go1.16.2" "platform"="linux/amd64" "version"="0.4.0-dev" I0623 12:51:04.257890 1854764 enricher.go:44] log-enricher "msg"="Starting log-enricher on node: 127.0.0.1" I0623 12:51:04.257898 1854764 enricher.go:46] log-enricher "msg"="Connecting to local GRPC server" I0623 12:51:04.258061 1854764 enricher.go:69] log-enricher "msg"="Reading from file /var/log/audit/audit.log" 2021/06/23 12:51:04 Seeked /var/log/audit/audit.log - &{Offset:0 Whence:2}I0623 12:51:04.257814 1854764 deleg.go:130] setup "msg"="starting component: log-enricher" "buildDate"="1980-01-01T00:00:00Z" "compiler"="gc" "gitCommit"="unknown" "gitTreeState"="clean" "goVersion"="go1.16.2" "platform"="linux/amd64" "version"="0.4.0-dev" I0623 12:51:04.257890 1854764 enricher.go:44] log-enricher "msg"="Starting log-enricher on node: 127.0.0.1" I0623 12:51:04.257898 1854764 enricher.go:46] log-enricher "msg"="Connecting to local GRPC server" I0623 12:51:04.258061 1854764 enricher.go:69] log-enricher "msg"="Reading from file /var/log/audit/audit.log" 2021/06/23 12:51:04 Seeked /var/log/audit/audit.log - &{Offset:0 Whence:2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.7.1. ログエンリッチャーを使用してアプリケーションをトレースする リンクのコピーリンクがクリップボードにコピーされました!
Security Profiles Operator ログエンリッチャーを使用して、アプリケーションをトレースできます。
手順
アプリケーションをトレースするには、
SeccompProfileロギングプロファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロファイルを使用する Pod オブジェクトを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ログエンリッチャーの出力を調べます。
oc -n openshift-security-profiles logs -f ds/spod log-enricher
$ oc -n openshift-security-profiles logs -f ds/spod log-enricherCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例7.1 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.8. Webhook の設定 リンクのコピーリンクがクリップボードにコピーされました!
プロファイルバインディングおよびプロファイル記録オブジェクトは Webhook を使用できます。プロファイルバインディングおよび記録オブジェクトの設定は MutatingWebhookConfiguration CR であり、Security Profiles Operator によって管理されます。
Webhook 設定を変更するために、spod CR は、failurePolicy、namespaceSelector、および objectSelector 変数の変更を許可する webhookOptions フィールドを公開します。これにより、Webhook を "ソフトフェイル" に設定したり、namespace のサブセットに制限したりして、Webhook が失敗した場合でも他の namespace やリソースに影響を与えないようにすることができます。
手順
次のパッチファイルを作成して、
recording.spo.ioWebhook 設定を設定し、spo-record=trueでラベル付けされた Pod のみを記録します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
spod/spodインスタンスにパッチを適用します。oc -n openshift-security-profiles patch spod \ spod -p $(cat /tmp/spod-wh.patch) --type=merge$ oc -n openshift-security-profiles patch spod \ spod -p $(cat /tmp/spod-wh.patch) --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果の
MutatingWebhookConfigurationオブジェクトを表示するには、次のコマンドを実行します。oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyaml$ oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow