Amazon Connect での保管時の暗号化 - Amazon Connect

Amazon Connect での保管時の暗号化

PII に分類される問い合わせデータ、または Amazon Connect によって保存される顧客コンテンツを表すデータは、AWS が保有する AWS KMS 暗号化キーを使用して、保管中の (つまり、ディスクに移動、保持、保管される前の段階で) 暗号化が行われます。AWS KMS キーの詳細については、AWS Key Management Service デベロッパーガイドの「What is AWS Key Management Service?」を参照してください。非一時ストレージの問い合わせデータは暗号化されるため、KMS キーから生成されたデータ暗号化キーは Amazon Connect インスタンス間で共有されません。

Amazon S3 のサーバー側の暗号化は、会話の録音 (音声とチャット) の暗号化に使用されます。通話録音、画面録画、トランスクリプトは次の 2 つのフェーズで保存されます。

  • 問い合わせ中および問い合わせ後 (配信される前) に Amazon Connect 内で中間的に保持された記録。

  • Amazon S3 バケットに配信された通話の記録。

Amazon S3 バケットに保存された記録およびチャットのトランスクリプトは、インスタンスの作成時に設定されている KMS  キーを使用して保護されます。

Amazon Connect のキー管理の詳細については、「Amazon Connect でのキー管理」を参照してください。

Amazon AppIntegrations の保存中のデータ暗号化

カスタマー管理キーで暗号化しながら DataIntegration を作成すると、Amazon AppIntegrations は、CreateGrant リクエストを AWS KMS に送信することでユーザーに代って許可を作成します。AWS KMS による許可は、Amazon AppIntegrations がアカウントの KMS キーへアクセスできるようにするために使用されます。

ユーザーは任意のタイミングで、この許可へのアクセス権を取り消したり、Amazon AppIntegrations がカスタマー管理キーに対して持つアクセス権を削除したりできます。これを行うと、Amazon AppIntegrations はカスタマー管理キーによって暗号化されたすべてのデータにアクセスできなくなり、そのデータに依存しているオペレーションが影響を受けます。

Amazon AppIntegrations が処理する外部アプリケーションデータは、S3 バケット内での保管中、設定時に指定したカスタマー管理キーを使用して暗号化されています。統合の設定に関するデータは、保管中、ユーザーアカウントに固有の期間限定キーを使用して暗号化されます。

Amazon AppIntegrations には、カスタマー管理のキーを以下の内部オペレーションで使用するための許可が必要です。

  • GenerateDataKeyRequest を AWS KMS に送信して、カスタマー管理キーで暗号化されたデータキーを生成します。

  • Decrypt リクエストを AWS KMS に送信して、暗号化されたデータキーを復号し、データを暗号化するために使用できるようにします。

Amazon Connect Cases での保管時の暗号化

ケースフィールドに顧客が提供したデータ、ケースコメント、Amazon Connect Cases によって保存されたフィールドおよびテンプレートの説明は、AWS Key Management Service (AWS KMS) に保存されている暗号化キーを使用して保管時に暗号化されます。

Amazon Connect Cases サービスは、暗号化キー (つまり AWS 所有のキー) を所有、管理、監視、更新することで、高いセキュリティ基準を満たしています。ケースイベントストリームのペイロードは、顧客アカウントのデフォルトバスを介して利用できるようになる前に、Amazon EventBridge に一時的に (通常は数秒間) 保存されます。また、EventBridge では、AWS 所有のキーを使用して保管時のペイロード全体を暗号化します。

Amazon Connect Customer Profiles での保管時の暗号化

Amazon Connect Customer Profiles に格納されたすべてのユーザーデータには、保管時の暗号化が行われます。Amazon Connect Customer Profiles の保管時の暗号化では、AWS Key Management Service (AWS KMS) に格納されている暗号化キーを使用して、すべての保管中のデータを暗号化することにより高度なセキュリティを提供します。この機能は、機密データの保護における負担と複雑な作業を減らすのに役立ちます。保管時に暗号化することで、セキュリティを重視したアプリケーションを構築して、暗号化のコンプライアンスと規制の厳格な要件を満たすことができます。

組織のポリシー、業界や政府の規制、またはコンプライアンス要件によって、アプリケーションのデータセキュリティを高めるために保管時の暗号化の使用が求められることがあります。保存時の暗号化戦略を有効にするための、AWS KMS と統合された Customer Profiles。詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS Key Management Service コンセプト」を参照してください。

新しいドメインを作成する際には、サービスが転送中および保管時のデータを暗号化するために使用する、KMS キーを指定する必要があります。カスタマー管理キーは、ユーザーにより作成、所有、および管理されます。ユーザーは、カスタマー管理キーに対する完全なコントロール権限を持ちます (AWS KMS の料金が適用されます)。

新しいドメイン、またはプロファイルのオブジェクトタイプを作成する際は、暗号化キーを指定します。あるいは、AWS Command Line Interface (AWS CLI)、または Amazon Connect Customer Profiles の暗号化 API を使用して、既存のリソースの暗号化キーを切り替えます。カスタマー管理キーを選択すると、Amazon Connect Customer Profiles によってカスタマー管理キーに関する許可が作成され、これにより、カスタマー管理キーへのアクセス許可が付与されます。

カスタマー管理キーには、AWS KMS 料金が適用されます。料金の詳細については、「AWS KMS の料金」を参照してください。

Amazon Q の保存時の暗号化

Amazon Q in Connect で保存されているすべてのユーザーデータは、AWS Key Management Service に保管された暗号化キーを使用して暗号化されています。必要に応じてカスタマー管理キーを指定すると、Amazon Q in Connect はこのキーを使用して、Amazon Q in Connect 検索インデックスの外に保存されているナレッジコンテンツを暗号化します。Amazon Q in Connect では、顧客ごとに専用の検索インデックスを使用します。このデータは保存中は、AWS Key Management Service に保存されている AWS 所有のキー を使用して暗号化されます。さらに、CloudTrail を使用して、任意のデータアクセスに対して Amazon Q in Connect を介した監査を行うこともできます。

ユーザーにより指定されたキーを使用する場合は、AWS KMS 料金が適用されます。料金の詳細については、「AWS KMS の料金」を参照してください。

Amazon Connect Voice ID での保管時の暗号化

Amazon Connect Voice ID は、登録済みの顧客の音声を取得したり顧客を識別したりするためのリバースエンジニアリングを防止する方法で、顧客の音声プリントを保存します。Amazon Connect Voice ID では、すべてのユーザーデータに対して保管時の暗号化が行われます。新しい Voice ID ドメインを作成する場合は、サービスが保管中のデータを暗号化するために使用する、カスタマー管理キーを指定する必要があります。カスタマー管理キーは、ユーザーにより作成、所有、および管理されます。ユーザーは、キーに関する完全なコントロール権を持ちます。

Voice ID ドメインの KMS キーを更新するには、AWS コマンドラインインターフェイス (AWS CLI) の update-domain コマンド、または Voice ID API の UpdateDomain を使用できます。

KMS キーを変更すると、古いデータを新しい KMS キーで再暗号化するために非同期プロセスがトリガーされます。このプロセスが完了すると、ドメインのすべてのデータが新しい KMS キーで暗号化され、古いキーを安全に廃止できます。詳細については、「UpdateDomain」を参照してください。

Voice ID によって、カスタマー管理キーに関するグラントが作成され、そのキーにアクセスできるようになります。詳細については、「Amazon Connect Voice ID による AWS KMS での許可の使用」を参照してください。

カスタマー管理キーを使用して保管時に暗号化されるデータの一覧を次に示します。

  • ボイスプリント: システムへの通話者の登録や、不正通話の記録を行った際に生成されたボイスプリント。

  • 通話者と不正通話の音声:通話者の登録ならびに不正通話の記録に使用するオーディオデータ。

  • CustomerSpeakerId: 顧客を Voice ID に登録する際に、その顧客から提供された SpeakerId。

  • 顧客提供のメタデータ: これには、Domain DescriptionDomain NameJob Name など自由形式の文字列が含まれます。

カスタマー管理キーには、AWS KMS 料金が適用されます。料金の詳細については、「AWS KMS の料金」を参照してください。

Amazon Connect Voice ID による AWS KMS での許可の使用

Amazon Connect Voice ID には、カスタマー管理キーを使用するための許可が必要です。ドメインが作成される際に、Voice ID は AWS KMS に CreateGrant の表示リクエストを送信することで、ユーザーに代わって付与すべき許可を作成します。このグラントは、以下の内部オペレーションでカスタマー管理キーを使用するために必要です。

  • 指定された対称カスタマーマネージドキー ID が有効であることを確認するには、AWS KMS に対し DescribeKey リクエストを送信します。

  • オブジェクトを暗号化するためのデータキーを作成するには、GenerateDataKey リクエストを KMS キーに送信します。

  • 暗号化されたデータキーを復号して、それらのキーによるデータを暗号化できるようにするには、Decrypt リクエストを AWS KMS に送信します。

  • キーが更新され、その新しいキーを使用して一定量のデータセットを再暗号化する際には、ReEncrypt リクエストを AWS KMS に送信します。

  • データの暗号化に AWS KMS キーを使用しながら、S3 にファイルを保存します。

任意のタイミングで、許可に対するアクセス権を取り消したり、カスタマー管理キーに対するサービスからのアクセス権を削除したりできます。これを行うと、Voice ID はカスタマー管理キーによって暗号化されたすべてのデータにアクセスできなくなり、そのデータに依存するすべてのオペレーションが影響を受けます。結果的に、非同期ワークフローで AccessDeniedException エラーが発生しその処理に失敗します。

Voice ID でのカスタマー管理キーポリシー

キーポリシーは、カスタマー管理キーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。カスタマー管理キーを作成する際に、キーポリシーを指定することができます。詳細については、「AWS Key Management Service デベロッパーガイド」の「Managing access to KMS keys (KMS キーへのアクセスを管理する)」を参照してください。

次に、カスタマー管理キーを使用して Voice ID API を呼び出す際に必要となる権限をユーザーに付与する、キーポリシーの例を示します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow key access to Amazon Connect VoiceID.", "Effect": "Allow", "Principal": { "AWS": "your_user_or_role_ARN" }, "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "voiceid.region.amazonaws.com" ] } } } ] }

ポリシーでアクセス許可を指定する方法については、AWS Key Management Service デベロッパーガイド の「Specifying KMS keys in IAM policy statements」を参照してください。

キーへのアクセスのトラブルシューティングについては、AWS Key Management Service デベロッパーガイドの「Troubleshooting key access」を参照してください。

Voice ID の暗号化コンテキスト

暗号化コンテキストとは、データに関する追加のコンテキスト情報を含むために、使用する (オプションの) キーと値のペアのセットです。AWS KMS は、暗号化コンテキストを追加の認証済みデータとして使用し、暗号化の認証をサポートします。

データの暗号化リクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化後のデータにバインドします。データを復号化するには、そのリクエストに (暗号化時と) 同じ暗号化コンテキストを含めます。

Voice ID は、AWS KMS での暗号化処理のすべてで、同じ暗号化コンテキストを使用します。ここで、キーには aws:voiceid:domain:arn を、値にはリソースの Amazon リソースネーム (ARN) Amazon Resource Name (ARN) を指定します。

"encryptionContext": { "aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId" }

また、カスタマー管理キーがどのように使用されているかを特定するために、暗号化コンテキストを監査レコードおよびログで使用することもできます。暗号化コンテキストは、 CloudTrail または Amazon CloudWatch Logs によって生成されたログの中にも記載されます。

暗号化コンテキストを使用して顧客マネージドキーへのアクセスを制御する

対称カスタマーマネージドキー (CMK) へのアクセスを制御するための条件として、キーポリシーと IAM ポリシー内の暗号化コンテキストを使用することもできます。付与する際に、暗号化コンテキストの制約を使用することもできます。

Amazon Connect Voice ID は、権限で暗号化コンテキスト制約を使用して、アカウントまたはリージョン内のカスタマーマネージドキーへのアクセスを制御します。権限の制約では、権限によって許可されるオペレーションで指定された暗号化コンテキストを使用する必要があります。

次に、特定の暗号化コンテキストのカスタマーマネージドキーへのアクセスを付与するキーポリシーステートメントの例を示します。このポリシーステートメントの条件では、権限に暗号化コンテキストを指定する暗号化コンテキスト制約が必要です。

{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "Enable CreateGrant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:"aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId"" } } }

Voice ID の暗号化キーのモニタリング

Voice ID で AWS KMS カスタマーマネージドキーを使用する場合には、AWS CloudTrail または Amazon CloudWatch Logs を使用して、Voice ID から AWS KMS に送信されたリクエストを追跡できます。

以下は、カスタマー管理キーで暗号化されたデータにアクセスするために、Voice ID によって呼び出される CreateGrant オペレーションのための AWS CloudTrail イベントの例です

CreateGrant
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROA5STZEFPSZEOW7NP3X:SampleUser1", "arn": "arn:aws:sts::111122223333:assumed-role/SampleRole/SampleUser", "accountId": "111122223333", "accessKeyId": "AAAAAAA1111111EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROA5STZEFPSZEOW7NP3X", "arn": "arn:aws:iam::111122223333:role/SampleRole", "accountId": "111122223333", "userName": "SampleUser" }, "webIdFederationData": {}, "attributes": { "creationDate": "2021-09-14T23:02:23Z", "mfaAuthenticated": "false" } }, "invokedBy": "voiceid.amazonaws.com" }, "eventTime": "2021-09-14T23:02:50Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "SampleIpAddress", "userAgent": "Example Desktop/1.0 (V1; OS)", "requestParameters": { "constraints": { "encryptionContextSubset": { "aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId" } }, "retiringPrincipal": "voiceid.amazonaws.com", "keyId": "arn:aws:kms:us-west-2:111122223333:key/44444444-3333-2222-1111-EXAMPLE11111", "operations": [ "CreateGrant", "Decrypt", "DescribeKey", "GenerateDataKey", "GenerateDataKeyPair", "GenerateDataKeyPairWithoutPlaintext", "GenerateDataKeyWithoutPlaintext", "ReEncryptFrom", "ReEncryptTo" ], "granteePrincipal": "voiceid.amazonaws.com " }, "responseElements": { "grantId": "00000000000000000000000000000cce47be074a8c379ed39f22b155c6e86af82" }, "requestID": "ed0fe4ab-305b-4388-8adf-7e8e3a4e80fe", "eventID": "31d0d7c6-ce5b-4caf-901f-025bf71241f6", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/00000000-1111-2222-3333-9999999999999" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
DescribeKey
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "voiceid.amazonaws.com" }, "eventTime": "2021-10-13T15:12:39Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-west-2", "sourceIPAddress": "voiceid.amazonaws.com", "userAgent": "voiceid.amazonaws.com", "requestParameters": { "keyId": "alias/sample-key-alias" }, "responseElements": null, "requestID": "ed0fe4ab-305b-4388-8adf-7e8e3a4e80fe", "eventID": "31d0d7c6-ce5b-4caf-901f-025bf71241f6", "readOnly": true, "resources": [{ "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/00000000-1111-2222-3333-9999999999999" }], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
Decrypt
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "voiceid.amazonaws.com" }, "eventTime": "2021-10-12T23:59:34Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "voiceid.amazonaws.com", "userAgent": "voiceid.amazonaws.com", "requestParameters": { "encryptionContext": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/44444444-3333-2222-1111-EXAMPLE11111", "encryptionContext": { "aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ed0fe4ab-305b-4388-8adf-7e8e3a4e80fe", "eventID": "31d0d7c6-ce5b-4caf-901f-025bf71241f6", "readOnly": true, "resources": [{ "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/00000000-1111-2222-3333-9999999999999" }], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "35d58aa1-26b2-427a-908f-025bf71241f6", "eventCategory": "Management" }
GenerateDataKeyWithoutPlaintext
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "voiceid.amazonaws.com" }, "eventTime": "2021-10-13T00:26:41Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyWithoutPlaintext", "awsRegion": "us-west-2", "sourceIPAddress": "voiceid.amazonaws.com", "userAgent": "voiceid.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/44444444-3333-2222-1111-EXAMPLE11111", "encryptionContext": { "aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "ed0fe4ab-305b-4388-8adf-7e8e3a4e80fe", "eventID": "31d0d7c6-ce5b-4caf-901f-025bf71241f6", "readOnly": true, "resources": [{ "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/00000000-1111-2222-3333-9999999999999" }], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "35d58aa1-26b2-427a-908f-025bf71241f6", "eventCategory": "Management" }
ReEncrypt
{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "voiceid.amazonaws.com" }, "eventTime": "2021-10-13T00:59:05Z", "eventSource": "kms.amazonaws.com", "eventName": "ReEncrypt", "awsRegion": "us-west-2", "sourceIPAddress": "voiceid.amazonaws.com", "userAgent": "voiceid.amazonaws.com", "requestParameters": { "destinationEncryptionContext": { "aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId" }, "destinationKeyId": "arn:aws:kms:us-west-2:111122223333:key/44444444-3333-2222-1111-EXAMPLE11111", "sourceEncryptionAlgorithm": "SYMMETRIC_DEFAULT", "sourceAAD": "SampleSourceAAAD+JXBmH+ZJNM73BfHE/dwQALXp7Sf44VwvoJOrLj", "destinationAAD": "SampleDestinationAAAD+JXBmH+ZJNM73BfHE/dwQALXp7Sf44VwvoJOrLj", "sourceEncryptionContext": { "aws:voiceid:domain:arn": "arn:aws:voiceid:us-west-2:111122223333:domain/sampleDomainId" }, "destinationEncryptionAlgorithm": "SYMMETRIC_DEFAULT", "sourceKeyId": "arn:aws:kms:us-west-2:111122223333:key/55555555-3333-2222-1111-EXAMPLE22222" }, "responseElements": null, "requestID": "ed0fe4ab-305b-4388-8adf-7e8e3a4e80fe", "eventID": "31d0d7c6-ce5b-4caf-901f-025bf71241f6", "readOnly": true, "resources": [{ "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/00000000-1111-2222-3333-9999999999999" }, { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/00000000-1111-2222-3333-7777777777777" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "35d58aa1-26b2-427a-908f-025bf71241f6", "eventCategory": "Management" }

アウトバウンドキャンペーン

アウトバウンドキャンペーンでは、Amazon Pinpoint から Amazon Connect に顧客の電話番号と関連属性が渡されます。Amazon Connect では、これらのデータはカスタマーマネージドキーまたは AWS 所有のキー のいずれかを使用して常に保管時の暗号化が行われます。アウトバウンドキャンペーンデータは、Amazon Connect インスタンス ID 別に分離され、インスタンス固有のキーで暗号化されます。

アウトバウンドキャンペーンへのオンボーディング時に、独自の顧客管理キーを指定できます。

サービスは、このカスタマー管理キーを使用して、保管中の機密データを暗号化します。カスタマー管理キーは、ユーザーにより作成、所有、および管理されます。ユーザーは、カスタマー管理キーに関する完全なコントロール権を持ちます。

独自の顧客管理キーを指定しなかった場合、アウトバウンドキャンペーンは、Amazon Connect インスタンスに固有の AWS 所有のキー を使用して保管中の機密データを暗号化します。

カスタマー管理キーには、AWS KMS 料金が適用されます。料金の詳細については、「AWS KMS の料金」を参照してください。

予測、容量計画、スケジュール

予測、容量計画、およびスケジュールを作成すると、保存中のすべてのデータは、AWS Key Management Service に保存されている AWS 所有のキー 暗号化キーを使用して暗号化されます。