IBM Cloud Docs
セキュリティー・コンテキスト制約 (SCC) による権限拒否エラーでポッドをビルドできないのはなぜですか?

セキュリティー・コンテキスト制約 (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 許可を変更します。

  1. ポッドを記述し、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
    
  2. セキュリティー・コンテキスト制約の詳細を表示し、**「Access」**セクションでユーザーおよびグループを確認します。

    oc describe scc <scc>
    

    出力例

    NAME:                        anyuid
    Priority:                    <none>
    Access:                        
        Users:                    <none>
        Groups:                    system:authenticated
    
  3. ユーザーまたはグループが SCC の許可を持たないようにするには、SCC からユーザーまたはグループを削除します。 詳しくは、クラスターに設定される Red Hat OpenShift および IBM Cloud のデフォルトの SCC を参照してください。

    oc adm policy remove-scc-from-group <scc> <(user|group)>
    
  4. 適切な権限が含まれている SCC にユーザーまたはグループを追加します。

    oc adm policy add-scc-to-group <scc> <(user|group)>
    
  5. ポッドを削除して、新しい SCC 権限でポッドが再スケジュールされるようにします。

    oc delete pod -n <project> <pod>