

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

# カスタム送信者の Lambda トリガー
<a name="user-pool-lambda-custom-sender-triggers"></a>

Lambda トリガーである `CustomEmailSender` と `CustomSMSSender` は、ユーザープールでサードパーティーの E メール通知および SMS 通知をサポートします。Lambda 関数コード内からユーザーに通知を送信するには、希望の SMS プロバイダーと E メールプロバイダーを選択して使用することができます。Amazon Cognito が、招待、確認コード、検証コード、および仮パスワードをユーザーに送信する必要がある場合、イベントは、設定された Lambda 関数を有効化します。Amazon Cognito は、有効化された Lambda 関数にコードと一時パスワード (シークレット) を送信します。Amazon Cognito は、 AWS KMS カスタマーマネージドキーと を使用してこれらのシークレットを暗号化します AWS Encryption SDK。 AWS Encryption SDK は、汎用データの暗号化と復号に役立つクライアント側の暗号化ライブラリです。

**[CustomEmailSender](user-pool-lambda-custom-email-sender.md)**  
Amazon Cognito は、E メール通知をユーザーに送信するためにこのトリガーを呼び出します。

**[CustomSMSSender](user-pool-lambda-custom-sms-sender.md)**  
Amazon Cognito は、SMS 通知をユーザーに送信するためにこのトリガーを呼び出します。

## 暗号化の概念
<a name="user-pool-lambda-custom-sender-triggers-resources"></a>

Amazon Cognito は、カスタム送信者トリガーに送信するイベントでユーザーのコードをプレーンテキストで送信しません。Lambda 関数は、イベント内のコードを復号する必要があります。次の概念は、ユーザーに配信できるコードを取得するために関数が使用する必要がある暗号化アーキテクチャです。

**AWS KMS**  
AWS KMS は、 AWS KMS キーを作成および制御するためのマネージドサービスです。これらのキーは、データを暗号化します。詳細については、「[AWS Key Management Serviceとは何ですか?](/kms/latest/developerguide/overview.html)」を参照してください。

**KMS キー**  
KMS キーは、暗号化キーの論理表現です。KMS キーには、キー ID、作成日、説明、キーステータスなどのメタデータが含まれます。KMS キーには、データの暗号化と復号に使用されるキーマテリアルも含まれています。詳細については、「[AWS KMS キーの削除](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)」を参照してください。

**対称 KMS キー**  
対称 KMS キーは、暗号化されていない AWS KMS を終了しない 256 ビットの暗号化キーです。対称 KMS キーを使用するには、 を呼び出す必要があります AWS KMS。Amazon Cognito は対称キーを使用します。同じキーで暗号化と復号化が行われます。詳細については、「[KMS キーの削除](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)」を参照してください。

## カスタム送信者 Lambda トリガーについて知っておくべきこと
<a name="user-pool-lambda-custom-sender-triggers-things-to-know"></a>
+ これらの Lambda トリガーを使用するようにユーザープールを設定するには、 AWS CLI または SDK を使用します。これらの設定は、Amazon Cognito コンソールからは利用できません。

  `UpdateUserPool` オペレーションは Lambda 設定を指定します。このオペレーションをリクエストする場合は、ユーザープールのすべてのパラメータ*および*変更対象のパラメータが必要です。関連するすべてのパラメータを指定しない場合、Amazon Cognito は不足しているパラメータの値をデフォルトに設定します。次の CLI AWS の例に示すように、ユーザープールに追加または保持するすべての Lambda 関数のエントリを含めます。詳細については、「[ユーザープールとアプリケーションクライアントの設定更新](cognito-user-pool-updating.md)」を参照してください。

  ```
      #Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing 
      #user pool configurations. This snippet also includes a pre sign-up trigger for syntax reference. The pre sign-up trigger
      #doesn't have a role in custom sender triggers.
                
        --lambda-config "PreSignUp=lambda-arn, \
                         CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \
                         CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \
                         KMSKeyID=key-id"
  ```

  リクエストで `UpdateUserPool` の JSON 本文を使用する場合、次の `LambdaConfig` スニペットはカスタム SMS および E メール送信者関数をリクエストに割り当てます。

  ```
  "LambdaConfig": {
     "KMSKeyID": "arn:aws:kms:us-east-1:111122223333:key/a6c4f8e2-0c45-47db-925f-87854bc9e357",
     "CustomEmailSender": {
        "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
        "LambdaVersion": "V1_0"
     },
     "CustomSMSSender": {
        "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
        "LambdaVersion": "V1_0"
     }
  ```
+ `update-user-pool` AWS CLI コマンドを使用してカスタム送信者 Lambda トリガーを削除するには、 から `CustomSMSSender`または `CustomEmailSender`パラメータを省略し`--lambda-config`、ユーザープールで使用する他のすべてのトリガーを含めます。

  `UpdateUserPool` API リクエストを使用してカスタム送信者の Lambda トリガーを削除するには、ユーザープール設定の残りを含むリクエスト本文から `CustomSMSSender` または `CustomEmailSender` パラメータを省略します。
+ Amazon Cognito は、ユーザーの一時パスワードで `&lt;` (`<`) および `&gt;` (`>`) などの予約文字を HTML エスケープします。これらの文字は、Amazon Cognito がカスタム E メール送信者機能に送信する一時パスワードには表示される場合がありますが、一時的な確認コードには表示されません。一時パスワードを送信するには、Lambda 関数がパスワードを復号した後、ユーザーにメッセージを送信する前に、これらの文字をアンエスケープする必要があります。

## カスタム送信者 Lambda トリガーのアクティブ化
<a name="enable-custom-sender-lambda-trigger"></a>

カスタムロジックを使用して SMS または E メールメッセージをユーザープールに送信するには、カスタム送信者トリガーを設定します。以下の手順では、カスタム SMS トリガー、カスタム E メールトリガー、またはその両方をユーザープールに割り当てます。カスタム送信者トリガーを追加すると、Amazon Cognito は、SMS または E メールメッセージを送信するデフォルトの動作ではなく、電話番号やワンタイムコードなどのユーザー属性を常に Lambda 関数に送信します。

1.  AWS Key Management Service () で[対称暗号化キー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)を作成しますAWS KMS。Amazon Cognito は、シークレット (仮パスワード、検証コード、認証用のワンタイムパスワード、確認コード) を生成し、この KMS キーを使用してシークレットを [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) で暗号化します。その後、Lambda 関数 AWS Encryption SDK で を使用してシークレットを復号し、プレーンテキストでユーザーに送信できます。

1. ユーザープールを作成または更新する IAM プリンシパルは、Amazon Cognito がコードを暗号化するために使用する KMS キーに対して 1 回限りの付与を作成します。このプリンシパルに KMS キーへの `CreateGrant` アクセス許可を付与します。この例の KMS キーポリシーを有効にするには、ユーザープールを更新する管理者が、IAM ロール `arn:aws:iam::111222333444:role/my-example-administrator-role` で引き受けたロールセッションにサインインしている必要があります。

   次のリソースベースのポリシーを、環境に合わせて変更し、KMS キーに適用します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
       {
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/my-example-administrator-role"
           },
           "Action": "kms:CreateGrant",
           "Resource": "arn:aws:kms:us-west-2:111122223333:key/1example-2222-3333-4444-999example",
           "Condition": {
               "StringEquals": {
                  "kms:EncryptionContext:userpool-id": "us-west-2_EXAMPLE"
               }
           }
       },
       {
           "Sid": "Allow Lambda to decrypt",
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/my-lambda-function-role"
           },
           "Action": "kms:Decrypt",
           "Resource": "*"
       }]
   }
   ```

------

1. カスタム送信者トリガーのための Lambda 関数を作成します。Amazon Cognito は [AWS 暗号化 SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) を使用してシークレット (一時パスワードまたはユーザーの API リクエストを承認するコード) を暗号化します。

   1. KMS キーに対して少なくとも `kms:Decrypt` アクセス許可を持つ [Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)を割り当てます。

   1. メッセージを送信するための Lambda 関数コードを作成します。関数への入力イベントにはシークレットが含まれています。関数で、 を使用してシークレットを復号 AWS Encryption SDK し、関連するメタデータを処理します。次に、メッセージを配信するカスタム API に、コード、独自のカスタムメッセージ、宛先の電話番号を送信します。

   1. Lambda 関数 AWS Encryption SDK に を追加します。詳細については、「[AWS Encryption SDK プログラミング言語](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html)」を参照してください。Lambda パッケージを更新するには、次のステップを完了します。

      1. Lambda 関数を.zip ファイルとして AWS マネジメントコンソールにエクスポートします。

      1. 関数を開き、 を追加します AWS Encryption SDK。詳細とダウンロードリンクについては、AWS Encryption SDK デベロッパーガイドの「[AWS Encryption SDK プログラミング言語](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html)」を参照してください。

      1. SDK の依存関係を使用して関数を ZIP 圧縮し、その関数を Lambda にアップロードします。詳細については、「*AWS Lambda デベロッパーガイド*」の「[Lambda 関数の .zip ファイルアーカイブとしてのデプロイ](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-create)」を参照してください。

1. Amazon Cognito サービスプリンシパルに、Lambda 関数を呼び出すための `cognito-idp.amazonaws.com` へのアクセス権を付与します。

   次の AWS CLI コマンドは、Lambda 関数を呼び出すためのアクセス許可を Amazon Cognito に付与します。

   ```
   aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
   ```

1. カスタム送信者 Lambda トリガーを追加する `LambdaConfig` パラメータを使用して [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストを生成します。Amazon Cognito コンソールでは、このタイプのトリガーを追加することはできません。カスタム送信者トリガーには、`KMSKeyID` に加えて、`CustomSMSSender` または `CustomEmailSender` (あるいは両方) の `LambdaConfig` パラメータが必要です。