しばらく放置していましたが、やり始めたからには完成させないと!とある時急に思い立ったため、Red Hat openshift Administration試験(EX280)の勉強記事を完成させることにしました。今回で四回目です。(筆者は既にEX280合格済み)
今回はサービスアカウントの作成と適用について書きます。
サービスアカウントとは
二回目の記事で書いた通り、Openshiftのユーザーは(1)一般ユーザー、(2)システムユーザー、(3)サービスアカウントに分けられます。
サービスアカウントは、プロジェクト作成時にプロジェクト単位で生成されるシステムユーザーアカウントです。プロジェクト単位のアクセス制限を行うために使用されます。system:serviceaccount:project1:user1などがあります。
Openshiftでは、デフォルトでは作成したPodに対し、restrictedというセキュリティコンテクスト制約(SCC:Security Context Constraints)が適用されています。これは、作成したPodが外部リソースへアクセスすることを制限する機能です。
例えば、デフォルトの状態では、作成したPodはPort 80を使ってアクセスさせるためのサービスを起動することもできません。
このため、Podを作成した際は、一定の権限を持つサービスアカウントを作成し、そのサービスアカウントをPodに割り当てるという作業をする必要があります。
SCCの種類
SCCにはいくつかの種類があります。
自分でSCCを作成することもできますが、EX280の範囲ではデフォルトで作成されていたSCCを、自分で新規作成したサービスアカウントに適用できれば十分です。
デフォルトで用意されているSCCは合計8つありますが、とりあえずは以下3つだけ覚えておけば十分と思われます。
EX280を合格するだけであれば、おそらくanyuidだけ覚えておけば大丈夫ではないでしょうか。(根拠なし)
SCC名 | 説明 |
---|---|
privileged | 特権付きSCC。ホスト/Podへのrootアクセスが可能であり、ホストによるPodの作成・削除、Podへのrootアクセスが可能。 |
anyuid | 特権なしSCC。Podへのrootアクセスが可能。 |
restricted | 制限SCC。デフォルトの権限はこちら。Podへのrootアクセスができない他、外部リソースを使用することもできない。 |
ちなみに、以下のコマンドでデフォルトで用意されたSCCの一覧を取得することができます。
oc get scc
以下で詳細情報を取得することもできます。
oc describe scc anyuid
サービスアカウントの作成と適用
サービスアカウントは、Podをデプロイした後、権限が不足している場合に必要な権限を付与するために作成・適用します。
とりあえずここではtest-podというPodがデプロイされていることとします。このPodに対するrootアクセス権を付与したいと考えていることにします。
"sa"というサービスアカウントを作成することを考えます。サービスアカウントは以下のコマンドで作成できます。
oc create serviceaccount sa
次に、anyuid権限をサービスアカウントに割り当てます。-zオプションを忘れずに付けるようにしてください。
oc adm policy add-scc-to-user anyuid -z sa
作成したsaをtest-podに適用するコマンドは以下です。
oc set serviceaccount deployment/test-pod sa
三行なので、暗記しても良いかもしれません。繰り返しになりますが、-zオプションを忘れずに使用する様にしましょう。