OpenTelemetry メトリクスの保管時の暗号化
CloudWatch データセットとは
Amazon CloudWatch に送信する OpenTelemetry (OTel) メトリクスは、データセットと呼ばれるリソースに保存されます。すべての AWS アカウント には、すべての OTel メトリクスが存在する各リージョンに default データセットがあります。default データセットはサポートされている唯一のデータセットです。追加のデータセットを作成することはできません。
データセットは、他の AWS リソースと同様に暗号化およびタグ付けができます。データセット ARN の形式は以下のようになっています。
arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default
データセットの現在の暗号化設定を表示するには、次のように GetDataset API を使用します。
aws cloudwatch get-dataset \ --dataset-identifier default
カスタマー管理キーがデータセットに関連付けられている場合、レスポンスにはキー ARN が含まれます。カスタマー管理キーが関連付けられていない場合、データセットは AWS 所有キーで暗号化されます。
保管時の暗号化オプション
CloudWatch は常に保管中のデータセットデータを暗号化します。CloudWatch はデフォルトで、AWS 所有キーを使用してすべての保管中のデータを暗号化します。AWS 所有キーを使用してデータを保護するためのアクションを実行する必要はありません。詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS 所有キー」を参照してください。
データセットデータの暗号化に使用されるキーを管理したい場合は、AWS Key Management Service (AWS KMS) でカスタマー管理キーを使用できます。詳細については、「AWS Key Management Service デベロッパーガイド」の「カスタマーマネージドキー」を参照してください。
カスタマー管理キーを使用する場合、AWS KMS 料金が適用されます。料金の詳細については、「AWS Key Management Service の料金
CloudWatch がデータセット暗号化にカスタマー管理キーを使用する方法
重要
カスタマー管理キー暗号化が default データセットに適用されます。default データセットはサポートされている唯一のデータセットです。追加のデータセットを作成することはできません。
カスタマー管理キーを default データセットに関連付けると、CloudWatch はそのキーを使用して、そのデータセットに保存されているすべての OTel メトリクスデータを暗号化します。
CloudWatch は、キーポリシーのアクセス許可で直接サービスプリンシパル (cloudwatch.amazonaws.com) を使用します。CloudWatch は、権限や IAM ロールを使用して AWS KMS キーにアクセスしません。
CloudWatch はデータキーをキャッシュしません。ただし、CloudWatch は kms:Decrypt レスポンスを最大 15 分間キャッシュします。キーポリシーの変更が有効になるまでに最大 15 分かかる場合があります。
CloudWatch は、すべての AWS KMS 暗号化オペレーションで次の暗号化コンテキストを使用します。
-
キー:
aws:cloudwatch:arn -
値:
arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default
データセットのカスタマー管理キーの設定
CloudWatch データセットで使用する AWS KMS キーは、次の要件を満たしている必要があります。
-
キーは、キー用途 ENCRYPT_DECRYPT の対称暗号化キー (SYMMETRIC_DEFAULT) である必要があります。非対称キーはサポートされていません。
-
マルチリージョンキーはサポートされていません。
-
キーはデータセットと同じ AWS リージョン にある必要があります。
-
キーを完全修飾キー ARN として指定する必要があります。キーエイリアスとキー ID はサポートされていません。
キーポリシーのアクセス許可の設定
CloudWatch データセットでカスタマー管理キーを使用するには、キーポリシーがキーを使用するためのアクセス許可を CloudWatch に付与する必要があります。次のキーポリシーの例では、CloudWatch に必要なアクセス許可を付与し、混乱した代理の保護を含めます。
データセットを関連付ける、または使用する呼び出し元には、以下の AllowCallerDecrypt ステートメントに示すように、CloudWatch ViaService と暗号化コンテキストに限定された kms:Decrypt アクセス許可が必要です。YourApplicationRole を CloudWatch データセット API の呼び出しに使用される IAM ロールに置き換えます。
例 CloudWatch データセット暗号化のキーポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudWatchDatasetDescribeKey", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } }, { "Sid": "AllowCloudWatchDatasetEncryption", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } }, { "Sid": "AllowCallerDecrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/YourApplicationRole" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } } ] }
アカウント ID とリージョンを自分の値に置き換えます。
キーポリシーの詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS KMS のキーポリシー」を参照してください。
カスタマー管理キーをデータセットに関連付けるには
AssociateDatasetKmsKey API を使用して、カスタマー管理キーをデータセットに関連付けます。データセット識別子として default を指定する必要があります。
AWS CLI を使用してカスタマー管理キーを関連付けるには、次のコマンドを実行します。
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/key-id
暗号化設定の変更または削除
データセットデータを暗号化するカスタマー管理キーを変更または削除ができます。
カスタマー管理キーを変更するには
カスタマー管理キーを置き換えるには、新しいキー ARN でもう一度 AssociateDatasetKmsKey を呼び出します。呼び出し元には、現在のキーと新しいキーの両方に対する kms:Decrypt アクセス許可が必要です。CloudWatch は、新しいキーの使用を開始し、以降の暗号化オペレーションに適用します。
注記
現在関連付けられているキーが削除済み、削除予定、インポート保留中、使用不可、または無効化済みの場合、CloudWatch は現在のキーに対する kms:Decrypt アクセス許可を必要とせず、ローテーションが続行されます。キーが無効化済みのみの場合は、ローテーションではなく再有効化を検討してください。再有効化により、そのキーで暗号化された既存のメトリクスデータの復号化を CloudWatch が再開できるからです。
カスタマー管理キーを削除するには
カスタマー管理キーを削除して AWS 所有キー暗号化に戻すには、DisassociateDatasetKmsKey を呼び出します。呼び出し元には、現在関連付けられているキーに対する kms:Decrypt アクセス許可が必要です。
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
注記
現在関連付けられているキーが削除済み、削除予定、インポート保留中、使用不可、または無効化済みの場合、CloudWatch はそのキーに対する kms:Decrypt アクセス許可を必要とせず、関連付け解除が続行されます。キーが無効化済みのみの場合は、関連付け解除の代わりに再有効化を検討してください。再有効化により既存のメトリクスデータの復号化を CloudWatch が再開できるからです。
重要
カスタマー管理キーの関連付けを解除した後、3 時間の強制ウィンドウがあり、その間 CloudWatch は以前に関連付けられたキーに対する kms:Decrypt アクセス許可を引き続き要求します。このウィンドウ中はキーを無効化または削除しないでください。
削除済みまたは使用不可の KMS キーからの回復
データセットに関連付けられているカスタマーマネージド KMS キーが削除済み、削除予定、または使用不可になった場合、データセットは劣化状態になります:
-
CloudWatch はデータセットに公開する新しいメトリクスデータを暗号化できず、取り込みが失敗します。
-
CloudWatch は使用不可のキーで暗号化された既存のデータを復号化できないため、クエリ操作が失敗します。
回復オプションはキーの状態によって異なります:
-
キーが無効化済みである – AWS KMS でキーを再有効化します。これは推奨される回復パスです。キーが再びアクティブになると、CloudWatch は既存のメトリクスデータの復号化を再開できるからです。
-
キーが削除保留中である – 待機期間が切れる前に AWS KMS でキーの削除をキャンセルします。キーが有効な状態に戻ると、CloudWatch は通常の動作を再開します。
-
キーが完全に削除済み、またはその他復旧不能な状態である – 古い関連付けを削除するか、新しいキーにローテーションします (以下を参照)。削除されたキーで暗号化された既存のデータは永久に読み取れなくなる点に注意してください。
キーが完全に削除済み、またはその他復旧不能な場合、古いキーにアクセスする必要なしに関連付けを削除したり、新しいキーにローテーションしたりできます:
古いキー関連付けを削除する
DisassociateDatasetKmsKey を呼び出して、使用不可のキーとの関連付けを削除します。CloudWatch は新しいデータに対して AWS 所有キーによる暗号化に戻ります。削除済みのキーで暗号化されていた既存のデータは読み取れなくなります。
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
新しいキーにローテーションする
新しい、有効な KMS キー ARN で AssociateDatasetKmsKey を呼び出します。CloudWatch は新しいキーを検証し、データセットに関連付けます。以前に関連付けられたキーへのアクセスは必要ありません。削除済みのキーで暗号化された既存のデータは読み取れなくなりますが、新しいデータは新しいキーで暗号化されます。
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/new-key-id
使用不可のキーのエラー応答
DisassociateDatasetKmsKey または AssociateDatasetKmsKey を呼び出し (ローテーションパス)、現在関連付けられているキーにアクセスできない場合、CloudWatch はそのキーへのアクセスを必要とせず、操作は正常に続行されます。これは、次の場合に適用されます。
-
キーが削除済みです (KMS は
NotFoundExceptionを返す)。 -
キーが
PendingDeletion、PendingImport、またはUnavailable状態にあります。 -
キーが無効化済みです。
キーはアクセスですが、呼び出し元に kms:Decrypt アクセス許可がないときにこれらの操作を呼び出した場合、操作は次のいずれかのエラーで失敗します。各エラーメッセージにはトラブルシューティング用の KMS リクエスト ID が含まれます。
ResourceNotFoundException-
指定された KMS キーが存在しません。メッセージ形式:
KMS keykey-arndoes not exist. KMS request id:request-id. ValidationException-
指定された KMS キーが、このコードパスでは許容されない使用不可の状態にあります。メッセージ形式:
KMS keykey-arnis in an unusable state:state-description. KMS request id:request-id. AccessDeniedException-
指定された KMS キーが無効化済みか、呼び出し元にアクセス許可がありません。メッセージ形式:
KMS keykey-arnis disabled. KMS request id:request-id.
KMS キーの状態に関する詳細については、AWS Key Management Service デベロッパーガイドの「AWS KMS キーのキーステータス」を参照してください。
キーポリシーアクセスのスコープダウン
キーポリシーで条件を使用して、AWS KMS キーへのアクセスを制限することもできます。
- 暗号化コンテキスト条件
-
kms:EncryptionContext:aws:cloudwatch:arn条件キーを使用して、キーの使用をdefaultデータセットに制限します。"Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } - 混乱した代理の保護
-
aws:SourceArnおよびaws:SourceAccount条件を使用して、アカウント間の混乱した代理攻撃を防止します。"Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } - kms:ViaService 条件
-
kms:ViaService条件キーを使用して、CloudWatch からのリクエストにキーの使用を制限します。"Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com" } }
CloudWatch と AWS KMS とのインタラクションのモニタリング
AWS CloudTrail を使用して、CloudWatch がユーザーに代わって AWS KMS に送信するリクエストを追跡できます。AWS CloudTrail ログエントリは、サービスプリンシパル cloudwatch.amazonaws.com と ViaService の値 cloudwatch. を使用します。{region}.amazonaws.com
CloudWatch データセット暗号化オペレーションのログエントリに、次の CloudTrail イベント名が表示されます。
GenerateDataKeyEncryptDecryptDescribeKeyReEncrypt
各ログエントリには、オペレーションが適用される特定のデータセットを識別するために使用できる暗号化コンテキストが含まれています。
AWS KMS キー使用状況のモニタリングの詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS Key Management Service のモニタリング」を参照してください。