View a markdown version of this page

Amazon Cognito でのデータ保護 - Amazon Cognito

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

Amazon Cognito でのデータ保護

責任 AWS 共有モデル、Amazon Cognito (Amazon Cognito) でのデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての AWS クラウドを実行するグローバルインフラストラクチャを保護する責任があります。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。このコンテンツには、使用する AWS サービスのセキュリティ設定および管理タスクが含まれます。データプライバシーの詳細については、「データプライバシーのよくある質問」を参照してください。

データ保護の目的で、 AWS アカウントの認証情報を保護し、 AWS Identity and Access Management (IAM) を使用して個々のユーザーアカウントを設定することをお勧めします。この方法により、それぞれのジョブを遂行するために必要なアクセス許可のみを各ユーザーに付与できます。また、次の方法でデータを保護することをお勧めします。

  • 各アカウントで多要素認証 (MFA) を使用します。

  • SSL/TLS を使用して AWS リソースと通信します。

  • で API とユーザーアクティビティのログ記録を設定します AWS CloudTrail。

  • AWS 暗号化ソリューションと、 サービス内のすべての AWS デフォルトのセキュリティコントロールを使用します。

  • Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3 に保存される個人データの検出と保護が支援されます。

顧客のアカウント番号などの機密の識別情報は、[名前] フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、API、または SDK を使用して Amazon Cognito AWS CLIまたは他の AWS サービスを使用する場合も同様です。 AWS SDKs Amazon Cognito、またはその他のサービスに入力されたデータは、いずれも診断ログへの包含のために取得される可能性があります。外部サーバーへの URL を指定するときは、そのサーバーへのリクエストを検証するための認証情報を URL に含めないでください。

データ暗号化

データ暗号化は、通常、保管時の暗号化と転送中の暗号化の 2 つのカテゴリに分類されます。

保管中の暗号化

Amazon Cognito ユーザープールと ID プール内のデータは、業界標準に従って保管時に暗号化されます。

  • Amazon Cognito は、ID プール内の顧客データを AWS 所有キーで暗号化します。この動作は変更できません。

  • デフォルトでは、Amazon Cognito はユーザープール内の顧客データを AWS 所有キーで暗号化します。代わりにカスタマーマネージドキーで顧客の情報を暗号化するようにユーザープールを設定することもできます。

AWS 所有キー

Amazon Cognito は、ユーザープールまたは ID プール内のデータを AWS 所有の KMS キーで暗号化します。このタイプのキーは に表示されません AWS KMS。

カスタマーマネージドキー

Amazon Cognito は、カスタマーマネージドキーを使用してユーザープール内のデータを暗号化します。カスタマーマネージドキーポリシー、ローテーション、およびスケジュールされた削除の管理は、お客様が所有します。

注記

カスタマーマネージドキーによる暗号化は、一部のユーザープールでは使用できない場合があります。新しく作成されたユーザープールでは、常にこの形式の暗号化を使用できます。

カスタマーマネージドキーによるユーザープールの暗号化について知っておくべきこと
  1. ユーザープール内のすべての顧客データは、暗号化設定を構成するアクションを実行しなくても、保管時に暗号化されます。

  2. Amazon Cognito は、保管中のユーザープール暗号化のユーザープール AWS リージョン と同じ 内の対称 KMS キーのみをサポートします。非対称キーを使用して保管時のユーザープール暗号化を設定することはできません。保管時の暗号化は、単一リージョンキーと、ユーザープールと同じリージョンにあるマルチリージョンキーを使用して設定できます。

  3. ユーザープールの暗号化は、エイリアスではなく KMS キー ARN でのみ設定できます。

PII 暗号化

Amazon Cognito は、検索可能な暗号化を使用したユーザー属性検索における個人を特定できる情報 (PII) の機密性、完全性、可用性をサポートしています。これらのハッシュベースのメッセージ認証コード (HMAC) 関数は、ユーザープールデータセット向けにパフォーマンスが最適化されており、ユーザー属性のプレーンテキスト値と暗号化された値の間でマッピングされます。Amazon Cognito は、ユーザープールを暗号化する KMS キーを使用して HMAC 値を計算します。この保護は、次の属性に適用されます。

  • sub

  • email

  • phone_number

  • given_name

  • family_name

  • name

  • username

  • preferred_username

  • cognito:user_status

次の手順では、ユーザープールに保管中の暗号化を設定します。Amazon Cognito AWS のサービス のような へのアクセスを委任する KMS キーポリシーの詳細については、キーポリシーのAmazon Cognito のアクセス許可」を参照してください。

Set customer managed key policy

カスタマーマネージドキーを使用するには、キーで暗号化および復号オペレーションを実行する Amazon Cognito サービスプリンシパルを信頼する必要があります。次の例に示すように、KMS キーのキーポリシーを設定します。このポリシーを記述する IAM プリンシパルには、 kms:PutKeyPolicy 許可を持つ KMS キーへの書き込みアクセス権が必要です。

{ "Id": "cognito-cmk-policy", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Amazon Cognito service access", "Effect": "Allow", "Principal": { "Service": [ "cognito-idp.amazonaws.com", "identitystore.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKeyWithoutPlainText" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" ] }, "StringEquals": { "aws:SourceAccount": [ "111122223333" ] }, "StringLike": { "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" } } }, { "Sid": "Allow Amazon Cognito service DescribeKey access", "Effect": "Allow", "Principal": { "Service": [ "cognito-idp.amazonaws.com", "identitystore.amazonaws.com" ] }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" ] }, "StringEquals": { "aws:SourceAccount": [ "111122223333" ] } } }, { "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "cognito-idp.us-east-1.amazonaws.com" ] } } }, { "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKeyWithoutPlainText" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "cognito-idp.us-east-1.amazonaws.com" ] }, "StringLike": { "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" } } }, { "Sid": "Allow administrators to manage the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" } ] }
Set customer managed key policy with permissions for encryption of exported logs

ログのエクスポートを設定したら、このポリシーを KMS キーに適用します。このポリシーはAmazon Cognito がログをエクスポートするときに暗号化し、中間サービスがログを CloudWatch Logs ロググループに書き込む前に復号することを許可します。次の例に示すように、KMS キーのキーポリシーを設定します。このポリシーを記述する IAM プリンシパルには、 kms:PutKeyPolicy 許可を持つ KMS キーへの書き込みアクセス権が必要です。

{ "Id": "cognito-cmk-policy", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Amazon Cognito service access", "Effect": "Allow", "Principal": { "Service": [ "cognito-idp.amazonaws.com", "identitystore.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKeyWithoutPlainText" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" ] }, "StringEquals": { "aws:SourceAccount": [ "111122223333" ] }, "StringLike": { "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" } } }, { "Sid": "Allow Amazon Cognito service DescribeKey access", "Effect": "Allow", "Principal": { "Service": [ "cognito-idp.amazonaws.com", "identitystore.amazonaws.com" ] }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" ] }, "StringEquals": { "aws:SourceAccount": [ "111122223333" ] } } }, { "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "cognito-idp.us-east-1.amazonaws.com" ] } } }, { "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKeyWithoutPlainText" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "cognito-idp.us-east-1.amazonaws.com" ] }, "StringLike": { "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE" } } }, { "Sid": "Allow Amazon Cognito service log delivery access", "Effect": "Allow", "Principal": { "Service": [ "cognito-idp.amazonaws.com" ] }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:SourceArn": "arn:aws:logs:us-east-1:111122223333:*" } } }, { "Sid": "Allow IngestionHub service log delivery access", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:SourceArn": "arn:aws:logs:us-east-1:111122223333:*" } } }, { "Sid": "Allow administrators to manage the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" } ] }
Configure encryption at rest in the console
ユーザープール内の保管時の暗号化を設定するには
  1. Amazon Cognito コンソールに移動します。 AWS 認証情報を求められる場合があります。

  2. [User Pools] (ユーザープール) を選択します。

  3. リストから既存のユーザープールを選択するか、ユーザープールを作成します。

  4. 設定メニューを選択し、ユーザープールのセキュリティタブに移動します。保管時の暗号化を見つけ、編集を選択します。

  5. キータイプで、AWS 所有キーまたはカスタマーマネージドキーを選択します。

    1. AWS 所有キーを選択した場合、追加の設定は必要ありません。

    2. カスタマーマネージドキーを選択した場合は、KMS キーの ARN をカスタマーマネージドキー ARN に入力します。 AWS KMS キーの作成を選択し、 AWS KMS コンソールで新しいウィンドウを開いて新しい KMS キーを作成することもできます。

  6. [Save changes] (変更の保存) をクリックします。

Configure encryption at rest with the API

CreateUserPool または UpdateUserPool API リクエストでキー設定を設定します。次の部分的なリクエスト本文の例では、提供されたカスタマーマネージドキーを使用するようにユーザープールを設定します。完全なリクエストの例については、「」を参照してください。

"KeyConfiguration": { "KeyType": "CUSTOMER_MANAGED_KEY", "KmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" },

次のリクエスト本文の部分的な例では、 AWS 所有キーを使用するようにユーザープールを設定します。

"KeyConfiguration": { "KeyType": "AWS_OWNED_KEY" },

DescribeUserPool レスポンスに KeyConfigurationパラメータが含まれていない場合、ユーザープールは保管中のデータを AWS 所有キーで暗号化するように設定されています。

転送中の暗号化

マネージドサービスである Amazon Cognito は AWS グローバルネットワークセキュリティで保護されています。 AWS セキュリティサービスと がインフラストラクチャ AWS を保護する方法については、AWS 「 クラウドセキュリティ」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して環境を AWS 設計するには、「Security Pillar AWS Well‐Architected Framework」の「Infrastructure Protection」を参照してください。

AWS 公開された API コールを使用して、ネットワーク経由で Amazon Cognito にアクセスします。クライアントは次をサポートする必要があります。

  • Transport Layer Security (TLS)。TLS 1.2 が必須で、TLS 1.3 をお勧めします。

  • DHE (楕円ディフィー・ヘルマン鍵共有) や ECDHE (楕円曲線ディフィー・ヘルマン鍵共有) などの完全前方秘匿性 (PFS) による暗号スイート。これらのモードは Java 7 以降など、ほとんどの最新システムでサポートされています。

Amazon Cognito ユーザープールおよび ID プールには、IAM 認証、非認証、およびトークン認証による API オペレーションがあります。ユーザープールドメインの設定などの管理オペレーション用のコントロールプレーンタイプのオペレーションもあれば、認証用のデータプレーンタイプのオペレーションもあります。詳細については、「認可モデル別にグループ化された API オペレーションのリスト」を参照してください。Amazon Cognito API オペレーションのすべてのクラスは、ユーザープール、ID プール、サービスエンドポイントcognito-identityの名前空間cognito-idpを共有します。 AWS サービスエンドポイントには、転送中の暗号化と TLS バージョン 1.2 以上が必要です。

Amazon Cognito ユーザープールは、マネージドログインと、サービス所有の Amazon CloudFront ディストリビューションから提供されるウェブドメインのクラシックホスト UI をホストします。Amazon Cognito は、それらのディストリビューションで転送中の暗号化の設定を管理します。マネージドログインの暗号化設定の詳細については、「 マネージドログイン」の章の「TLS バージョン」を参照してください。