Pod のポート転送を許可する RBAC

pods/portforward は、通常のネットワーク制御とは別にコンテナーへ直接接続する経路になり得ます。

説明

pods/portforward へのアクセス権があると、クラスター内の Pod に直接通信する経路を開けます。通常のサービス公開ポリシーや一部のネットワーク制御を迂回する可能性がありますが、サービス自体の認証を代替するものではありません。

本番環境のポート転送は単なる便利な機能ではなく、慎重に扱うべきアクセス権です。必要な場合だけに限定してください。

想定される影響

  • Pod 内のサービスと直接通信できます。
  • ネットワーク分離や公開経路の制限を迂回する可能性があります。
  • 機密性の高い内部サービスへのアクセス経路が増えるおそれがあります。

対処方法

  • RBAC ロールの pods/portforward 権限を削除するか、最小限にしてください。
  • 本番のデバッグ用ポート転送は、承認された手順でのみ許可してください。
  • 内部サービスへのアクセスには、標準のネットワーク経路と認証ポリシーを優先してください。

例

ロールを付与する RoleBinding は省略しています。ほかのロールで同じ権限を付与していないかも確認してください。

変更前

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

変更後

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

説明:

  • 変更前: pods/portforward により、内部の Pod に直接接続する経路を開けます。
  • 変更後: このロールからポート転送の許可を削除します。Pod の作成権限は残るため、必要性を別途確認してください。

参考資料