Secret の読み取りを許可する RBAC

Secret の読み取り権限は、パスワード、トークン、鍵などの機密情報へのアクセスを可能にします。

説明

secrets に対する get、list、watch のいずれかが許可されると、その範囲の Secret の内容を読み取れます。Secret にはトークン、パスワード、証明書、API キーが含まれる場合があるため、慎重な管理が必要です。

読み取り操作であっても、認証情報へのアクセス権です。必要なワークロードと管理者だけに、最小限の範囲で付与してください。

想定される影響

  • パスワード、トークン、鍵などの機密情報を読み取られるおそれがあります。
  • 侵害されたアカウントから、ほかのシステムへ侵害が広がる可能性があります。
  • Secret にアクセスできる主体が多いと、事故の原因特定が難しくなります。

対処方法

  • secrets の get、list、watch 権限を最小限にしてください。
  • Secret の読み取りが必要なワークロードだけに許可してください。
  • RBAC の確認では、Secret 権限を特に注意が必要な項目として扱ってください。

例

RoleBinding は省略しています。ロールは必要な主体だけに関連付け、ほかのロールによる Secret へのアクセス許可も確認してください。

変更前

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: role-secret-reader
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get", "watch", "list"]

変更後

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: role-pod-and-logs-reader
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "watch", "list"]

説明:

  • 変更前: Secret の読み取りにより、機密性の高い認証情報へ直接アクセスできます。
  • 変更後: このロールでは Secret の代わりに Pod とログの読み取りを許可します。ログにもシークレットが含まれる場合があるため、必要な主体だけに許可してください。

参考資料