17.3. Security Context Constraints の例
以下の例は、クラスター内で Security Context Constraints (SCC) を定義して使用する方法を示しています。
アノテーション付き privileged SCC
allowHostDirVolumePlugin: true
allowHostIPC: true
allowHostNetwork: true
allowHostPID: true
allowHostPorts: true
allowPrivilegedContainer: true
allowedCapabilities:
- '*'
apiVersion: security.openshift.io/v1
defaultAddCapabilities: []
fsGroup:
type: RunAsAny
groups:
- system:cluster-admins
- system:nodes
kind: SecurityContextConstraints
metadata:
annotations:
kubernetes.io/description: 'privileged allows access to all privileged and host
features and the ability to run as any user, any group, any fsGroup, and with
any SELinux context. WARNING: this is the most relaxed SCC and should be used
only for cluster administration. Grant with caution.'
creationTimestamp: null
name: privileged
priority: null
readOnlyRootFilesystem: false
requiredDropCapabilities: null
runAsUser:
type: RunAsAny
seLinuxContext:
type: RunAsAny
seccompProfiles:
- '*'
supplementalGroups:
type: RunAsAny
users:
- system:serviceaccount:default:registry
- system:serviceaccount:default:router
- system:serviceaccount:openshift-infra:build-controller
volumes:
- '*'
- 以下は、,
allowedCapabilities -
Pod が要求できる機能の一覧です。特殊な記号
*は任意の機能を許可しますが、リストが空の場合は、いずれの機能も要求できないことを意味します。 defaultAddCapabilities- Pod に含める追加機能のリストです。
fsGroup-
セキュリティーコンテキストの許可される値を定める
FSGroupストラテジータイプです。 groups- この SCC へのアクセスを持つグループです。
requiredDropCapabilities-
Pod から取り除く機能のリストです。または、
ALLを指定してすべての機能をドロップします。 runAsUser-
セキュリティーコンテキストの許可される値を定める
runAsUserストラテジータイプです。 seLinuxContext-
セキュリティーコンテキストの許可される値を定める
seLinuxContextストラテジータイプです。 supplementalGroups-
セキュリティーコンテキストの許可される補助グループを定める
supplementalGroupsストラテジーです。 users- この SCC にアクセスできるユーザーです。
volumes-
セキュリティーコンテキストで許容されるボリュームタイプです。この例では、
*はすべてのボリュームタイプの使用を許可します。
SCC の users フィールドおよび groups フィールドは SCC にアクセスできるユーザー制御します。デフォルトで、クラスター管理者、ノードおよびビルドコントローラーに特権付き SCC へのアクセスが付与されます。認証されたすべてのユーザーには restricted-v2 SCC へのアクセスが付与されます。
SCC へのアクセスを確認する場合は、以下のコマンドの動作に注意してください。
-
oc adm policy who-can use scc <scc_name>およびoc auth can-i use scc/<scc_name>コマンドは、RBAC ポリシー (RoleBindingまたはClusterRoleBindingリソース) のみを評価します。それらの出力には、SCC のusersおよびgroupsフィールドに直接設定されたユーザーやグループは含まれません。 -
oc describe scc <scc_name>コマンドは、SCC オブジェクト内に直接設定されているユーザーとグループのみを表示します。その出力には、RBAC ポリシーを通じて付与されたアクセス権限は含まれません。
明示的な runAsUser 設定を使用しない場合
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
containers:
- name: sec-ctx-demo
image: gcr.io/google-samples/node-hello:1.0
コンテナーまたは Pod が実行時に使用するユーザー ID を要求しない場合、有効な UID はこの Pod を作成する SCC よって異なります。restricted-v2 SCC はデフォルトですべての認証ユーザーに付与されるため、ほとんどの場合はすべてのユーザーおよびサービスアカウントで利用でき、使用されます。restricted-v2 SCC は、securityContext.runAsUser フィールドの使用できる値を制限し、これをデフォルトに設定するために MustRunAsRange ストラテジーを使用します。アドミッションプラグインではこの範囲を指定しないため、現行プロジェクトで openshift.io/sa.scc.uid-range アノテーションを検索して範囲フィールドにデータを設定します。最終的にコンテナーの runAsUser は予測が困難な範囲の最初の値と等しい値になります。予測が困難であるのはすべてのプロジェクトにはそれぞれ異なる範囲が設定されるためです。
明示的な runAsUser 設定を使用する場合
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
containers:
- name: sec-ctx-demo
image: gcr.io/google-samples/node-hello:1.0
特定のユーザー ID を要求するコンテナーまたは Pod が OpenShift Container Platform によって受け入れられるのは、サービスアカウントまたはユーザーにそのユーザー ID を許可する SCC へのアクセスが付与されている場合のみです。SCC は、任意の ID や特定の範囲内にある ID、または要求に固有のユーザー ID を許可します。
この設定は、SELinux、fsGroup、および Supplemental Groups について有効です。