コンテナー内でのコマンド実行を許可する RBAC

pods/exec は実行中のコンテナー内でのコマンド実行を許可するため、厳格な管理が必要です。

説明

pods/exec へのアクセス権があると、コンテナー内にあるコマンドを実行できます。コマンドがアクセスできる範囲は、コンテナーの実行ユーザーや権限にも左右されます。実行中のワークロード内部に直接入れるため、慎重に扱う必要があります。

強い権限を持つサービスアカウントや機密データを扱うコンテナーでは、被害が大きくなるおそれがあります。本番環境での利用は制限してください。

想定される影響

  • コンテナー内で直接コマンドを実行できます。
  • 機密性の高い環境変数、ファイル、トークンにアクセスされるおそれがあります。
  • 侵害されたアカウントから、ワークロード内部へ直接アクセスされる可能性があります。

対処方法

  • RBAC ロールから不要な pods/exec 権限を削除してください。
  • 本番環境のデバッグは承認されたアカウントと手順だけで行ってください。
  • 本番の名前空間に exec 権限を標準で付与しないでください。

例

RoleBinding は省略しています。実際のアクセス権を減らすには、このロールだけでなく、ほかのロールによる許可も確認してください。

変更前

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-namespace
  name: allow-exec
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/exec"]
    verbs: ["get", "list", "create"]

変更後

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-namespace
  name: allow-exec-neg
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list", "create"]

説明:

  • 変更前: pods/exec により、コンテナー内でのコマンド実行を許可します。
  • 変更後: このロールから exec 権限を削除します。Pod の作成権限は残るため、別途確認が必要です。

参考資料