セキュリティー・コンテキスト制約 (SCC) による権限拒否エラーでポッドをビルドできないのはなぜですか?
仮想プライベート・クラウド クラシック・インフラストラクチャー
セキュリティー・コンテキスト制約 (SCC) を使用するシステム・ポッドまたは他のポッドが操作の再試行を繰り返しますが、「permission denied
」エラーで失敗します。 例えば、内部 image-registry
ポッドにログインして docker push
を実行しようとする状況などです。
イメージを内部レジストリーにプッシュする場合のエラー・メッセージの例:
error: build error: Failed to push image: error copying layers and metadata
ポッドで使用している SCC、またはポッドが属するシステム・グループで使用している SCC に、適切な権限が含まれていない可能性があります。 oc adm policy add-scc-to-group <scc> system:<group>
を実行して、システム・グループを SCC に追加した可能性があります。
ポッドがボリュームをマウントすると、SCC によって許可されるポッドの権限では、そのボリュームのデータの読み書きをポッドに許可できなくなる場合があります。
例えば、内部レジストリーは、イメージのデータを読み書きするボリュームをファイル・ストレージ・インスタンスにマウントします。 内部レジストリーが属する system:authenticated
グループが SCC を restricted
から anyuid
に変更した場合は、ポッドが異なる UID で実行されます。 UID が異なるために、内部レジストリー・ポッドは、ストレージ・デバイスとの間でイメージをプッシュ/プルできなくなります。
ポッドの SCC 許可を変更します。
-
ポッドを記述し、Annotations セクションで
openshift.io/scc: <scc>
セキュリティー・コンテキスト制約を確認します。oc describe pod -n <project> <pod>
出力例
NAME: image-registry-1234567 Namespace: openshift-image-registry Priority: 2000000000 PriorityClassName: system-cluster-critical Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Wed, 19 Feb 2020 15:38:53 -0500 Labels: docker-registry=default Annotations: openshift.io/scc: anyuid
-
セキュリティー・コンテキスト制約の詳細を表示し、**「Access」**セクションでユーザーおよびグループを確認します。
oc describe scc <scc>
出力例
NAME: anyuid Priority: <none> Access: Users: <none> Groups: system:authenticated
-
ユーザーまたはグループが SCC の許可を持たないようにするには、SCC からユーザーまたはグループを削除します。 詳しくは、クラスターに設定される Red Hat OpenShift および IBM Cloud のデフォルトの SCC を参照してください。
oc adm policy remove-scc-from-group <scc> <(user|group)>
-
適切な権限が含まれている SCC にユーザーまたはグループを追加します。
oc adm policy add-scc-to-group <scc> <(user|group)>
-
ポッドを削除して、新しい SCC 権限でポッドが再スケジュールされるようにします。
oc delete pod -n <project> <pod>