説明
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 の作成権限は残るため、必要性を別途確認してください。