説明
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 とログの読み取りを許可します。ログにもシークレットが含まれる場合があるため、必要な主体だけに許可してください。