説明
Role または ClusterRole に secrets の get、list、watch 権限があり、その役割を主体にバインドすると、許可範囲の Secret データを読み取れます。一覧取得や変更の監視でも Secret 値が返される場合があります。Secret にはパスワード、トークン、証明書、キーが含まれることが多く、漏えい時の影響は大きくなります。
運用者やアプリケーションには、必要な場合だけ狭い範囲で付与してください。
想定される影響
- パスワード、トークン、キーなどの機密情報が漏えいする場合があります。
- 盗まれた認証情報を使って、他のシステムへ侵害が広がる場合があります。
対処方法
secretsに対する不要なget、list、watchとワイルドカード権限を削除してください。- 必要な名前空間と主体に限定し、実際の RoleBinding と ClusterRoleBinding も確認してください。
例
Role のルールだけを比較します。実際のアクセスには別途バインドが必要で、変更後の Pod 読み取り権限も必要な場合だけ使用してください。
変更前
hcl
resource "kubernetes_role" "role" {
metadata {
name = "terraform-example"
}
rule {
api_groups = [""]
resources = ["secrets"]
verbs = ["get", "list", "watch"]
}
}
変更後
hcl
resource "kubernetes_role" "role" {
metadata {
name = "terraform-example"
}
rule {
api_groups = [""]
resources = ["pods"]
verbs = ["get", "list", "watch"]
}
}
補足:
- 変更前: Secret の読み取り権限を定義します。
- 変更後: Secret の権限を削除し、Pod の読み取り権限だけを定義します。