説明
GCP KMS Crypto Key の IAM ポリシーに allUsers や allAuthenticatedUsers などの広範なプリンシパルを含めると、必要な範囲を超えてキーの権限を与えるおそれがあります。影響はロールによって異なり、復号権限と対象の暗号文へのアクセスがそろうと、データの機密性が損なわれる可能性があります。
キーへの IAM 権限は、鍵素材を公開するという意味ではありません。例の roles/cloudkms.cryptoKeyEncrypter は暗号化を許可し、それだけで復号権限を与えるものではありません。サービスの認証要件や適用されるポリシーもリクエストに影響します。
想定される影響
- 意図しないプリンシパルが、許可されたキー操作を実行するおそれがあります。
- 過剰な復号権限や管理権限は、機密データやキーを利用するサービスに影響する可能性があります。
対処方法
allUsers と allAuthenticatedUsers への不要な権限付与を削除し、キーを使う承認済みのプリンシパルだけを指定してください。暗号化、復号、管理のロールを必要に応じて分離し、可能な限り個々のキーに範囲を限定してください。ポリシーの変更時は必要なサービスアカウントの権限を維持し、正常な操作の成功と未承認のリクエストの拒否を確認してください。
例
IAM ポリシードキュメントを生成する抜粋です。KMS キーに適用する設定は省略しています。例のユーザーアドレスは、実際の承認済みプリンシパルに置き換えてください。
変更前
hcl
data "google_iam_policy" "kms_policy" {
binding {
role = "roles/cloudkms.cryptoKeyEncrypter"
members = ["allUsers"]
}
}
allUsers に暗号化ロールを与えるポリシードキュメントです。このような広範なプリンシパルをキーのポリシーに含めないでください。
変更後
hcl
data "google_iam_policy" "kms_policy" {
binding {
role = "roles/cloudkms.cryptoKeyEncrypter"
members = [
"user:jane@example.com"
]
}
}
暗号化ロールの対象を指定したユーザーに制限します。他のロールや継承したポリシーによる権限も確認してください。