概要
ClouddWatchのロググループ作成時に、暗号化のためKMS key ARN - optionalにKMSのARNを入力してもエラーになってしまう。
諦めかけていたところに、CloudWatch LogsのログデータをKMSで暗号化するに書いてあった以下のことを試してみました。
AWS KMSの運用では
鍵の管理者
鍵の利用者
の2種類のポリシーが必要です。
CW Logsの暗号化では鍵の利用者向けポリシーが該当します。
このポリシーの Principal に "Service": "logs.AWS-REGION.amazonaws.com" を>追加します。リージョンを含める必要がある点に注意ください。
試しにKMSのキーポリシーに、"AWS": "arn:aws:iam::1234567890:user/udemy"
の1行を追加してから、再度ロググループ作成のところで、先ほど指定した同じKMS Key ARNを
設定してロググループを作成したら、エラーが表示されずにロググループを作成できました。
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"Service": "logs.ap-northeast-1.amazonaws.com",
"AWS": "arn:aws:iam::1234567890:user/udemy"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}
公式ドキュメントにもそれらしき記載がありました。
AWS Key Management Service を使用して CloudWatch Logs のログデータを暗号化する
ステップ 2: CMK で許可を設定する
デフォルトでは、すべての AWS KMS CMK はプライベートです。リソースの所有者のみがその CMK を使用してデータを暗号化および復号できます。ただし、リソース所有者は、他のユーザーとリソースに CMK へのアクセス権限を付与することができます。このステップでは、CloudWatch サービスプリンシパルに、CMK を使用するアクセス権限を付与します。このサービスプリンシパルは、CMK が保存されているのと同じ AWS リージョンにある必要があります。
要するに、CMKを使用する権限を与えてなかったからエラーになったんですね。
The specified KMS key does not exist or is not allowed to be used with LogGroup 'arn:aws:logs:ap-northeast-1:1234567890:log-group:session_log_test'
エラーメッセージにも「is not allowed to be used with LogGroup」と書いてあるので、権限周りを疑うべきでした。