25
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

対象読者

この記事はOpenShiftやPodといった用語を理解できている方向けに書いています。

SCCとは?

SCC(Security Context Constraints)とはPodのパーミッションを制御する機能です。
OpenShiftのデフォルト状態ではrestrictedというSCCが設定されています。

SCCはPodに対して付与するロールです。
どのSCCが付与されるか、はユーザーやグループに設定することができ、Podを起動したユーザー、もしくはグループに設定されているSCCを適用します。

デフォルトSCC

デフォルトでは以下のようなSCCが設定されています。

$ oc get scc

NAME               PRIV      CAPS      SELINUX     RUNASUSER          FSGROUP     SUPGROUP    PRIORITY   READONLYROOTFS   VOLUMES
anyuid             false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    10         false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]
hostaccess         false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath persistentVolumeClaim secret]
hostmount-anyuid   false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath nfs persistentVolumeClaim secret]
hostnetwork        false     []        MustRunAs   MustRunAsRange     MustRunAs   MustRunAs   <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]
nonroot            false     []        MustRunAs   MustRunAsNonRoot   RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]
privileged         true      [*]       RunAsAny    RunAsAny           RunAsAny    RunAsAny    <none>     false            [*]
restricted         false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim secret]

デフォルトSCCは変更すべきではないと公式ドキュメントには記載されています。
もし変更してしまうとインプレイスアップグレードの時等に問題になる可能性があるそうです。

SCCの簡単な見方

RUNASUSERカラムだけ抜粋します。

restrictedSCCではMustRunAsRangeが設定されています。これはある一定の数値範囲の中にUIDが自動設定されるような動きになります。Rootグループで実行されるのでコンテナ内で権限設定する場合はグループに権限を付与しておく必要があります。

nonrootSCCに設定されているMustRunAsNonRootというのはRoot以外であれば何のユーザーで実行してもよいという意味になります。
ただし、ユーザー指定は1000等UID指定でなければなりません。
ユーザー指定はDockerfileのUSERを設定するか、DeploymentConfigやStatefulSetのyamlにてrunAsUser: 1000等と設定します。

anyuidに設定されているRunAsAnyはrootも含めて「どのユーザーでも良い」を意味します。

デフォルト状態でrestrictedが付与される仕組み

OpenShiftにログインする全てのユーザーはsystem:authenticatedという特殊なシステムグループに所属します。OpenShiftではデフォルト状態でsystem:authenticatedグループにrestrictedSCCが付与されています。

もしログインしたすべてのユーザーがPodを起動するときにnonrootSCCを使用したい場合はsystem:authenticatedグループにnonrootSCCを追加します。

$ oc adm add-scc-to-group nonroot system:authenticated

特例として一部のPodがanyuidで動作するようにしたい

SCCは当然サービスアカウントにも追加できます。

$ oc adm add-scc-to-user anyuid -z default

logging機能のためのElasticSearchやモニタリングのためのPrometheusはRootユーザーで動作します。であるにも関わらずデフォルトSCCを変更してしまった場合、これらのPodが動作しなくなります。よってそれらのPodには適用されているサービスアカウントにanyuidSCCを付与してRoot起動を許可します。

参考履歴

公式ドキュメント(3.9)
nekop's blog

25
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?