Secret の読み取り権限を持つ RBAC Role

Secret の読み取り権限を、必要な主体と名前空間に限定してください。

説明

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 の読み取り権限だけを定義します。

参考資料