7.8. Security Profiles Operator の高度なタスク
高度なタスクを使用して、メトリックを有効にしたり、Webhook を設定したり、syscall を制限したりします。
7.8.1. seccomp プロファイルで許可されるシステムコールを制限する リンクのコピーリンクがクリップボードにコピーされました!
Security Profiles Operator は、デフォルトでは、seccomp
プロファイルの syscall
を制限しません。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 は、許可リストに定義された syscall
のサブセットを持つ seccomp
プロファイルのみをインストールします。このルールセットに準拠していないすべてのプロファイルは拒否されます。
許可された syscall
のリストが spod
設定で変更されると、Operator はすでにインストールされている非準拠のプロファイルを特定し、それらを自動的に削除します。
7.8.2. コンテナーランタイムの基本システムコール リンクのコピーリンクがクリップボードにコピーされました!
baseProfileName
属性を使用して、特定のランタイムがコンテナーを開始するために最低限必要な syscall
を確立できます。
手順
SeccompProfile
kind オブジェクトを編集し、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 patched
Copy 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-profiles
Copy 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 43s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow メトリクスを取得するには、次のコマンドを実行して、
openshift-security-profiles
namespace でデフォルトの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"} 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別の namespace からメトリックを取得するには、次のコマンドを実行して
ServiceAccount
をspo-metrics-client
ClusterRoleBinding
にリンクします。oc get clusterrolebinding spo-metrics-client -o wide
$ oc get clusterrolebinding spo-metrics-client -o wide
Copy 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/default
Copy 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 patched
Copy 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-enricher
Copy 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-enricher
Copy 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.io
Webhook 設定を設定し、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=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 結果の
MutatingWebhookConfiguration
オブジェクトを表示するには、次のコマンドを実行します。oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyaml
$ oc get MutatingWebhookConfiguration \ spo-mutating-webhook-configuration -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow