を使用して CloudWatch Logs のログデータを暗号化する AWS Key Management Service - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用して CloudWatch Logs のログデータを暗号化する AWS Key Management Service

ロググループのデータは常に CloudWatch Logs で暗号化されます。デフォルトでは、CloudWatch Logs は 256 ビットの Advanced Encryption Standard Galois/Counter Mode (AES-GCM) によるサーバー側の暗号化を使用して、保管中のログデータを暗号化します。別の方法として、この暗号化には AWS Key Management Service を使用できます。その場合、暗号化は AWS KMS キーを使用して行われます。を使用した暗号化 AWS KMS は、ロググループの作成時または作成後に、KMS キーをロググループに関連付けることで、ロググループレベルで有効になります。

重要

CloudWatch Logs は、kms:EncryptionContext:aws:logs:arn をキーとして使用し、ロググループの ARN をそのキーの値として使用して、暗号化コンテキストをサポートするようになりました。KMS キーで暗号化したロググループがあり、そのキーが 1 つのアカウントとロググループで使用されるように制限する場合は、新しい KMS キーを割り当て、そのための条件を IAM ポリシーに含める必要があります。詳細については、「AWS KMS キーと暗号化コンテキスト」を参照してください。

重要

CloudWatch Logs で がサポートされkms:ViaServiceるようになりました。これにより、ログがユーザーに代わって AWS KMS 呼び出しを行うことができます。これは、キーポリシーまたは IAM で CloudWatch Logs を呼び出すロールに追加する必要があります。詳細については、「kms:ViaService」を参照してください。

KMS キーをロググループと関連付けると、ロググループの新たに取り込まれたすべてのデータは、このキーを使用して暗号化されます。このデータは、保持期間を通じて暗号化形式で保存されます。CloudWatch Logs は、リクエストがあればいつでもこのデータを復号化します。暗号化されたデータがリクエストされた場合、CloudWatch Logs に KMS キーのアクセス許可が必要です。

後でロググループから KMS キーの関連付けを解除すると、CloudWatch Logs は CloudWatch Logs デフォルトの暗号化方法を使用して、新たに取り込まれたデータを暗号化します。以前に取り込まれたデータのうち KMS キーで暗号化されたものは、すべて KMS キーで暗号化されたままになります。CloudWatch Logs は引き続きキーを参照できるため、KMS キーの関連付けが解除された後も、CloudWatch Logs はそのデータを返すことができます。ただし、キーを後で無効にすると、CloudWatch Logs はそのキーで暗号化されたログを読み取ることができなくなります。

重要

CloudWatch Logs は、対称 KMS キーのみをサポートします。非対称キーを使用してロググループのデータを暗号化しないでください。詳細については、「対称キーと非対称キーの使用」を参照してください。

制限

  • 以下の手順を実行するには、kms:CreateKeykms:GetKeyPolicy、および kms:PutKeyPolicy アクセス許可が必要です。

  • キーとロググループを関連付けまたは関連付け解除すると、オペレーションが有効になるまで最大 5 分かかることがあります。

  • 関連付けられたキーへの CloudWatch Logs のアクセスを取り消したり、関連付けられた KMS キーを削除した場合、CloudWatch Logs 内の暗号化されたデータを取得できなくなります。

  • CloudWatch コンソールを使用して KMS キーを既存のロググループに関連付けることはできません。

ステップ 1: AWS KMS キーを作成する

KMS キーを作成するには、次の create-key コマンドを使用します。

aws kms create-key

出力には、キーのキー ID と Amazon リソースネーム (ARN) が含まれます。出力例を次に示します。

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

ステップ 2: KMS キーでアクセス許可を設定する

デフォルトでは、すべての AWS KMS キーはプライベートです。リソースの所有者のみがその CMK を使用してデータを暗号化および復号できます。ただし、リソース所有者は、他のユーザーとリソースに KMS キーへのアクセス許可を付与することができます。このステップでは、CloudWatch Logs サービスプリンシパルと呼び出し元ロールに キーを使用するアクセス許可を付与します。このサービスプリンシパルは、KMS キーが保存されているリージョンと同じ AWS リージョンに存在する必要があります。

ベストプラクティスとして、KMS キーの使用を、指定した AWS アカウントまたはロググループのみに制限することをお勧めします。

まず、get-key-policy コマンドを使用して、KMS キーのデフォルトポリシーを policy.json として保存します。

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

テキストエディタで policy.json ファイルを開き、以下のいずれかのステートメントから太字のセクションを追加します。既存のステートメントと新しいステートメントをカンマで区切ります。これらのステートメントでは、Conditionセクションを使用して AWS KMS キーのセキュリティを強化します。詳細については、「AWS KMS キーと暗号化コンテキスト」を参照してください。

この例の Condition セクションでは、キーを 1 つのロググループ ARN に制限しています。

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:log-group:log-group-name" } } } ] }

この例の Condition セクションは AWS KMS キーの使用を指定したアカウントに制限しますが、これを使用できるロググループに制限はありません。

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:*" } } } ] }

次に、CloudWatch Logs を呼び出すロールにアクセス許可を追加します。これを行うには、 AWS KMS キーポリシーにステートメントを追加するか、ロール自体の IAM を使用します。CloudWatch Logs は kms:ViaService を使用して、お客様に代わって AWS KMS を呼び出します。詳細については、「kms:ViaService」を参照してください。

AWS KMS キーポリシーでアクセス許可を追加するには、キーポリシーに次のステートメントを追加します。この方法を使用する場合は、ベストプラクティスとして、 AWS KMS 暗号化されたロググループとやり取りするロールのみにポリシーの範囲を設定します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:role/role_name" }, "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*" "kms:Describe*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }

または、IAM でロールのアクセス許可を管理する場合は、次のポリシーを使用して同等のアクセス許可を追加できます。これは、既存のロールポリシーに追加することも、別のポリシーとしてロールにアタッチすることもできます。この方法を使用する場合は、ベストプラクティスとして、ログの暗号化に使用される AWS KMS キーのみにポリシーの範囲を設定します。詳細については、「IAM ポリシーの編集」を参照してください。

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey* ", "kms:Describe*" ], "Condition":{ "StringEquals":{ "kms:ViaService": [ "logs.region.amazonaws.com" ] } }, "Resource": "arn:aws:kms:region:account_id:key/key_id" } ] }

最後に、次の put-key-policy コマンドを使用して更新されたポリシーを追加します。

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

ステップ 3: KMS キーをログ グループに関連付ける

KMS キーとロググループは、ロググループの作成時または作成後に関連付けることができます。

ロググループに KMS キーがすでに関連付けられているかどうかを確認するには、次の describe-log-groups コマンドを使用します。

aws logs describe-log-groups --log-group-name-prefix "log-group-name-prefix"

出力に kmsKeyId フィールドが含まれている場合、ロググループはそのフィールドの値に対して表示されるキーに関連付けられます。

ロググループの作成時に KMS キーをロググループに関連付けるには

次のように、create-log-group コマンドを使用します。

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"
KMS キーを既存のロググループに関連付けるには

次のように、associate-kms-key コマンドを使用します。

aws logs associate-kms-key --log-group-name my-log-group --kms-key-id "key-arn"

ステップ 4: キーをロググループの関連付けから解除する

ロググループに関連付けられた KMS キーの関連付けを解除するには、次の disassociate-kms-key コマンドを使用します。

aws logs disassociate-kms-key --log-group-name my-log-group

AWS KMS キーと暗号化コンテキスト

AWS Key Management Service キーと暗号化されたロググループのセキュリティを強化するために、CloudWatch Logs はログデータの暗号化に使用される暗号化コンテキストの一部としてロググループ ARNs を配置するようになりました。暗号化コンテキストは、追加の認証済みデータとして使用されるキーと値のペアのセットです。暗号化コンテキストを使用すると、IAM ポリシー条件を使用して、アカウントとロググループごとに AWS KMS AWS キーへのアクセスを制限できます。詳細については、暗号化コンテキストおよび IAM JSON ポリシー要素: 条件を参照してください。

暗号化されたロググループごとに異なる KMS キーを使用することをお勧めします。

前に暗号化したロググループがあり、そのロググループを変更して、そのグループでのみ機能する新しい KMS キーを使用する場合は、次の手順に従います。

暗号化されたロググループを変更して、KMS キーの使用をそのグループのみに制限するには
  1. 次のコマンドを入力して、ロググループの現在のキーの ARN を見つけます。

    aws logs describe-log-groups

    出力には以下の行が含まれます。ARN を書きとめておきます。ステップ 7 で使用する必要があります。

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. 以下のコマンドを入力して、新しい KMS キーを作成します。

    aws kms create-key
  3. 以下のコマンドを入力して、新しいキーのポリシーを policy.json ファイルに保存します。

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. テキストエディタを使用して policy.json を開き、Condition 式をポリシーに追加します。

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT-ID:log- group:LOG-GROUP-NAME" } } } ] }
  5. 次のコマンドを入力して、更新されたポリシーを新しい KMS キーに追加します。

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. 以下のコマンドを入力して、そのポリシーをロググループに関連付けます。

    aws logs associate-kms-key --log-group-name my-log-group --kms-key-id new-key-ARN

    CloudWatch Logs で、すべての新しいデータが新しいキーを使用して暗号化されるようになりました。

  7. 次に、Decrypt を除くすべてのアクセス許可を古いキーから取り消します。まず、以下のコマンドを入力して古いポリシーを取得します。

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. テキストエディタを使用して policy.json を開き、Action リストから kms:Decrypt を除くすべての値を削除します。

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt" ], "Resource": "*" } ] }
  9. 次のコマンドを入力して、更新されたポリシーを古いキーに追加します。

    aws kms put-key-policy --key-id old-key-ARN --policy-name default --policy file://policy.json