開発者ガイド

Amazon Cognito

Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon Cognito

開発者ガイドAmazon Cognito: 開発者ガイド
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon の商標およびトレードドレスは、Amazon のものではない製品またはサービスと関連付けてはならず、お客様に混乱を招くような形や Amazon の信用を傷つけたり失わせたりする形で使用することはできません。Amazon が所有しない商標はすべてそれぞれの所有者に所属します。所有者は必ずしも Amazon との提携や関連があるわけではありません。また、Amazon 支援を受けているとはかぎりません。

Amazon Cognito

開発者ガイドTable of Contents
Amazon Cognito とは .......................................................................................................................... 1
ユーザープール ................................................................................................................................ 2
アイデンティティプール .................................................................................................................. 3
Amazon Cognito の機能 .................................................................................................................. 4
ユーザープール ........................................................................................................................... 4
アイデンティティプール ............................................................................................................. 6
Amazon Cognito ユーザープールとアイデンティティプールの比較 .............................................. 8
Amazon Cognito の使用開始方法 .................................................................................................. 12
リージョナルな可用性 ................................................................................................................... 13
Amazon Cognito の料金 ................................................................................................................ 13
認証の仕組み .................................................................................................................................. 13
SDK 認証 .................................................................................................................................. 14
ホストされた UI 認証 ............................................................................................................... 17
サードパーティー ID プロバイダー認証 ................................................................................... 20
ID プール認証 ........................................................................................................................... 23
Amazon Cognito の用語 ................................................................................................................ 26
全般 ........................................................................................................................................... 27
ユーザープール ......................................................................................................................... 29
アイデンティティプール ........................................................................................................... 31の使用 AWS SDKs ........................................................................................................................ 32の開始方法 AWS ............................................................................................................................ 33にサインアップする AWS アカウント ..................................................................................... 33
管理アクセスを持つユーザーを作成する .................................................................................. 34
ユーザープールの開始方法 ................................................................................................................. 36
React SPAの例 .............................................................................................................................. 36
アプリケーションの作成 ........................................................................................................... 41
Lightsail 開発者環境を作成する ................................................................................................ 42
Flutter モバイルアプリの例 ........................................................................................................... 43
アプリケーションの作成 ........................................................................................................... 48
次のステップ .................................................................................................................................. 50
ユーザープールを作成する ....................................................................................................... 51
ホストされた UI アプリクライアントを追加する .................................................................... 55
ソーシャルプロバイダーの追加 ................................................................................................ 58
SAML プロバイダーを追加する ................................................................................................ 66

iii

Amazon Cognito

開発者ガイドID プールの使用開始方法 ................................................................................................................... 69
Amazon Cognito で ID プールを作成する .................................................................................... 69
SDK のセットアップ ..................................................................................................................... 71
ID プロバイダーを統合する ........................................................................................................... 71
認証情報を取得する ....................................................................................................................... 72
その他の使用開始オプション ............................................................................................................. 73
アプリケーションとの統合 ................................................................................................................. 75
による認証 AWS Amplify .............................................................................................................. 76
Amplify によるユーザーインターフェイス (UI) の作成 ............................................................ 77
による認証 AWS SDKs ................................................................................................................. 78
Amazon Verified Permissions による承認 .................................................................................... 78
API Verified Permissions による認証 ....................................................................................... 80
Amazon Cognito ユーザーのポリシーの例。 ........................................................................... 83
コード例 .............................................................................................................................................. 86
Amazon Cognito ID ....................................................................................................................... 88
基礎 ........................................................................................................................................... 88
シナリオ .................................................................................................................................. 111
Amazon Cognito Identity Provider ............................................................................................... 112
基礎 ......................................................................................................................................... 123
シナリオ .................................................................................................................................. 254
Amazon Cognito Sync ................................................................................................................. 380
基礎 ......................................................................................................................................... 380
マルチテナンシーのベストプラクティス ......................................................................................... 383
テナントごとのユーザープール ................................................................................................... 385
テナントごとのアプリケーションクライアント .......................................................................... 387
テナントごとのユーザープールグループ .................................................................................... 389
テナントごとのカスタム属性 ...................................................................................................... 391
テナントごとのカスタムスコープ ............................................................................................... 393
リソースの例 ........................................................................................................................... 396
マルチテナンシーのセキュリティに関する推奨事項 .................................................................. 397
一般的な Amazon Cognito シナリオ ................................................................................................ 399
ユーザープールを使用して認証する ............................................................................................ 399
サーバー側のリソースにアクセスする ........................................................................................ 400
API Gateway と Lambda を使用してリソースにアクセスする .................................................. 401
ユーザープールと ID プールを使用して AWS サービスにアクセスする .................................... 402
サードパーティーで認証を行い、ID プールを使用して AWS サービスにアクセスする ............ 403

iv

Amazon Cognito

開発者ガイドAmazon Cognito で AWS AppSync リソースにアクセスする .................................................... 404
Amazon Cognito user pools ............................................................................................................. 406
機能 .............................................................................................................................................. 407
サインアップ ........................................................................................................................... 407
サインイン .............................................................................................................................. 408
ホストされた UI ...................................................................................................................... 409
セキュリティ ........................................................................................................................... 409
カスタマーユーザーエクスペリエンス ................................................................................... 410
モニタリングと分析 ................................................................................................................ 410
Amazon Cognito アイデンティティプール統合 ..................................................................... 411
認証 .............................................................................................................................................. 411
ユーザープール認証フロー ..................................................................................................... 413
アプリクライアント ................................................................................................................ 424
デバイスの使用 ....................................................................................................................... 435
API および エンドポイントの使用 .............................................................................................. 441
ユーザープールAPI認証 .......................................................................................................... 444
ユーザープールの更新 ................................................................................................................. 452
SMS 設定 ................................................................................................................................ 454
AWS SDK、、 AWS CDKまたは REST API を使用したユーザープールの更新 ................... 454
ホストされた UI とOAuthサーバー ............................................................................................. 456
でホストされた UI を設定する AWS Amplify ......................................................................... 457
Amazon Cognito コンソールでの ホストされた UI のセットアップ ..................................... 458
サインインページの表示 ......................................................................................................... 461
Amazon Cognito ユーザープールでホストされた UI について知っておくべきこと .............. 462
ドメインの設定 ....................................................................................................................... 464
組み込みのウェブページのカスタマイズ ................................................................................ 474
ホストされた UI の使用方法 ................................................................................................... 480
スコープとリソースサーバー ...................................................................................................... 499
API 認証 .................................................................................................................................. 500
M achine-to-machine (M2M) 認証 .......................................................................................... 501
スコープについて .................................................................................................................... 502
リソースサーバーについて ..................................................................................................... 503
サードパーティー経由のサインインの追加 ................................................................................. 508
Amazon Cognito ユーザープールでのフェデレーションサインインの仕組み ....................... 508
Amazon Cognito のサービスプロバイダーとしてのアプリの責任 ......................................... 510v

Amazon Cognito

開発者ガイドAmazon Cognito ユーザープールサードパーティーサインインについて知っておくべきこと ............................................................................................................................................. 510
ID プロバイダ ......................................................................................................................... 512
ソーシャル ID プロバイダー ................................................................................................... 518
SAML プロバイダー ................................................................................................................ 527
OIDC プロバイダー ................................................................................................................ 560
属性マッピングを指定する ..................................................................................................... 569
フェデレーションユーザーを既存のユーザープロファイルにリンクする ............................. 575
Lambda トリガーの使用 .............................................................................................................. 578
重要な考慮事項 ....................................................................................................................... 581
ユーザープールの トリガーの追加 ......................................................................................... 584
ユーザープールの Lambda トリガーイベント ....................................................................... 584
ユーザープールの Lambda トリガーの一般的なパラメータ .................................................. 585
イベントごとの Lambda トリガーのソース ........................................................................... 586
機能ごとの Lambda トリガーのソース .................................................................................. 592
サインアップ前の Lambda トリガー ...................................................................................... 596
確認後の Lambda トリガー .................................................................................................... 606
認証前の Lambda トリガー .................................................................................................... 610
認証後の Lambda トリガー .................................................................................................... 614
チャレンジの Lambda トリガー ............................................................................................. 619
トークン生成前の Lambda トリガー ...................................................................................... 634
ユーザー移行の Lambda トリガー ......................................................................................... 654
カスタムメッセージの Lambda トリガー .............................................................................. 660
カスタム送信者の Lambda トリガー ...................................................................................... 667
Amazon Pinpoint 分析の使用 ...................................................................................................... 685
Amazon Cognito と Amazon Pinpoint のリージョンマッピングを確認する .......................... 686
アプリを Amazon Pinpoint と統合する .................................................................................. 690
ユーザーの管理 ............................................................................................................................ 691
ユーザーのサインアップの許可 .............................................................................................. 691
ユーザーアカウントのサインアップと確認 ............................................................................ 694
管理者としてのユーザーの作成 .............................................................................................. 720
ユーザープールにグループを追加する ................................................................................... 726
ユーザーの管理と検索 ............................................................................................................ 729
ユーザーアカウントの復旧 ..................................................................................................... 734
ユーザープールへのユーザーのインポート ............................................................................ 734
属性 ......................................................................................................................................... 752

vi

Amazon Cognito

開発者ガイドパスワードの要件 .................................................................................................................... 767
E メール設定 ............................................................................................................................... 769
デフォルトの E メール設定 .................................................................................................... 770
Amazon SES E メール設定 .................................................................................................... 771
E メールアカウントの設定 ..................................................................................................... 776
SMS メッセージ設定 ................................................................................................................... 783
Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する .......................... 784
トークンの使用 ............................................................................................................................ 792
ID トークンの使用 .................................................................................................................. 794
アクセストークンの使用 ......................................................................................................... 798
更新トークンの使用 ................................................................................................................ 802
トークンの取り消し ................................................................................................................ 804
JSON ウェブトークンの検証 ................................................................................................. 806
キャッシュトークン ................................................................................................................ 812
サインイン後にリソースにアクセスする .................................................................................... 815
Verified Permissions によるリソースへのアクセス ............................................................... 400
API Gateway リソースへのアクセス ...................................................................................... 818
ID プールを使用した AWS リソースへのアクセス ................................................................ 819
セキュリティ機能を使用する ...................................................................................................... 824
追加 MFA ................................................................................................................................ 826
高度なセキュリティ機能 ......................................................................................................... 839
AWS WAF ウェブ ACLs ......................................................................................................... 873
大文字と小文字の区別 ............................................................................................................ 877
削除保護 .................................................................................................................................. 879
ユーザー開示の管理 ................................................................................................................ 880
Amazon Cognito アイデンティティプール ...................................................................................... 887
ID プールの使用 ........................................................................................................................... 889
ユーザー IAM ロール .............................................................................................................. 891
認証された ID と認証されていない ID ................................................................................... 891
ゲストアクセスをアクティブ化/非アクティブ化する ............................................................ 891
ID の種類に関連付けられたロールを変更する ....................................................................... 892
ID プロバイダーを編集する .................................................................................................... 894
アイデンティティプールを削除する ....................................................................................... 895
ID プールから ID を削除する ................................................................................................. 896
Amazon Cognito Sync を ID プールで使用する ..................................................................... 896
ID プールの概念 ........................................................................................................................... 899

vii

Amazon Cognito

開発者ガイドID プールの認証フロー ........................................................................................................... 900
IAM ロール .............................................................................................................................. 910
ロールの信頼とアクセス権限 .................................................................................................. 925
セキュリティに関するベストプラクティス ................................................................................. 926
IAM 設定のベストプラクティス ............................................................................................. 927
ID プール設定のベストプラクティス ..................................................................................... 929
アクセスコントロールへの属性の使用 ........................................................................................ 930
Amazon Cognito の ID プールを用いたアクセスコントロールへの属性の使用 ..................... 932
アクセスコントロールポリシーへの属性の使用例 ................................................................. 933
アクセスコントロールの属性をオフにする ............................................................................ 935
デフォルトのプロバイダーマッピング ................................................................................... 935
ロールベースアクセスコントロールの使用 ................................................................................. 938
ロールマッピング用のロールの作成 ....................................................................................... 938
pass-role 許可の付与 .............................................................................................................. 939
ユーザーにロールを割り当てるためのトークンの使用 .......................................................... 940
ルールベースのマッピングを使用してユーザーにロールを割り当てる ................................. 941
ルールベースのマッピングで使用するトークンクレーム ...................................................... 942
ロールベースのアクセスコントロールのベストプラクティス ............................................... 944
認証情報の取得 ............................................................................................................................ 944
AWS サービスへのアクセス ........................................................................................................ 951
ID プール外部 ID プロバイダー .................................................................................................. 954
Facebook ................................................................................................................................. 955
Login with Amazon ................................................................................................................. 963
Google ..................................................................................................................................... 968
Apple でのサインイン ............................................................................................................. 981
Open ID Connect プロバイダー ............................................................................................. 988
SAML ID プロバイダー ........................................................................................................... 992
デベロッパーが認証した ID ......................................................................................................... 996
認証のフローについて ............................................................................................................ 996
デベロッパー名を指定して ID プールに関連付ける ............................................................... 997
ID プロバイダーの実装 ........................................................................................................... 998
ログインマップの更新 (Android および iOS のみ) ............................................................... 1006
トークンの取得 (サーバー) ................................................................................................... 1007
既存のソーシャル ID への接続 ............................................................................................. 1008
プロバイダー間の移行のサポート ........................................................................................ 1009
ID の切り替え ............................................................................................................................ 1013

viii

Amazon Cognito

開発者ガイドAndroid .................................................................................................................................. 1013
iOS - Objective-C .................................................................................................................. 1014
iOS - Swift ............................................................................................................................. 1014
JavaScript .............................................................................................................................. 1015
Unity ...................................................................................................................................... 1016
Xamarin ................................................................................................................................. 1016
Amazon Cognito Sync .................................................................................................................... 1017
Amazon Cognito Sync の使用開始方法 ..................................................................................... 1018
Amazon Cognito で ID プールをセットアップする ............................................................. 1018
データを保存し、同期する ................................................................................................... 1018
データの同期 .............................................................................................................................. 1018
Amazon Cognito Sync クライアントの初期化 ..................................................................... 1019
データセットについて .......................................................................................................... 1021
データセットのデータの読み取りと書き込み ...................................................................... 1023
同期ストアでのローカルデータの同期 ................................................................................. 1025
コールバックの処理 ................................................................................................................... 1029
Android .................................................................................................................................. 1029
iOS - Objective-C .................................................................................................................. 1031
iOS - Swift ............................................................................................................................. 1034
JavaScript .............................................................................................................................. 1038
Unity ...................................................................................................................................... 1040
Xamarin ................................................................................................................................. 1043
プッシュ同期 .............................................................................................................................. 1046
Amazon Simple Notification Service (Amazon SNS) アプリケーションを作成する ............ 1046
Amazon Cognito コンソールでプッシュ同期を有効にする .................................................. 1047
アプリケーションでのプッシュ同期の使用: Android ........................................................... 1048
アプリケーションでプッシュ同期を使用する: iOS - Objective-C ........................................ 1050
アプリケーションでプッシュ同期を使用する: iOS - Swift ................................................... 1053
Amazon Cognito ストリーム ..................................................................................................... 1056
Amazon Cognito イベント ......................................................................................................... 1058
Amazon Cognito コンソールの使用 ............................................................................................... 1064
ユーザープールコンソール ....................................................................................................... 1065
アイデンティティプールコンソール .......................................................................................... 1067
セキュリティ .................................................................................................................................. 1069
データ保護 ................................................................................................................................. 1070
データ暗号化 ......................................................................................................................... 1070

ix

Amazon Cognito

開発者ガイドID およびアクセス管理 .............................................................................................................. 1071
対象者 .................................................................................................................................... 1072
アイデンティティを使用した認証 ........................................................................................ 1072
ポリシーを使用したアクセスの管理 ..................................................................................... 1076
Amazon Cognito と の連携方法 IAM .................................................................................... 1079
アイデンティティベースポリシーの例 ................................................................................. 1088
トラブルシューティング ....................................................................................................... 1093
サービスリンクロールの使用 ................................................................................................ 1095
ログ記録とモニタリング ............................................................................................................ 1100
コストのモニタリング .......................................................................................................... 1100
および Service Quotas でのクォータ CloudWatch と使用状況の追跡 ................................ 1103を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail .............................. 1126
コンプライアンス検証 ............................................................................................................... 1153
耐障害性 ..................................................................................................................................... 1154
リージョンデータに関する考慮事項 ..................................................................................... 1154
インフラストラクチャセキュリティ .......................................................................................... 1155
設定と脆弱性の分析 ................................................................................................................... 1155
AWS マネージドポリシー ......................................................................................................... 1156
ポリシーの更新 ..................................................................................................................... 1157
リソースのタグ付け ........................................................................................................................ 1160
サポートされるリソース ............................................................................................................ 1160
タグの制限 ................................................................................................................................. 1161
コンソールを使用したタグの管理 ............................................................................................. 1161
AWS CLI の例 ........................................................................................................................... 1162
タグの割り当て ..................................................................................................................... 1162
タグの表示 ............................................................................................................................ 1163
タグの削除 ............................................................................................................................ 1163
リソース作成時のタグの適用 ................................................................................................ 1164
API アクション .......................................................................................................................... 1165
ユーザープールタグの API アクション ................................................................................ 1165
ID プールタグの API アクション ......................................................................................... 1165
クォータ .......................................................................................................................................... 1166
API リクエストレートクォータについて .................................................................................. 1166
クォータのカテゴリ .............................................................................................................. 1166
特別なリクエストレート処理を使用した Amazon Cognito ユーザープールAPIオペレーショ
ン ........................................................................................................................................... 1167x

Amazon Cognito

開発者ガイド

月次のアクティブユーザー ................................................................................................... 1168
API リクエストレートクォータの管理 ...................................................................................... 1169
クォータ要件を特定する ....................................................................................................... 1169
リクエストレートの最適化 ................................................................................................... 1169
クォータの使用状況を追跡する ............................................................................................ 1171
月間アクティブユーザーを追跡する (MAUs） ..................................................................... 1172
クォータ引き上げのリクエスト ............................................................................................ 1172
ユーザープールのリクエストレートクォータ ........................................................................... 1173
ID プールリクエストレートクォータ ........................................................................................ 1184
リソースの番号とサイズのクォータ .......................................................................................... 1186
API リファレンス ........................................................................................................................... 1193
ユーザープールのエンドポイントリファレンス ....................................................................... 1193
ホストされた UI エンドポイントのリファレンス ................................................................ 1194
フェデレーションエンドポイントリファレンス ................................................................... 1203
OAuth 2.0 許可 ..................................................................................................................... 1228の使用 PKCE ........................................................................................................................ 1229
ホストされた UI とフェデレーションエラーレスポンス ..................................................... 1232
ユーザープール API リファレンス ............................................................................................ 1233
ID プール API リファレンス ..................................................................................................... 1234
Cognito Sync API リファレンス ............................................................................................... 1234
ドキュメント履歴 ........................................................................................................................... 1235...................................................................................................................................................... mccliii

xi

Amazon Cognito

開発者ガイドAmazon Cognito とはAmazon Cognito はウェブアプリとモバイルアプリ用のアイデンティティプラットフォームです。これは、ユーザーディレクトリ、認証サーバー、および OAuth 2.0 アクセストークンと AWS 認証情報の認証サービスです。Amazon Cognito を使用すると、組み込みのユーザーディレクトリ、エンター
プライズディレクトリ、Google や Facebook などのコンシューマー ID プロバイダーからユーザーを認証および承認できます。
トピック• ユーザープール• アイデンティティプール• Amazon Cognito の機能• Amazon Cognito ユーザープールとアイデンティティプールの比較• Amazon Cognito の使用開始方法• リージョナルな可用性• Amazon Cognito の料金• Amazon Cognito ユーザープールと ID プールでの認証の仕組み• Amazon Cognito の用語• でのこのサービスの使用 AWS SDK• の開始方法 AWS
その後に続く 2 つのコンポーネントが Amazon Cognito を構成します。これらは、ユーザーのアク
セスニーズに応じて、独立して動作することも、連携して動作することもできます。

1

Amazon Cognito

開発者ガイドユーザープール

アプリまたは に対してユーザーを認証および承認する場合は、ユーザープールを作成しますAPI。
ユーザープールは、セルフサービスと管理者主導の両方によるユーザー作成、管理、認証を行うユー
ザーディレクトリです。ユーザープールは、独立したディレクトリと OIDC ID プロバイダー (IdP)と、ワークフォースと顧客 ID のサードパーティープロバイダーへの中間サービスプロバイダー (SP)にすることができます。2.0 の組織のワークフォース ID とOIDC IdPs ユーザープールに対して、ア
プリケーションでシングルサインオン (SSO) SAML を提供できます。パブリック 2.0 ID ストアのAmazon、Google、Apple、Facebook で、組織の顧客 ID OAuth をアプリSSOで指定することもできます。顧客 ID とアクセス管理 (CIAM) の詳細については、「 CIAMとは」を参照してください。
ユーザープールはアイデンティティプールとの統合を必要としません。ユーザープールから、認証されたJSONウェブトークン (JWTs) をアプリケーション、ウェブサーバー、または に直接発行できますAPI。

ユーザープール

2

Amazon Cognito

開発者ガイドアイデンティティプール

認証されたユーザーまたは匿名ユーザーが AWS リソースにアクセスすることを許可する場合
は、Amazon Cognito ID プールを設定します。ID プールは、ユーザーにリソースを提供するためにアプリの AWS 認証情報を発行します。ユーザープールや 2.0 サービスなど、信頼できる ID SAML
プロバイダーを使用してユーザーを認証できます。また、オプションでゲストユーザーに認証情報を発行することもできます。ID プールは、ロールベースのアクセスコントロールと属性ベースのアク
セスコントロールの両方を使用して、ユーザーの AWS リソースへのアクセス権限を管理します。
アイデンティティプールはユーザープールとの統合を必要としません。アイデンティティプールは、
ワークフォースとコンシューマーの両方の ID プロバイダーからの認証済みクレームを直接受け入れることができます。
Amazon Cognito のユーザープールとアイデンティティプールの併用
このトピックの最初の図では、Amazon Cognito を使用してユーザーを認証し、ユーザーにアクセス権を付与します。 AWS サービス
1. アプリユーザーはユーザープールからサインインし、2.0 OAuth トークンを受け取ります。
アイデンティティプール

3

Amazon Cognito

開発者ガイド2. アプリは、ユーザープールトークンを ID プールと交換して、 および AWS Command LineInterface () で使用できる AWS APIs一時的な AWS 認証情報と交換しますAWS CLI。
3. アプリケーションは認証情報セッションをユーザーに割り当て、Amazon S3 や Amazon
DynamoDB AWS サービス などの に認可されたアクセスを提供します。
アイデンティティプールとユーザープールを使用するその他の例については、「Amazon Cognito の一般的なシナリオ」を参照してください。
Amazon Cognito では、責任共有モデルのクラウド義務のセキュリティは SOC1～
3、PCIDSS、27001 ISO に準拠しており、 HIPAA-BAA の対象となります。Amazon Cognito のクラウドでセキュリティを設計して、SOC1-3、ISO27001、および HIPAA- に準拠させることができます
がBAA、 PCI に準拠することはできませんDSS。詳細については、[AWS 対象範囲内のサービス]を参照してください。リージョンデータに関する考慮事項も参照してください。

Amazon Cognito の機能
ユーザープール
Amazon Cognito ユーザープールは、ユーザーディレクトリです。ユーザープールを使用することで、ユーザーはウェブまたはモバイルアプリに Amazon Cognito 経由でサインインする、またはサードパーティー IdP 経由でフェデレートすることができます。フェデレーションとローカルユーザーには、ユーザープールにユーザープロファイルがあります。
ローカルユーザーとは、ユーザーがユーザープールにサインアップした、または直接作成したユーザーです。これらのユーザープロファイルは、 AWS Management Console、、 AWS SDKまたはAWS Command Line Interface () で管理およびカスタマイズできますAWS CLI。
Amazon Cognito ユーザープールは、サードパーティーの からのトークンとアサーションを受け入れ
IdPs、アプリケーションに発行JWTする にユーザー属性を収集します。Amazon Cognito が とのやり取りを処理し、クレームを中央トークン形式にマッピングJWTsしている間 IdPs、 の 1 つのセットでアプリケーションを標準化できます。
Amazon Cognito ユーザープールは、スタンドアロンIdP である可能性があります。Amazon Cognito
はOpenID Connect (OIDC) 標準を使用して、認証と認可JWTsのために を生成します。ローカルユー
ザーをログインさせると、ユーザープールがそれらのユーザーに対して権限を持つことになります。
ローカルユーザーを認証すると、次の機能にアクセスできます。
Amazon Cognito の機能

4

Amazon Cognito

開発者ガイド• Amazon Cognito ユーザープールを呼び出してユーザーAPIを認証、承認、管理する独自のウェブ
フロントエンドを実装します。
• ユーザーの多要素認証 (MFA) を設定します。Amazon Cognito は、時間ベースのワンタイムパス
ワード (TOTP) とSMSメッセージ をサポートしていますMFA。
• 悪意のある管理下にあるユーザーアカウントからのアクセスから保護します。
• 独自のカスタムマルチステップ認証フローを作成します。
• 別のディレクトリでユーザーを検索し、Amazon Cognito に移行します。
Amazon Cognito ユーザープールは、 へのサービスプロバイダー (SP) としてのデュアルロールとIdPs、アプリへの IdP を果たすこともできます。Amazon Cognito ユーザープールは、Facebook やGoogle IdPs などのコンシューマー、または Okta や Active Directory フェデレーションサービス ()IdPs などのワークフォースに接続できますADFS。
Amazon Cognito ユーザープールが発行する OAuth2.0 トークンと OpenID Connect (OIDC) トークンを使用すると、• ユーザーを認証し、ユーザープロファイルの設定に必要な情報を提供する ID トークンをアプリ内で受け入れる• ユーザーのAPI呼び出しを許可するOIDCスコープAPIを使用して、 のアクセストークンを受け入れます。
• Amazon Cognito ID プールから AWS 認証情報を取得します。
Amazon Cognito ユーザープールの機能
機能説明

OIDC IdP

ユーザーを認証するための ID トークンを発行する

認証サーバー

アクセストークンを発行して へのユーザーア
クセスを許可する APIs

SAML 2.0 SP

SAML アサーションを ID トークンとアクセス
トークンに変換する

OIDC SPOIDC トークンを ID トークンとアクセストー
クンに変換する

ユーザープール5

Amazon Cognito

開発者ガイドOAuth 2.0 SP

Apple、Facebook、Amazon、Google の ID
トークンを独自の ID トークンとアクセストー
クンに変換する

認証フロントエンドサービス

ホストされた UI でユーザーをサインアップ、管理、認証する

API 独自の UI のサポートサポートされている AWS SDKs1 のAPIリクエ
ストを通じてユーザーを作成、管理、認証する

MFA

SMS メッセージ、TOTPs、またはユーザーのデバイスを追加の認証要素として使用する1

セキュリティのモニタリングと対応

悪意のあるアクティビティや安全でないパス
ワードからの保護1

認証フローをカスタマイズする

独自の認証メカニズムを構築するか、既存のフローにカスタムステップを追加する1

グループ

トークンを ID プールに渡すときに、ユーザーの論理グループとIAMロールクレームの階層を作成する

ID トークンをカスタマイズする

新規、変更、抑制されたクレームで ID トーク
ンをカスタマイズする

ユーザー属性をカスタマイズする

ユーザー属性に値を割り当て、独自のカスタム属性を追加する¹ この機能はローカルユーザーのみが使用できます。
ユーザープールの詳細については、ユーザープールの開始方法「」およびAmazon Cognito ユーザー
プールAPIリファレンス」を参照してください。

アイデンティティプール
ID プールは、ユーザーまたはゲストに割り当て、一時的な AWS 認証情報の受信を許可する一意の識別子または ID のコレクションです。2.0、OpenID Connect (OIDC）、または 2.0 ソーシャル ID
SAML プロバイダー (IdP) OAuth からの信頼されたクレームの形式で ID プールに認証の証明を提示
アイデンティティプール

6

Amazon Cognito

開発者ガイドする場合、ユーザーを ID プール内の ID に関連付けます。ID プールが ID 用に作成するトークンは、
AWS Security Token Service () から一時的なセッション認証情報を取得できますAWS STS。
認証された ID を補完するために、IdP 認証なしで AWS アクセスを許可するように ID プールを設定することもできます。独自の認証証明を提供することも、認証なしで提供することもできます。認証されていない ID を使用して、リクエストしたすべてのアプリユーザーに一時的な AWS 認証情報を付与できます。アイデンティティプールでは、開発者が認証したアイデンティティを使用して、独自のカスタムスキーマに基づいてクレームを受け付けて認証情報を発行することもできます。
Amazon Cognito ID プールでは、 のIAMポリシーと統合する方法が 2 つあります AWS アカウント。
これら 2 つの機能は一緒に使用することも、個別に使用することもできます。
ロールベースアクセスコントロール
ユーザーが ID プールにクレームを渡すと、Amazon Cognito はリクエストするIAMロールを選択します。必要に応じてロールのアクセス許可をカスタマイズするには、各ロールにIAMポリシーを適用します。たとえば、ユーザーがマーケティング部門に所属していることを証明すると、マーケティング
部門のアクセスニーズに合わせたポリシーが設定されたロールの認証情報を受け取ります。Amazon
Cognito では、デフォルトロール、ユーザーのクレームをクエリするルールに基づくロール、または
ユーザープール内のユーザーのグループメンバーシップに基づくロールをリクエストできます。がID プールのみを信頼して一時セッションを生成するようにロールIAM信頼ポリシーを設定することもできます。
アクセスコントロールの属性
アイデンティティプールはユーザーのクレームから属性を読み取り、ユーザーの一時セッションのプリンシパルタグにマッピングします。その後、ID プールからセッションタグを渡すIAMプリ
ンシパルに基づいて、リソースへのアクセスを許可または拒否するようにリソースIAMベースのポリシーを設定できます。例えば、ユーザーがマーケティング部門にいることを実証した場合、はセッション に AWS STS タグを付けますDepartment: marketing。Amazon S3 バケット
は、Departmentタグmarketingに の値を必要とする aws:PrincipalTag 条件に基づいて読み取りオ
ペレーションを許可します。
Amazon Cognito アイデンティティプールの機能
機能

説明

Amazon Cognito ユーザープール SP

ユーザープールの ID トークンを のウェブ ID
認証情報と交換する AWS STS

アイデンティティプール

7

Amazon Cognito

開発者ガイドSAML 2.0 SP

からのウェブ ID 認証情報のSAMLアサーショ
ンの交換 AWS STSOIDC SPOIDC トークンを からのウェブ ID 認証情報と交換する AWS STSOAuth 2.0 SP

Amazon、Facebook、Google、Apple、およびTwitter のOAuthトークンを のウェブ ID 認証情報と交換する AWS STS

カスタム SPAWS 認証情報を使用して、任意の形式のクレームを のウェブ ID 認証情報と交換します。
AWS STS

非認証アクセス

認証なしで から AWS STS アクセスが制限されたウェブ ID 認証情報を発行する

ロールベースアクセスコントロール

クレームに基づいて認証されたユーザーの IAM
ロールを選択し、ID プールのコンテキストでのみ引き受けるようにロールを設定します。

単一ドメイン内の属性ベースのクレームを AWS STS 一時セッションのプリン
シパルタグに変換し、IAMポリシーを使用してプリンシパルタグに基づいてリソースアクセスをフィルタリングする

ID プールの詳細については、Amazon Cognito ID プールの開始方法「」およびAmazon Cognito ID
プールAPI」リファレンスを参照してください。

Amazon Cognito ユーザープールとアイデンティティプールの比較
機能説明

ユーザープール

OIDC IdP

アプリユーザーを認証するための OIDC ID
トークンを発行する✓

Amazon Cognito ユーザープールとアイデンティティプールの比較

ID プール8

Amazon Cognito

開発者ガイドAPI 認証サーバー

アクセストークンを発行して、2.0 認証ス
コープを受け入れる
OAuth APIs、データ
ベース、およびその他のリソースへのユー
ザーアクセスを許可す
る

IAM ウェブ ID 認証
サーバー

一時的な AWS 認証情報 AWS STS と交換できるトークンを生成する

SAML 2.0 SP とOIDC IdP

2.0 IdP SAML からのクレームに基づいて
カスタマイズされた
OIDCトークンを発行
する✓

OIDC SP と OIDC IdPIdP OIDC からのク
レームに基づいてカス
タマイズされたOIDC
トークンを発行する✓

OAuth 2.0 SP とOIDC IdPApple や Google などの 2.0 OAuth ソー
シャルプロバイダーのスコープに基づいてカスタマイズされた
OIDCトークンを発行する✓

SAML 2.0 SP と認証
情報ブローカー

2.0 IdP SAML からのクレームに基づいて一時的な AWS 認証情報
を発行する

Amazon Cognito ユーザープールとアイデンティティプールの比較

✓

✓

✓

9

Amazon Cognito

開発者ガイドOIDC SP と認証情報
ブローカー

IdP OIDC からのク
レームに基づいて一時的な AWS 認証情報を発行する✓

OAuth 2.0 SP および
認証情報ブローカー

Apple や Google などの 2.0 OAuth ソー
シャルプロバイダーの範囲に基づいて一時的な AWS 認証情報を発行する✓

Amazon Cognito ユー
ザープール SP と認証
情報ブローカーAmazon Cognito ユー
ザープールからのOIDCクレームに基づいて一時的な AWS 認
証情報を発行する✓

カスタム SP と認証情報ブローカー

デベロッパーIAMの認可に基づいて一時的なAWS 認証情報を発行
する✓

認証フロントエンド
サービス

ホストされた UI でユーザーをサインアッ
プ、管理、認証する✓

API 独自の認証 UI のサポート

サポートされている
AWS SDKs1 のAPIリクエストを通じてユーザーを作成、管理、認
証する

✓

MFA

SMS メッセー
ジ、TOTPs、またはユーザーのデバイスを追加の認証要素として
使用する1

✓

Amazon Cognito ユーザープールとアイデンティティプールの比較

10

Amazon Cognito

開発者ガイド

セキュリティのモニ
タリングと対応

悪意のあるアクティビ
ティや安全でないパス
ワードからの保護1✓

認証フローをカスタマイズする

独自の認証メカニズ
ムを構築するか、既存のフローにカスタムス
テップを追加する1✓

グループ

ユーザーの論理グループと、ID プールにトークンを渡すときのIAMロールクレームの階層を作成する✓

ID トークンをカスタマイズする

新規、変更、抑制されたクレームで ID トー
クンをカスタマイズする✓

AWS WAF ウェブ
ACLs

による認証環境へのリクエストのモニタリン
グと制御 AWS WAF✓

ユーザー属性をカス
タマイズする

ユーザー属性に値を割り当て、独自のカスタ
ム属性を追加する✓

非認証アクセス

認証なしで から AWS
STS アクセスが制限されたウェブ ID 認証
情報を発行する

Amazon Cognito ユーザープールとアイデンティティプールの比較✓

11

Amazon Cognito

開発者ガイドロールベースアクセ
スコントロール

クレームに基づいて認証されたユーザーの IAMロールを選択
し、ID プールのコン
テキストでのみ引き受けるようにロールを設
定します。

✓

単一ドメイン内の属
性ベースのユーザークレームを一時セッションのプ
リンシパルタグに変換
し、IAMポリシーを使用してプリンシパルタ
グに基づいてリソース
アクセスをフィルタリ
ングする AWS STS✓¹ この機能はローカルユーザーのみが使用できます。

Amazon Cognito の使用開始方法
ユーザープールアプリケーションの例については、「」を参照してくださいユーザープールの開始方
法。
ID プールの概要については、「」を参照してくださいAmazon Cognito ID プールの開始方法。
ユーザープールと ID プールを使用したガイド付きセットアップエクスペリエンスへのリンクについては、「」を参照してくださいAmazon Cognito のガイド付きセットアップオプション。
動画、記事、ドキュメント、その他のサンプルアプリケーションについては、Amazon Cognito デベ
ロッパーリソース」を参照してください。
Amazon Cognito を使用するには、 AWS アカウントが必要です。詳細については、「の開始方法
AWS」を参照してください。

Amazon Cognito の使用開始方法

12

Amazon Cognito

開発者ガイドリージョナルな可用性
Amazon Cognito は、世界中の複数の AWS リージョンで利用できます。各リージョンで、Amazon
Cognito は複数のアベイラビリティーゾーンに分散されています。これらのアベイラビリティーゾーンは物理的に相互に分離されていますが、低レイテンシーで高スループットの冗長性に優れたプライ
ベートネットワーク接続で統合されています。これらのアベイラビリティーゾーンにより、 AWS は
レイテンシーを最小限に抑えながら、Amazon Cognito を含む のサービスを非常に高レベルの可用性と冗長性で提供できます。
現在 Amazon Cognito を利用できるすべてのリージョンのリストについては、「Amazon Web
Services 全般のリファレンス」の「AWS のリージョンとエンドポイント」を参照してください。各
リージョンで利用できるアベイラビリティーゾーンの数の詳細については、「AWS グローバルイン
フラストラクチャ」を参照してください。

Amazon Cognito の料金
Amazon Cognitoの料金については、「Amazon Cognito の料金」を参照してください。

Amazon Cognito ユーザープールと ID プールでの認証の仕組み
顧客が Amazon Cognito ユーザープールにサインインすると、アプリケーションはJSONウェブトー
クン () を受け取りますJWTs。
顧客がユーザープールトークンまたは他のプロバイダーを使用して ID プールにサインインすると、アプリケーションは一時的な AWS 認証情報を受け取ります。
ユーザープールのサインインを使用すると、 で認証と認可を完全に実装できます AWS SDK。独自のユーザーインターフェイス (UI) コンポーネントを構築しない場合は、構築済みのウェブ UI (ホストされた UI) またはサードパーティー ID プロバイダーのサインインページ (IdP) を呼び出すことができます。
このトピックでは、アプリケーションが Amazon Cognito とやり取りして ID トークンによる認証、
アクセストークンによる認証、および ID プール認証情報 AWS サービス によるアクセスを行う方法の概要を説明します。
トピック• を使用したユーザープールのAPI認証と承認 AWS SDK
リージョナルな可用性

13Amazon Cognito

開発者ガイド• ホストされた UI によるユーザープール認証• サードパーティー ID プロバイダーによるユーザープール認証• ID プール認証を使用したユーザープールのAPI認証と承認 AWS SDKAWS はAmazon Cognito ユーザープール、または Amazon Cognito ID プロバイダー のコンポーネントを、さまざまなデベロッパーフレームワーク で開発しました。これらの に組み込まれているメ
ソッドは、Amazon Cognito ユーザープール をSDKs呼び出します。 Amazon Cognito API 同じユーザープールAPI名前空間には、ユーザープールの設定とユーザー認証のためのオペレーションがあります。より詳細な概要については、「」を参照してくださいAmazon Cognito ユーザープールAPIとユーザープールエンドポイントの使用。
API 認証は、アプリケーションに既存の UI コンポーネントがあり、主にユーザーディレクトリとしてユーザープールに依存するモデルに適合します。この設計では、Amazon Cognito を大規模なアプ
リケーション内のコンポーネントとして追加します。複雑なチャレンジとレスポンスの連鎖を処理す
るには、プログラムによるロジックが必要です。
このアプリケーションは、OpenID Connect (OIDC) の証明書利用者の完全な実装を実装する必要はありません。代わりに、 をデコードして使用できますJWTs。ローカルユーザー のユーザープール
機能の全セットにアクセスする場合は、開発環境で Amazon Cognito を使用して認証を構築SDKします。
API カスタムOAuthスコープを使用した 認証は、外部API認証に対してあまり向きがありません。API 認証からアクセストークンにカスタムスコープを追加するには、実行時に を使用してトークンを変更しますトークン生成前の Lambda トリガー。
次の図は、API認証の一般的なサインインセッションを示しています。

SDK 認証14

Amazon Cognito

SDK 認証開発者ガイド15

Amazon Cognito

開発者ガイドAPI 認証フロー
1. ユーザーがアプリケーションにアクセスします。
2. 「サインイン」リンクを選択します。
3. ユーザー名とパスワードを入力します。
4. アプリケーションは、 InitiateAuthAPIリクエストを行う メソッドを呼び出します。リクエスト
は、ユーザーの認証情報をユーザープールに渡します。
5. ユーザープールはユーザーの認証情報を検証し、ユーザーが多要素認証 () をアクティブ化したと判断しますMFA。
6. ユーザープールは、 MFAコードをリクエストするチャレンジで応答します。
7. アプリケーションは、ユーザーからMFAコードを収集するプロンプトを生成します。
8. アプリケーションは、 RespondToAuthChallengeAPIリクエストを行う メソッドを呼び出します。リクエストはユーザーのMFAコードを渡します。
9. ユーザープールはユーザーのMFAコードを検証します。
10.ユーザープールはユーザーの で応答しますJWTs。
11.アプリケーションは、ユーザーの をデコード、検証、保存、キャッシュしますJWTs。
12.アプリケーションは、リクエストされたアクセスコントロールコンポーネントを表示します。
13.ユーザーはコンテンツを表示します。
14.後で、ユーザーのアクセストークンの有効期限が切れ、アクセスコントロールされたコンポーネントの表示をリクエストします。
15.アプリケーションは、ユーザーのセッションを永続化する必要があると判断します。更新トークンを使用してInitiateAuthメソッドを再度呼び出し、新しいトークンを取得します。
バリアントとカスタマイズ
このフローは、独自のカスタム認証チャレンジなど、追加のチャレンジで拡張できます。パスワー
ドが侵害されたユーザー、または予期しないサインイン特性が悪意のあるサインインの試みを示している可能性のあるユーザーのアクセスを自動的に制限できます。このフローは、サインアップ、ユー
ザー属性の更新、パスワードのリセットを行うオペレーションでもほぼ同じように見えます。これらのフローのほとんどは、パブリック (クライアント側) と機密 (サーバー側) APIのオペレーションが重複しています。
関連リソース• Amazon Cognito ユーザープール API
SDK 認証16

Amazon Cognito

開発者ガイド• ユーザープールの開始方法• Amazon Cognito の認証と承認を、ウェブアプリケーションとモバイルアプリケーションに統合する• Amazon Cognito ユーザープールAPIとユーザープールエンドポイントの使用ホストされた UI によるユーザープール認証
ホストされた UI は、ユーザープールとアプリクライアントにリンクされたウェブサイトです。ユー
ザーのサインイン、サインアップ、パスワードリセットのオペレーションを実行できます。認証用にホストされた UI コンポーネントを持つアプリケーションでは、実装に必要な開発者の労力が減る可能性があります。アプリケーションは、認証用の UI コンポーネントをスキップし、ユーザーのブラウザでホストされた UI を呼び出すことができます。
アプリケーションは、ウェブまたはアプリケーションのリダイレクト場所JWTsを使用してユーザーの を収集します。ホストされた UI を実装するアプリケーションは、OpenID Connect () IdP である
かのようにユーザープールに接続して認証できます。OIDC
ホストされた UI 認証は、アプリケーションが認証サーバーを必要とするが、カスタム認証、ID プー
ル統合、ユーザー属性セルフサービスなどの機能を必要としないモデルに適しています。これらの詳細オプションの一部を使用する場合は、 のユーザープールコンポーネントを使用して実装できます
SDK。
OIDC 実装に主に依存するホストされた UI およびサードパーティーの IdP 認証モデルは、スコープ
が 2.0 OAuth の高度な認証モデルに最適です。
次の図は、ホストされた UI 認証の一般的なサインインセッションを示しています。

ホストされた UI 認証

17

Amazon Cognito

ホストされた UI 認証

開発者ガイド18

Amazon Cognito

開発者ガイドホストされた UI 認証フロー
1. ユーザーがアプリケーションにアクセスします。
2. 「サインイン」リンクを選択します。
3. アプリケーションは、ホストされた UI サインインプロンプトをユーザーに指示します。
4. ユーザー名とパスワードを入力します。
5. ユーザープールはユーザーの認証情報を検証し、ユーザーが多要素認証 () をアクティブ化したと判断しますMFA。
6. ホストされた UI は、ユーザーにMFAコードの入力を求めます。
7. ユーザーがMFAコードを入力します。
8. ホストされた UI は、ユーザーをアプリケーションにリダイレクトします。
9. アプリケーションは、ホストされた UI がコールバック URLに追加したURLリクエストパラメー
タから認証コードを収集します。
10.アプリケーションは認証コードを使用してトークンをリクエストします。
11.トークンエンドポイントはアプリケーションJWTsに戻ります。
12.アプリケーションは、ユーザーの をデコード、検証、保存、キャッシュしますJWTs。
13.アプリケーションは、リクエストされたアクセスコントロールコンポーネントを表示します。
14.ユーザーはコンテンツを表示します。
15.後で、ユーザーのアクセストークンの有効期限が切れ、アクセスコントロールされたコンポーネントの表示をリクエストします。
16.アプリケーションは、ユーザーのセッションを永続化する必要があると判断します。更新トークンを使用して、トークンエンドポイントから新しいトークンをリクエストします。
バリアントとカスタマイズ
ホストされた UI のルックアンドフィールは、任意のアプリケーションクライアント CSSで を使用
してカスタマイズできます。独自の ID プロバイダー、スコープ、ユーザー属性へのアクセス、高度なセキュリティ設定を使用してアプリクライアントを設定することもできます。
関連リソース• Amazon Cognito でホストされた UI およびフェデレーションエンドポイントの設定と使用• ホストされた UI でのサインアップとサインイン• スコープ、M2M 、リソースサーバーによるAPI認可
ホストされた UI 認証

19

Amazon Cognito

開発者ガイド• ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス

サードパーティー ID プロバイダーによるユーザープール認証
外部 ID プロバイダー (IdP) またはフェデレーティッド認証 を使用したサインインは、ホストされた
UI と同様のモデルです。アプリケーションはユーザープールへのOIDC依存関係であり、ユーザー
プールは IdP へのパススルーとして機能します。IdP は、Facebook や Google などのコンシューマーユーザーディレクトリでも、Azure などの SAML 2.0 やOIDCエンタープライズディレクトリでもかまいません。
ユーザーのブラウザでホストされた UI の代わりに、アプリケーションはユーザープール認証サー
バー でリダイレクトエンドポイントを呼び出します。ユーザーのビューから、アプリケーションのサインインボタンを選択します。次に、IdP からサインインするように求められます。ホストされた
UI 認証と同様に、アプリケーションはアプリケーションのJWTsリダイレクト場所に収集します。
サードパーティーの IdP による認証は、ユーザーがアプリケーションにサインアップするときに新しいパスワードを作成したくないモデルに適しています。サードパーティー認証は、ホストされた
UI 認証を実装しているアプリケーションに、手間をかけずに追加できます。実際には、ホストされた UI とサードパーティーは、ユーザーのブラウザで呼び出す内容のわずかなバリエーションから一貫した認証結果 IdPs を生成します。
ホストされた UI 認証と同様に、フェデレーション認証は 2.0 OAuth スコープの高度な認証モデルに最適です。
次の図は、フェデレーション認証の一般的なサインインセッションを示しています。

サードパーティー ID プロバイダー認証

20

Amazon Cognito

開発者ガイドフェデレーティッド認証フロー
1. ユーザーがアプリケーションにアクセスします。
2. 「サインイン」リンクを選択します。
サードパーティー ID プロバイダー認証

21

Amazon Cognito

開発者ガイド3. アプリケーションは、IdP を含むサインインプロンプトをユーザーに指示します。
4. ユーザー名とパスワードを入力します。
5. IdP はユーザーの認証情報を検証し、ユーザーが多要素認証 () をアクティブ化したと判断します
MFA。
6. IdP は、ユーザーにMFAコードの入力を求めます。
7. ユーザーがMFAコードを入力します。
8. IdP は、SAMLレスポンスまたは認証コードを使用してユーザーをユーザープールにリダイレクトします。
9. ユーザーが認証コードを渡した場合、ユーザープールはコードを IdP トークンとサイレントに交換します。ユーザープールは IdP トークンを検証し、新しい認証コードを使用してユーザーをア
プリケーションにリダイレクトします。
10.アプリケーションは、ユーザープールがコールバック URLに追加したURLリクエストパラメータから認証コードを収集します。
11.アプリケーションは認証コードを使用してトークンをリクエストします。
12.トークンエンドポイントはアプリケーションJWTsに戻ります。
13.アプリケーションは、ユーザーの をデコード、検証、保存、キャッシュしますJWTs。
14.アプリケーションは、リクエストされたアクセスコントロールコンポーネントを表示します。
15.ユーザーはコンテンツを表示します。
16.後で、ユーザーのアクセストークンの有効期限が切れ、アクセスコントロールされたコンポーネントの表示をリクエストします。
17.アプリケーションは、ユーザーのセッションを永続化する必要があると判断します。更新トークンを使用して、トークンエンドポイントから新しいトークンをリクエストします。
バリアントとカスタマイズ
ホストされた UI でフェデレーティッド認証を開始できます。ユーザーは、アプリクライアント に割り当て IdPs た のリストから選択できます。ホストされた UI は、E メールアドレスの入力を求
め、ユーザーのリクエストを対応する IdP に自動的にルーティングすることもできます。 SAML IdP
サードパーティーの ID プロバイダーによる認証では、ホストされた UI とユーザーとのやり取りは必要ありません。アプリケーションは、ユーザーの認証サーバーリクエストにリクエストパラメータを追加し、ユーザーを IdP サインインページにサイレントにリダイレクトさせることができます。
関連リソース• サードパーティー経由のユーザープールへのサインインの追加
サードパーティー ID プロバイダー認証

22

Amazon Cognito

開発者ガイド• シナリオ例: エンタープライズダッシュボードで Amazon Cognito アプリケーションをブックマー
クする• スコープ、M2M 、リソースサーバーによるAPI認可• ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス

ID プール認証
ID プールは、関数、API名前空間、SDKモデルのユーザープールとは異なるアプリケーションのコン
ポーネントです。ユーザープールがトークンベースの認証と認可を提供する場合、ID プールは AWS
Identity and Access Management () の認可を提供しますIAM。
のセットを ID プール IdPs に割り当て、そのプールを使用してユーザーにサインインできます。
ユーザープールは ID プールとして密接に統合 IdPs されており、ID プールにはアクセス制御のほ
とんどのオプションがあります。同時に、ID プールにはさまざまな認証オプションがあります。
ユーザープールはSAML、アイデンティティプールからの一時的な AWS 認証情報へのルートとして、、、OIDCソーシャル、デベロッパー、ゲストのアイデンティティソースを結合します。
ID プールによる認証は外部です。以前に説明したユーザープールフローのいずれかに従うか、別の IdP で個別に開発するフローに従います。アプリケーションが初期認証を実行すると、証明を ID
プールに渡して、代わりに一時的なセッションを受け取ります。
ID プールによる認証は、アプリケーションアセットと 内のデータのアクセスコントロールをIAM認
可 AWS サービス で強制するモデルに適合します。API ユーザープール での認証と同様に、成功したアプリケーションには、ユーザーの利益のためにアクセスする各サービスに が含まれます AWS
SDKs。 AWS SDKs は、アイデンティティプール認証からの認証情報をAPIリクエストの署名として適用します。
次の図は、IdP による ID プール認証の一般的なサインインセッションを示しています。

ID プール認証

23

Amazon Cognito

ID プール認証

開発者ガイド24

Amazon Cognito

開発者ガイドフェデレーティッド認証フロー
1. ユーザーがアプリケーションにアクセスします。
2. 「サインイン」リンクを選択します。
3. アプリケーションは、IdP を含むサインインプロンプトをユーザーに指示します。
4. ユーザー名とパスワードを入力します。
5. IdP はユーザーの認証情報を検証します。
6. IdP は、SAMLレスポンスまたは認証コードを使用してユーザーをアプリケーションにリダイレク
トします。
7. ユーザーが認証コードを渡した場合、アプリケーションはコードを IdP トークンと交換します。
8. アプリケーションは、ユーザーの またはアサーションをデコード、検証、保存JWTs、キャッ
シュします。
9. アプリケーションは、GetIdAPIリクエストを行う メソッドを呼び出します。ユーザーのトークン
またはアサーションを渡し、ID をリクエストします。
10.ID プールは、設定された ID プロバイダーに対してトークンまたはアサーションを検証します。
11.ID プールは ID を返します。
12.アプリケーションは、GetCredentialsForIdentityAPIリクエストを行う メソッドを呼び出します。
ユーザーのトークンまたはアサーションを渡し、 IAMロールをリクエストします。
13.ID プールは新しい を生成しますJWT。新しい JWTには、 IAMロールをリクエストするクレームが含まれています。ID プールは、ユーザーのリクエストと、IdP の ID プール設定のロール選択基
準に基づいてロールを決定します。
14.AWS Security Token Service （AWS STS) は ID プールからのAssumeRoleWithWebIdentityリクエ
ストに応答します。レスポンスには、 IAMロールとの一時セッションのAPI認証情報が含まれています。
15.アプリケーションはセッション認証情報を保存します。
16.ユーザーは、 でアクセス保護されたリソースを必要とするアクションをアプリで実行します
AWS。
17.アプリケーションは、必要な のAPIリクエストhttps://docs.aws.amazon.com/IAM/latest/
UserGuide/reference_aws-signing.htmlに署名として一時的な認証情報を適用します AWS サービ
ス。
18.IAM は、認証情報のロールにアタッチされたポリシーを評価します。それらをリクエストと比較します。
19.はリクエストされたデータ AWS サービス を返します。
ID プール認証

25

Amazon Cognito

開発者ガイド20.アプリケーションは、ユーザーのインターフェイスでデータをレンダリングします。
21.ユーザーはデータを表示します。
バリアントとカスタマイズ
ユーザープールによる認証を視覚化するには、トークン/アサーションの発行ステップの後に、以前のユーザープールの概要の 1 つを挿入します。デベロッパー認証は、リクエスト ID より前のすべてのステップを、デベロッパー認証情報 によって署名されたリクエストに置き換えます。また、ゲスト認証はアイデンティティ のリクエストに直接スキップし、認証を検証せず、アクセスが制限されたIAMロールの認証情報を返します。
関連リソース• Amazon Cognito アイデンティティプール• ユーザー IAM ロール• ID プールの概念• ID プール (フェデレーティッドアイデンティティ) の認証フロー

Amazon Cognito の用語
Amazon Cognito は、ウェブアプリとモバイルアプリの認証情報を提供します。ID とアクセス管理
で一般的な用語から派生し、それに基づいて構築されます。ユニバーサルアイデンティティとアクセス条件に関するガイドは多数用意されています。いくつか例を挙げます。
• ナレッジIDProボディの用語• AWS ID サービス
• の用語集 NIST CSRC
次のリストでは、Amazon Cognito に固有の用語、または Amazon Cognito に固有のコンテキストを持つ用語について説明します。
トピック
• 全般
• ユーザープール• アイデンティティプール
Amazon Cognito の用語

26

Amazon Cognito

開発者ガイド全般
このリストの用語は Amazon Cognito に固有ではなく、ID とアクセス管理の実務者の間で広く認識されています。以下は、用語の網羅的なリストではなく、このガイドの特定の Amazon Cognito コン
テキストのガイドです。
アプリケーション
通常、モバイルアプリケーションです。このガイドでは、アプリケーションは、Amazon Cognitoに接続するウェブアプリケーションまたはモバイルアプリの略語であることがよくあります。
属性ベースのアクセスコントロール (ABAC）
ユーザーの役職や部門などのプロパティに基づいて、アプリケーションがリソースへのアクセスを決定するモデル。強制する Amazon Cognito ツールABACには、ユーザープールの ID トークンと ID プールのプリンシパルタグが含まれます。
認証サーバー
ウェブJSONトークン を生成するウェブベースのシステム。Amazon Cognito ユーザープー
ルフェデレーションエンドポイントは、ユーザープール内の 2 つの認証方法と認証方法の認証
サーバーコンポーネントです。もう 1 つの方法は、ユーザープール ですAPI。
機密アプリケーション、サーバー側アプリケーション
ユーザーがアプリケーションサーバー上のコードとシークレットへのアクセスを使用してリモー
トに接続するアプリケーション。これは通常、ウェブアプリケーションです。
ID プロバイダー (IdP)
ユーザー ID を保存および検証するサービス。Amazon Cognito は、外部プロバイダーからの認証
をリクエストし、アプリへの IdP にすることができます。
JSON ウェブトークン (JWT）
認証されたユーザーに関するクレームを含む JSON形式のドキュメント。ID トークンはユーザーを認証し、アクセストークンはユーザーを認証し、更新トークンは認証情報を更新します。Amazon Cognito は外部プロバイダーからトークンを受け取り、アプリケーションまたは にトークンを発行します AWS STS。
多要素認証 (MFA）
ユーザーがユーザー名とパスワードを入力した後に追加の認証を提供する要件。Amazon Cognito
ユーザープールには、ローカルユーザー 用のMFA機能があります。
全般

27

Amazon Cognito

開発者ガイドOAuth 2.0 (ソーシャル) プロバイダー
JWT アクセストークンと更新トークンを提供するユーザープールまたは ID プールへのIdP。Amazon Cognito ユーザープールは、ユーザーの認証後にソーシャルプロバイダーとのやり取りを自動化します。
OpenID Connect (OIDC) プロバイダー
OAuth 仕様を拡張して ID トークンを提供するユーザープールまたは ID プールへのIdP。Amazon Cognito ユーザープールは、ユーザーの認証後にOIDCプロバイダーとのやり取りを自動化します。
パブリックアプリ
ローカルに保存され、シークレットにアクセスできない、デバイスで自己完結型のアプリケー
ション。これは通常、モバイルアプリです。
リソースサーバー
アクセスコントロールAPIを持つ 。Amazon Cognito ユーザープールは、リソースサーバーを使用して、 とやり取りするための設定を定義するコンポーネントを記述しますAPI。
ロールベースのアクセスコントロール (RBAC）
ユーザーの機能指定に基づいてアクセス権を付与するモデル。Amazon Cognito アイデンティ
ティプールは、IAMロール間の差別化RBACを図りながら実装します。
サービスプロバイダー (SP)、証明書利用者 (RP)IdP に依存して、ユーザーが信頼できることをアサートするアプリケーション。Amazon Cognito
は、外部 の SP として機能し IdPs、アプリベースの の IdP として機能しますSPs。
SAMLprovider
ユーザーが Amazon Cognito に渡すデジタル署名付きアサーションドキュメントを生成するユー
ザープールまたは ID プールへの IdP。
汎用一意識別子 (UUID）
オブジェクトに適用される 128 ビットラベル。Amazon Cognito UUIDsはユーザープールまたはID プールごとに一意ですが、特定のUUID形式に準拠していません。
ユーザーディレクトリ
その情報を他のシステムに提供するユーザーとその属性のコレクション。Amazon Cognito ユー
ザープールはユーザーディレクトリであり、外部ユーザーディレクトリのユーザーを統合するためのツールでもあります。
全般

28

Amazon Cognito

開発者ガイドユーザープール
このガイドの次のリストに用語が表示された場合は、ユーザープールの特定の機能または設定を参照
します。
Amazon Cognito user pools API
を使用してアプリに追加できる認証および承認APIオペレーションのセット AWS SDK。は、ローカルユーザーとリンクされたユーザー にサインインAPIできます。
アダプティブ認証
潜在的な悪意のあるアクティビティを検出し、ユーザープロファイル に追加のセキュリティを適用する高度なセキュリティの機能。
高度なセキュリティ機能
ユーザーセキュリティ用のツールを追加するオプションのコンポーネント。
アプリクライアント
ユーザープールの設定を 1 つのアプリケーションへの IdP として定義するコンポーネント。
コールバック URL、リダイレクト URI
アプリケーションクライアントの 設定と、ユーザープールフェデレーションエンドポイント へのリクエストの パラメータ。コールバックは、アプリ 内の認証済みユーザーの最初の送信先
URLです。
漏えいした認証情報
攻撃者が知っている可能性のあるユーザーパスワードを検出し、ユーザープロファイル に追加のセキュリティを適用する高度なセキュリティの機能。
確認
新しいユーザーがサインインできるように、前提条件が満たされていると判断するプロセス。確認は通常、E メールアドレスまたは電話番号の検証を通じて行われます。
カスタム認証Lambda トリガーによる認証プロセスの拡張。追加のユーザーチャレンジとレスポンスを定義します。
デバイス認証を、信頼できるデバイスの ID を使用するサインインMFAに置き換える認証プロセス。
ユーザープール

29

Amazon Cognito

開発者ガイド外部プロバイダー、サードパーティープロバイダー
ユーザープールとの信頼関係を持つ IdP。
フェデレーティッドユーザー
外部プロバイダー によって認証されたユーザープール内のユーザー。
フェデレーションエンドポイント
IdPs およびアプリケーションとのやり取りのために サービスをホストするユーザープールドメ
イン上の一連のウェブページ。
ホストされた UI
ユーザー認証のために サービスをホストするユーザープールドメイン上の一連のインタラクティ
ブウェブページ。
Lambda トリガー
ユーザープール AWS Lambda がユーザー認証プロセスのキーポイントで自動的に呼び出すことができる の関数。Lambda トリガーを使用して認証結果をカスタマイズできます。
ローカルユーザー
外部プロバイダー との認証によって作成されなかったユーザープールユーザーディレクトリのユーザープロファイル。
リンクされたユーザー
ID がローカルユーザー とマージされる外部プロバイダーのユーザー。 ???
トークンのカスタマイズ
実行時にユーザーの ID またはアクセストークンを変更するトークン生成前の Lambda トリ
ガーの結果。
ユーザープール、Amazon Cognito ID プロバイダー、cognito-idp、Amazon Cognito ユーザープールと連携するアプリケーションの認証および認可サービスを備えた AWS リソースOIDC IdPs。
ユーザープールドメイン
ユーザープールに追加するウェブサイト名。ドメインは、ホストされた UI とフェデレーション
エンドポイント URLのベースです。
ユーザープール

30

Amazon Cognito

開発者ガイド検証
ユーザーが E メールアドレスまたは電話番号を所有していることを確認するプロセス。ユーザー
プールは、新しい E メールアドレスまたは電話番号を入力したユーザーにコードを送信します。Amazon Cognito にコードを送信すると、メッセージ送信先の所有権が確認され、ユーザープールから追加のメッセージを受信できます。また、「確認」を参照してください。
ユーザープロファイル、ユーザーアカウント
ユーザーディレクトリ 内のユーザーのエントリ。すべてのユーザーは、ユーザープールにプロファイルを持っています。

アイデンティティプール
このガイドの次のリストに用語が表示された場合は、ID プールの特定の機能または設定を参照します。
アクセスコントロールの属性
ID プールでの属性ベースのアクセスコントロールの実装。ID プールは、ユーザー属性をタグとしてユーザー認証情報に適用します。
基本 (クラシック) 認証
ユーザー認証情報 のリクエストをカスタマイズできる認証プロセス。
デベロッパーが認証した ID
デベロッパー認証情報 を使用して ID プールのユーザー認証情報を承認する認証プロセス。 ???
デベロッパーの認証情報
ID プール管理者のIAMAPIキー。
拡張認証
IAM ロールを選択し、ID プールで定義したロジックに従ってプリンシパルタグを適用する認証フ
ロー。
アイデンティティ
アプリユーザーとそのユーザー認証情報を、アイデンティティプールとの信頼関係を持つ外部ユーザーディレクトリのプロファイルUUIDにリンクする 。
アイデンティティプール

31

Amazon Cognito

開発者ガイドID プール、Amazon Cognito フェデレーティッド ID、Amazon Cognito ID、 cognito-identity
一時的な AWS 認証情報 を使用するアプリケーションの認証および認可サービスを持つ AWS リ
ソース。
認証されていない ID
ID プール IdP でサインインしていないユーザー。ユーザーが認証する前に、1 つのIAMロールに対して制限されたユーザー認証情報を生成することを許可できます。
ユーザー認証情報
ID プール認証後にユーザーが受け取る一時 AWS APIキー。

でのこのサービスの使用 AWS SDKAWS ソフトウェア開発キット (SDKs) は、多くの一般的なプログラミング言語で使用できます。各
SDKにはAPI、開発者が好みの言語でアプリケーションを簡単に構築できるようにする 、コード例、
およびドキュメントが用意されています。
SDK ドキュメント

コードの例

AWS SDK for C++AWS SDK for C++ コード例AWS CLIAWS CLI コード例AWS SDK for GoAWS SDK for Go コード例AWS SDK for JavaAWS SDK for Java コード例AWS SDK for JavaScriptAWS SDK for JavaScript コード例AWS SDK for Kotlin

AWS SDK for Kotlin コード例AWS SDK for .NETAWS SDK for .NET コード例AWS SDK for PHPAWS SDK for PHP コード例AWS Tools for PowerShell

PowerShell コード例のツール

AWS SDK for Python (Boto3)

AWS SDK for Python (Boto3) コード例の使用 AWS SDKs

32

Amazon Cognito

開発者ガイドSDK ドキュメント

コードの例

AWS SDK for RubyAWS SDK for Ruby コード例AWS SDK for RustAWS SDK for Rust コード例AWS SDK for SAP ABAPAWS SDK for SAP ABAP コード例AWS SDK for SwiftAWS SDK for Swift コード例

可用性の例
必要なものが見つからなかった場合。このページの下側にある [Provide feedback (フィード
バックを送信)] リンクから、コードの例をリクエストしてください。

の開始方法 AWS
Amazon Cognito の使用を開始する前に、必要な AWS リソースをいくつか用意してください。

にサインアップする AWS アカウントがない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
1.

https://portal.aws.amazon.com/billing/サインアップ を開きます。

2.

オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザーが作成されます。
ルートユーザーには、アカウントのすべての AWS サービス とリソースへのアクセス権があります。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルート
ユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。

の開始方法 AWS

33

Amazon Cognito

開発者ガイドAWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://
aws.amazon.com/ の アカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

管理アクセスを持つユーザーを作成するにサインアップしたら AWS アカウント、 を保護し AWS アカウントのルートユーザー、 を有効にして AWS IAM Identity Center、日常的なタスクにルートユーザーを使用しないように管理ユーザーを作成します。
のセキュリティ保護 AWS アカウントのルートユーザー
1.

ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。
ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイ
ドのルートユーザーとしてサインインするを参照してください。

2.

ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「 ユーザーガイド」の AWS アカウント 「ルートユーザーの仮想MFAデバイ
スを有効にする (コンソール）IAM」を参照してください。

管理アクセスを持つユーザーを作成する
1.

IAM Identity Center を有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。

2.

IAM Identity Center で、ユーザーに管理アクセス権を付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリア
ルについては、「 ユーザーガイド」の「デフォルト でユーザーアクセス IAM アイデンティティ
センターディレクトリを設定するAWS IAM Identity Center 」を参照してください。

管理アクセス権を持つユーザーとしてサインインする•

IAM Identity Center ユーザーでサインインするには、IAMIdentity Center ユーザーの作成時に E
メールアドレスにURL送信されたサインインを使用します。

管理アクセスを持つユーザーを作成する

34

Amazon Cognito

開発者ガイドIAM Identity Center ユーザーを使用してサインインする方法については、「 AWS サインイン
ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。
追加のユーザーにアクセス権を割り当てる
1.

IAM Identity Center で、最小特権のアクセス許可を適用するベストプラクティスに従うアクセス
許可セットを作成します。
手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」を参照してください。

2.

グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。
手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの参加」を参照してください。

管理アクセスを持つユーザーを作成する

35

Amazon Cognito

開発者ガイドユーザープールの開始方法
このセクションのガイドを使用して、最初のユーザープールリソースを作成できます。 step-by-step
チュートリアルについては、React JavaScript デベロッパー環境で基本的なウェブアプリケーショ
ンから始めます。そこから、ホストされたユーザーインターフェイス (ホストされた UI) や、外部のソーシャルプロバイダーまたは SAML2.0 ID プロバイダー () とのフェデレーションサインインなどの機能を追加し続けることができますIdPs。
機能セットを拡張し、Amazon Cognito のより多くのコンポーネントを組み込む作業を行う際には、Amazon Cognito ユーザープールの章で、ユーザープールで実行できるすべての機能の詳細を確認してください。
このセクションのユーザープールとアプリケーションの例は、アプリケーションリソースと Amazon
Cognito ユーザープールの基本的な統合を示しています。後で、使用可能なオプションをさらに使用するようにユーザープールを調整できます。その後、アプリケーションを更新して新しい を導入
APIsし、ホストされた UI および とやり取りできます IdPs。
このセクションのチュートリアルでは、カスタム UI と を使用した APIベースの認証を使用してアプ
リケーションを作成します AWS SDK。この方法で構築するアプリケーションは、ローカルユーザーの認証に最適です。ビルド済みの UI、一部のユーザープール機能の自動処理、フェデレーティッド
ユーザーの認証を使用してアプリケーションから開始するには、「」に進みますホストされた UI で
アプリケーションクライアントを追加する。
トピック• React シングルページアプリケーション例を設定する• Flutter で Android アプリの例を設定する• 次のステップ

React シングルページアプリケーション例を設定する
このチュートリアルでは、ユーザーのサインアップ、確認、サインインをテストできる React 単一
ページアプリケーションを作成します。React は、ウェブおよびモバイルアプリ用の JavaScriptベースのライブラリで、ユーザーインターフェイス (UI) に焦点を当てています。このサンプルアプリ
ケーションは、Amazon Cognito ユーザープールのいくつかの基本的な機能を示しています。Reactを使用したウェブアプリケーション開発の経験がある場合は、 からサンプルアプリケーションをダ
ウンロードします GitHub。
React SPAの例

36

Amazon Cognito

開発者ガイド次のスクリーンショットは、作成するアプリケーションの初期認証ページを示しています。

ユーザープールの作成手順では、サンプルアプリケーションで動作するユーザープールを設定します。以下の要件を満たすユーザープールがある場合は、このステップをスキップできます。
• ユーザーは E メールアドレスでサインインできます。Cognito ユーザープールのサインインオプ
ション： E メール 。
• ユーザー名では大文字と小文字は区別されません。ユーザー名の要件： ユーザー名の大文字と小文字を区別する が選択されていない。
• 多要素認証 (MFA) は必要ありません。MFA 強制： オプション MFA。
• ユーザープールは、E メールメッセージでユーザープロファイルの確認のために属性を検証します。検証する属性: E メールメッセージを送信し、E メールアドレス を検証します。
• E メールは唯一の必須属性です。必須属性： E メール 。
• ユーザーはユーザープールにサインアップできます。自己登録 : 自己登録を有効にする が選択されています。
• 最初のアプリケーションクライアントは、ユーザー名とパスワードを使用したサインインを許可するパブリッククライアントです。アプリケーションタイプ : パブリッククライアント 、認証フ
ロー : ALLOW_USER_PASSWORD_AUTH。

React SPAの例

37

Amazon Cognito

開発者ガイドユーザープールを作成する
新しいユーザープールを作成する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

ユーザープールの作成ボタンを選択します。このオプションを表示するには、左側のナビゲー
ションペインからユーザープールを選択する必要がある場合があります。

3.

ページの右上隅にある [Create a user pool] (ユーザープールを作成する) を選択して、ユーザープール作成のウィザードを開始します。

4.

サインインエクスペリエンスの設定 では、このユーザープールで使用する ID プロバイダー(IdPs) を選択できます。詳細については、「サードパーティー経由のユーザープールへのサイン
インの追加」を参照してください。

5.

6.

a.

認証プロバイダー のプロバイダータイプ で、Cognito ユーザープールのみが選択されていることを確認します。

b.

Cognito ユーザープールのサインインオプション で、ユーザー名 を選択します。追加のユーザー名要件 を選択しないでください。

c.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

セキュリティ要件の設定 では、パスワードポリシー、多要素認証 (MFA) 要件、およびユーザー
アカウント復旧オプションを選択できます。詳細については、「Amazon Cognito ユーザープー
ルのセキュリティ機能を使用する」を参照してください。
a.

パスワードポリシー の場合、パスワードポリシーモードが Cognito のデフォルト に設定されていることを確認します。

b.

多要素認証 で、MFA適用 にオプション MFAを選択します。

c.

MFA メソッド で、Authenticator アプリとSMSメッセージ を選択します。

d.

ユーザーアカウント復旧 では、セルフサービスアカウント復旧を有効にする が選択され、ユーザーアカウント復旧メッセージの配信方法が E メールのみに設定されていることを確
認します。

e.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

サインアップエクスペリエンスの設定 では、新しいユーザーとしてサインアップするときに新しいユーザーが ID を検証する方法と、ユーザーのサインアップフロー中に必須またはオプションとなる属性を決定できます。詳細については、「ユーザープール内のユーザーを管理する」を参照してください。

React SPAの例

38

Amazon Cognitoa.

開発者ガイド

自己登録の有効化が選択されていることを確認します。この設定により、ユーザープールが開き、インターネット上のすべてのユーザーからサインアップできます。これはサンプルア
プリケーションを目的としていますが、本番環境ではこの設定を慎重に適用してください。

b.

Cognito が支援する検証と確認 で、Cognito が検証と確認のために自動的にメッセージを送信することを許可するチェックボックスが選択されていることを確認します。

c.

検証する属性が E メールメッセージの送信に設定されていることを確認します。E メール
アドレス を検証します。

d.

「属性の変更の検証」で、デフォルトのオプションが選択されていることを確認します。更
新が保留中の場合は元の属性値を保持し、更新が保留中の場合はアクティブな属性値を E
メールアドレス に設定します。

e.

「必須属性」で、前の選択に基づく必須属性に E メール が表示されていることを確認します。
Important
このサンプルアプリケーションでは、ユーザープールで phone_number を必須属性として設定しないでください。phone_number が必須属性として表示されている場
合は、前の選択肢を確認して更新します。
• オプション、MFAユーザーアカウント復旧メッセージの配信方法のみの E メール• E メールメッセージを送信し、検証する属性の E メールアドレスを検証する

f.
7.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

メッセージ配信の設定 では、Amazon Simple Email Service および Amazon Simple Notification
Service との統合を設定して、サインアップ、アカウント確認、、およびアカウント復旧のために E メールMFAとSMSメッセージをユーザーに送信できます。詳細については、「Amazon
Cognito ユーザープールの E メール設定」および「SMS Amazon Cognito ユーザープールのメッセージ設定」を参照してください。
a.

E メールプロバイダー で、Cognito を使用して E メールを送信を選択し、Amazon Cognitoが提供するデフォルトの E メール送信者を使用します。E メール量が少ない場合、この設定はアプリケーションテストに十分です。Amazon Simple Email Service (Amazon SES) で
E メールアドレスを検証し、Amazon で E メールを送信 を選択すると、 SESを返すことができます。

React SPAの例

39

Amazon Cognitob.

開発者ガイドでSMS、新しいIAMロールの作成 を選択し、IAMロール名 を入力します。これにより、SMSメッセージを送信するアクセス許可を Amazon Cognito に付与するロールが作成
されます。

c.
8.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

「アプリの統合」では、ユーザープールに名前を付け、ホストされた UI を設定し、アプリクラ
イアントを作成できます。詳細については、「ホストされた UI でアプリケーションクライアン
トを追加する」を参照してください。サンプルアプリケーションはホストされた UI を使用しません。
a.

ユーザープール名 に、ユーザープール名 を入力します。

b.

Cognito がホストする UI の使用 を選択しないでください。

c.

「初期アプリクライアント」で、アプリタイプがパブリッククライアント に設定されていることを確認します。

d.

クライアントシークレット で、クライアントシークレットを生成しない が選択されていることを確認します。

e.

[App client name] (アプリケーションクライアント名) を入力します。

f.

アドバンストアプリケーションクライアント設定 を展開します。認証フロー のリス
トALLOW_USER_PASSWORD_AUTHに を追加します。

g.
9.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

確認および作成画面で選択内容を確認し、必要に応じて選択内容を変更します。ユーザープールの設定に問題がなければ、ユーザープールの作成を選択して続行します。

10. ユーザープールページから、新しいユーザープールを選択します。
11. ユーザープールの概要 で、ユーザープール ID を書き留めます。この文字列は、サンプルアプリ
ケーションを作成するときに指定します。
12. アプリ統合タブを選択し、アプリクライアントと分析セクションを見つけます。新しいアプリク
ライアントを選択します。クライアント ID を書き留めます。
関連リソース• Amazon Cognito user pools• ユーザープール認証フロー• ユーザープールでのトークンの使用

React SPAの例

40

Amazon Cognito

開発者ガイドアプリケーションの作成
このアプリケーションを構築するには、デベロッパー環境を設定する必要があります。デベロッパー
環境の要件は次のとおりです。
1. Node.js がインストールされ、更新されます。
2. ノードパッケージマネージャー (npm) がインストールされ、バージョン 10.2.3 以降に更新されています。
3. 環境には、ウェブブラウザのTCPポート 5173 からアクセスできます。
React ウェブアプリケーションの例を作成するには
1.

デベロッパー環境にサインインし、アプリケーションの親ディレクトリに移動します。
cd ~/path/to/project/folder/2.

新しい React サービスを作成します。
npm create vite@latest frontend-client -- --template react-ts

3.

の AWS コード例リポジトリからcognito-developer-guide-react-exampleプロジェク
トフォルダをクローンします GitHub。
cd ~/some/other/path

git clone https://github.com/awsdocs/aws-doc-sdk-examples.git

cp -r ./aws-doc-sdk-examples/javascriptv3/example_code/cognito-identity-provider/scenarios/cognito-developer-guide-react-example/frontend-client ~/path/to/project/folder/frontend-client4.

プロジェクトの src ディレクトリに移動します。
cd ~/path/to/project/folder/frontend-client/src

5.

次の値を編集config.jsonして置き換えます。
a.

を AWS リージョン コードYOUR_AWS_REGIONに置き換えます。例: us-east-1。

アプリケーションの作成

41

Amazon Cognitob.

開発者ガイドを、テスト用に指定したユーザープールの ID YOUR_COGNITO_USER_POOL_IDに置き換えます。例: us-east-1_EXAMPLE。ユーザープールは、前のステップで AWS リージョン 入
力した にある必要があります。

c.

を、テスト用に指定したアプリクライアントの ID YOUR_COGNITO_APP_CLIENT_IDに置き換えます。例: 1example23456789。アプリクライアントは、前のステップのユーザー
プールに存在する必要があります。

6.

以外の IP からサンプルアプリケーションにアクセスする場合はlocalhost、行を編集package.jsonして "dev": "vite",に変更します"dev": "vite --host
0.0.0.0",。

7.

アプリケーションをインストールします。
npm install

8.

アプリケーションを起動します。
npm run dev

9.

http://localhost:5173 または のウェブブラウザでアプリケーションにアクセスしますhttp://[IP address]:5173。

10. 有効な E メールアドレスで新しいユーザーをサインアップします。
11. E メールメッセージから確認コードを取得します。確認コードをアプリケーションに入力します。
12. ユーザー名とパスワードでサインインします。

Amazon Lightsail を使用した React デベロッパー環境の作成
このアプリケーションの使用をすばやく開始するには、Amazon Lightsail を使用して仮想クラウド
サーバーを作成します。
Lightsail を使用すると、このサンプルアプリケーションの前提条件が事前設定された小さなサーバー
インスタンスをすばやく作成できます。ブラウザベースのクライアントを使用してインスタンス
SSHに接続し、パブリック IP アドレスまたはプライベート IP アドレスでウェブサーバーに接続できます。

Lightsail 開発者環境を作成する

42

Amazon Cognito

開発者ガイド

このサンプルアプリケーションの Lightsail インスタンスを作成するには1.

Lightsail コンソール に移動します。プロンプトが表示されたら、 AWS 認証情報を入力します。

2.

[インスタンスの作成] を選択します。

3.

プラットフォームの選択 で、Linux/Unix を選択します。

4.

設計図の選択 で、Node.js を選択します。

5.

「インスタンスの特定」で、開発環境にわかりやすい名前を付けます。

6.

[インスタンスの作成] を選択します。

7.

Lightsail がインスタンスを作成したら、そのインスタンスを選択し、Connect タブから を使用
して Connect SSHを選択します。

8.

SSH セッションがブラウザウィンドウで開きます。node -v と npm -vを実行して、インスタ
ンスが Node.js と 10.2.3 の最小 npm バージョンでプロビジョニングされたことを確認します。

9.

React アプリケーション の設定に進みます。

Flutter で Android アプリの例を設定する
このチュートリアルでは、Android Studio でモバイルアプリケーションを作成し、デバイスをエミュレートしてユーザーのサインアップ、確認、サインインをテストできます。このサンプルアプリケー
ションは、Flutter で Android 用の基本的な Amazon Cognito ユーザープールモバイルクライアント
を作成します。Flutter を使用したモバイルアプリ開発の経験がある場合は、 からサンプルアプリをダウンロードしてください GitHub。
次のスクリーンショットは、仮想 Android デバイスで実行されているアプリを示しています。

Flutter モバイルアプリの例

43

Amazon Cognito

Flutter モバイルアプリの例

開発者ガイド44

Amazon Cognito

開発者ガイドユーザープールの作成手順では、サンプルアプリケーションで動作するユーザープールを設定します。以下の要件を満たすユーザープールがある場合は、このステップをスキップできます。
• ユーザーは E メールアドレスでサインインできます。Cognito ユーザープールのサインインオプ
ション： E メール 。
• ユーザー名では大文字と小文字は区別されません。ユーザー名の要件： ユーザー名の大文字と小文字を区別する が選択されていない。
• 多要素認証 (MFA) は必要ありません。MFA 強制： オプション MFA。
• ユーザープールは、E メールメッセージでユーザープロファイルの確認のために属性を検証します。検証する属性: E メールメッセージを送信し、E メールアドレス を検証します。
• E メールは唯一の必須属性です。必須属性： E メール 。
• ユーザーはユーザープールにサインアップできます。自己登録 : 自己登録を有効にする が選択されています。
• 最初のアプリケーションクライアントは、ユーザー名とパスワードを使用したサインインを許可するパブリッククライアントです。アプリケーションタイプ : パブリッククライアント 、認証フ
ロー : ALLOW_USER_PASSWORD_AUTH。

ユーザープールを作成する
新しいユーザープールを作成する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

ユーザープールの作成ボタンを選択します。このオプションを表示するには、左側のナビゲー
ションペインからユーザープールを選択する必要がある場合があります。

3.

ページの右上隅にある [Create a user pool] (ユーザープールを作成する) を選択して、ユーザープール作成のウィザードを開始します。

4.

サインインエクスペリエンスの設定 では、このユーザープールで使用する ID プロバイダー(IdPs) を選択できます。詳細については、「サードパーティー経由のユーザープールへのサイン
インの追加」を参照してください。
a.

「認証プロバイダー」の「プロバイダータイプ」で、Cognito ユーザープールのみが選択されていることを確認します。

b.

Cognito ユーザープールのサインインオプション で、ユーザー名 を選択します。追加のユーザー名要件 を選択しないでください。

Flutter モバイルアプリの例

45

Amazon Cognito

c.
5.

6.

開発者ガイド他のすべてのオプションをデフォルトのままにして、次へ を選択します。

セキュリティ要件の設定 では、パスワードポリシー、多要素認証 (MFA) 要件、およびユーザー
アカウント復旧オプションを選択できます。詳細については、「Amazon Cognito ユーザープー
ルのセキュリティ機能を使用する」を参照してください。
a.

パスワードポリシー の場合、パスワードポリシーモードが Cognito のデフォルト に設定されていることを確認します。

b.

多要素認証 で、MFA強制 としてオプション MFAを選択します。

c.

MFA メソッド で、Authenticator アプリとSMSメッセージ を選択します。

d.

ユーザーアカウント復旧 では、セルフサービスアカウント復旧を有効にする が選択され、ユーザーアカウント復旧メッセージの配信方法が E メールのみに設定されていることを確
認します。

e.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

サインアップエクスペリエンスの設定 では、新しいユーザーとしてサインアップするときに新しいユーザーが ID を検証する方法と、ユーザーのサインアップフロー中に必須またはオプションとなる属性を決定できます。詳細については、「ユーザープール内のユーザーを管理する」を参照してください。
a.

自己登録の有効化が選択されていることを確認します。この設定により、ユーザープールが開き、インターネット上のすべてのユーザーからサインアップできます。これはサンプルア
プリケーションを目的としていますが、本番環境ではこの設定を慎重に適用してください。

b.

Cognito が支援する検証と確認 で、Cognito が検証と確認のために自動的にメッセージを送信することを許可するチェックボックスが選択されていることを確認します。

c.

検証する属性が E メールメッセージの送信に設定されていることを確認します。E メール
アドレス を確認します。

d.

「属性の変更の検証」で、デフォルトのオプションが選択されていることを確認します。更
新が保留中の場合は元の属性値を保持し、更新が保留中の場合はアクティブな属性値を E
メールアドレス に設定します。

e.

「必須属性」で、以前の選択に基づく必須属性に E メール が表示されることを確認します。

Flutter モバイルアプリの例

46

Amazon Cognito

開発者ガイドImportant
このサンプルアプリケーションでは、ユーザープールで phone_number を必須属性として設定しないでください。phone_number が必須属性として表示されている場
合は、前の選択肢を確認して更新します。
• オプション、MFAユーザーアカウント復旧メッセージの配信方法のみの E メール• E メールメッセージを送信し、検証する属性の E メールアドレスを検証する
f.
7.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

メッセージ配信の設定 では、Amazon Simple Email Service および Amazon Simple Notification
Service との統合を設定して、サインアップ、アカウント確認、、およびアカウント復旧のために E メールMFAとSMSメッセージをユーザーに送信できます。詳細については、「Amazon
Cognito ユーザープールの E メール設定」および「SMS Amazon Cognito ユーザープールのメッセージ設定」を参照してください。

8.

a.

E メールプロバイダー で、Cognito を使用して E メールを送信を選択し、Amazon Cognitoが提供するデフォルトの E メール送信者を使用します。E メール量が少ない場合、この設定はアプリケーションテストに十分です。Amazon Simple Email Service (Amazon SES) で
E メールアドレスを検証し、Amazon で E メールを送信 を選択すると、 SESを返すことが
できます。

b.

でSMS、新しいIAMロールの作成 を選択し、IAMロール名 を入力します。これにより、SMSメッセージを送信するアクセス許可を Amazon Cognito に付与するロールが作成
されます。

c.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

「アプリの統合」では、ユーザープールに名前を付け、ホストされた UI を設定し、アプリクラ
イアントを作成できます。詳細については、「ホストされた UI でアプリケーションクライアン
トを追加する」を参照してください。サンプルアプリケーションはホストされた UI を使用しません。
a.

ユーザープール名 に、ユーザープール名 を入力します。

b.

Cognito がホストする UI の使用 を選択しないでください。

c.

「初期アプリケーションクライアント」で、アプリケーションタイプがパブリッククライア
ント に設定されていることを確認します。

Flutter モバイルアプリの例

47

Amazon Cognitod.

開発者ガイドクライアントシークレット で、クライアントシークレットを生成しない が選択されていることを確認します。

e.

[App client name] (アプリケーションクライアント名) を入力します。

f.

アドバンストアプリケーションクライアント設定 を展開します。認証フロー のリス
トALLOW_USER_PASSWORD_AUTHに を追加します。

g.
9.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

確認および作成画面で選択内容を確認し、必要に応じて選択内容を変更します。ユーザープールの設定に問題がなければ、ユーザープールの作成を選択して続行します。

10. ユーザープールページから、新しいユーザープールを選択します。
11. ユーザープールの概要 で、ユーザープール ID を書き留めます。この文字列は、サンプルアプリ
ケーションを作成するときに指定します。
12. アプリ統合タブを選択し、アプリクライアントと分析セクションを見つけます。新しいアプリク
ライアントを選択します。クライアント ID を書き留めます。
関連リソース• Amazon Cognito user pools• ユーザープール認証フロー• ユーザープールでのトークンの使用

アプリケーションの作成
Android アプリの例を作成するには
1.

Android Studio とコマンドラインツール をインストールします。

2.

Android Studio で、Flutter プラグイン をインストールします。

3.

このサンプルアプリケーション の cognito_flutter_mobile_app ディレクトリのコンテン
ツから新しい Android Studio プロジェクトを作成します。 https://github.com/awsdocs/aws-docsdk-examples/tree/main/kotlin/usecases/cognito_flutter_mobile_app•

assets/config.json と を編集<<YOUR USER POOL ID>>して<< YOUR CLIENT
ID>>、以前に作成したIDsユーザープールとアプリケーションクライアントの に置き換えます。 ???

4.

Flutter をインストールします。

アプリケーションの作成

48

Amazon Cognito

開発者ガイドa.

PATH 変数に Flutter を追加します。

b.

次のコマンドを使用してライセンスを受け入れます。
flutter doctor --android-licensesc.

Flutter 環境を確認し、不足しているコンポーネントをインストールします。
flutter doctor•d.

新しい Flutter プロジェクトの ディレクトリに変更し、依存関係をインストールします。
•

e.
5.

コンポーネントが見つからない場合は、 flutter doctor -vを実行して問題を解決する方法を確認してください。

flutter pub add amazon_cognito_identity_dart_2 を実行します。

flutter pub add flutter_secure_storage を実行します。

仮想 Android デバイスを作成します。
1. Android Studio でGUI、デバイスマネージャー を使用して新しいデバイスを作成します。
2. でCLI、 を実行しますflutter emulators --create --name android-device。

6.

仮想 Android デバイスを起動します。
1. Android Studio でGUI、仮想デバイスの横にある開始イコンを選択します。

ア

2. でCLI、 を実行しますflutter emulators --launch android-device。
7.

仮想デバイスでアプリを起動します。
1. Android Studio でGUI、デプロイ
イコンを選択します。

ア

2. でCLI、 を実行しますflutter run。
8.

Android Studio で実行中の仮想デバイスに移動します。

9.

有効な E メールアドレスで新しいユーザーをサインアップします。

10. E メールメッセージから確認コードを取得します。確認コードをアプリケーションに入力します。
アプリケーションの作成

49

Amazon Cognito

開発者ガイド11. ユーザー名とパスワードを使用してサインインします。

次のステップチュートリアルに従ってサンプルアプリケーションを完了したら、ユーザープールの実装の範囲を広げることができます。追加のユーザープール の作成、他のアプリケーション のユーザープール機能をカスタマイズ、または外部 ID プロバイダー の追加を行うことができます。Amazon Cognito ユー
ザープールを本番稼働用アプリケーションに配置するための移行を計画しているときに、追加の例とチュートリアル を評価できます。
以下は、Amazon Cognito ユーザープールのその他の機能です。
• 組み込みのサインインおよびサインアップウェブページのカスタマイズ• ユーザープールMFAへの の追加• ユーザープールの高度なセキュリティ機能• Lambda トリガーを使用したユーザープールワークフローのカスタマイズ• ユーザープール分析に Amazon Pinpoint を使用する
Amazon Cognito 認証および認可モデルの概要については、「」を参照してくださいAmazon
Cognito ユーザープールと ID プールでの認証の仕組み。
ユーザープール認証が成功 AWS サービス した後に他の にアクセスするには、「」を参照してくだ
さいサインイン後の ID プール AWS サービス を使用した へのアクセス。
AWS Management Console とユーザープール を使用するだけでなくSDKs、 を使用してユーザー
プールを管理することもできますAWS Command Line Interface。
トピック• 新しいユーザープールを作成する• ホストされた UI でアプリケーションクライアントを追加する• ユーザープールにソーシャルサインインを追加する (オプション)• SAML ID プロバイダーによるサインインをユーザープールに追加する (オプション）

次のステップ50

Amazon Cognito

開発者ガイド新しいユーザープールを作成する
ユーザープールを使用すると、ユーザーは Amazon Cognito 経由でウェブまたはモバイルアプリにログインできます。
新しいユーザープールを作成する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

ユーザープールの作成ボタンを選択します。このオプションを表示するには、左側のナビゲー
ションペインからユーザープールを選択する必要がある場合があります。

3.

ページの右上隅にある [Create a user pool] (ユーザープールを作成する) を選択して、ユーザープール作成のウィザードを開始します。

4.

サインインエクスペリエンスの設定 では、このユーザープールで使用する ID プロバイダー(IdPs) を選択できます。詳細については、「サードパーティー経由のユーザープールへのサイン
インの追加」を参照してください。

5.

6.

a.

「認証プロバイダー」の「プロバイダータイプ」で、Cognito ユーザープールのみが選択されていることを確認します。

b.

Cognito ユーザープールのサインインオプション で、ユーザー名 を選択します。追加のユーザー名要件 を選択しないでください。

c.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

セキュリティ要件の設定 では、パスワードポリシー、多要素認証 (MFA) 要件、およびユーザー
アカウント復旧オプションを選択できます。詳細については、「Amazon Cognito ユーザープー
ルのセキュリティ機能を使用する」を参照してください。
a.

パスワードポリシー の場合、パスワードポリシーモードが Cognito のデフォルト に設定されていることを確認します。

b.

多要素認証 で、MFA強制 としてオプション MFAを選択します。

c.

MFA メソッド で、Authenticator アプリとSMSメッセージ を選択します。

d.

ユーザーアカウント復旧 では、セルフサービスアカウント復旧を有効にする が選択され、ユーザーアカウント復旧メッセージの配信方法が E メールのみに設定されていることを確
認します。

e.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

サインアップエクスペリエンスの設定 では、新しいユーザーとしてサインアップするときに新しいユーザーが ID を検証する方法と、ユーザーのサインアップフロー中に必須またはオプショ

ユーザープールを作成する

51

Amazon Cognito

開発者ガイドンとなる属性を決定できます。詳細については、「ユーザープール内のユーザーを管理する」を参照してください。
a.

自己登録の有効化が選択されていることを確認します。この設定により、ユーザープールが開き、インターネット上のすべてのユーザーからサインアップできます。これはサンプルア
プリケーションを目的としていますが、本番環境ではこの設定を慎重に適用してください。

b.

Cognito が支援する検証と確認 で、Cognito が検証と確認のために自動的にメッセージを送信することを許可するチェックボックスが選択されていることを確認します。

c.

検証する属性が E メールメッセージの送信に設定されていることを確認します。E メール
アドレス を確認します。

d.

属性の変更の検証 で、デフォルトのオプションが選択されていることを確認します。更
新が保留中の場合は元の属性値を保持し、更新が保留中の場合はアクティブな属性値を E
メールアドレス に設定します。

e.

「必須属性」で、前の選択に基づく必須属性に E メール が表示されていることを確認します。
Important
このサンプルアプリケーションでは、ユーザープールで phone_number を必須属性として設定しないでください。phone_number が必須属性として表示されている場
合は、前の選択肢を確認して更新します。
• オプション、MFAユーザーアカウント復旧メッセージの配信方法のみの E メール• E メールメッセージを送信し、検証する属性の E メールアドレスを検証する

f.
7.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

メッセージ配信の設定 では、Amazon Simple Email Service および Amazon Simple Notification
Service との統合を設定して、サインアップ、アカウント確認、、およびアカウント復旧のために E メールMFAとSMSメッセージをユーザーに送信できます。詳細については、「Amazon
Cognito ユーザープールの E メール設定」および「SMS Amazon Cognito ユーザープールのメッセージ設定」を参照してください。
a.

E メールプロバイダー で、Cognito を使用して E メールを送信を選択し、Amazon Cognitoが提供するデフォルトの E メール送信者を使用します。E メール量が少ない場合、この設定はアプリケーションテストに十分です。Amazon Simple Email Service (Amazon SES) で
E メールアドレスを検証し、Amazon で E メールを送信 を選択すると、 SESを返すことができます。

ユーザープールを作成する

52

Amazon Cognitob.

開発者ガイドでSMS、新しいIAMロールの作成 を選択し、IAMロール名 を入力します。これにより、SMSメッセージを送信するアクセス許可を Amazon Cognito に付与するロールが作成
されます。

c.
8.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

「アプリの統合」では、ユーザープールに名前を付け、ホストされた UI を設定し、アプリクラ
イアントを作成できます。詳細については、「ホストされた UI でアプリケーションクライアン
トを追加する」を参照してください。サンプルアプリケーションはホストされた UI を使用しません。
a.

ユーザープール名 に、ユーザープール名 を入力します。

b.

Cognito がホストする UI の使用 を選択しないでください。

c.

初期アプリケーションクライアント で、アプリケーションタイプがパブリッククライアン
ト に設定されていることを確認します。

d.

クライアントシークレット で、クライアントシークレットを生成しない が選択されていることを確認します。

e.

[App client name] (アプリケーションクライアント名) を入力します。

f.

アドバンストアプリケーションクライアント設定 を展開します。認証フロー のリス
トALLOW_USER_PASSWORD_AUTHに を追加します。

g.
9.

他のすべてのオプションをデフォルトのままにして、次へ を選択します。

確認および作成画面で選択内容を確認し、必要に応じて選択内容を変更します。ユーザープールの設定に問題がなければ、ユーザープールの作成を選択して続行します。

10. ユーザープールページから、新しいユーザープールを選択します。
11. ユーザープールの概要 で、ユーザープール ID を書き留めます。この文字列は、サンプルアプリ
ケーションを作成するときに指定します。
12. アプリ統合タブを選択し、アプリクライアントと分析セクションを見つけます。新しいアプリク
ライアントを選択します。クライアント ID を書き留めます。
ユーザープールを作成する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

ページの右上隅にある [Create a user pool] (ユーザープールを作成する) を選択して、ユーザープール作成のウィザードを開始します。

ユーザープールを作成する

53

Amazon Cognito

4.

開発者ガイド[Configure sign-in experience] (サインインエクスリエンスを構成する) で、このユーザープール
で使用するフェデレーションプロバイダーを選択します。詳細については、「サードパーティー
経由のユーザープールへのサインインの追加」を参照してください。

5.

セキュリティ要件の設定 で、パスワードポリシー、多要素認証 (MFA) 要件、およびユーザーア
カウント復旧オプションを選択します。詳細については、「Amazon Cognito ユーザープールのセキュリティ機能を使用する」を参照してください。

6.

[Configure sign-up experience] (サインアップエクスペリエンスの設定) で、新規ユーザーがサインアップ時に自分の ID を確認する方法と、ユーザーのサインアップフローで必須またはオプションにする属性を決定します。詳細については、「ユーザープール内のユーザーを管理する」
を参照してください。
Important
ユーザープールでユーザーサインアップを有効にすると、インターネット上のすべてのユーザーがアカウントにサインアップしてアプリケーションにサインインできるようになります。アプリケーションをパブリックサインアップで開く場合を除き、
ユーザープールで自己登録を有効にしないでください。この設定を変更するには、
ユーザープールコンソールのサインアップエクスペリエンスタブでセルフサービスサ
インアップを更新するか、 CreateUserPool または UpdateUserPoolAPIリクエスト
AllowAdminCreateUserOnlyの の値を更新します。
ユーザープールに設定できるセキュリティ機能については、「Amazon Cognito ユー
ザープールのセキュリティ機能を使用する」を参照してください。

7.

メッセージ配信の設定 で、サインアップ、アカウント確認、、アカウント復旧のために E
メールとSMSメッセージをユーザーに送信するように Amazon Simple Email Service MFAお
よび Amazon Simple Notification Service との統合を設定します。詳細については、「Amazon
Cognito ユーザープールの E メール設定」および「SMS Amazon Cognito ユーザープールのメッセージ設定」を参照してください。

8.

[Integrate your app] (アプリケーションの統合) で、ユーザープールに名前を付け、ホストされた
UI を設定し、アプリケーションクライアントを作成します。詳細については、「ホストされた
UI でアプリケーションクライアントを追加する」を参照してください。

9.

確認および作成画面で選択内容を確認し、必要に応じて選択内容を変更します。ユーザープールの設定に問題がなければ、ユーザープールの作成を選択して続行します。

ユーザープールを作成する

54

Amazon Cognito

開発者ガイド関連リソース
ユーザープールの詳細については、「Amazon Cognito user pools」を参照してください。
ユーザープール認証フロー および も参照してくださいユーザープールでのトークンの使用。

ホストされた UI でアプリケーションクライアントを追加する
ユーザープールを作成したら、ホストされた UI の組み込みウェブページを起動するアプリケーショ
ンのアプリケーションクライアントを作成できます。ホストされた UI では、ユーザーは次のことができます。
• ユーザープロファイルにサインアップします。
• サードパーティーの ID プロバイダーでサインインします。
• 多要素認証の有無にかかわらずサインインします。
• パスワードをリセットします。
ホストされた UI サインイン用のアプリケーションクライアントを作成するには
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

リストから既存のユーザープールを選択するか、ユーザープールを作成します。新しいユーザー
プールを作成すると、ウィザード中にアプリケーションクライアントを設定し、ホストされた
UI を構成するように求められます。

4.

[App integration] (アプリケーションの統合) タブをユーザープールに設定します。

5.

[ドメイン] の横で、[アクション] を選択し、[カスタムドメインの作成] または [Amazon Cognito
ドメインの作成] のどちらかを選択します。ユーザープールドメインを既に設定している場合
は、新しいカスタムドメインを作成する前に、[Amazon Cognitoドメインの削除] または [カスタムドメインの削除] を選択します。

6.

Amazon Cognito ドメインで使用するための使用可能なドメインプレフィックスを入力します。[カスタムドメイン] のセットアップに関する詳細については、「ホストされた UI への独自のドメインの使用」を参照してください。

7.

[Create] (作成) を選択します。

ホストされた UI アプリクライアントを追加する

55

Amazon Cognito

8.

開発者ガイド同じユーザープールの [App integration] (アプリケーションの統合) タブに移動し、[App clients](アプリケーションクライアント) を検索します。[Create app client] (アプリケーションクライア
ントの作成) を選択します。

9.

[Application type] (アプリケーション) を選択します。選択した内容に基づいて、いくつかの推奨設定が提供されます。ホストされた UI を使用するアプリケーションは、[Public client] (パブリッククライアント) です。

10. [App client name] (アプリケーションクライアント名) を入力します。
11. この演習では、[Don't generate client secret] (クライアントシークレットを生成しない) を選択します。クライアントシークレットは、一元化されたアプリケーションからユーザーを認証する機
密アプリケーションによって使用されます。この演習では、ホストされた UI サインインページ
をユーザーに提示し、クライアントシークレットは必要ありません。
12. アプリで許可する認証フローを選択します。USER_SRP_AUTH が選択されていることを確認します。
13. 必要に応じて、[token expiration] (トークン有効期限)、[Advanced security configuration] (高度なセキュリティ設定)、および[Attribute read and write permissions] (属性の読み取りと書き込みのアクセス許可) をカスタマイズします。詳細については、「アプリケーションクライアントのセッティングの構成」を参照してください。
14. アプリケーションクライアントのコールバックを追加しますURL。これは、ホストされた UI 認
証の後に指示される場所です。アプリにサインアウトを実装できるようになるまで、許可された
URLサインアウトを追加する必要はありません。
iOS または Android アプリの場合は、 URLなどのコールバックを使用できますmyapp://。
15. アプリケーションクライアントの [ID providers] (ID プロバイダー) を選択します。少なくとも、[Amazon Cognito ユーザープール] をプロバイダーとして有効にします。
Note
Facebook、Amazon、Google、Apple などの外部 ID プロバイダー (IdPs) および
OpenID Connect (OIDC) または を使用してサインインするにはSAML IdPs、まず、「サードパーティー によるユーザープールサインインの追加」に示すように設定します。次に、アプリクライアント設定ページに戻り、有効にします。
16. OAuth 2.0 付与タイプ を選択します。[Authorization code grant (認証コードの付与)] を選択して、ユーザープールトークンと交換される認証コードが返されます。トークンはエンドユーザーに直接公開されないため、侵害される可能性は低くなります。ただし、ユーザープールトークンの認証コードを交換するために、バックエンドでカスタムアプリケーションが必要です。セキュホストされた UI アプリクライアントを追加する

56

Amazon Cognito

開発者ガイドリティ上の理由から、モバイルアプリケーションには認証コード付与フローをコード交換の証明
キー (PKCE） と一緒に使用することをお勧めします。
暗黙的な許可を選択して、Amazon Cognito からユーザープールのJSONウェブトークン (JWT)を返します。このフローは、トークンの認証コードを交換できるバックエンドがない場合に使用でき、トークンのデバッグにも役立ちます。
Note[Authorization code grant (認証コードの付与)] と [Implicit code grant (暗黙的コードの付与)] の両方を有効にして、必要に応じて各権限を使用することができます。
アプリがユーザーの代わりではなく自身の代わりとしてアクセストークンをリクエストする必要がある場合にのみ、[クライアント認証情報] を選択します。
17. 特に除外する必要がない限り、すべての [OpenID Connect scopes] (OpenID Connect スコープ)
を選択します。
18. 設定したカスタムスコープを選択します。カスタムスコープは、通常、機密クライアントで使用されます。
19. [Create] (作成) を選択します。
サインインページを表示するには
アプリクライアントページ から、ホストされた UI を表示 を選択して、アプリクライアント ID、ス
コープ、許可、コールバックURLパラメータがあらかじめ入力されているサインインページに新しいブラウザタブを開きます。
次の を使用して、ホストされた UI サインインウェブページを手動で表示できます
URL。response_type を書き留めます。この場合は、認証コード付与の response_type=code です。

https://your_domain/login?
response_type=code&client_id=your_app_client_id&redirect_uri=your_callback_url

response_type=token という暗黙的なコード付与URLについては、ホストされた UI サインインウェ
ブページを次のように表示できます。サインインが正常に行われると、Amazon Cognito がユーザー
プールトークンをウェブブラウザのアドレスバーに返します。
ホストされた UI アプリクライアントを追加する

57

Amazon Cognito

開発者ガイドhttps://your_domain/login?
response_type=token&client_id=your_app_client_id&redirect_uri=your_callback_url

レスポンスの #idtoken=パラメータの後にJSONウェブトークン (JWT) ID トークンがあります。
以下は、暗黙的な許可リクエストからのレスポンスの例URLです。ID トークン文字列はこれ以上に長くなります。

https://www.example.com/#id_token=123456789tokens123456789&expires_in=3600&token_type=Bearer

Amazon Cognito ユーザープールトークンは、RS256アルゴリズムを使用して署名されます。を使用
してユーザープールトークンをデコードおよび検証できます AWS Lambda。詳細については、 AWS
GitHub ウェブサイトのAmazon Cognito JWTトークンのデコードと検証」を参照してください。
ドメインは [ドメイン名] ページに表示されています。アプリケーションクライアント ID とコール
バックURLは、全般設定ページに表示されます。コンソールで行った変更がすぐに表示されない場合
は、数分待ってからブラウザを更新します。

ユーザープールにソーシャルサインインを追加する (オプション)
アプリユーザーが Facebook、Google、Amazon、Apple などのソーシャル ID プロバイダー (IdP) を介してサインインするようにできます。ユーザーが直接サインインしても、サードパーティーを介してサインインしても、すべてのユーザーにはユーザープールにプロファイルがあります。ソーシャ
ルサインイン ID プロバイダーを通じてサインインを追加しない場合は、この手順を省略してください。

ソーシャル IdP に登録する
Amazon Cognito でソーシャル IdP を作成する前に、アプリケーションをソーシャル IdP に登録して、クライアント ID とクライアントシークレットを取得する必要があります。
アプリケーションを Facebook に登録する
1.

Facebook の開発者アカウントを作成します。

2.

Facebook 認証情報を使用してサインインします。

3.

[My Apps] (マイアプリ) メニューから、[新しいアプリを作成] (新しいアプリを作成) を選択します。

ソーシャルプロバイダーの追加

58

Amazon Cognito

開発者ガイド既存の Facebook アプリがない場合は、別のオプションが表示されます。[Create App (アプリの作成)] を選択します。
4.

[アプリの作成] ページで、アプリのユースケースを選択し、[次へ] を選択します。

5.

Facebook アプリケーションに名前を入力して、[アプリの作成] を選択します。

6.

左のナビゲーションバーで、[設定]、[基本] の順に選択します。

7.

[App ID] (アプリ ID)] と [App Secret (アプリシークレット) を書き留めます。これらは次のセクションで使用します。

8.

ページの下部で、[+ プラットフォームを追加] を選択します。

9.

プラットフォームの選択 画面でプラットフォームを選択し、次へ を選択します。

10. [Save changes] (変更の保存) をクリックします。
11. [App Domains] (アプリケーションドメイン) で、ユーザープールのドメインを入力します。
https://your_user_pool_domain

12. [Save changes] (変更の保存) をクリックします。
13. ナビゲーションバーから製品 を選択し、Facebook ログイン から設定 を選択します。
14. [Facebook でログイン] の [設定] メニューから [設定] を選択します。
リダイレクトを有効なOAuthリダイレクト URIsURLに入力します。リダイレクトURLは、/
oauth2/idpresponseエンドポイントを持つユーザープールドメインで構成されます。
https://your_user_pool_domain/oauth2/idpresponse

15. [Save changes] (変更の保存) をクリックします。
アプリケーションを Amazon に登録する
1.

Amazon の開発者アカウントを作成します。

2.

Amazon 認証情報を使用してサインインします。

3.

Amazon クライアント ID およびクライアントシークレットを受け取るには、Amazon セキュリ
ティプロファイルを作成する必要があります。
ページ上部のナビゲーションバーからアプリとサービスを選択し、「Amazon でログイン」を選
択します。

4.

[Create a New Security Profile (新しいセキュリティプロファイルの作成)] を選択します。

ソーシャルプロバイダーの追加

59

Amazon Cognito

5.

開発者ガイド

セキュリティプロファイル名 、セキュリティプロファイルの説明 、およびプライバシー通知
URLを入力します。

6.

[Save] を選択します。

7.

[クライアント ID] および [クライアントシークレット] を選択して、クライアント ID およびシー
クレットを表示します。これらは次のセクションで使用します。

8.

歯車アイコンにマウスカーソルを合わせ、[Web Settings] (ウェブ設定)、[Edit] (編集) の順に選択
します。

9.

[Allowed Origins] (許可されたオリジン) にユーザープールのドメインを入力します。
https://<your-user-pool-domain>

10. /oauth2/idpresponse エンドポイントを持つユーザープールドメインを「許可されたリター
ンURLs」に入力します。
https://<your-user-pool-domain>/oauth2/idpresponse

11. [Save] を選択します。
アプリケーションを Google に登録する
Google クラウドプラットフォームOAuthの 2.0 の詳細については、Google Workspace forDevelopers ドキュメントの「認証と認可について」を参照してください。
1.

Google の開発者アカウントを作成します。

2.

Google Cloud Platform コンソールにサインインします。

3.

上部のナビゲーションバーから、[Select a project] (プロジェクトの選択) を選択します。Google
プラットフォームにプロジェクトが既にある場合は、このメニューには代わりにデフォルトのプ
ロジェクトが表示されます。

4.

を選択しますNEWPROJECT。

5.

製品の名前を入力し、 を選択しますCREATE。

6.

左側のナビゲーションバーで、「」とAPIs「サービス」を選択し、「認証同意画面」を選択します。

7.

アプリ情報、アプリドメイン 、許可されたドメイン 、およびデベロッパーの連絡先情報 を入力します。承認されたドメインには、カスタムドメインの amazoncognito.comとルートが含まれている必要があります。例: example.com。SAVE AND を選択しますCONTINUE。

ソーシャルプロバイダーの追加

60

Amazon Cognito

8.

開発者ガイド1. 「スコープ」で「スコープを追加または削除」を選択し、少なくとも次のOAuthスコープを選択します。
1. .../auth/userinfo.email
2. .../auth/userinfo.profile
3. openid

9.

[Test users] (テストユーザー) で、[Add users] (ユーザーの追加) を選択します。E メールアドレ
スと他の認証されたテストユーザーを入力し、 SAVE AND CONTINUEを選択します。

10. 左のナビゲーションバーを再度展開し、 APIsとサービス を選択し、認証情報 を選択します。
11. を選択しCREATECREDENTIALS、OAuthクライアント ID を選択します。
12. [Application type] (アプリケーションタイプ) を選択し、クライアントに [Name] (名前) を入力します。
13. 「許可された JavaScript オリジン」で、ADDURI「」を選択します。ユーザープールのドメインを入力します。
https://<your-user-pool-domain>

14. 「許可されたリダイレクトURIs」で、ADDURI「」を選択します。ユーザープールのドメインの /oauth2/idpresponse エンドポイントへのパスを入力します。
https://<your-user-pool-domain>/oauth2/idpresponse

15. を選択しますCREATE。
16. Google が [クライアント ID] と [クライアントシークレット] の下に表示する値を安全に保存します。Google IdP を追加するときに、Amazon Cognito にこれらの値を指定します。
アプリケーションを Apple に登録する「Apple でサインイン」を設定する方法についての詳細は、Apple 開発者ドキュメントの「Configuring Your Environment for Sign in with Apple」(Apple でサインインするための環境を設定
する) を参照してください。
1.

Apple の開発者アカウントを作成します。

2.

Apple 認証情報を使用してサインインします。

3.

左のナビゲーションバーで、[Certificates, Identifiers & Profiles] (証明書、ID & プロファイル) を選択します。

ソーシャルプロバイダーの追加

61

Amazon Cognito

4.

左のナビゲーションペインで、[Identifiers] (識別子) を選択します。

5.

[Identifiers] (識別子) ページで、[+] アイコンを選択します。

6.

「新しい識別子の登録」ページで「アプリIDs」を選択し、「続行」を選択します。

7.

タイプの選択ページで、アプリ を選択し、続行 を選択します。

8.

[Register an App ID] ページで、次の操作を行います。

開発者ガイド1. [Description] (説明) で、説明を入力します。
2. [App ID Prefix] (アプリ ID プレフィックス) に、[Bundle ID] (バンドル ID) を入力します。[AppID Prefix] (アプリケーション ID プレフィックス) にある値を書き留めておきます。この値
は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択した後で使用します。
3. [Capabilities] (機能) で、[Sign In with Apple] (Apple でサインイン) を選択してから [Edit] (編集) を選択します。
4. 「Apple でサインイン: アプリ ID 設定」ページで、アプリをプライマリとして設定するか、他のアプリ とグループ化して設定するかを選択しIDs、「保存」を選択します。
5. [Continue]（続行） を選択します。
9.

[Confirm your App ID] ページで、[登録] を選択します。

10. [Identifiers] (識別子) ページで、[+] アイコンを選択します。
11. 「新しい識別子の登録」ページで「サービスIDs」を選択し、「続行」を選択します。
12. [Register a Services ID] ページで、次の操作を行います。
1. [Description] (説明) で、説明を入力します。
2. [Identifier] (識別子) で、識別子を入力します。で Apple を ID プロバイダーとして選択した
後、この値が必要になるため、このサービス ID を書き留めておきますステップ 2: ユーザー
プールにソーシャル IdP を追加する。
3. [Continue (続行)] を選択し、[Register (登録)] を選択します。
13. 識別子ページから作成したサービス ID を選択します。
1. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。
2. [Web Authentication Configuration] (ウェブ認証の設定) ページで、[Primary App ID] (プライマ
リアプリ ID) として前に作成したアプリ ID を選択します。
3. ウェブサイト URLsの横にある ＋ アイコンを選択します。
4. [Domains and subdomains] (ドメインとサブドメイン) で、https:// プレフィックスなしでユーザープールのドメインを入力します。
ソーシャルプロバイダーの追加

62

Amazon Cognito

開発者ガイド<your-user-pool-domain>

5. を返す URLsに、ユーザープールドメインの/oauth2/idpresponseエンドポイントへのパスを入力します。
https://<your-user-pool-domain>/oauth2/idpresponse

6. Next を選択し、Done を選択します。ドメインを検証する必要はありません。
7. [Continue] (続行) を選択し、次に [Save] (保存) を選択します。
14. 左のナビゲーションペインで [Keys] (キー) を選択します。
15. [Keys (キー)] ページで、[+] アイコンを選択します。
16. [Register a New Key] ページで、次の操作を行います。
1. [Key Name] (キー名) に、キー名を入力します。
2. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。
3. 「キーの設定」ページで、前にプライマリアプリケーション ID として作成したアプリケー
ション ID を選択します。[Save] を選択します。
4. [Continue] (続行) を選択し、[Register] (登録) を選択します。
17. キーのダウンロードページで、ダウンロードを選択してプライベートキーをダウンロードし、表示されたキー ID をメモして、完了を選択します。このプライベートキーと、このページに表示されている [Key ID] (キー ID) の値は、ステップ 2: ユーザープールにソーシャル IdP を追加する
で Apple を ID プロバイダーとして選択した後で必要になります。

ユーザープールにソーシャル IdP を追加する
このセクションでは、前のセクションで取得したクライアント ID およびクライアントシークレット
を使用してユーザープールにソーシャル IdP を設定します。
を使用してユーザープールのソーシャル ID プロバイダーを設定するには AWS Management
Console1.

Amazon Cognito コンソールに移動します。 AWS 認証情報の入力を求められる場合があります。

2.

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

3.

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

ソーシャルプロバイダーの追加

63

Amazon Cognito

4.

開発者ガイド[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を検索し、[Add an identity provider] (ID プロバイダーの追加) を選択
します。

5.

ソーシャル ID プロバイダー ([Facebook]、[Google]、[Login with Amazon]、[Sign in with Apple])を選択します。

6.

ソーシャル ID プロバイダーの選択に基づいて、次のステップから選択します。
• Google と Login with Amazon – 前のセクションで生成されたアプリクライアント ID とアプリ
クライアントシークレットを入力します。
• Facebook – 前のセクションで生成されたアプリクライアント ID とアプリクライアントシー
クレットを入力し、APIバージョン (バージョン 2.12 など) を選択します。可能な最新バー
ジョンを選択することをお勧めします。各 Facebook にはライフサイクルと非推奨の日付
APIがあります。Facebook のスコープと属性はAPIバージョンによって異なる場合があります。Facebook でソーシャル ID ログインをテストして、フェデレーションが意図したとおりに機能することを確認することをお勧めします。
• 「Apple でサインイン」 — 前のセクションで生成されたサービス ID、チーム ID、キー
ID、プライベートキーを入力します。

7.

使用する承認済みスコープの名前を入力します。スコープは、アプリでアクセスするユーザー
属性 (name や email など) を定義します。Facebook の場合は、コンマで区切る必要があります。Google および Login with Amazon の場合は、スペースで区切って指定します。Sign in withApple の場合は、アクセスするスコープのチェックボックスをオンにします。
ソーシャル ID プロバイダー

スコープ例

Facebook

public_profile, email

Googleprofile email openid

Login with Amazon

profile postal_code

Apple でのサインイン

email nameアプリケーションユーザーは、これらの属性をアプリケーションに提供することに同意するよう求められます。ソーシャルプロバイダーのスコープの詳細について
は、Google、Facebook、Login with Amazon、および Sign in with Apple のドキュメントを参照
してください。
ソーシャルプロバイダーの追加

64

Amazon Cognito

開発者ガイド以下は、Sign in with Apple の場合にスコープが返らない可能性があるユーザーシナリオです。
• エンドユーザーは、Apple のサインインページを離れると失敗します (Amazon Cognito の内部障害または開発者が書いたものが原因である可能性があります）。
• サービス ID 識別子は、ユーザープールやその他の認証サービス全体で使用されます。
• ユーザーがサインインした後に、デベロッパーがスコープを追加している。ユーザーは認証時
およびトークンの更新時にのみ、新しい情報を取得する。
• デベロッパーはユーザーを削除し、ユーザーは Apple ID プロファイルからアプリを削除せずに再度サインインします。
8.

ID プロバイダーからユーザープールに属性をマッピングします。詳細については、「マッピングについて知っておくべきこと」を参照してください。

9.

[Create] (作成) を選択します。

10. [App client integration] (アプリケーションクライアント統合) タブから、[App clients] (アプリ
ケーションクライアント) のリストより 1 つ選択して、[Edit hosted UI settings] (ホストされた
UI 設定の編集) をクリックします。[Identity providers] (ID プロバイダー) で、新しいソーシャル
ID プロバイダーをアプリケーションクライアントに追加します。
11. [Save changes] (変更の保存) をクリックします。

ソーシャル IdP の設定をテストする
前の 2 つのセクションの要素URLを使用してログインを作成できます。この URL を使用してソー
シャル IdP の設定をテストします。

https://mydomain.us-east-1.amazoncognito.com/login?
response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com

ドメインは、コンソールにあるユーザープールの [ドメイン名] ページで確認できます。クライアン
ト ID は [アプリクライアントの設定] ページにあります。redirect_uri パラメータURLにコールバックを使用します。これは、認証URLが成功した後にユーザーがリダイレクトされるページの です。

ソーシャルプロバイダーの追加

65

Amazon Cognito

開発者ガイドNote
Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ホストされた UIにユーザーをリダイレクトします。ページには、Something went wrong というエラー
メッセージが表示されます。

SAML ID プロバイダーによるサインインをユーザープールに追加する (オプション）
アプリユーザーが SAML ID プロバイダー (IdP) を介してサインインできるようにすることができます。ユーザーが直接サインインしても、サードパーティーを介してサインインしても、すべてのユー
ザーにはユーザープールにプロファイルがあります。SAML ID プロバイダーを介してサインインを追加しない場合は、このステップをスキップします。
詳細については、「ユーザープールでの SAML ID プロバイダーの使用」を参照してください。
SAML ID プロバイダーを更新し、ユーザープールを設定する必要があります。ユーザープールを 2.0
ID プロバイダーの証明書利用者またはアプリケーションとして追加する方法については、SAMLIDSAML プロバイダーのドキュメントを参照してください。
また、SAMLID プロバイダーにアサーションコンシューマーサービス (ACS) エンドポイントを提供する必要があります。SAML ID プロバイダーの 2.0 SAML POSTバインディング用に、ユーザープー
ルドメインで次のエンドポイントを設定します。ユーザープールドメインの詳細については、「」を参照してくださいユーザープールのドメインを設定する。
https://Your user pool domain/saml2/idpresponse
With an Amazon Cognito domain:
https://<yourDomainPrefix>.auth.<region>.amazoncognito.com/saml2/idpresponse
With a custom domain:
https://Your custom domain/saml2/idpresponse

Amazon Cognito コンソール のドメイン名タブで、ドメインプレフィックスとユーザープールのリージョン値を確認できます。
一部の SAML ID プロバイダーでは、対象者URIまたは SP エンティティ ID urnとも呼ばれるサービ
スプロバイダー (SP) を次の形式で提供する必要があります。
urn:amazon:cognito:sp:<yourUserPoolID>

SAML プロバイダーを追加する

66

Amazon Cognito

開発者ガイドユーザープール ID は、Amazon Cognito コンソールの [General settings] (全般設定) タブにあります。
また、ユーザープールに必要な属性の属性値を指定するように SAML ID プロバイダーを設定する必要があります。通常、email はユーザープールの必須属性です。その場合、SAMLID プロバイダー
はアサーションにemail値 (クレーム) SAML を指定する必要があります。
Amazon Cognito ユーザープールはSAML、ポストバインディングエンドポイントによる 2.0 フェデ
レーションをサポートしています。これにより、ユーザープールはユーザーエージェントを介して
ID プロバイダーから直接レスポンスを受け取るため、アプリケーションがSAMLアサーションSAML
レスポンスを取得または解析する必要がなくなります。
ユーザープールで SAML 2.0 ID プロバイダーを設定するには
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を検索し、[Add an identity provider] (ID プロバイダーの追加) を選択
します。

5.

SAML ソーシャル ID プロバイダーを選択します。

6.

カンマで区切られた [Identifiers] (識別子) を入力します。識別子は、ユーザーがサインインする
ときに入力した E メールアドレスを確認するよう Amazon Cognito に指示します。次に、ドメインに対応するプロバイダーに指示します。

7.

ユーザーがログアウトしたときに、Amazon Cognito が署名されたサインアウト要求をプロバイダーに送信するためには、[Add sign-out flow] (サインアウトフローの追加) を選択します。
ホストされた UI SAML を設定するときに作成されるhttps://<your Amazon Cognito
domain>/saml2/logoutエンドポイントにサインアウトレスポンスを送信するように 2.0 ID
プロバイダーを設定する必要があります。saml2/logout エンドポイントはバPOSTインディングを使用します。
Note
このオプションが選択されていて、SAMLID プロバイダーが署名付きログアウトリクエ
ストを期待している場合は、IdP で Amazon Cognito SAML が提供する署名証明書も設定する必要があります。

SAML プロバイダーを追加する

67

Amazon Cognito

開発者ガイドSAML IdP は署名付きログアウトリクエストを処理し、Amazon Cognito セッションからユーザーをログアウトします。
8.

[Metadata document source] (メタデータドキュメントソース) を選択します。ID プロバイダー
がパブリック でSAMLメタデータを提供する場合はURL、メタデータドキュメントURLを選択し、そのパブリック を入力できますURL。それ以外の場合は、[Upload metadata document] (メタデータドキュメントをアップロード) を選択し、プロバイダーから以前ダウンロードしたメタ
データファイルを選択します。
Note
プロバイダーにパブリックエンドポイントURLがある場合は、ファイルをアップロード
するのではなく、メタデータドキュメントを入力することをお勧めします。これにより、Amazon Cognito はメタデータを自動的に更新できます。通常、メタデータの更新
は 6 時間ごとまたはメタデータの有効期限が切れる前のいずれか早いタイミングで発生
します。

9.

SAML プロバイダーとアプリ間の属性をマッピングを選択して、SAMLプロバイダー属性をユー
ザープールのユーザープロファイルにマッピングします。ユーザープールの必須属性を属性マッ
プに含めます。
例えば、ユーザープール属性 を選択するときはemail、ID プロバイダーからのSAMLアサー
ションに表示されるSAML属性名を入力します。ID プロバイダーが参照用にサンプルSAMLアサーションを提供する場合があります。ID プロバイダーの中には、 などの単純な名前を使用するものもあればemail、次の例のように URL形式の属性名を使用するものもあります。
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

10. [Create] (作成) を選択します。

SAML プロバイダーを追加する

68

Amazon Cognito

開発者ガイドAmazon Cognito ID プールの開始方法
Amazon Cognito ID プールを使用すると、一意のアイデンティティを作成し、ユーザーに許可を割り当てることができます。ID プールには以下を含めることができます。
• Amazon Cognito ユーザープール内のユーザー• Facebook、Google、Apple、 または ID プロバイダーなどの外部 OIDC SAML ID プロバイダーで認証するユーザー。
• 独自の既存の認証プロセスによって認証されたユーザー
ID プールを使用すると、他の に直接アクセスしたり、Amazon API Gateway 経由でリソースにアクセス AWS サービス したりするために定義したアクセス許可を持つ一時的な AWS 認証情報を取得で
きます。
トピック
• Amazon Cognito で ID プールを作成する• SDK のセットアップ• ID プロバイダーを統合する• 認証情報を取得する

Amazon Cognito で ID プールを作成する
Amazon Cognito コンソールから ID プールを作成することも、 (CLI) または Amazon Cognito を使用
AWS Command Line Interface することもできますAPIs。
コンソールで新しい ID プールを作成する
1.

Amazon Cognito コンソールにサインインし、アイデンティティプールを選択します。

2.

[ID プールを作成] を選択します。

3.

[ID プールの信頼を設定] で、アイデンティティプールを認証アクセス、ゲストアクセス、またはその両方に設定することを選択します。
•[認証アクセス] を選択した場合、アイデンティティプールの認証済み ID のソースとして設定する ID タイプを 1 つ以上選択します。[カスタムデベロッパープロバイダー] を設定した

Amazon Cognito で ID プールを作成する

69

Amazon Cognito

開発者ガイド場合、アイデンティティプールの作成後にそのプロバイダーを変更したり削除したりすることはできません。
4.

アクセス許可の設定 で、ID プール内の認証済みユーザーまたはゲストユーザーのデフォルト
IAMロールを選択します。
a.

Amazon Cognito が基本的なアクセス許可と ID プールとの信頼関係を持つ新しいIAMロールを作成する場合は、新しいロールを作成するを選択します。IAM ロール名を入力して、新しいロールを識別します。例: myidentitypool_authenticatedrole。ポリシードキュ
メントを表示 を選択して、Amazon Cognito が新しいIAMロールに割り当てるアクセス許可を確認します。

b.

使用する にIAMロールが既にある場合は、既存のロール AWS アカウント の使用を選択できます。IAM ロールの信頼ポリシーを を含めるように設定する必要がありますcognitoidentity.amazonaws.com。リクエストが特定のアイデンティティプール内の認証されたユーザーから送信されたという証拠を提示した場合にのみ、Amazon Cognito がロールを引き継ぐことを許可するようにロールの信頼ポリシーを設定します。詳細については、「ロールの信頼とアクセス権限」を参照してください。

5.

Connect ID プロバイダー で、ID プールの信頼を設定する で選択した ID プロバイダー (IdPs) の詳細を入力します。OAuth アプリケーションクライアント情報の入力、Amazon Cognito ユー
ザープールの選択、IdP IAM の選択、またはデベロッパープロバイダーのカスタム識別子の入力を求められる場合があります。
a.

各 IdP の [ロール設定] を選択します。その IdP のユーザーに、認証済みロールを設定した
ときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。Amazon Cognito ユーザープール IdP では、トークンに preferred_role を含む
ロールを選択することもできます。cognito:preferred_role クレームの詳細について
は、「グループへの優先順位の値の割り当て」を参照してください。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.
b.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

アクセスコントロールの属性は、IdP ごとに個別に設定できます。アクセスコントロールの属性は、Amazon Cognito がユーザーの一時セッションに適用するプリンシパルタグにユー

Amazon Cognito で ID プールを作成する

70

Amazon Cognito

開発者ガイドザーのクレームをマッピングします。セッションに適用するタグに基づいてユーザーアクセ
スをフィルタリングするIAMポリシーを構築できます。
i.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

ii.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルト
マッピングを使用] を選択します。

iii.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッ
ピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

6.

[プロパティの設定] の [ID プール名] に [名前] を入力します。

7.

[基本 (クラシック) 認証] で、ベーシックフローを有効にするかどうかを選択します。基本
的なフローをアクティブにすると、 に対して行ったロールの選択をバイパス IdPs して、AssumeRoleWithWebIdentity を直接呼び出すことができます。詳細については、「ID プール(フェデレーティッドアイデンティティ) の認証フロー」を参照してください。

8.

アイデンティティプールにタグを適用する場合は、[タグ] で [タグの追加] を選択します。

9.

[確認および作成] で、新しいアイデンティティプールに対して行った選択を確認します。[編集] を選択してウィザードに戻り、設定を変更します。終了したら、[ID プールの作成] を選択します。

SDK のセットアップ
Amazon Cognito ID プールを使用するには、 AWS Amplify、、 AWS SDK for Javaまたは を設定します AWS SDK for .NET。詳細については、以下のトピックを参照してください。
• デAWS SDK for JavaScript ベロッパーガイドの SDK のセットアップ JavaScript• Amplify Dev Center の「Amplify のドキュメント」• AWS SDK for .NET ディベロッパーガイド の「Amazon Cognito 認証情報プロバイダー」

ID プロバイダーを統合する
Amazon Cognito ID プール (フェデレーティッド ID) は、Amazon Cognito ユーザープー
ル、Amazon、Facebook、Google、Apple、ID プロバイダーなどのフェデレーティッド SAML ID プ
ロバイダー、および認証されていない ID によるユーザー認証をサポートします。また、この機能は独自のバックエンド認証プロセスを通じてユーザーを認証し登録することができる、デベロッパーが認証したアイデンティティ (アイデンティティプール) をサポートしています。
SDK のセットアップ

71

Amazon Cognito

開発者ガイド独自のユーザーディレクトリを作成するための Amazon Cognito ユーザープールの使用に関する詳細については、「Amazon Cognito user pools」および「サインイン後の ID プール AWS サービス を使用した へのアクセス」を参照してください。
外部 ID プロバイダーについては、ID プール外部 ID プロバイダー を参照してください。
独自のバックエンド認証プロセスの統合に関する詳細については、「デベロッパーが認証したアイデンティティ (アイデンティティプール)」を参照してください。

認証情報を取得する
Amazon Cognito ID プールは、ゲストであるユーザー (認証されていないユーザー) と、トークンを認証して受け取ったユーザーに一時的な AWS 認証情報を提供します。これらの AWS 認証情報を使用すると、アプリケーションは Amazon API Gateway AWS AWS を介して内外のバックエンドに安全にアクセスできます。「認証情報の取得」を参照してください。

認証情報を取得する

72

Amazon Cognito

開発者ガイドAmazon Cognito のガイド付きセットアップオプション
構造化されたガイド付きエクスペリエンスで Amazon Cognito の機能を評価することをお勧めします。ユーザープールと ID プールでカスタマイズされたエクスペリエンスを提供する外部リソースをいくつか紹介します。
ワークショップを完了する
AWS ワークショップスタジオでは、Amazon Cognito の機能の大部分のセットアップを順を追って説明するワークショップが開催されます。 Amazon Cognito これらの機能には、ユーザープー
ル API、ユーザープールがホストする UI、ID プール、セキュリティ設定が含まれます。
例からアプリケーションコードを追加する
このガイドのコード例の章には、ユーザープールと ID プールで使用できるアプリケーション
コードが含まれています。コード例の章のユーザープールセクションには、個々のオペレーショ
ンをカバーする短いスニペットと、さまざまなプログラミング言語のアプリケーション end-toend 例の長い例があります。
でフルスタックアプリケーションを作成する AWS Amplify
AWS Amplify は、アプリケーションとユーザーインターフェイスを開発およびホストしたいデベ
ロッパー AWS サービス 向けの です。Amazon Cognito は Amplify の認証コンポーネントです。
アプリケーションに認証を追加すると、Amplify は Amazon Cognito ユーザープールと ID プール
リソースのデプロイを自動化できます。また、Amazon Cognito の認証と承認を、ウェブアプリ
ケーションとモバイルアプリケーションに統合する も参照してください。
のその他の Amazon Cognito アプリケーションリソース GitHub• .NET for Amazon Cognito を使用した認証フローの例• Amazon Cognito パスワードレス認証• PetStore Amazon Verified Permissions を使用した の例• ABAC + ID プールを使用して AWS リソースにアクセスするための React アプリケーションのサ
ンプル• AWS CDK を使用した Amazon Cognito および API Gateway ベースのマシン間認証• Amazon Cognito 、API Gateway、IAM を使用したきめ細かな認証の構築• CloudFront authorization@edge73

Amazon Cognito

開発者ガイドその他のワークショップ• Amazon Cognito と を使用したパスワードレス認証の実装 WebAuthn• Amazon Cognito ユーザープールを使用したマルチテナント SaaS ID• Amazon Cognito JWT Deep Dive
ブログ投稿
• Amazon CloudFront プロキシを使用して Amazon Cognito のパブリッククライアントを保護する• Azure AD を使用してフェデレーション認証用に Amazon Cognito をセットアップする方法• ウェブアプリケーション認証の簡素化: Amazon Cognito ユーザープールを使用した AD FS フェデ
レーションのガイド

74

Amazon Cognito

開発者ガイドAmazon Cognito の認証と承認を、ウェブアプリケーションとモバイルアプリケーションに統合する
アプリを Amazon Cognito アプリクライアントと統合すると、ユーザーの認証と承認のためのAPIオ
ペレーションを呼び出すことができます。を使用して Amazon Cognito AWS Amplifyをウェブおよび
モバイルアプリと統合することをお勧めします。 AWS Amplify は、フロントエンドのウェブおよび
モバイルデベロッパーが でフルスタックアプリケーションを簡単に構築、接続、ホストできる完全なソリューションであり AWS、ユースケースの進化 AWS サービス に合わせて の幅広い範囲を柔軟に活用できます。Amplify Auth は、主に Amazon Cognito を使用して認証機能を構築します。
トピック• による認証 AWS Amplify• による認証 AWS SDKs
• Amazon Verified Permissions による承認
Amazon Cognito の一般的な実装では、ビジュアルツールと が混在していますAPIs。Amazon
Cognito コンソールは、Amazon Cognito ユーザープールとアイデンティティプールを設定および管理するためのビジュアルインターフェイスです。ホストされた UI は、Amazon Cognito ユーザー
プールの迅速なテストとデプロイのための ready-to-use ウェブベースのサインインアプリケーショ
ンです。さらに、ほとんどの Amazon Cognito デプロイでは、ユーザープールやアイデンティティ
プールを操作するコードをアプリケーションに追加する必要があります。例えば、アプリケーショ
ンは、ホストされた UI を呼び出してユーザーのサインインを行い、次にアプリケーションコードからトークンエンドポイントを呼び出して、ユーザーの認証コードをトークンと交換する場合があります。この場合、アプリケーションはユーザーのトークンを解釈して保存し、認証と認可のための適切なコンテキストでトークンを提示する必要があります。Amplify は、これらのプロセス用の組み込み機能を備えたガイド付き統合ツールを追加します。
Amazon Cognito リソースをすべてコードで構築することもできます。独自のカスタムアプリ
ケーションコードの使用を開始するには、 の Amazon Cognito コード例を参照してくださいAWS
SDKs。OpenID Connect ID プロバイダーとして Amazon Cognito と統合するには、OpenID Connect
デベロッパーツールを使用します。
Amazon Cognito の認証と認可を使用する前に、アプリプラットフォームを選択し、サービスと統合するためのコードを準備します。使用可能なプラットフォームについては、「による認証 AWS

75

Amazon Cognito

開発者ガイドSDKs」を参照してください。 AWS CLI はAmazon Cognito およびその他の SDKのコマンドライン
であり AWS サービス、Amazon Cognito に慣れるための貴重な場所ですAPI。
Note
Amazon Cognito の一部のコンポーネントは、 でのみ設定できますAPI。例えば、ユー
ザープールのカスタム送信者SMSまたは E メール送信者の Lambda トリガーは、CreateUserPoolまたは リクエストの UserPool クラスの LambdaConfigプロパティを更新するUpdateUserPoolAPIリクエストでのみ設定できます。

Amazon Cognito ユーザープールは、いくつかのクラスのAPIオペレーションと名前空間APIを共有します。1 つのクラスでは、ユーザープールとそのプロセス、ID プロバイダー、ユーザーを設定します。別のクラスでは、パブリッククライアントでユーザーがサインイン、サインアウト、プロファ
イルの管理を行うための認証されていないオペレーションを提供します。オペレーションの最後のクラスでは、サーバー側の機密クライアントで独自の AWS 認証情報を使用して承認するユーザーオペ
レーションAPIを実行します。アプリケーションコードの実装を始める前に、目的のアプリケーショ
ンアーキテクチャを知っておく必要があります。詳細については、「Amazon Cognito ユーザープー
ルAPIとユーザープールエンドポイントの使用」を参照してください。

による認証 AWS Amplify
AWS Amplify は、ウェブおよびモバイルアプリケーションを構築するための完全なソリューション
です。Amplify では、Amplify ライブラリを使用して既存のリソースに接続するか、Amplify コマン
ドラインインターフェイス () を使用して新しいリソースを作成して設定できますCLI。Amplify には、Authenticator などの UI コンポーネントも接続されており、アプリケーションでのサインインや
サインアップエクスペリエンスの設定とカスタマイズに使用できます。
フロントエンドアプリケーションで Amplify の認証機能を使用するには、プラットフォーム別の以下のドキュメントを参照してください。
• の Amplify 認証 JavaScript• Amplify authentication for iOS• Amplify authentication for Android• Amplify authentication for Flutterによる認証 AWS Amplify

76

Amazon Cognito

開発者ガイドAmplify ライブラリはオープンソースで、 で利用できますGitHub。Amplify Auth が Amazon Cognito
認証をどのように実装するかの詳細については、以下のライブラリを参照してください。
• amplify-js• amplify-swift• amplify-flutter• amplify-android

Amplify によるユーザーインターフェイス (UI) の作成
Amazon Cognito ユーザープールでホストされた UI は、ウェブアプリケーションやモバイルアプリ
ケーションの認証フロントエンドの基本的なニーズを満たすことができます。ホストされた UI が対応しているパラメータの範囲を超えてユーザーインターフェイス (UI) をカスタマイズするには、カスタムアプリケーションを作成します。Amplify UI は、さまざまな言語でのカスタマイズ可能なフロ
ントエンドコンポーネントのコレクションです。

カスタム認証コンポーネントの使用を開始するには、Authenticator コンポーネントに関する以下のドキュメントを参照してください。
• Authenticator for Android• Authenticator for Angular
Amplify によるユーザーインターフェイス (UI) の作成

77

Amazon Cognito

開発者ガイド• Authenticator for Flutter• Authenticator for React• Authenticator for React Native• Authenticator for Swift• Authenticator for Vue

による認証 AWS SDKs
安全なバックエンドを使用して Amazon Cognito とやり取りする独自の ID マイクロサービスを構築するには、選択した言語で APIを使用して AWS SDK Amazon Cognito ユーザープールと Amazon
Cognito ID プールに接続します。
各APIオペレーションの詳細については、Amazon Cognito ユーザープールAPIリファレンス」およびAmazon Cognito APIリファレンス」を参照してください。これらのドキュメントには、サポートされているプラットフォームでさまざまな を使用するためのリソースを含む「」セクションも含まれています。 SDKs
• AWS コマンドラインインターフェイス• AWS SDK の 。NET• AWS SDK C++ 用• AWS SDK Go 用
• AWS SDK for Java V2• AWS SDK の JavaScript• AWS SDK PHP V3 用の• AWS SDK for Python• AWS SDK Ruby V3 用のAmazon Verified Permissions による承認
Amazon Verified Permissions は、お客様が構築するアプリケーションの認証サービスです。Amazon
Cognito ユーザープールを ID ソースとして追加すると、アプリケーションはユーザープールアクセ
スまたはアイデンティティ (ID) トークンを Verified Permissions に渡して、許可または拒否を決定できます。Verified Permissions は、Cedar ポリシー言語で記述したポリシーに基づいてユーザーのプによる認証 AWS SDKs

78

Amazon Cognito

開発者ガイドロパティとリクエストコンテキストを考慮します。リクエストコンテキストには、リクエストしたドキュメント、画像、その他のリソースの ID と、ユーザーがリソースに対して実行するアクションを含めることができます。
アプリは、 または BatchIsAuthorizedWithTokenAPIリクエストで検証済みアクセス許可にユーザーの ID IsAuthorizedWithTokenトークンまたはアクセストークンを提供できます。これらのAPIオペ
レーションでは、ユーザーを として受け入れPrincipal、アクセスResourceする Actionの の承認決定を行います。追加のカスタムContextは、詳細なアクセス決定に役立ちます。
アプリケーションがIsAuthorizedWithTokenAPIリクエストでトークンを提示すると、Verified
Permissions は次の検証を実行します。
1. ユーザープールは、リクエストされたポリシーストアに設定された Verified Permissions の ID
ソースです。
2. アクセストークンまたは ID トークンの client_id または aud クレームは、それぞれ Verified
Permissions に提供したユーザープールアプリケーションのクライアント ID と一致します。このクレームを検証するには、Verified Permissions の ID ソースでクライアント ID 検証を設定する必要があります。
3. トークンの有効期限は切れていません。
4. トークンの token_useクレームの値は、 に渡したパラメータと一致しま
すIsAuthorizedWithToken。token_use クレームは、 accessTokenパラメータに
渡accessした場合、および identityTokenパラメータに渡idした場合、 である必要があります。
5. トークンの署名は、ユーザープールの公開されたJSONウェブキー (JWKs) から取得されます。はJWKsで表示できますhttps://cognito-idp.Region.amazonaws.com/your user pool
ID/.well-known/jwks.json。
失効したトークンと削除されたユーザー
Verified Permissions は、ID ソースとユーザートークンの有効期限からの既知の情報のみを検証します。Verified Permissions では、トークンの失効やユーザーの存在は確認されません。ユーザーのトークンを取り消したり、ユーザープールからユーザープロファイルを削除したりした場合でも、Verified Permissions は有効期限が切れるまでトークンを有効と見なします。
ポリシーの評価
ユーザープールをポリシーストアの ID ソースとして設定します。Verified Permissions へのリクエ
ストでユーザーのトークンを送信するようにアプリケーションを設定します。Verified Permissions
Amazon Verified Permissions による承認

79

Amazon Cognito

開発者ガイドはリクエストごとに、トークンのクレームをポリシーと比較します。Verified Permissions ポリシー
は、 のIAMポリシーに似ています AWS。プリンシパル、リソース、およびアクションを宣言します。Verified Permissions は、許可されたアクションと一致し、明示的なDenyアクションと一致
しAllowない場合、リクエストに で応答します。それ以外の場合は、 で応答しますDeny。詳細については、「Amazon Verified Permissions ユーザーガイド」の「Amazon Verified Permissions のポリシー」を参照してください。
トークンをカスタマイズする
Verified Permissions に提示するユーザークレームを変更、追加、削除するには、 を使用してアクセ
ストークンと ID トークンのコンテンツをカスタマイズしますトークン生成前の Lambda トリガー。
プレトークンを生成するトリガーを使用すると、トークンでクレームを追加および変更できます。
例えば、データベースで追加のユーザー属性をクエリし、それらを ID トークンにエンコードできます。
NoteVerified Permissions がクレームを処理する方法を考慮して、cognito、dev、またはcustom という名前のクレームをプレトークンの生成機能に追加しないでください。これらの予約済みクレームのプレフィックスを、cognito:username のようにコロンで区切られた形式ではなく、完全なクレーム名として提示すると、承認リクエストは失敗します。

追加リソース• Amazon Cognito トークンを Verified Permissions スキーマにマッピングする• Amazon Verified Permissions と Amazon Cognito APIsを使用してAPIゲートウェイを承認する

API Verified Permissions による認証
ID トークンまたはアクセストークンは、Verified Permissions RESTAPIsを使用してバックエンド
Amazon API Gateway へのリクエストを承認できます。ユーザープールと への即時リンクを含むポリシーストアを作成できますAPI。Cognito とAPIゲートウェイでのセットアップの開始オプションを使用すると、Verified Permissions はユーザープール ID ソースをポリシーストアに追加し、Lambda
オーソライザーを に追加しますAPI。アプリケーションがユーザープールベアラートークンを に渡すとAPI、Lambda オーソライザーは Verified Permissions を呼び出します。オーソライザーはトークンをプリンシパルとして渡し、リクエストパスとメソッドをアクションとして渡します。
API Verified Permissions による認証

80

Amazon Cognito

開発者ガイド次の図は、Verified Permissions APIを持つAPIゲートウェイの承認フローを示しています。詳細な内訳については、「Amazon Verified Permissions ユーザーガイド」の「 APIにリンクされたポリシーストア」を参照してください。

Verified Permissions は、ユーザープールグループ に関するAPI認可を構造化します。ID トークンとアクセストークンの両方にcognito:groupsクレームが含まれているため、ポリシーストアは、さAPI Verified Permissions による認証

81

Amazon Cognito

開発者ガイド

まざまなアプリケーションコンテキストAPIsで のロールベースのアクセスコントロール (RBAC) を管理できます。

ポリシーストア設定の選択
ポリシーストアで ID ソースを設定するときは、アクセストークンと ID トークンのどちらを処理するかを選択する必要があります。この決定は、ポリシーエンジンの動作方法にとって重要です。ID
トークンにはユーザー属性が含まれます。アクセストークンには、ユーザーのアクセスコントロー
ル情報、OAuthスコープ が含まれます。どちらのトークンタイプにもグループメンバー情報がありますが、通常、Verified Permissions ポリシーストアRBACを持つ のアクセストークンをお勧めします。アクセストークンは、承認の決定に貢献できるスコープを持つグループメンバーシップに追加します。アクセストークンのクレームは、認証リクエストのコンテキストになります。
ユーザープールを ID ソースとして設定する場合は、ユーザーエンティティタイプとグループエン
ティティタイプも設定する必要があります。エンティティタイプは、Verified Permissions ポリシー
で参照できるプリンシパル、アクション、およびリソース識別子です。ポリシーストア内のエンティ
ティはメンバーシップ関係を持つことができ、1 つのエンティティを親エンティティのメンバーにすることができます。メンバーシップを使用すると、プリンシパルグループ、アクショングループ、リ
ソースグループを参照できます。ユーザープールグループの場合、指定するユーザーエンティティ
タイプはグループエンティティタイプのメンバーである必要があります。APIにリンクされたポリ
シーストアを設定するか、Verified Permissions コンソールでガイド付きセットアップに従うと、ポリシーストアにはこの親メンバー関係が自動的に設定されます。
ID トークンは、属性ベースのアクセスコントロール () RBACと組み合わせることができます
ABAC。APIにリンクされたポリシーストアを作成したら、ユーザー属性とグループメンバーシップを使用してポリシーを強化できます。ID トークンの属性クレームは、認証リクエストのプリンシパ
ル属性になります。ポリシーは、プリンシパル属性に基づいて承認を決定できます。
また、指定した許容可能なアプリケーションクライアントのリストと一致する audまたはclient_idクレームを持つトークンを受け入れるようにポリシーストアを設定することもできます。

ロールベースのAPI承認のポリシーの例
次のポリシー例は、例 の Verified Permissions ポリシーストアのセットアップによって作成されまし
たPetStoreRESTAPI。
permit(principal in PetStore::UserGroup::"us-east-1_EXAMPLE|MyGroup",
API Verified Permissions による認証

82

Amazon Cognito

開発者ガイドaction in [ PetStore::Action::"get /pets", PetStore::Action::"get /pets/{petId}" ],resource);

Verified Permissions は、次の場合にアプリケーションから認証リクエストにAllow決定を返します。
1. アプリケーションは、 Authorizationヘッダー内の ID またはアクセストークンをベアラートー
クンとして渡しました。
2. アプリケーションは、文字列 を含む cognito:groupsクレームでトークンを渡しまし
たMyGroup。
3. アプリケーションが https://myapi.example.com/petsまたは などの にHTTP GETリクエストを行ったhttps://myapi.example.com/pets/scrappy。

Amazon Cognito ユーザーのポリシーの例。
ユーザープールは、リクエスト以外の条件で Verified Permissions への認証APIリクエストを生成することもできます。アプリケーションでのアクセスコントロールの決定は、ポリシーストアに送信できます。例えば、リクエストがネットワークを通過する前に、Amazon DynamoDB または Amazon
S3 セキュリティを属性ベースのアクセスコントロールで補完し、クォータの使用を削減できます。
次の例では、Cedar ポリシー言語を使用して、1 つのユーザープールアプリケーションクライアント
で認証する Finance ユーザーに example_image.png の読み取りと書き込みを許可しています。ア
プリのユーザーである John は、アプリクライアントから ID トークンを受け取り、認証URLが必要
な にGETリクエストで渡しますhttps://example.com/images/example_image.png。Johnの ID トークンには、ユーザープールアプリケーションのクライアント ID 1234567890example の
aud クレームが含まれています。また、プレトークンを生成する Lambda 関数によって、John 用に
新しいクレーム costCenter (値は Finance1234) が挿入されています。
permit (principal,
actions in [ExampleCorp::Action::"readFile", "writeFile"],resource == ExampleCorp::Photo::"example_image.png")
when {
principal.aud == "1234567890example" &&principal.custom.costCenter like "Finance*"};

Amazon Cognito ユーザーのポリシーの例。

83

Amazon Cognito

開発者ガイド次のリクエスト本文の結果は Allow レスポンスになります。
{"accesstoken": "[John's ID token]","action": {"actionId": "readFile","actionType": "Action"},"resource": {"entityId": "example_image.png","entityType": "Photo"}}

Verified Permissions でプリンシパルを指定する場合は、次の形式を使用してください。
permit (principal == [Namespace]::[Entity]::"[user pool ID]"|"[user sub]",
action,resource);

以下は、サブ またはユーザー ID が us-east-1_Exampleの ID を持つユーザープール内のユーザーのプリンシパルの例です973db890-092c-49e4-a9d0-912a4c0a20c7。
principal == ExampleCorp::User::"us-east-1_Example|973db890-092c-49e4a9d0-912a4c0a20c7",

Verified Permissions ポリシーでユーザーグループを指定する場合は、次の形式を使用します。
permit (principal in [Namespace]::[Group Entity]::"[Group name]",action,resource);

以下は、 の例です。
単一ドメイン内の属性ベースのアプリの Verified Permissions による認可、および AWS 認証情報用の Amazon Cognito ID プールのアクセスコントロール機能の属性は、どちらも属性ベースのアクセスコントロール () の形式です
Amazon Cognito ユーザーのポリシーの例。

84

Amazon Cognito

開発者ガイド

ABAC。以下は、Verified Permissions と Amazon Cognito の機能の比較ですABAC。ではABAC、シ
ステムはエンティティの属性を調べ、定義した条件から承認を決定します。
サービス

プロセス

結果

AmazonVerified
Permissions

ユーザープールの分析から Allowまたは Denyの決定を返しますJWT。

アプリケーションリソースへのアクセス
は、Cedar ポリシーの評価に基づいて成功または失敗します。

AmazonCognito ID
プール (アクセ
スコントロー
ルの属性）

属性に基づいてセッションタグをユーザーに割り当てます。IAM ポリ

IAM ロールの一時的な AWS 認証情報を含むタグ付けされたセッション。

シー条件は、タグAllowまたは へのDenyユーザーアクセスをチェッ
クできます AWS サービス。

Amazon Cognito ユーザーのポリシーの例。

85

Amazon Cognito

開発者ガイドAWS SDK を使用した Amazon Cognito のコード例。
次のコード例は、Amazon Cognito を AWS Software Development Kit (SDK) と使用する方法を示しています。
AWS SDK デベロッパーガイドとコード例の詳細なリストについては、「でのこのサービスの使用
AWS SDK」を参照してください。このトピックには、使用開始方法に関する情報と、以前の SDKバージョンの詳細も含まれています。
コード例• を使用した Amazon Cognito ID のコード例 AWS SDKs
• を使用した Amazon Cognito ID の基本的な例 AWS SDKs
• を使用した Amazon Cognito ID のアクション AWS SDKs
• または CreateIdentityPoolAWS SDKで を使用する CLI• または DeleteIdentityPoolAWS SDKで を使用する CLI• または DescribeIdentityPoolAWS SDKで を使用する CLI• または GetCredentialsForIdentityAWS SDKで を使用する CLI• または GetIdentityPoolRolesAWS SDKで を使用する CLI• または ListIdentityPoolsAWS SDKで を使用する CLI• または SetIdentityPoolRolesAWS SDKで を使用する CLI• または UpdateIdentityPool で を使用する AWS SDK CLI• を使用した Amazon Cognito ID のシナリオ AWS SDKs
• Amazon Textract エクスプローラーアプリケーションを作成する• を使用した Amazon Cognito ID プロバイダーのコード例 AWS SDKs
• を使用した Amazon Cognito ID プロバイダーの基本的な例 AWS SDKs
• Hello Amazon Cognito• を使用した Amazon Cognito ID プロバイダーのアクション AWS SDKs
• または AdminCreateUser で を使用する AWS SDK CLI• または AdminGetUserAWS SDKで を使用する CLI• または AdminInitiateAuthAWS SDKで を使用する CLI• または AdminRespondToAuthChallengeAWS SDKで を使用する CLI• または AdminSetUserPasswordAWS SDKで を使用する CLI86

Amazon Cognito

開発者ガイド• または AssociateSoftwareTokenAWS SDKで を使用する CLI• または ConfirmDevice で を使用する AWS SDK CLI• または ConfirmForgotPasswordAWS SDKで を使用する CLI• または ConfirmSignUpAWS SDKで を使用する CLI• または CreateUserPoolAWS SDKで を使用する CLI• または CreateUserPoolClientAWS SDKで を使用する CLI• または DeleteUserAWS SDKで を使用する CLI• または ForgotPasswordで を使用する AWS SDK CLI• または InitiateAuthAWS SDKで を使用する CLI• または ListUserPoolsAWS SDKで を使用する CLI• または ListUsersで を使用する AWS SDK CLI• または ResendConfirmationCode で を使用する AWS SDK CLI• または RespondToAuthChallengeAWS SDKで を使用する CLI• または SignUp で を使用する AWS SDK CLI• または UpdateUserPoolAWS SDKで を使用する CLI• または VerifySoftwareToken で を使用する AWS SDK CLI• を使用した Amazon Cognito ID プロバイダーのシナリオ AWS SDKs
• を使用して Lambda 関数で既知の Amazon Cognito ユーザーを自動的に確認する AWS SDK• を使用して Lambda 関数を使用して既知の Amazon Cognito ユーザーを自動的に移行する
AWS SDK• MFA を使用する必要がある Amazon Cognito ユーザープールでユーザーをサインアップす
る AWS SDK
• を使用して Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティ
ビティデータを書き込む AWS SDK• を使用した Amazon Cognito Sync のコード例 AWS SDKs
• を使用した Amazon Cognito Sync の基本的な例 AWS SDKs
• を使用した Amazon Cognito Sync のアクション AWS SDKs
• または ListIdentityPoolUsageAWS SDKで を使用する CLI

87

Amazon Cognito

開発者ガイドを使用した Amazon Cognito ID のコード例 AWS SDKs
次のコード例は、 AWS Software Development Kit () で Amazon Cognito Identity を使用する方法を示していますSDK。
アクションはより大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。アクションは個々のサービス機能を呼び出す方法を示していますが、コンテキスト内のアクションは、関連するシナリオで確認できます。
「シナリオ」は、1 つのサービス内から、または他の AWS サービスと組み合わせて複数の関数を呼び出し、特定のタスクを実行する方法を示すコード例です。
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
コードの例• を使用した Amazon Cognito ID の基本的な例 AWS SDKs
• を使用した Amazon Cognito ID のアクション AWS SDKs
• または CreateIdentityPoolAWS SDKで を使用する CLI• または DeleteIdentityPoolAWS SDKで を使用する CLI• または DescribeIdentityPoolAWS SDKで を使用する CLI• または GetCredentialsForIdentityAWS SDKで を使用する CLI• または GetIdentityPoolRolesAWS SDKで を使用する CLI• または ListIdentityPoolsAWS SDKで を使用する CLI• または SetIdentityPoolRolesAWS SDKで を使用する CLI• または UpdateIdentityPool で を使用する AWS SDK CLI• を使用した Amazon Cognito ID のシナリオ AWS SDKs
• Amazon Textract エクスプローラーアプリケーションを作成するを使用した Amazon Cognito ID の基本的な例 AWS SDKs
次のコード例は、 で AWS Amazon Cognito Identity の基本を使用する方法を示していますSDKs。
例• を使用した Amazon Cognito ID のアクション AWS SDKs
Amazon Cognito ID

88

Amazon Cognito

開発者ガイド• または CreateIdentityPoolAWS SDKで を使用する CLI• または DeleteIdentityPoolAWS SDKで を使用する CLI• または DescribeIdentityPoolAWS SDKで を使用する CLI• または GetCredentialsForIdentityAWS SDKで を使用する CLI• または GetIdentityPoolRolesAWS SDKで を使用する CLI• または ListIdentityPoolsAWS SDKで を使用する CLI• または SetIdentityPoolRolesAWS SDKで を使用する CLI• または UpdateIdentityPool で を使用する AWS SDK CLIを使用した Amazon Cognito ID のアクション AWS SDKs
次のコード例は、 を使用して個々の Amazon Cognito ID アクションを実行する方法を示しています
AWS SDKs。各例には GitHub、コードの設定と実行の手順を示す へのリンクが含まれています。
これらの抜粋は Amazon Cognito ID を呼びAPI出すもので、コンテキスト内で実行する必要がある大規模なプログラムからのコード抜粋です。アクションは を使用した Amazon Cognito ID のシナリオ
AWS SDKs のコンテキスト内で確認できます。
以下の例には、最も一般的に使用されるアクションのみ含まれています。詳細なリストについては、Amazon Cognito ID APIリファレンス」を参照してください。
例• または CreateIdentityPoolAWS SDKで を使用する CLI• または DeleteIdentityPoolAWS SDKで を使用する CLI• または DescribeIdentityPoolAWS SDKで を使用する CLI• または GetCredentialsForIdentityAWS SDKで を使用する CLI• または GetIdentityPoolRolesAWS SDKで を使用する CLI• または ListIdentityPoolsAWS SDKで を使用する CLI• または SetIdentityPoolRolesAWS SDKで を使用する CLI• または UpdateIdentityPool で を使用する AWS SDK CLIまたは CreateIdentityPoolAWS SDKで を使用する CLI
以下のコード例は、CreateIdentityPool の使用方法を示しています。
基礎89

Amazon Cognito

開発者ガイドCLIAWS CLI
Cognito アイデンティティプールプロバイダーを含むアイデンティティプールを作成するには
この例では、 という名前の ID プールを作成します MyIdentityPool。これには Cognito アイデ
ンティティプールプロバイダーが含まれます。認証されていないアイデンティティは許可され
ません。
コマンド:
aws cognito-identity create-identity-pool --identity-poolname MyIdentityPool --no-allow-unauthenticated-identities --cognitoidentity-providers ProviderName="cognito-idp.us-west-2.amazonaws.com/uswest-2_aaaaaaaaa",ClientId="3n4b5urk1ft4fl3mg5e62d9ado",ServerSideTokenCheck=false

出力:{"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","IdentityPoolName": "MyIdentityPool","AllowUnauthenticatedIdentities": false,"CognitoIdentityProviders": [{"ProviderName": "cognito-idp.us-west-2.amazonaws.com/uswest-2_111111111","ClientId": "3n4b5urk1ft4fl3mg5e62d9ado","ServerSideTokenCheck": false}]}• API 詳細については、「 コマンドリファレンスCreateIdentityPool」の「」を参照してくだ
さい。 AWS CLI

基礎

90

Amazon Cognito

開発者ガイドJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cognitoidentity.CognitoIdentityClient;
importsoftware.amazon.awssdk.services.cognitoidentity.model.CreateIdentityPoolRequest;
importsoftware.amazon.awssdk.services.cognitoidentity.model.CreateIdentityPoolResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class CreateIdentityPool {public static void main(String[] args) {final String usage = """Usage:<identityPoolName>\s
Where:
identityPoolName - The name to give your identity pool.
""";if (args.length != 1) {System.out.println(usage);
System.exit(1);
}
基礎

91

Amazon Cognito

開発者ガイドString identityPoolName = args[0];CognitoIdentityClient cognitoClient = CognitoIdentityClient.builder().region(Region.US_EAST_1).build();String identityPoolId = createIdPool(cognitoClient, identityPoolName);
System.out.println("Unity pool ID " + identityPoolId);
cognitoClient.close();}public static String createIdPool(CognitoIdentityClient cognitoClient, String
identityPoolName) {try {CreateIdentityPoolRequest poolRequest =CreateIdentityPoolRequest.builder().allowUnauthenticatedIdentities(false).identityPoolName(identityPoolName).build();CreateIdentityPoolResponse response =
cognitoClient.createIdentityPool(poolRequest);
return response.identityPoolId();} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}return "";}}• API 詳細については、「 リファレンスCreateIdentityPool」の「」を参照してください。
AWS SDK for Java 2.x API
PowerShellのツール PowerShell
例 1: 認証されていない ID を許可する新しい ID プールを作成します。

基礎92

Amazon Cognito

開発者ガイドNew-CGIIdentityPool -AllowUnauthenticatedIdentities $true -IdentityPoolName
CommonTests13

出力:
LoggedAt: 8/12/2015 4:56:07 PM
AllowUnauthenticatedIdentities : True
DeveloperProviderName
IdentityPoolId
IdentityPoolName
OpenIdConnectProviderARNs
SupportedLoginProviders
ResponseMetadata
ContentLength
HttpStatusCode:: us-east-1:15d49393-ab16-431a-b26e-EXAMPLEGUID3: CommonTests13
: {}
: {}
: Amazon.Runtime.ResponseMetadata
: 136
: OK

• API 詳細については、「 コマンドレットリファレンスCreateIdentityPool」の「」を参照してください。 AWS Tools for PowerShell
Swift
SDK Swift 用
Note
これはプレビューリリースSDKの のプレリリースドキュメントです。このドキュメン
トは変更される可能性があります。

Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

新しい ID プールを作成します。
/// Create a new identity pool and return its ID.
///
基礎

93

Amazon Cognito

開発者ガイド/// - Parameters:///- name: The name to give the new identity pool.
////// - Returns: A string containing the newly created pool's ID, or `nil`///
if an error occurred.
///
func createIdentityPool(name: String) async throws -> String? {let cognitoInputCall = CreateIdentityPoolInput(developerProviderName:"com.exampleco.CognitoIdentityDemo",
identityPoolName: name)let result = try await cognitoIdentityClient.createIdentityPool(input:
cognitoInputCall)guard let poolId = result.identityPoolId else {return nil}
return poolId}• 詳細については、「 for AWS SDK Swift developer guide」を参照してください。
• API 詳細については、CreateIdentityPool「」の「Swift リファレンス」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または DeleteIdentityPoolAWS SDKで を使用する CLI
以下のコード例は、DeleteIdentityPool の使用方法を示しています。
CLIAWS CLI
アイデンティティプールを削除するには次の delete-identity-pool 例では、指定したアイデンティティプールを削除します。
コマンド:
基礎

94

Amazon Cognito

開発者ガイドaws cognito-identity delete-identity-pool \--identity-pool-id "us-west-2:11111111-1111-1111-1111-111111111111"

このコマンドでは何も出力されません。
• API 詳細については、「 コマンドリファレンスDeleteIdentityPool」の「」を参照してくだ
さい。 AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cognitoidentity.CognitoIdentityClient;
importsoftware.amazon.awssdk.services.cognitoidentity.model.DeleteIdentityPoolRequest;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class DeleteIdentityPool {public static void main(String[] args) {final String usage = """Usage:<identityPoolId>\s
基礎

95Amazon Cognito

開発者ガイドWhere:
identityPoolId - The Id value of your identity pool.
""";if (args.length != 1) {System.out.println(usage);
System.exit(1);}String identityPoold = args[0];CognitoIdentityClient cognitoIdClient = CognitoIdentityClient.builder().region(Region.US_EAST_1).credentialsProvider(ProfileCredentialsProvider.create()).build();deleteIdPool(cognitoIdClient, identityPoold);
cognitoIdClient.close();}public static void deleteIdPool(CognitoIdentityClient cognitoIdClient, String
identityPoold) {try {DeleteIdentityPoolRequest identityPoolRequest =DeleteIdentityPoolRequest.builder().identityPoolId(identityPoold).build();cognitoIdClient.deleteIdentityPool(identityPoolRequest);
System.out.println("Done");} catch (AwsServiceException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 リファレンスDeleteIdentityPool」の「」を参照してください。
AWS SDK for Java 2.x API

基礎

96Amazon Cognito

開発者ガイドPowerShellのツール PowerShell
例 1: 特定の ID プールを削除します。
Remove-CGIIdentityPool -IdentityPoolId us-east-1:0de2af35-2988-4d0b-b22dEXAMPLEGUID1• API 詳細については、「 コマンドレットリファレンスDeleteIdentityPool」の「」を参照してください。 AWS Tools for PowerShell
Swift
SDK Swift 用
Note
これはプレビューリリースSDKの のプレリリースドキュメントです。このドキュメン
トは変更される可能性があります。

Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

指定した ID プールを削除します。
/// Delete the specified identity pool.
////// - Parameters:///- id: The ID of the identity pool to delete.
///func deleteIdentityPool(id: String) async throws {let input = DeleteIdentityPoolInput(
identityPoolId: id
)

基礎

97

Amazon Cognito

開発者ガイド_ = try await cognitoIdentityClient.deleteIdentityPool(input: input)}• 詳細については、「 for AWS SDK Swift developer guide」を参照してください。
• API 詳細については、DeleteIdentityPool「」の「Swift リファレンス」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または DescribeIdentityPoolAWS SDKで を使用する CLI
以下のコード例は、DescribeIdentityPool の使用方法を示しています。
CLIAWS CLI
ID プールを記述するには
この例では、ID プールについて説明します。
コマンド:
aws cognito-identity describe-identity-pool --identity-pool-id "uswest-2:11111111-1111-1111-1111-111111111111"

出力:{"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","IdentityPoolName": "MyIdentityPool","AllowUnauthenticatedIdentities": false,"CognitoIdentityProviders": [{"ProviderName": "cognito-idp.us-west-2.amazonaws.com/uswest-2_111111111","ClientId": "3n4b5urk1ft4fl3mg5e62d9ado",
基礎

98

Amazon Cognito

開発者ガイド"ServerSideTokenCheck": false}]}• API 詳細については、「 コマンドリファレンスDescribeIdentityPool」の「」を参照してください。 AWS CLIPowerShellのツール PowerShell
例 1: 特定の ID プールに関する情報を ID で取得します。
Get-CGIIdentityPool -IdentityPoolId us-east-1:0de2af35-2988-4d0b-b22dEXAMPLEGUID1

出力:
LoggedAt: 8/12/2015 4:29:40 PM
AllowUnauthenticatedIdentities : True
DeveloperProviderName:
IdentityPoolId: us-east-1:0de2af35-2988-4d0b-b22d-EXAMPLEGUID1
IdentityPoolName: CommonTests1
OpenIdConnectProviderARNs: {}SupportedLoginProviders: {}ResponseMetadata: Amazon.Runtime.ResponseMetadata
ContentLength: 142
HttpStatusCode: OK• API 詳細については、「 コマンドレットリファレンスDescribeIdentityPool」の「」を参照
してください。 AWS Tools for PowerShell
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または GetCredentialsForIdentityAWS SDKで を使用する CLI
次の例は、GetCredentialsForIdentity を使用する方法を説明しています。
基礎99

Amazon Cognito

開発者ガイドJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cognitoidentity.CognitoIdentityClient;
importsoftware.amazon.awssdk.services.cognitoidentity.model.GetCredentialsForIdentityRequest;
importsoftware.amazon.awssdk.services.cognitoidentity.model.GetCredentialsForIdentityResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class GetIdentityCredentials {public static void main(String[] args) {final String usage = """Usage:<identityId>\s
Where:
identityId - The Id of an existing identity in the format
REGION:GUID.
""";
if (args.length != 1) {基礎

100

Amazon Cognito

開発者ガイドSystem.out.println(usage);
System.exit(1);}String identityId = args[0];CognitoIdentityClient cognitoClient = CognitoIdentityClient.builder().region(Region.US_EAST_1).build();getCredsForIdentity(cognitoClient, identityId);
cognitoClient.close();}public static void getCredsForIdentity(CognitoIdentityClient cognitoClient,
String identityId) {try {GetCredentialsForIdentityRequest getCredentialsForIdentityRequest =GetCredentialsForIdentityRequest.builder().identityId(identityId).build();GetCredentialsForIdentityResponse response = cognitoClient.getCredentialsForIdentity(getCredentialsForIdentityRequest);
System.out.println("Identity ID " + response.identityId() + ", Access key ID " +response.credentials().accessKeyId());} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 リファレンスGetCredentialsForIdentity」の「」を参照してください。 AWS SDK for Java 2.x API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
基礎

101

Amazon Cognito

開発者ガイドまたは GetIdentityPoolRolesAWS SDKで を使用する CLI
以下のコード例は、GetIdentityPoolRoles の使用方法を示しています。
CLIAWS CLI
ID プールロールを取得するには
この例では、ID プールロールを取得します。
コマンド:
aws cognito-identity get-identity-pool-roles --identity-pool-id "uswest-2:11111111-1111-1111-1111-111111111111"

出力:{"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","Roles": {"authenticated": "arn:aws:iam::111111111111:role/
Cognito_MyIdentityPoolAuth_Role","unauthenticated": "arn:aws:iam::111111111111:role/
Cognito_MyIdentityPoolUnauth_Role"}}• API 詳細については、「 コマンドリファレンスGetIdentityPoolRoles」の「」を参照してください。 AWS CLIPowerShellのツール PowerShell
例 1: 特定の ID プールのロールに関する情報を取得します。
Get-CGIIdentityPoolRole -IdentityPoolId us-east-1:0de2af35-2988-4d0b-b22dEXAMPLEGUID1

出力:
基礎

102

Amazon Cognito

開発者ガイドLoggedAt: 8/12/2015 4:33:51 PM
IdentityPoolId: us-east-1:0de2af35-2988-4d0b-b22d-EXAMPLEGUID1
Roles: {[unauthenticated, arn:aws:iam::123456789012:role/
CommonTests1Role]}
ResponseMetadata : Amazon.Runtime.ResponseMetadata
ContentLength: 165
HttpStatusCode: OK• API 詳細については、「 コマンドレットリファレンスGetIdentityPoolRoles」の「」を参照
してください。 AWS Tools for PowerShell
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ListIdentityPoolsAWS SDKで を使用する CLI
以下のコード例は、ListIdentityPools の使用方法を示しています。
CLIAWS CLI
アイデンティティプールを一覧表示するには
この例ではアイデンティティプールを一覧表示します。最大 20 個のアイデンティティが一覧
表示されます。
コマンド:
aws cognito-identity list-identity-pools --max-results 20

出力:{"IdentityPools": [{"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","IdentityPoolName": "MyIdentityPool"
},
{
基礎

103

Amazon Cognito

開発者ガイド"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","IdentityPoolName": "AnotherIdentityPool"},{"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","IdentityPoolName": "IdentityPoolRegionA"}]}• API 詳細については、「 コマンドリファレンスListIdentityPools」の「」を参照してください。 AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cognitoidentity.CognitoIdentityClient;
importsoftware.amazon.awssdk.services.cognitoidentity.model.ListIdentityPoolsRequest;
importsoftware.amazon.awssdk.services.cognitoidentity.model.ListIdentityPoolsResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html
*/
基礎

104

Amazon Cognito

開発者ガイドpublic class ListIdentityPools {public static void main(String[] args) {CognitoIdentityClient cognitoClient = CognitoIdentityClient.builder().region(Region.US_EAST_1).build();listIdPools(cognitoClient);
cognitoClient.close();}public static void listIdPools(CognitoIdentityClient cognitoClient) {try {ListIdentityPoolsRequest poolsRequest =ListIdentityPoolsRequest.builder().maxResults(15).build();ListIdentityPoolsResponse response =
cognitoClient.listIdentityPools(poolsRequest);
response.identityPools().forEach(pool -> {System.out.println("Pool ID: " + pool.identityPoolId());
System.out.println("Pool name: " + pool.identityPoolName());});} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 リファレンスListIdentityPools」の「」を参照してください。 AWSSDK for Java 2.x API
PowerShellのツール PowerShell
例 1: 既存の ID プールのリストを取得します。
Get-CGIIdentityPoolList

基礎

105

Amazon Cognito

開発者ガイド出力:
IdentityPoolId
IdentityPoolName----------------------------us-east-1:0de2af35-2988-4d0b-b22d-EXAMPLEGUID1
us-east-1:118d242d-204e-4b88-b803-EXAMPLEGUID2
us-east-1:15d49393-ab16-431a-b26e-EXAMPLEGUID3

CommonTests1
Tests2
CommonTests13• API 詳細については、「 コマンドレットリファレンスListIdentityPools」の「」を参照してください。 AWS Tools for PowerShell
Swift
SDK Swift 用
Note
これはプレビューリリースSDKの のプレリリースドキュメントです。このドキュメン
トは変更される可能性があります。

Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

名前を指定してアイデンティティプールの ID を検索します。
/// Return the ID of the identity pool with the specified name.
////// - Parameters:///- name: The name of the identity pool whose ID should be returned.
////// - Returns: A string containing the ID of the specified identity pool///or `nil` on error or if not found.
///func getIdentityPoolID(name: String) async throws -> String? {基礎

106

Amazon Cognito

開発者ガイドvar token: String? = nil// Iterate over the identity pools until a match is found.
repeat {/// `token` is a value returned by `ListIdentityPools()` if the/// returned list of identity pools is only a partial list. You/// use the `token` to tell Amazon Cognito that you want to/// continue where you left off previously. If you specify `nil`/// or you don't provide the token, Amazon Cognito will start at/// the beginning.
let listPoolsInput = ListIdentityPoolsInput(maxResults: 25,
nextToken: token)/// Read pages of identity pools from Cognito until one is found/// whose name matches the one specified in the `name` parameter.
/// Return the matching pool's ID. Each time we ask for the next/// page of identity pools, we pass in the token given by the/// previous page.
let output = try await cognitoIdentityClient.listIdentityPools(input:
listPoolsInput)
if let identityPools = output.identityPools {for pool in identityPools {if pool.identityPoolName == name {return pool.identityPoolId!
}}}
token = output.nextToken} while token != nil
return nil}

既存のアイデンティティプールの ID を取得します。存在しない場合は、作成します。
/// Return the ID of the identity pool with the specified name.
///
基礎

107

Amazon Cognito

開発者ガイド/// - Parameters:///- name: The name of the identity pool whose ID should be returned////// - Returns: A string containing the ID of the specified identity pool.
///
Returns `nil` if there's an error or if the pool isn't found.
///public func getOrCreateIdentityPoolID(name: String) async throws -> String? {// See if the pool already exists. If it doesn't, create it.
guard let poolId = try await self.getIdentityPoolID(name: name) else {return try await self.createIdentityPool(name: name)}return poolId}• 詳細については、「 for AWS SDK Swift developer guide」を参照してください。
• API 詳細については、ListIdentityPools「」の「Swift リファレンス」を参照してください。
AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または SetIdentityPoolRolesAWS SDKで を使用する CLI
以下のコード例は、SetIdentityPoolRoles の使用方法を示しています。
CLIAWS CLI
ID プールロールを設定するには
次のset-identity-pool-roles例では、ID プールロールを設定します。
aws cognito-identity set-identity-pool-roles \--identity-pool-id "us-west-2:11111111-1111-1111-1111-111111111111" \--roles authenticated="arn:aws:iam::111111111111:role/
Cognito_MyIdentityPoolAuth_Role"

基礎

108

Amazon Cognito

開発者ガイド• API 詳細については、「 コマンドリファレンスSetIdentityPoolRoles」の「」を参照してください。 AWS CLIPowerShellのツール PowerShell
例 1: 認証されていないIAMロールを持つように特定の ID プールを設定します。
Set-CGIIdentityPoolRole -IdentityPoolId us-east-1:0de2af35-2988-4d0b-b22dEXAMPLEGUID1 -Role @{ "unauthenticated" = "arn:aws:iam::123456789012:role/
CommonTests1Role" }• API 詳細については、「 コマンドレットリファレンスSetIdentityPoolRoles」の「」を参照
してください。 AWS Tools for PowerShell
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または UpdateIdentityPool で を使用する AWS SDK CLI
以下のコード例は、UpdateIdentityPool の使用方法を示しています。
CLIAWS CLI
ID プールを更新するには
この例では、ID プールを更新します。名前を に設定します MyIdentityPool。Cognito を ID プ
ロバイダーとして追加します。認証されていない ID は許可されません。
コマンド:
aws cognito-identity update-identity-pool --identity-pool-id "uswest-2:11111111-1111-1111-1111-111111111111" --identity-poolname "MyIdentityPool" --no-allow-unauthenticated-identities --cognitoidentity-providers ProviderName="cognito-idp.us-west-2.amazonaws.com/uswest-2_111111111",ClientId="3n4b5urk1ft4fl3mg5e62d9ado",ServerSideTokenCheck=false

基礎

109

Amazon Cognito

開発者ガイド

出力:{"IdentityPoolId": "us-west-2:11111111-1111-1111-1111-111111111111","IdentityPoolName": "MyIdentityPool","AllowUnauthenticatedIdentities": false,"CognitoIdentityProviders": [{"ProviderName": "cognito-idp.us-west-2.amazonaws.com/uswest-2_111111111","ClientId": "3n4b5urk1ft4fl3mg5e62d9ado","ServerSideTokenCheck": false}]}• API 詳細については、「 コマンドリファレンスUpdateIdentityPool」の「」を参照してくだ
さい。 AWS CLIPowerShellのツール PowerShell
例 1: ID プールプロパティの一部を更新します。この場合は、ID プールの名前です。
Update-CGIIdentityPool -IdentityPoolId us-east-1:0de2af35-2988-4d0b-b22dEXAMPLEGUID1 -IdentityPoolName NewPoolName

出力:
LoggedAt: 8/12/2015 4:53:33 PM
AllowUnauthenticatedIdentities : False
DeveloperProviderName:
IdentityPoolId: us-east-1:0de2af35-2988-4d0b-b22d-EXAMPLEGUID1
IdentityPoolName: NewPoolName
OpenIdConnectProviderARNs: {}SupportedLoginProviders: {}ResponseMetadata: Amazon.Runtime.ResponseMetadata
ContentLength: 135
HttpStatusCode
: OK

基礎

110

Amazon Cognito

開発者ガイド• API 詳細については、「 コマンドレットリファレンスUpdateIdentityPool」の「」を参照してください。 AWS Tools for PowerShell
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

を使用した Amazon Cognito ID のシナリオ AWS SDKs
次のコード例は、 を使用して Amazon Cognito Identity で一般的なシナリオを実装する方法を示しています AWS SDKs。これらのシナリオは、Amazon Cognito Identity 内で複数の関数を呼び出す
か、他の と組み合わせて特定のタスクを実行する方法を示しています AWS サービス。各シナリオには、完全なソースコードへのリンクが含まれており、そこからコードの設定方法と実行方法に関する手順を確認できます。
シナリオは、サービスアクションをコンテキストで理解するのに役立つ中級レベルの経験を対象としています。
例• Amazon Textract エクスプローラーアプリケーションを作成する

Amazon Textract エクスプローラーアプリケーションを作成する
次のコード例は、インタラクティブアプリケーションで Amazon Textract の出力を調べる方法を示しています。
JavaScript
SDK JavaScript (v3) 用のを使用して、Amazon Textract を使用してドキュメントイメージからデータを抽出し、インタ
ラクティブなウェブページに表示する React アプリケーション AWS SDK for JavaScript を構築する方法を示します。この例はウェブブラウザで実行され、認証情報に認証された Amazon
Cognito ID が必要です。Amazon Simple Storage Service (Amazon S3) をストレージとして使用し、Amazon Simple Notification Service (Amazon SQS) トピックにサブスクライブされている Amazon Simple Queue Service (Amazon SNS) キューをポーリングする通知に使用しま
す。
シナリオ

111

Amazon Cognito

開発者ガイド

完全なソースコードとセットアップと実行の手順については、「」の詳細な例を参照してくだ
さいGitHub。
この例で使用されているサービス• Amazon Cognito ID• Amazon S3• Amazon SNS• Amazon SQS• Amazon Textract
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

を使用した Amazon Cognito ID プロバイダーのコード例 AWS
SDKs
次のコード例は、 AWS ソフトウェア開発キット () で Amazon Cognito ID プロバイダーを使用する
方法を示していますSDK。
「基本」は、重要なオペレーションをサービス内で実行する方法を示すコード例です。
アクションはより大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。アクションは個々のサービス機能を呼び出す方法を示していますが、コンテキスト内のアクションは、関連するシナリオで確認できます。
「シナリオ」は、1 つのサービス内から、または他の AWS サービスと組み合わせて複数の関数を呼び出し、特定のタスクを実行する方法を示すコード例です。
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
開始方法
Hello Amazon Cognito
次のコード例は、Amazon Cognito の使用を開始する方法を示しています。
Amazon Cognito Identity Provider

112

Amazon Cognito

開発者ガイドC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

CMakeLists.txt CMakeファイルのコード。
# Set the minimum required version of CMake for this project.
cmake_minimum_required(VERSION 3.13)# Set the AWS service components used by this project.
set(SERVICE_COMPONENTS cognito-idp)# Set this project's name.
project("hello_cognito")# Set the C++ standard to use to build this target.
# At least C++ 11 is required for the AWS SDK for C++.
set(CMAKE_CXX_STANDARD 11)# Use the MSVC variable to determine if this is a Windows build.
set(WINDOWS_BUILD ${MSVC})
if (WINDOWS_BUILD) # Set the location where CMake can find the installed
libraries for the AWS SDK.
string(REPLACE ";" "/aws-cpp-sdk-all;" SYSTEM_MODULE_PATH"${CMAKE_SYSTEM_PREFIX_PATH}/aws-cpp-sdk-all")list(APPEND CMAKE_PREFIX_PATH ${SYSTEM_MODULE_PATH})
endif ()# Find the AWS SDK for C++ package.
find_package(AWSSDK REQUIRED COMPONENTS ${SERVICE_COMPONENTS})
if (WINDOWS_BUILD AND AWSSDK_INSTALL_AS_SHARED_LIBS)# Copy relevant AWS SDK for C++ libraries into the current binary directoryfor running and debugging.

Amazon Cognito Identity Provider

113

Amazon Cognito

開発者ガイド# set(BIN_SUB_DIR "/Debug") # If you are building from the command line, you
may need to uncomment this# and set the proper subdirectory to the
executables' location.
AWSSDK_CPY_DYN_LIBS(SERVICE_COMPONENTS ""${CMAKE_CURRENT_BINARY_DIR}${BIN_SUB_DIR})
endif ()
add_executable(${PROJECT_NAME}
hello_cognito.cpp)
target_link_libraries(${PROJECT_NAME}${AWSSDK_LINK_LIBRARIES})

hello_cognito.cpp ソースファイルのコード。
#include <aws/core/Aws.h>#include <aws/cognito-idp/CognitoIdentityProviderClient.h>#include <aws/cognito-idp/model/ListUserPoolsRequest.h>#include <iostream>/** A "Hello Cognito" starter application which initializes an Amazon Cognito
client and lists the Amazon Cognito* user pools.
** main function** Usage: 'hello_cognito'**/
int main(int argc, char **argv) {Aws::SDKOptions options;// Optionally change the log level for debugging.
//
options.loggingOptions.logLevel = Utils::Logging::LogLevel::Debug;
Aws::InitAPI(options); // Should only be called once.
int result = 0;{
Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
Amazon Cognito Identity Provider

114

Amazon Cognito

開発者ガイド// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
cognitoClient(clientConfig);
Aws::String nextToken; // Used for pagination.
std::vector<Aws::String> userPools;
do {Aws::CognitoIdentityProvider::Model::ListUserPoolsRequest
listUserPoolsRequest;
if (!nextToken.empty()) {listUserPoolsRequest.SetNextToken(nextToken);}
Aws::CognitoIdentityProvider::Model::ListUserPoolsOutcome
listUserPoolsOutcome =cognitoClient.ListUserPools(listUserPoolsRequest);
if (listUserPoolsOutcome.IsSuccess()) {for (auto &userPool:listUserPoolsOutcome.GetResult().GetUserPools()) {userPools.push_back(userPool.GetName());}
nextToken = listUserPoolsOutcome.GetResult().GetNextToken();} else {std::cerr << "ListUserPools error: " <<listUserPoolsOutcome.GetError().GetMessage() << std::endl;
result = 1;
break;}} while (!nextToken.empty());
std::cout << userPools.size() << " user pools found." << std::endl;
for (auto &userPool: userPools) {std::cout << "user pool: " << userPool << std::endl;}}
Aws::ShutdownAPI(options); // Should only be called once.
return result;Amazon Cognito Identity Provider

115

Amazon Cognito

開発者ガイド}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for C++ API
Go
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

package main
import ("context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws""github.com/aws/aws-sdk-go-v2/config""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types")// main uses the AWS SDK for Go V2 to create an Amazon Simple Notification
Service// (Amazon SNS) client and list the topics in your account.
// This example uses the default settings specified in your shared credentials// and config files.
func main() {sdkConfig, err := config.LoadDefaultConfig(context.TODO())
if err != nil {fmt.Println("Couldn't load default configuration. Have you set up your AWS
account?")
fmt.Println(err)
Amazon Cognito Identity Provider

116

Amazon Cognito

開発者ガイドreturn}cognitoClient := cognitoidentityprovider.NewFromConfig(sdkConfig)
fmt.Println("Let's list the user pools for your account.")
var pools []types.UserPoolDescriptionType
paginator := cognitoidentityprovider.NewListUserPoolsPaginator(
cognitoClient, &cognitoidentityprovider.ListUserPoolsInput{MaxResults:
aws.Int32(10)})for paginator.HasMorePages() {output, err := paginator.NextPage(context.TODO())
if err != nil {log.Printf("Couldn't get user pools. Here's why: %v\n", err)
} else {pools = append(pools, output.UserPools...)}}if len(pools) == 0 {fmt.Println("You don't have any user pools!")} else {for _, pool := range pools {fmt.Printf("\t%v: %v\n", *pool.Name, *pool.Id)}}}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Go API
Java
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
Amazon Cognito Identity Provider

117

Amazon Cognito

開発者ガイドimportsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class ListUserPools {public static void main(String[] args) {CognitoIdentityProviderClient cognitoClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();listAllUserPools(cognitoClient);
cognitoClient.close();}public static void listAllUserPools(CognitoIdentityProviderClient
cognitoClient) {try {ListUserPoolsRequest request = ListUserPoolsRequest.builder().maxResults(10).build();ListUserPoolsResponse response =
cognitoClient.listUserPools(request);
response.userPools().forEach(userpool -> {System.out.println("User pool " + userpool.name() + ", User ID "+ userpool.id());});} catch (CognitoIdentityProviderException e) {Amazon Cognito Identity Provider

118

Amazon Cognito

開発者ガイドSystem.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Java 2.x API
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import {paginateListUserPools,
CognitoIdentityProviderClient,} from "@aws-sdk/client-cognito-identity-provider";const client = new CognitoIdentityProviderClient({});
export const helloCognito = async () => {const paginator = paginateListUserPools({ client }, {});
const userPoolNames = [];for await (const page of paginator) {const names = page.UserPools.map((pool) => pool.Name);
userPoolNames.push(...names);}
console.log("User pool names: ");console.log(userPoolNames.join("\n"));return userPoolNames;};
Amazon Cognito Identity Provider

119

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for JavaScript API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import boto3# Create a Cognito Identity Provider client
cognitoidp = boto3.client("cognito-idp")# Initialize a paginator for the list_user_pools operation
paginator = cognitoidp.get_paginator("list_user_pools")# Create a PageIterator from the paginator
page_iterator = paginator.paginate(MaxResults=10)# Initialize variables for pagination
user_pools = []# Handle pagination
for page in page_iterator:
user_pools.extend(page.get("UserPools", []))# Print the list of user pools
print("User Pools for the account:")
if user_pools:
for pool in user_pools:
print(f"Name: {pool['Name']}, ID: {pool['Id']}")
else:
print("No user pools found.")
Amazon Cognito Identity Provider

120

Amazon Cognito

開発者ガイド• API 詳細については、「 for Python (Boto3) リファレンスListUserPools」の「」を参照してください。 AWS SDK API
Ruby
SDK Ruby 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

require 'aws-sdk-cognitoidentityprovider'require 'logger'# CognitoManager is a class responsible for managing AWS Cognito operations# such as listing all user pools in the current AWS account.
class CognitoManager
def initialize(client)@client = client@logger = Logger.new($stdout)end# Lists and prints all user pools associated with the AWS account.
def list_user_pools
paginator = @client.list_user_pools(max_results: 10)
user_pools = []paginator.each_page do |page|
user_pools.concat(page.user_pools)
end
if user_pools.empty?
@logger.info('No Cognito user pools found.')else
user_pools.each do |user_pool|@logger.info("User pool ID: #{user_pool.id}")Amazon Cognito Identity Provider

121

Amazon Cognito

開発者ガイド@logger.info("User pool name: #{user_pool.name}")@logger.info("User pool status: #{user_pool.status}")@logger.info('---')
end
end
end
end
if $PROGRAM_NAME == __FILE__
cognito_client = Aws::CognitoIdentityProvider::Client.new
manager = CognitoManager.new(cognito_client)manager.list_user_poolsend• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Ruby API
コードの例• を使用した Amazon Cognito ID プロバイダーの基本的な例 AWS SDKs
• Hello Amazon Cognito• を使用した Amazon Cognito ID プロバイダーのアクション AWS SDKs
• または AdminCreateUser で を使用する AWS SDK CLI• または AdminGetUserAWS SDKで を使用する CLI• または AdminInitiateAuthAWS SDKで を使用する CLI• または AdminRespondToAuthChallengeAWS SDKで を使用する CLI• または AdminSetUserPasswordAWS SDKで を使用する CLI• または AssociateSoftwareTokenAWS SDKで を使用する CLI• または ConfirmDevice で を使用する AWS SDK CLI• または ConfirmForgotPasswordAWS SDKで を使用する CLI• または ConfirmSignUpAWS SDKで を使用する CLI• または CreateUserPoolAWS SDKで を使用する CLI• または CreateUserPoolClientAWS SDKで を使用する CLI• または DeleteUserAWS SDKで を使用する CLI• または ForgotPasswordで を使用する AWS SDK CLI
Amazon Cognito Identity Provider

122

Amazon Cognito

開発者ガイド• または InitiateAuthAWS SDKで を使用する CLI• または ListUserPoolsAWS SDKで を使用する CLI• または ListUsersで を使用する AWS SDK CLI• または ResendConfirmationCode で を使用する AWS SDK CLI• または RespondToAuthChallengeAWS SDKで を使用する CLI• または SignUp で を使用する AWS SDK CLI• または UpdateUserPoolAWS SDKで を使用する CLI• または VerifySoftwareToken で を使用する AWS SDK CLI• を使用した Amazon Cognito ID プロバイダーのシナリオ AWS SDKs
• を使用して Lambda 関数で既知の Amazon Cognito ユーザーを自動的に確認する AWS SDK• を使用して Lambda 関数を使用して既知の Amazon Cognito ユーザーを自動的に移行する AWS
SDK• MFA を使用する必要がある Amazon Cognito ユーザープールでユーザーをサインアップする
AWS SDK• を使用して Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビ
ティデータを書き込む AWS SDKを使用した Amazon Cognito ID プロバイダーの基本的な例 AWS SDKs
次のコード例は、 で AWS Amazon Cognito ID プロバイダーの基本を使用する方法を示しています
SDKs。
例• Hello Amazon Cognito• を使用した Amazon Cognito ID プロバイダーのアクション AWS SDKs
• または AdminCreateUser で を使用する AWS SDK CLI• または AdminGetUserAWS SDKで を使用する CLI• または AdminInitiateAuthAWS SDKで を使用する CLI• または AdminRespondToAuthChallengeAWS SDKで を使用する CLI• または AdminSetUserPasswordAWS SDKで を使用する CLI• または AssociateSoftwareTokenAWS SDKで を使用する CLI
基礎• または ConfirmDevice で を使用する AWS SDK CLI

123

Amazon Cognito

開発者ガイド• または ConfirmForgotPasswordAWS SDKで を使用する CLI• または ConfirmSignUpAWS SDKで を使用する CLI• または CreateUserPoolAWS SDKで を使用する CLI• または CreateUserPoolClientAWS SDKで を使用する CLI• または DeleteUserAWS SDKで を使用する CLI• または ForgotPasswordで を使用する AWS SDK CLI• または InitiateAuthAWS SDKで を使用する CLI• または ListUserPoolsAWS SDKで を使用する CLI• または ListUsersで を使用する AWS SDK CLI• または ResendConfirmationCode で を使用する AWS SDK CLI• または RespondToAuthChallengeAWS SDKで を使用する CLI• または SignUp で を使用する AWS SDK CLI• または UpdateUserPoolAWS SDKで を使用する CLI• または VerifySoftwareToken で を使用する AWS SDK CLI

Hello Amazon Cognito
次のコード例は、Amazon Cognito の使用を開始する方法を示しています。
C++SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

CMakeLists.txt CMakeファイルのコード。
# Set the minimum required version of CMake for this project.
cmake_minimum_required(VERSION 3.13)# Set the AWS service components used by this project.
set(SERVICE_COMPONENTS cognito-idp)
基礎

124

Amazon Cognito

開発者ガイド# Set this project's name.
project("hello_cognito")# Set the C++ standard to use to build this target.
# At least C++ 11 is required for the AWS SDK for C++.
set(CMAKE_CXX_STANDARD 11)# Use the MSVC variable to determine if this is a Windows build.
set(WINDOWS_BUILD ${MSVC})
if (WINDOWS_BUILD) # Set the location where CMake can find the installed
libraries for the AWS SDK.
string(REPLACE ";" "/aws-cpp-sdk-all;" SYSTEM_MODULE_PATH"${CMAKE_SYSTEM_PREFIX_PATH}/aws-cpp-sdk-all")list(APPEND CMAKE_PREFIX_PATH ${SYSTEM_MODULE_PATH})
endif ()# Find the AWS SDK for C++ package.
find_package(AWSSDK REQUIRED COMPONENTS ${SERVICE_COMPONENTS})
if (WINDOWS_BUILD AND AWSSDK_INSTALL_AS_SHARED_LIBS)# Copy relevant AWS SDK for C++ libraries into the current binary directoryfor running and debugging.
# set(BIN_SUB_DIR "/Debug") # If you are building from the command line, you
may need to uncomment this# and set the proper subdirectory to the
executables' location.
AWSSDK_CPY_DYN_LIBS(SERVICE_COMPONENTS ""${CMAKE_CURRENT_BINARY_DIR}${BIN_SUB_DIR})
endif ()
add_executable(${PROJECT_NAME}
hello_cognito.cpp)
target_link_libraries(${PROJECT_NAME}${AWSSDK_LINK_LIBRARIES})

hello_cognito.cpp ソースファイルのコード。

基礎

125

Amazon Cognito

開発者ガイド#include <aws/core/Aws.h>#include <aws/cognito-idp/CognitoIdentityProviderClient.h>#include <aws/cognito-idp/model/ListUserPoolsRequest.h>#include <iostream>/** A "Hello Cognito" starter application which initializes an Amazon Cognito
client and lists the Amazon Cognito* user pools.
** main function** Usage: 'hello_cognito'**/
int main(int argc, char **argv) {Aws::SDKOptions options;// Optionally change the log level for debugging.
//
options.loggingOptions.logLevel = Utils::Logging::LogLevel::Debug;
Aws::InitAPI(options); // Should only be called once.
int result = 0;{
Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
cognitoClient(clientConfig);
Aws::String nextToken; // Used for pagination.
std::vector<Aws::String> userPools;
do {Aws::CognitoIdentityProvider::Model::ListUserPoolsRequest
listUserPoolsRequest;
if (!nextToken.empty()) {listUserPoolsRequest.SetNextToken(nextToken);}
Aws::CognitoIdentityProvider::Model::ListUserPoolsOutcome
listUserPoolsOutcome =cognitoClient.ListUserPools(listUserPoolsRequest);

基礎

126

Amazon Cognito

開発者ガイドif (listUserPoolsOutcome.IsSuccess()) {for (auto &userPool:listUserPoolsOutcome.GetResult().GetUserPools()) {userPools.push_back(userPool.GetName());}
nextToken = listUserPoolsOutcome.GetResult().GetNextToken();} else {std::cerr << "ListUserPools error: " <<listUserPoolsOutcome.GetError().GetMessage() << std::endl;
result = 1;
break;}} while (!nextToken.empty());
std::cout << userPools.size() << " user pools found." << std::endl;
for (auto &userPool: userPools) {std::cout << "user pool: " << userPool << std::endl;}}
Aws::ShutdownAPI(options); // Should only be called once.
return result;}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for C++ API
Go
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

127

Amazon Cognito

開発者ガイドpackage main
import ("context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws""github.com/aws/aws-sdk-go-v2/config""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types")// main uses the AWS SDK for Go V2 to create an Amazon Simple Notification
Service// (Amazon SNS) client and list the topics in your account.
// This example uses the default settings specified in your shared credentials// and config files.
func main() {sdkConfig, err := config.LoadDefaultConfig(context.TODO())
if err != nil {fmt.Println("Couldn't load default configuration. Have you set up your AWS
account?")
fmt.Println(err)
return}cognitoClient := cognitoidentityprovider.NewFromConfig(sdkConfig)
fmt.Println("Let's list the user pools for your account.")
var pools []types.UserPoolDescriptionType
paginator := cognitoidentityprovider.NewListUserPoolsPaginator(
cognitoClient, &cognitoidentityprovider.ListUserPoolsInput{MaxResults:
aws.Int32(10)})for paginator.HasMorePages() {output, err := paginator.NextPage(context.TODO())
if err != nil {log.Printf("Couldn't get user pools. Here's why: %v\n", err)
} else {pools = append(pools, output.UserPools...)}}if len(pools) == 0 {fmt.Println("You don't have any user pools!")

基礎

128

Amazon Cognito

開発者ガイド} else {for _, pool := range pools {fmt.Printf("\t%v: %v\n", *pool.Name, *pool.Id)}}}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Go API
Java
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html
*/
基礎

129

Amazon Cognito

開発者ガイドpublic class ListUserPools {public static void main(String[] args) {CognitoIdentityProviderClient cognitoClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();listAllUserPools(cognitoClient);
cognitoClient.close();}public static void listAllUserPools(CognitoIdentityProviderClient
cognitoClient) {try {ListUserPoolsRequest request = ListUserPoolsRequest.builder().maxResults(10).build();ListUserPoolsResponse response =
cognitoClient.listUserPools(request);
response.userPools().forEach(userpool -> {System.out.println("User pool " + userpool.name() + ", User ID "+ userpool.id());});} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Java 2.x API

基礎

130

Amazon Cognito

開発者ガイドJavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import {paginateListUserPools,
CognitoIdentityProviderClient,} from "@aws-sdk/client-cognito-identity-provider";const client = new CognitoIdentityProviderClient({});
export const helloCognito = async () => {const paginator = paginateListUserPools({ client }, {});
const userPoolNames = [];for await (const page of paginator) {const names = page.UserPools.map((pool) => pool.Name);
userPoolNames.push(...names);}
console.log("User pool names: ");console.log(userPoolNames.join("\n"));return userPoolNames;};• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for JavaScript API

基礎

131

Amazon Cognito

開発者ガイドPythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import boto3# Create a Cognito Identity Provider client
cognitoidp = boto3.client("cognito-idp")# Initialize a paginator for the list_user_pools operation
paginator = cognitoidp.get_paginator("list_user_pools")# Create a PageIterator from the paginator
page_iterator = paginator.paginate(MaxResults=10)# Initialize variables for pagination
user_pools = []# Handle pagination
for page in page_iterator:
user_pools.extend(page.get("UserPools", []))# Print the list of user pools
print("User Pools for the account:")
if user_pools:
for pool in user_pools:
print(f"Name: {pool['Name']}, ID: {pool['Id']}")
else:
print("No user pools found.")• API 詳細については、「 for Python (Boto3) リファレンスListUserPools」の「」を参照してください。 AWS SDK API
基礎

132

Amazon Cognito

開発者ガイドRuby
SDK Ruby 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

require 'aws-sdk-cognitoidentityprovider'require 'logger'# CognitoManager is a class responsible for managing AWS Cognito operations# such as listing all user pools in the current AWS account.
class CognitoManager
def initialize(client)@client = client@logger = Logger.new($stdout)end# Lists and prints all user pools associated with the AWS account.
def list_user_pools
paginator = @client.list_user_pools(max_results: 10)
user_pools = []paginator.each_page do |page|
user_pools.concat(page.user_pools)
end
if user_pools.empty?
@logger.info('No Cognito user pools found.')else
user_pools.each do |user_pool|@logger.info("User pool ID: #{user_pool.id}")@logger.info("User pool name: #{user_pool.name}")@logger.info("User pool status: #{user_pool.status}")@logger.info('---')
end
end
end
end
基礎

133

Amazon Cognito

開発者ガイドif $PROGRAM_NAME == __FILE__
cognito_client = Aws::CognitoIdentityProvider::Client.new
manager = CognitoManager.new(cognito_client)manager.list_user_poolsend• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Ruby API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

を使用した Amazon Cognito ID プロバイダーのアクション AWS SDKs
次のコード例は、 を使用して個々の Amazon Cognito ID プロバイダーアクションを実行する方法を示しています AWS SDKs。各例には GitHub、コードの設定と実行の手順を示す へのリンクが含まれています。
これらの抜粋は Amazon Cognito ID プロバイダーを呼び出しAPI、コンテキスト内で実行する必要がある大規模なプログラムからのコード抜粋です。アクションは を使用した Amazon Cognito ID プロ
バイダーのシナリオ AWS SDKs のコンテキスト内で確認できます。
以下の例には、最も一般的に使用されるアクションのみ含まれています。詳細なリストについては、Amazon Cognito ID プロバイダーAPIリファレンス」を参照してください。
例• または AdminCreateUser で を使用する AWS SDK CLI• または AdminGetUserAWS SDKで を使用する CLI• または AdminInitiateAuthAWS SDKで を使用する CLI• または AdminRespondToAuthChallengeAWS SDKで を使用する CLI• または AdminSetUserPasswordAWS SDKで を使用する CLI• または AssociateSoftwareTokenAWS SDKで を使用する CLI• または ConfirmDevice で を使用する AWS SDK CLI• または ConfirmForgotPasswordAWS SDKで を使用する CLI
基礎134

Amazon Cognito

開発者ガイド• または ConfirmSignUpAWS SDKで を使用する CLI• または CreateUserPoolAWS SDKで を使用する CLI• または CreateUserPoolClientAWS SDKで を使用する CLI• または DeleteUserAWS SDKで を使用する CLI• または ForgotPasswordで を使用する AWS SDK CLI• または InitiateAuthAWS SDKで を使用する CLI• または ListUserPoolsAWS SDKで を使用する CLI• または ListUsersで を使用する AWS SDK CLI• または ResendConfirmationCode で を使用する AWS SDK CLI• または RespondToAuthChallengeAWS SDKで を使用する CLI• または SignUp で を使用する AWS SDK CLI• または UpdateUserPoolAWS SDKで を使用する CLI• または VerifySoftwareToken で を使用する AWS SDK CLIまたは AdminCreateUser で を使用する AWS SDK CLI
以下のコード例は、AdminCreateUser の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビティデータを書き込む
CLI
AWS CLI
ユーザーを作成するには次のadmin-create-user例では、指定された設定の E メールアドレスと電話番号を持つユーザーを作成します。
aws cognito-idp admin-create-user \--user-pool-id us-west-2_aaaaaaaaa \--username diego \基礎

135

Amazon Cognito

開発者ガイド--user-attributes Name=email,Value=diego@example.com
Name=phone_number,Value="+15555551212" \--message-action SUPPRESS

出力:{"User": {"Username": "diego","Attributes": [{"Name": "sub","Value": "7325c1de-b05b-4f84-b321-9adc6e61f4a2"},{"Name": "phone_number","Value": "+15555551212"},{"Name": "email","Value": "diego@example.com"}],"UserCreateDate": 1548099495.428,"UserLastModifiedDate": 1548099495.428,"Enabled": true,"UserStatus": "FORCE_CHANGE_PASSWORD"}}• API 詳細については、「 コマンドリファレンスAdminCreateUser」の「」を参照してくだ
さい。 AWS CLIGoSDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

136

Amazon Cognito

開発者ガイドtype CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// AdminCreateUser uses administrator credentials to add a user to a user pool.
This method leaves the user// in a state that requires they enter a new password next time they sign in.
func (actor CognitoActions) AdminCreateUser(userPoolId string, userName string,userEmail string) error {_, err := actor.CognitoClient.AdminCreateUser(context.TODO(),&cognitoidentityprovider.AdminCreateUserInput{
UserPoolId:
aws.String(userPoolId),
Username:
aws.String(userName),
MessageAction: types.MessageActionTypeSuppress,
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value:
aws.String(userEmail)}},})if err != nil {var userExists *types.UsernameExistsException
if errors.As(err, &userExists) {log.Printf("User %v already exists in the user pool.", userName)
err = nil
} else {log.Printf("Couldn't create user %v. Here's why: %v\n", userName, err)}}
return err}• API 詳細については、「 リファレンスAdminCreateUser」の「」を参照してください。
AWS SDK for Go API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

基礎

137

Amazon Cognito

開発者ガイドまたは AdminGetUserAWS SDKで を使用する CLI
以下のコード例は、AdminGetUser の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Get the specified user from an Amazon Cognito user pool withadministrator access.
/// </summary>/// <param name="userName">The name of the user.</param>/// <param name="poolId">The Id of the Amazon Cognito user pool.</param>/// <returns>Async task.</returns>
public async Task<UserStatusType> GetAdminUserAsync(string userName, string
poolId){AdminGetUserRequest userRequest = new AdminGetUserRequest{
Username = userName,
UserPoolId = poolId,};var response = await _cognitoService.AdminGetUserAsync(userRequest);
Console.WriteLine($"User status {response.UserStatus}");return response.UserStatus;
}

基礎

138

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスAdminGetUser」の「」を参照してください。 AWSSDK for .NET APIC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::AdminGetUserRequest request;
request.SetUsername(userName);request.SetUserPoolId(userPoolID);
Aws::CognitoIdentityProvider::Model::AdminGetUserOutcome outcome =client.AdminGetUser(request);
if (outcome.IsSuccess()) {std::cout << "The status for " << userName << " is " <<Aws::CognitoIdentityProvider::Model::UserStatusTypeMapper::GetNameForUserStatusType(outcome.GetResult().GetUserStatus()) << std::endl;
std::cout << "Enabled is " << outcome.GetResult().GetEnabled() <<std::endl;}
else {
std::cerr << "Error with CognitoIdentityProvider::AdminGetUser. "<< outcome.GetError().GetMessage()<< std::endl;
基礎

139

Amazon Cognito

開発者ガイド}• API 詳細については、「 リファレンスAdminGetUser」の「」を参照してください。 AWSSDK for C++ API
CLIAWS CLI
ユーザーを取得するには
この例では、ユーザー名 jane@example.com に関する情報を取得します。
コマンド:
aws cognito-idp admin-get-user --user-pool-id us-west-2_aaaaaaaaa -username jane@example.com

出力:{"Username": "4320de44-2322-4620-999b-5e2e1c8df013","Enabled": true,"UserStatus": "FORCE_CHANGE_PASSWORD","UserCreateDate": 1548108509.537,"UserAttributes": [{"Name": "sub","Value": "4320de44-2322-4620-999b-5e2e1c8df013"},{"Name": "email_verified","Value": "true"},{"Name": "phone_number_verified","Value": "true"},{"Name": "phone_number","Value": "+01115551212"
基礎

140

Amazon Cognito

開発者ガイド},{"Name": "email","Value": "jane@example.com"}],"UserLastModifiedDate": 1548108509.537}• API 詳細については、「 コマンドリファレンスAdminGetUser」の「」を参照してください。 AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

public static void getAdminUser(CognitoIdentityProviderClient
identityProviderClient, String userName,
String poolId) {try {AdminGetUserRequest userRequest = AdminGetUserRequest.builder().username(userName).userPoolId(poolId).build();AdminGetUserResponse response =identityProviderClient.adminGetUser(userRequest);
System.out.println("User status " + response.userStatusAsString());} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}

基礎

141

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスAdminGetUser」の「」を参照してください。 AWSSDK for Java 2.x API
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const adminGetUser = ({ userPoolId, username }) => {const client = new CognitoIdentityProviderClient({});
const command = new AdminGetUserCommand({
UserPoolId: userPoolId,
Username: username,});return client.send(command);};• API 詳細については、「 リファレンスAdminGetUser」の「」を参照してください。 AWSSDK for JavaScript API
KotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun getAdminUser(
基礎

142

Amazon Cognito

開発者ガイドuserNameVal: String?,
poolIdVal: String?,) {val userRequest =AdminGetUserRequest {username = userNameVal
userPoolId = poolIdVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val response = identityProviderClient.adminGetUser(userRequest)
println("User status ${response.userStatus}")}}• API 詳細については、Kotlin リファレンス AdminGetUserの「」の「」を参照してください。 AWS SDK API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the user
pool.
基礎

143

Amazon Cognito

開発者ガイド:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef sign_up_user(self, user_name, password, user_email):"""Signs up a new user with Amazon Cognito. This action prompts Amazon
Cognitoto send an email to the specified email address. The email contains acode thatcan be used to confirm the user.
When the user already exists, the user status is checked to determine
whetherthe user has been confirmed.
:param user_name: The user name that identifies the new user.
:param password: The password for the new user.
:param user_email: The email address for the new user.
:return: True when the user is already confirmed with Amazon Cognito.
Otherwise, false.
"""try:kwargs = {"ClientId": self.client_id,"Username": user_name,"Password": password,"UserAttributes": [{"Name": "email", "Value": user_email}],}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)response = self.cognito_idp_client.sign_up(**kwargs)
confirmed = response["UserConfirmed"]
except ClientError as err:
if err.response["Error"]["Code"] == "UsernameExistsException":
response = self.cognito_idp_client.admin_get_user(
UserPoolId=self.user_pool_id, Username=user_name)logger.warning(

基礎

144

Amazon Cognito

開発者ガイド"User %s exists and is %s.", user_name,response["UserStatus"])
confirmed = response["UserStatus"] == "CONFIRMED"
else:
logger.error("Couldn't sign up %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],)raise
return confirmed• API 詳細については、「 for Python (Boto3) リファレンスAdminGetUser」の「」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または AdminInitiateAuthAWS SDKで を使用する CLI
以下のコード例は、AdminInitiateAuth の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

145

Amazon Cognito

開発者ガイド/// <summary>/// Initiate an admin auth request.
/// </summary>/// <param name="clientId">The client ID to use.</param>/// <param name="userPoolId">The ID of the user pool.</param>/// <param name="userName">The username to authenticate.</param>/// <param name="password">The user's password.</param>/// <returns>The session to use in challenge-response.</returns>
public async Task<string> AdminInitiateAuthAsync(string clientId, string
userPoolId, string userName, string password){
var authParameters = new Dictionary<string, string>();authParameters.Add("USERNAME", userName);
authParameters.Add("PASSWORD", password);var request = new AdminInitiateAuthRequest{
ClientId = clientId,
UserPoolId = userPoolId,
AuthParameters = authParameters,
AuthFlow = AuthFlowType.ADMIN_USER_PASSWORD_AUTH,};var response = await _cognitoService.AdminInitiateAuthAsync(request);
return response.Session;}• API 詳細については、「 リファレンスAdminInitiateAuth」の「」を参照してください。
AWS SDK for .NET APIC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

146

Amazon Cognito

開発者ガイドAws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::AdminInitiateAuthRequest request;
request.SetClientId(clientID);
request.SetUserPoolId(userPoolID);
request.AddAuthParameters("USERNAME", userName);request.AddAuthParameters("PASSWORD", password);request.SetAuthFlow(
Aws::CognitoIdentityProvider::Model::AuthFlowType::ADMIN_USER_PASSWORD_AUTH);

Aws::CognitoIdentityProvider::Model::AdminInitiateAuthOutcome outcome =client.AdminInitiateAuth(request);
if (outcome.IsSuccess()) {std::cout << "Call to AdminInitiateAuth was successful." << std::endl;
sessionResult = outcome.GetResult().GetSession();}else {
std::cerr << "Error with CognitoIdentityProvider::AdminInitiateAuth. "<< outcome.GetError().GetMessage()<< std::endl;}• API 詳細については、「 リファレンスAdminInitiateAuth」の「」を参照してください。
AWS SDK for C++ API
CLIAWS CLI
認証を開始するには
この例では、ユーザー名 jane@example.com の ADMIN_NO_SRP_AUTH フローを使用して認証を開始します。
基礎

147

Amazon Cognito

開発者ガイドクライアントでは、サーバーベースの認証 (ADMIN_NO_SRP_AUTH) APIのサインインが有効になっている必要があります。
戻り値のセッション情報を使用して、 admin-respond-to-auth-challenge を呼び出します。
コマンド:
aws cognito-idp admin-initiate-auth --user-pool-id us-west-2_aaaaaaaaa -client-id 3n4b5urk1ft4fl3mg5e62d9ado --auth-flow ADMIN_NO_SRP_AUTH --authparameters USERNAME=jane@example.com,PASSWORD=password

出力:{"ChallengeName": "NEW_PASSWORD_REQUIRED","Session": "SESSION","ChallengeParameters": {"USER_ID_FOR_SRP": "84514837-dcbc-4af1-abff-f3c109334894","requiredAttributes": "[]","userAttributes": "{\"email_verified\":\"true\",\"phone_number_verified\":\"true\",\"phone_number\":\"+01xxx5550100\",\"email\":\"jane@example.com\"}"}}• API 詳細については、「 コマンドリファレンスAdminInitiateAuth」の「」を参照してください。 AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

public static AdminInitiateAuthResponse
initiateAuth(CognitoIdentityProviderClient identityProviderClient,
基礎

148

Amazon Cognito

開発者ガイドString clientId, String userName, String password, String userPoolId){
try {Map<String, String> authParameters = new HashMap<>();
authParameters.put("USERNAME", userName);
authParameters.put("PASSWORD", password);
AdminInitiateAuthRequest authRequest =AdminInitiateAuthRequest.builder().clientId(clientId).userPoolId(userPoolId).authParameters(authParameters).authFlow(AuthFlowType.ADMIN_USER_PASSWORD_AUTH).build();AdminInitiateAuthResponse response =identityProviderClient.adminInitiateAuth(authRequest);
System.out.println("Result Challenge is : " +response.challengeName());
return response;} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}return null;}• API 詳細については、「 リファレンスAdminInitiateAuth」の「」を参照してください。
AWS SDK for Java 2.x API
JavaScript
SDK JavaScript (v3) 用のNoteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

149

Amazon Cognito

開発者ガイドconst adminInitiateAuth = ({ clientId, userPoolId, username, password }) => {const client = new CognitoIdentityProviderClient({});
const command = new AdminInitiateAuthCommand({
ClientId: clientId,
UserPoolId: userPoolId,
AuthFlow: AuthFlowType.ADMIN_USER_PASSWORD_AUTH,
AuthParameters: { USERNAME: username, PASSWORD: password },});return client.send(command);};• API 詳細については、「 リファレンスAdminInitiateAuth」の「」を参照してください。
AWS SDK for JavaScript API
KotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun checkAuthMethod(clientIdVal: String,userNameVal: String,
passwordVal: String,userPoolIdVal: String,): AdminInitiateAuthResponse {val authParas = mutableMapOf<String, String>()authParas["USERNAME"] = userNameVal
authParas["PASSWORD"] = passwordVal
val authRequest =AdminInitiateAuthRequest {clientId = clientIdVal
userPoolId = userPoolIdVal
基礎

150

Amazon Cognito

開発者ガイドauthParameters = authParas
authFlow = AuthFlowType.AdminUserPasswordAuth}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val response = identityProviderClient.adminInitiateAuth(authRequest)
println("Result Challenge is ${response.challengeName}")return response}}• API 詳細については、Kotlin リファレンス AdminInitiateAuthの「」の「」を参照してください。 AWS SDK API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
基礎

151

Amazon Cognito

開発者ガイドself.client_id = client_id
self.client_secret = client_secretdef start_sign_in(self, user_name, password):"""
Starts the sign-in process for a user by using administrator credentials.
This method of signing in is appropriate for code running on a secure
server.
If the user pool is configured to require MFA and this is the first signin
for the user, Amazon Cognito returns a challenge response to set up an
MFA application. When this occurs, this function gets an MFA secret from
Amazon Cognito and returns it to the caller.
:param user_name: The name of the user to sign in.
:param password: The user's password.
:return: The result of the sign-in attempt. When sign-in is successful,
thisreturns an access token that can be used to get AWS credentials.
Otherwise,
Amazon Cognito returns a challenge to set up an MFA application,
or a challenge to enter an MFA code from a registered MFAapplication.
"""try:
kwargs = {"UserPoolId": self.user_pool_id,"ClientId": self.client_id,"AuthFlow": "ADMIN_USER_PASSWORD_AUTH","AuthParameters": {"USERNAME": user_name, "PASSWORD": password},}
if self.client_secret is not None:kwargs["AuthParameters"]["SECRET_HASH"] =self._secret_hash(user_name)response = self.cognito_idp_client.admin_initiate_auth(**kwargs)
challenge_name = response.get("ChallengeName", None)
if challenge_name == "MFA_SETUP":
if ("SOFTWARE_TOKEN_MFA"
in response["ChallengeParameters"]["MFAS_CAN_SETUP"]):
response.update(self.get_mfa_secret(response["Session"]))

基礎

152

Amazon Cognito

開発者ガイドelse:raise RuntimeError("The user pool requires MFA setup, but the user pool is
not ""configured for TOTP MFA. This example requires TOTP
MFA.")
except ClientError as err:
logger.error("Couldn't start sign in for %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
response.pop("ResponseMetadata", None)
return response• API 詳細については、「 for Python (Boto3) リファレンスAdminInitiateAuth」の「」を参照
してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または AdminRespondToAuthChallengeAWS SDKで を使用する CLI
以下のコード例は、AdminRespondToAuthChallenge の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA

基礎

153

Amazon Cognito

開発者ガイド.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Respond to an admin authentication challenge.
/// </summary>/// <param name="userName">The name of the user.</param>/// <param name="clientId">The client ID.</param>/// <param name="mfaCode">The multi-factor authentication code.</param>/// <param name="session">The current application session.</param>/// <param name="clientId">The user pool ID.</param>/// <returns>The result of the authentication response.</returns>
public async Task<AuthenticationResultType> AdminRespondToAuthChallengeAsync(
string userName,string clientId,
string mfaCode,string session,
string userPoolId){
Console.WriteLine("SOFTWARE_TOKEN_MFA challenge is generated");var challengeResponses = new Dictionary<string, string>();challengeResponses.Add("USERNAME", userName);challengeResponses.Add("SOFTWARE_TOKEN_MFA_CODE", mfaCode);var respondToAuthChallengeRequest = new
AdminRespondToAuthChallengeRequest{
ChallengeName = ChallengeNameType.SOFTWARE_TOKEN_MFA,
ClientId = clientId,
ChallengeResponses = challengeResponses,
Session = session,
UserPoolId = userPoolId,
};

基礎

154

Amazon Cognito

開発者ガイドvar response = await_cognitoService.AdminRespondToAuthChallengeAsync(respondToAuthChallengeRequest);
Console.WriteLine($"Response to Authentication{response.AuthenticationResult.TokenType}");return response.AuthenticationResult;}• API 詳細については、「 リファレンスAdminRespondToAuthChallenge」の「」を参照してください。 AWS SDK for .NET APIC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::AdminRespondToAuthChallengeRequest
request;request.AddChallengeResponses("USERNAME", userName);request.AddChallengeResponses("SOFTWARE_TOKEN_MFA_CODE", mfaCode);request.SetChallengeName(
Aws::CognitoIdentityProvider::Model::ChallengeNameType::SOFTWARE_TOKEN_MFA);
request.SetClientId(clientID);
request.SetUserPoolId(userPoolID);
request.SetSession(session);

基礎

155

Amazon Cognito

開発者ガイドAws::CognitoIdentityProvider::Model::AdminRespondToAuthChallengeOutcome
outcome =client.AdminRespondToAuthChallenge(request);
if (outcome.IsSuccess()) {std::cout << "Here is the response to the challenge.\n" <<outcome.GetResult().GetAuthenticationResult().Jsonize().View().WriteReadable()<< std::endl;
accessToken =outcome.GetResult().GetAuthenticationResult().GetAccessToken();}else {
std::cerr << "Error with
CognitoIdentityProvider::AdminRespondToAuthChallenge. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}• API 詳細については、「 リファレンスAdminRespondToAuthChallenge」の「」を参照してください。 AWS SDK for C++ API
Java
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

// Respond to an authentication challenge.
public static void adminRespondToAuthChallenge(CognitoIdentityProviderClient
identityProviderClient,
String userName, String clientId, String mfaCode, String session) {System.out.println("SOFTWARE_TOKEN_MFA challenge is generated");Map<String, String> challengeResponses = new HashMap<>();
基礎

156

Amazon Cognito

開発者ガイドchallengeResponses.put("USERNAME", userName);challengeResponses.put("SOFTWARE_TOKEN_MFA_CODE", mfaCode);
AdminRespondToAuthChallengeRequest respondToAuthChallengeRequest =AdminRespondToAuthChallengeRequest.builder().challengeName(ChallengeNameType.SOFTWARE_TOKEN_MFA).clientId(clientId).challengeResponses(challengeResponses).session(session).build();AdminRespondToAuthChallengeResponse respondToAuthChallengeResult =identityProviderClient.adminRespondToAuthChallenge(respondToAuthChallengeRequest);
System.out.println("respondToAuthChallengeResult.getAuthenticationResult()"+ respondToAuthChallengeResult.authenticationResult());}• API 詳細については、「 リファレンスAdminRespondToAuthChallenge」の「」を参照してください。 AWS SDK for Java 2.x API
JavaScript
SDK JavaScript (v3) 用のNoteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const adminRespondToAuthChallenge = ({userPoolId,clientId,
username,
totp,
session,}) => {
基礎

157

Amazon Cognito

開発者ガイドconst client = new CognitoIdentityProviderClient({});
const command = new AdminRespondToAuthChallengeCommand({
ChallengeName: ChallengeNameType.SOFTWARE_TOKEN_MFA,
ChallengeResponses: {SOFTWARE_TOKEN_MFA_CODE: totp,
USERNAME: username,},
ClientId: clientId,
UserPoolId: userPoolId,
Session: session,});
return client.send(command);};• API 詳細については、「 リファレンスAdminRespondToAuthChallenge」の「」を参照してください。 AWS SDK for JavaScript API
KotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

// Respond to an authentication challenge.
suspend fun adminRespondToAuthChallenge(
userName: String,clientIdVal: String?,
mfaCode: String,sessionVal: String?,) {println("SOFTWARE_TOKEN_MFA challenge is generated")val challengeResponsesOb = mutableMapOf<String, String>()challengeResponsesOb["USERNAME"] = userName
challengeResponsesOb["SOFTWARE_TOKEN_MFA_CODE"] = mfaCode

基礎

158

Amazon Cognito

開発者ガイドval adminRespondToAuthChallengeRequest =AdminRespondToAuthChallengeRequest {challengeName = ChallengeNameType.SoftwareTokenMfa
clientId = clientIdVal
challengeResponses = challengeResponsesOb
session = sessionVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val respondToAuthChallengeResult =identityProviderClient.adminRespondToAuthChallenge(adminRespondToAuthChallengeRequest)
println("respondToAuthChallengeResult.getAuthenticationResult()${respondToAuthChallengeResult.authenticationResult}")}}• API 詳細については、AWS SDKKotlin APIリファレンスのAdminRespondToAuthChallenge「」の「」を参照してください。
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

関連するMFAアプリケーションによって生成されたコードを指定して、MFAチャレンジに応答します。
class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):
"""

基礎

159

Amazon Cognito

開発者ガイド:param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef respond_to_mfa_challenge(self, user_name, session, mfa_code):"""
Responds to a challenge for an MFA code. This completes the second stepofa two-factor sign-in. When sign-in is successful, it returns an access
token
that can be used to get AWS credentials from Amazon Cognito.
:param user_name: The name of the user who is signing in.
:param session: Session information returned from a previous call to
initiate
authentication.
:param mfa_code: A code generated by the associated MFA application.
:return: The result of the authentication. When successful, this contains
anaccess token for the user.
"""try:kwargs = {"UserPoolId": self.user_pool_id,"ClientId": self.client_id,"ChallengeName": "SOFTWARE_TOKEN_MFA","Session": session,"ChallengeResponses": {"USERNAME": user_name,"SOFTWARE_TOKEN_MFA_CODE": mfa_code,},}
if self.client_secret is not None:kwargs["ChallengeResponses"]["SECRET_HASH"] = self._secret_hash(user_name基礎

160

Amazon Cognito

開発者ガイド)response =self.cognito_idp_client.admin_respond_to_auth_challenge(**kwargs)
auth_result = response["AuthenticationResult"]
except ClientError as err:
if err.response["Error"]["Code"] == "ExpiredCodeException":logger.warning("Your MFA code has expired or has been used already. Youmight have ""to wait a few seconds until your app shows you a new code.")
else:
logger.error("Couldn't respond to mfa challenge for %s. Here's why: %s:%s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return auth_result• API 詳細については、「 for Python (Boto3) リファレン
スAdminRespondToAuthChallenge」の「」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または AdminSetUserPasswordAWS SDKで を使用する CLI
次の例は、AdminSetUserPassword を使用する方法を説明しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビティデータを書き
込む
基礎

161

Amazon Cognito

開発者ガイドGo
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// AdminSetUserPassword uses administrator credentials to set a password for auser without requiring a// temporary password.
func (actor CognitoActions) AdminSetUserPassword(userPoolId string, userName
string, password string) error {_, err := actor.CognitoClient.AdminSetUserPassword(context.TODO(),&cognitoidentityprovider.AdminSetUserPasswordInput{
Password:
aws.String(password),
UserPoolId: aws.String(userPoolId),
Username:
aws.String(userName),
Permanent: true,})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't set password for user %v. Here's why: %v\n", userName,err)}}return err
}

基礎

162

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスAdminSetUserPassword」の「」を参照してください。 AWS SDK for Go API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または AssociateSoftwareTokenAWS SDKで を使用する CLI
以下のコード例は、AssociateSoftwareToken の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Get an MFA token to authenticate the user with the authenticator.
/// </summary>/// <param name="session">The session name.</param>/// <returns>The session name.</returns>
public async Task<string> AssociateSoftwareTokenAsync(string session){
var softwareTokenRequest = new AssociateSoftwareTokenRequest{
Session = session,};
var tokenResponse = await_cognitoService.AssociateSoftwareTokenAsync(softwareTokenRequest);
基礎

163

Amazon Cognito

開発者ガイドvar secretCode = tokenResponse.SecretCode;Console.WriteLine($"Use the following secret code to set up theauthenticator: {secretCode}");return tokenResponse.Session;}• API 詳細については、「 リファレンスAssociateSoftwareToken」の「」を参照してください。 AWS SDK for .NET APIC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::AssociateSoftwareTokenRequest
request;request.SetSession(session);
Aws::CognitoIdentityProvider::Model::AssociateSoftwareTokenOutcome
outcome =client.AssociateSoftwareToken(request);
if (outcome.IsSuccess()) {std::cout

基礎

164

Amazon Cognito

開発者ガイド<< "Enter this setup key into an authenticator app, forexample Google Authenticator."<< std::endl;
std::cout << "Setup key: " << outcome.GetResult().GetSecretCode()<< std::endl;#ifdef USING_QR
printAsterisksLine();std::cout << "\nOr scan the QR code in the file '" << QR_CODE_PATH <<"."<< std::endl;
saveQRCode(std::string("otpauth://totp/") + userName + "?secret=" +outcome.GetResult().GetSecretCode());#endif // USING_QR
session = outcome.GetResult().GetSession();}else {
std::cerr << "Error with
CognitoIdentityProvider::AssociateSoftwareToken. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}• API 詳細については、「 リファレンスAssociateSoftwareToken」の「」を参照してください。 AWS SDK for C++ API
Java
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

public static String getSecretForAppMFA(CognitoIdentityProviderClient
identityProviderClient, String session) {

基礎

165

Amazon Cognito

開発者ガイドAssociateSoftwareTokenRequest softwareTokenRequest =AssociateSoftwareTokenRequest.builder().session(session).build();AssociateSoftwareTokenResponse tokenResponse = identityProviderClient.associateSoftwareToken(softwareTokenRequest);
String secretCode = tokenResponse.secretCode();System.out.println("Enter this token into Google Authenticator");
System.out.println(secretCode);
return tokenResponse.session();}• API 詳細については、「 リファレンスAssociateSoftwareToken」の「」を参照してください。 AWS SDK for Java 2.x API
JavaScript
SDK JavaScript (v3) 用のNoteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const associateSoftwareToken = (session) => {const client = new CognitoIdentityProviderClient({});
const command = new AssociateSoftwareTokenCommand({Session: session,});
return client.send(command);};• API 詳細については、「 リファレンスAssociateSoftwareToken」の「」を参照してください。 AWS SDK for JavaScript API

基礎

166

Amazon Cognito

開発者ガイドKotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun getSecretForAppMFA(sessionVal: String?): String? {val softwareTokenRequest =AssociateSoftwareTokenRequest {session = sessionVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val tokenResponse =identityProviderClient.associateSoftwareToken(softwareTokenRequest)
val secretCode = tokenResponse.secretCode
println("Enter this token into Google Authenticator")
println(secretCode)return tokenResponse.session}}• API 詳細については、Kotlin リファレンス AssociateSoftwareTokenの「」の「」を参照してください。 AWS SDK API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

167

Amazon Cognito

開発者ガイドclass CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef get_mfa_secret(self, session):"""
Gets a token that can be used to associate an MFA application with theuser.
:param session: Session information returned from a previous call to
initiate
authentication.
:return: An MFA token that can be used to set up an MFA application.
"""try:
response =self.cognito_idp_client.associate_software_token(Session=session)
except ClientError as err:
logger.error("Couldn't get MFA secret. Here's why: %s: %s",
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
response.pop("ResponseMetadata", None)
return response

基礎

168

Amazon Cognito

開発者ガイド• API 詳細については、「 for Python (Boto3) リファレンスAssociateSoftwareToken」の「」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ConfirmDevice で を使用する AWS SDK CLI
以下のコード例は、ConfirmDevice の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Initiates and confirms tracking of the device.
/// </summary>/// <param name="accessToken">The user's access token.</param>/// <param name="deviceKey">The key of the device from Amazon Cognito.</param>/// <param name="deviceName">The device name.</param>/// <returns></returns>
public async Task<bool> ConfirmDeviceAsync(string accessToken, string
deviceKey, string deviceName){var request = new ConfirmDeviceRequest
基礎

169

Amazon Cognito

開発者ガイド{AccessToken = accessToken,
DeviceKey = deviceKey,
DeviceName = deviceName};var response = await _cognitoService.ConfirmDeviceAsync(request);
return response.UserConfirmationNecessary;}• API 詳細については、「 リファレンスConfirmDevice」の「」を参照してください。 AWSSDK for .NET API
JavaScript
SDK JavaScript (v3) 用のNoteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const confirmDevice = ({ deviceKey, accessToken, passwordVerifier, salt }) => {const client = new CognitoIdentityProviderClient({});
const command = new ConfirmDeviceCommand({
DeviceKey: deviceKey,
AccessToken: accessToken,
DeviceSecretVerifierConfig: {PasswordVerifier: passwordVerifier,Salt: salt,},});
return client.send(command);
};

基礎

170

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスConfirmDevice」の「」を参照してください。 AWSSDK for JavaScript API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef confirm_mfa_device(self,
user_name,device_key,device_group_key,device_password,
access_token,
aws_srp,
):
基礎

171

Amazon Cognito

開発者ガイド"""Confirms an MFA device to be tracked by Amazon Cognito. When a device istracked, its key and password can be used to sign in without requiring a
new
MFA code from the MFA application.
:param user_name: The user that is associated with the device.
:param device_key: The key of the device, returned by Amazon Cognito.
:param device_group_key: The group key of the device, returned by Amazon
Cognito.
:param device_password: The password that is associated with the device.
:param access_token: The user's access token.
:param aws_srp: A class that helps with Secure Remote Password (SRP)
calculations. The scenario associated with this example
uses
the warrant package.
:return: True when the user must confirm the device. Otherwise, False.
When
False, the device is automatically confirmed and tracked.
"""
srp_helper = aws_srp.AWSSRP(
username=user_name,password=device_password,
pool_id="_",
client_id=self.client_id,
client_secret=None,client=self.cognito_idp_client,)
device_and_pw = f"{device_group_key}{device_key}:{device_password}"
device_and_pw_hash = aws_srp.hash_sha256(device_and_pw.encode("utf-8"))salt = aws_srp.pad_hex(aws_srp.get_random(16))
x_value = aws_srp.hex_to_long(aws_srp.hex_hash(salt +device_and_pw_hash))verifier = aws_srp.pad_hex(pow(srp_helper.val_g, x_value,
srp_helper.big_n))device_secret_verifier_config = {"PasswordVerifier": base64.standard_b64encode(
bytearray.fromhex(verifier)).decode("utf-8"),"Salt":
base64.standard_b64encode(bytearray.fromhex(salt)).decode("utf-8"),}try:
response = self.cognito_idp_client.confirm_device(

基礎

172

Amazon Cognito

開発者ガイドAccessToken=access_token,
DeviceKey=device_key,
DeviceSecretVerifierConfig=device_secret_verifier_config,)
user_confirm = response["UserConfirmationNecessary"]
except ClientError as err:
logger.error("Couldn't confirm mfa device %s. Here's why: %s: %s",
device_key,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return user_confirm• API 詳細については、ConfirmDevice「 for AWS SDK Python (Boto3) APIリファレンス」の「」を参照してください。
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ConfirmForgotPasswordAWS SDKで を使用する CLI
以下のコード例は、ConfirmForgotPassword の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Lambda 関数を使用して登録済みのユーザーを自動的に移行する
CLI
AWS CLI
忘れたパスワードを確認するには
この例では、ユーザー名 diego@example.com のパスワードを忘れたことを確認します。
基礎

173

Amazon Cognito

開発者ガイドコマンド:
aws cognito-idp confirm-forgot-password --client-id 3n4b5urk1ft4fl3mg5e62d9ado -username=diego@example.com --password PASSWORD --confirmation-code CONF_CODE• API 詳細については、「 コマンドリファレンスConfirmForgotPassword」の「」を参照してください。 AWS CLIGoSDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// ConfirmForgotPassword confirms a user with a confirmation code and a new
password.
func (actor CognitoActions) ConfirmForgotPassword(clientId string, code string,userName string, password string) error {_, err := actor.CognitoClient.ConfirmForgotPassword(context.TODO(),&cognitoidentityprovider.ConfirmForgotPasswordInput{
ClientId:
aws.String(clientId),
ConfirmationCode: aws.String(code),
Password:
aws.String(password),
Username:
aws.String(userName),})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {基礎

174

Amazon Cognito

開発者ガイドlog.Printf("Couldn't confirm user %v. Here's why: %v", userName, err)}}
return err}• API 詳細については、「 リファレンスConfirmForgotPassword」の「」を参照してください。 AWS SDK for Go API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ConfirmSignUpAWS SDKで を使用する CLI
以下のコード例は、ConfirmSignUp の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Confirm that the user has signed up.
/// </summary>/// <param name="clientId">The Id of this application.</param>/// <param name="code">The confirmation code sent to the user.</param>/// <param name="userName">The username.</param>
基礎

175

Amazon Cognito

開発者ガイド/// <returns>True if successful.</returns>
public async Task<bool> ConfirmSignupAsync(string clientId, string code,
string userName){var signUpRequest = new ConfirmSignUpRequest{
ClientId = clientId,
ConfirmationCode = code,
Username = userName,};var response = await _cognitoService.ConfirmSignUpAsync(signUpRequest);
if (response.HttpStatusCode == HttpStatusCode.OK){
Console.WriteLine($"{userName} was confirmed");return true;}
return false;}• API 詳細については、「 リファレンスConfirmSignUp」の「」を参照してください。 AWSSDK for .NET APIC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
基礎

176

Amazon Cognito

開発者ガイドAws::CognitoIdentityProvider::Model::ConfirmSignUpRequest request;
request.SetClientId(clientID);
request.SetConfirmationCode(confirmationCode);request.SetUsername(userName);
Aws::CognitoIdentityProvider::Model::ConfirmSignUpOutcome outcome =client.ConfirmSignUp(request);
if (outcome.IsSuccess()) {std::cout << "ConfirmSignup was Successful."<< std::endl;}
else {
std::cerr << "Error with CognitoIdentityProvider::ConfirmSignUp. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}• API 詳細については、「 リファレンスConfirmSignUp」の「」を参照してください。 AWSSDK for C++ API
CLIAWS CLI
サインアップを確認するには
この例では、ユーザー名 diego@example.com のサインアップを確認します。
コマンド:
aws cognito-idp confirm-sign-up --client-id 3n4b5urk1ft4fl3mg5e62d9ado -username=diego@example.com --confirmation-code CONF_CODE• API 詳細については、「 コマンドリファレンスConfirmSignUp」の「」を参照してください。 AWS CLI

基礎

177

Amazon Cognito

開発者ガイドJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

public static void confirmSignUp(CognitoIdentityProviderClient
identityProviderClient, String clientId, String code,
String userName) {try {ConfirmSignUpRequest signUpRequest = ConfirmSignUpRequest.builder().clientId(clientId).confirmationCode(code).username(userName).build();identityProviderClient.confirmSignUp(signUpRequest);
System.out.println(userName + " was confirmed");} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}• API 詳細については、「 リファレンスConfirmSignUp」の「」を参照してください。 AWSSDK for Java 2.x API

基礎

178

Amazon Cognito

開発者ガイドJavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const confirmSignUp = ({ clientId, username, code }) => {const client = new CognitoIdentityProviderClient({});
const command = new ConfirmSignUpCommand({
ClientId: clientId,
Username: username,
ConfirmationCode: code,});
return client.send(command);};• API 詳細については、「 リファレンスConfirmSignUp」の「」を参照してください。 AWSSDK for JavaScript API
KotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun confirmSignUp(
clientIdVal: String?,
codeVal: String?,
userNameVal: String?,
基礎

179

Amazon Cognito

開発者ガイド) {val signUpRequest =ConfirmSignUpRequest {clientId = clientIdVal
confirmationCode = codeVal
username = userNameVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->identityProviderClient.confirmSignUp(signUpRequest)
println("$userNameVal was confirmed")}}• API 詳細については、Kotlin リファレンス ConfirmSignUpの「」の「」を参照してください。 AWS SDK API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
基礎

180

Amazon Cognito

開発者ガイド"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef confirm_user_sign_up(self, user_name, confirmation_code):"""
Confirms a previously created user. A user must be confirmed before they
can sign in to Amazon Cognito.
:param user_name: The name of the user to confirm.
:param confirmation_code: The confirmation code sent to the user's
registeredemail address.
:return: True when the confirmation succeeds.
"""try:kwargs = {"ClientId": self.client_id,"Username": user_name,"ConfirmationCode": confirmation_code,}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)self.cognito_idp_client.confirm_sign_up(**kwargs)
except ClientError as err:
logger.error("Couldn't confirm sign up for %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return True

• API 詳細については、ConfirmSignUp「 for AWS SDK Python (Boto3) APIリファレンス」の「」を参照してください。

基礎

181

Amazon Cognito

開発者ガイドデベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または CreateUserPoolAWS SDKで を使用する CLI
以下のコード例は、CreateUserPool の使用方法を示しています。
CLIAWS CLI
最小設定のユーザープールを作成するには
この例では、デフォルト値 MyUserPool を使用して という名前のユーザープールを作成します。必要な属性やアプリケーションクライアントはありません。MFA および アドバンストセ
キュリティは無効になっています。
コマンド:
aws cognito-idp create-user-pool --pool-name MyUserPool

出力:{"UserPool": {"SchemaAttributes": [{"Name": "sub","StringAttributeConstraints": {"MinLength": "1",
"MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": true,"AttributeDataType": "String","Mutable": false},{"Name": "name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"
基礎

182

Amazon Cognito

開発者ガイド},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "given_name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "family_name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "middle_name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "nickname","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"

基礎

183

Amazon Cognito

開発者ガイド},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "preferred_username","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "profile","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "picture","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "website","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"

基礎

184

Amazon Cognito

開発者ガイド},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "email","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"AttributeDataType": "Boolean","DeveloperOnlyAttribute": false,"Required": false,"Name": "email_verified","Mutable": true},{
"Name": "gender","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "birthdate","StringAttributeConstraints": {"MinLength": "10","MaxLength": "10"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String",

基礎

185

Amazon Cognito

開発者ガイド"Mutable": true},{
"Name": "zoneinfo","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "locale","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "phone_number","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"AttributeDataType": "Boolean","DeveloperOnlyAttribute": false,"Required": false,"Name": "phone_number_verified","Mutable": true},{
"Name": "address",

基礎

186

Amazon Cognito

開発者ガイド"StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "updated_at","NumberAttributeConstraints": {"MinValue": "0"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "Number","Mutable": true}],
"MfaConfiguration": "OFF","Name": "MyUserPool","LastModifiedDate": 1547833345.777,"AdminCreateUserConfig": {"UnusedAccountValidityDays": 7,"AllowAdminCreateUserOnly": false},"EmailConfiguration": {},"Policies": {"PasswordPolicy": {"RequireLowercase": true,"RequireSymbols": true,"RequireNumbers": true,"MinimumLength": 8,"RequireUppercase": true}},
"CreationDate": 1547833345.777,"EstimatedNumberOfUsers": 0,"Id": "us-west-2_aaaaaaaaa","LambdaConfig": {}
}
}

基礎

187

Amazon Cognito

開発者ガイド2 つの必須属性でユーザープールを作成するには
この例では、ユーザープール を作成します MyUserPool。プールは、E メールをユーザー名属性として受け入れるように設定されています。また、Amazon Simple Email Service を使用して、E メールの送信元アドレスを検証済みのアドレスに設定します。
コマンド:
aws cognito-idp create-user-pool --pool-name MyUserPool --usernameattributes "email" --email-configuration=SourceArn="arn:aws:ses:useast-1:111111111111:identity/
jane@example.com",ReplyToEmailAddress="jane@example.com"

出力:{"UserPool": {"SchemaAttributes": [{"Name": "sub","StringAttributeConstraints": {"MinLength": "1",
"MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": true,"AttributeDataType": "String","Mutable": false},{"Name": "name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "given_name","StringAttributeConstraints": {基礎

188

Amazon Cognito

開発者ガイド"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "family_name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "middle_name","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "nickname","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "preferred_username","StringAttributeConstraints": {

基礎

189

Amazon Cognito

開発者ガイド"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "profile","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "picture","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "website","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "email","StringAttributeConstraints": {

基礎

190

Amazon Cognito

開発者ガイド"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"AttributeDataType": "Boolean","DeveloperOnlyAttribute": false,"Required": false,"Name": "email_verified","Mutable": true},{
"Name": "gender","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "birthdate","StringAttributeConstraints": {"MinLength": "10","MaxLength": "10"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "zoneinfo","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,

基礎

191

Amazon Cognito

開発者ガイド"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "locale","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"Name": "phone_number","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true},{
"AttributeDataType": "Boolean","DeveloperOnlyAttribute": false,"Required": false,"Name": "phone_number_verified","Mutable": true},{
"Name": "address","StringAttributeConstraints": {"MinLength": "0","MaxLength": "2048"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "String","Mutable": true
},

基礎

192

Amazon Cognito

開発者ガイド{"Name": "updated_at","NumberAttributeConstraints": {"MinValue": "0"},"DeveloperOnlyAttribute": false,"Required": false,"AttributeDataType": "Number","Mutable": true}],
"MfaConfiguration": "OFF","Name": "MyUserPool","LastModifiedDate": 1547837788.189,"AdminCreateUserConfig": {"UnusedAccountValidityDays": 7,"AllowAdminCreateUserOnly": false},"EmailConfiguration": {"ReplyToEmailAddress": "jane@example.com","SourceArn": "arn:aws:ses:us-east-1:111111111111:identity/
jane@example.com"},"Policies": {"PasswordPolicy": {"RequireLowercase": true,"RequireSymbols": true,"RequireNumbers": true,"MinimumLength": 8,"RequireUppercase": true}},
"UsernameAttributes": ["email"],"CreationDate": 1547837788.189,"EstimatedNumberOfUsers": 0,"Id": "us-west-2_aaaaaaaaa","LambdaConfig": {}
}
}

基礎

193

Amazon Cognito

開発者ガイド• API 詳細については、「 コマンドリファレンスCreateUserPool」の「」を参照してください。 AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CreateUserPoolRequest;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CreateUserPoolResponse;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class CreateUserPool {public static void main(String[] args) {final String usage = """Usage:<userPoolName>\s
Where:
基礎

194

Amazon Cognito

開発者ガイドuserPoolName - The name to give your user pool when it's
created.
""";if (args.length != 1) {System.out.println(usage);
System.exit(1);}String userPoolName = args[0];CognitoIdentityProviderClient cognitoClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();String id = createPool(cognitoClient, userPoolName);
System.out.println("User pool ID: " + id);
cognitoClient.close();}public static String createPool(CognitoIdentityProviderClient cognitoClient,
String userPoolName) {try {CreateUserPoolRequest request = CreateUserPoolRequest.builder().poolName(userPoolName).build();CreateUserPoolResponse response =
cognitoClient.createUserPool(request);
return response.userPool().id();} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}return "";}}• API 詳細については、「 リファレンスCreateUserPool」の「」を参照してください。 AWSSDK for Java 2.x API

基礎

195

Amazon Cognito

開発者ガイドデベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または CreateUserPoolClientAWS SDKで を使用する CLI
以下のコード例は、CreateUserPoolClient の使用方法を示しています。
CLIAWS CLI
ユーザープールクライアントを作成するには
この例では、__ と USER_ADMINNOPASSWORD__AUTH の 2 つの明示的な承認フローを持
つ新しいユーザープールクライアントを作成しますSRPAUTH。
コマンド:
aws cognito-idp create-user-pool-client --user-pool-id us-west-2_aaaaaaaaa--client-name MyNewClient --no-generate-secret --explicit-authflows "USER_PASSWORD_AUTH" "ADMIN_NO_SRP_AUTH"

出力:{"UserPoolClient": {"UserPoolId": "us-west-2_aaaaaaaaa","ClientName": "MyNewClient","ClientId": "6p3bs000no6a4ue1idruvd05ad","LastModifiedDate": 1548697449.497,"CreationDate": 1548697449.497,"RefreshTokenValidity": 30,"ExplicitAuthFlows": ["USER_PASSWORD_AUTH","ADMIN_NO_SRP_AUTH"],"AllowedOAuthFlowsUserPoolClient": false}}• API 詳細については、「 コマンドリファレンスCreateUserPoolClient」の「」を参照してください。 AWS CLI
基礎

196

Amazon Cognito

開発者ガイドJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CreateUserPoolClientReques
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CreateUserPoolClientRespon/*** A user pool client app is an application that authenticates with Amazon* Cognito user pools.
* When you create a user pool, you can configure app clients that allow mobile* or web applications* to call API operations to authenticate users, manage user attributes and* profiles,* and implement sign-up and sign-in flows.
** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class CreateUserPoolClient {public static void main(String[] args) {final String usage = """Usage:<clientName> <userPoolId>\s
基礎

197

Amazon Cognito

開発者ガイドWhere:
clientName - The name for the user pool client to create.
userPoolId - The ID for the user pool.
""";if (args.length != 2) {System.out.println(usage);
System.exit(1);}String clientName = args[0];String userPoolId = args[1];CognitoIdentityProviderClient cognitoClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();createPoolClient(cognitoClient, clientName, userPoolId);
cognitoClient.close();}public static void createPoolClient(CognitoIdentityProviderClient
cognitoClient, String clientName,
String userPoolId) {try {CreateUserPoolClientRequest request =CreateUserPoolClientRequest.builder().clientName(clientName).userPoolId(userPoolId).build();CreateUserPoolClientResponse response =
cognitoClient.createUserPoolClient(request);
System.out.println("User pool " +response.userPoolClient().clientName() + " created. ID: "+ response.userPoolClient().clientId());} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}

基礎

198

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスCreateUserPoolClient」の「」を参照してください。
AWS SDK for Java 2.x API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または DeleteUserAWS SDKで を使用する CLI
以下のコード例は、DeleteUser の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Lambda 関数を使用して登録済みのユーザーを自動的に確認する• Lambda 関数を使用して登録済みのユーザーを自動的に移行する• Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビティデータを書き込む
C++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);

基礎

199

Amazon Cognito

開発者ガイドAws::CognitoIdentityProvider::Model::DeleteUserRequest request;
request.SetAccessToken(accessToken);
Aws::CognitoIdentityProvider::Model::DeleteUserOutcome outcome =client.DeleteUser(request);
if (outcome.IsSuccess()) {std::cout << "The user " << userName << " was deleted."<< std::endl;}
else {
std::cerr << "Error with CognitoIdentityProvider::DeleteUser. "<< outcome.GetError().GetMessage()<< std::endl;}• API 詳細については、「 リファレンスDeleteUser」の「」を参照してください。 AWSSDK for C++ API
CLIAWS CLI
ユーザーを削除するには
この例では、ユーザーを削除します。
コマンド:
aws cognito-idp delete-user --access-token ACCESS_TOKEN• API 詳細については、「 コマンドリファレンスDeleteUser」の「」を参照してください。
AWS CLI

基礎

200

Amazon Cognito

開発者ガイドGo
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// DeleteUser removes a user from the user pool.
func (actor CognitoActions) DeleteUser(userAccessToken string) error {_, err := actor.CognitoClient.DeleteUser(context.TODO(),&cognitoidentityprovider.DeleteUserInput{
AccessToken: aws.String(userAccessToken),})if err != nil {log.Printf("Couldn't delete user. Here's why: %v\n", err)}
return err}• API 詳細については、「 リファレンスDeleteUser」の「」を参照してください。 AWSSDK for Go API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ForgotPasswordで を使用する AWS SDK CLI
以下のコード例は、ForgotPassword の使用方法を示しています。
基礎

201

Amazon Cognito

開発者ガイドアクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Lambda 関数を使用して登録済みのユーザーを自動的に移行する
CLI
AWS CLI
パスワードを強制的に変更するには
次のforgot-password例では、パスワードを変更するメッセージを jane@example.com に送信します。
aws cognito-idp forgot-password --client-id 38fjsnc484p94kpqsnet7mpld0 -username jane@example.com

出力:{"CodeDeliveryDetails": {"Destination": "j***@e***.com","DeliveryMedium": "EMAIL","AttributeName": "email"}}• API 詳細については、「 コマンドリファレンスForgotPassword」の「」を参照してください。 AWS CLIGoSDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

202

Amazon Cognito

開発者ガイドtype CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// ForgotPassword starts a password recovery flow for a user. This flow typicallysends a confirmation code// to the user's configured notification destination, such as email.
func (actor CognitoActions) ForgotPassword(clientId string, userName string)(*types.CodeDeliveryDetailsType, error) {output, err := actor.CognitoClient.ForgotPassword(context.TODO(),&cognitoidentityprovider.ForgotPasswordInput{
ClientId: aws.String(clientId),
Username: aws.String(userName),})
if err != nil {log.Printf("Couldn't start password reset for user '%v'. Here;s why: %v\n",userName, err)}
return output.CodeDeliveryDetails, err}• API 詳細については、「 リファレンスForgotPassword」の「」を参照してください。 AWSSDK for Go API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または InitiateAuthAWS SDKで を使用する CLI
以下のコード例は、InitiateAuth の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Lambda 関数を使用して登録済みのユーザーを自動的に確認する
基礎

203

Amazon Cognito

開発者ガイド• Lambda 関数を使用して登録済みのユーザーを自動的に移行する• を必要とするユーザープールでユーザーをサインアップする MFA• Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビティデータを書き込む.NET
AWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Initiate authorization.
/// </summary>/// <param name="clientId">The client Id of the application.</param>/// <param name="userName">The name of the user who is authenticating.</
param>/// <param name="password">The password for the user who is authenticating.</
param>/// <returns>The response from the initiate auth request.</returns>
public async Task<InitiateAuthResponse> InitiateAuthAsync(string clientId,
string userName, string password){
var authParameters = new Dictionary<string, string>();authParameters.Add("USERNAME", userName);
authParameters.Add("PASSWORD", password);
var authRequest = new InitiateAuthRequest{
ClientId = clientId,
AuthParameters = authParameters,
AuthFlow = AuthFlowType.USER_PASSWORD_AUTH,};var response = await _cognitoService.InitiateAuthAsync(authRequest);
Console.WriteLine($"Result Challenge is : {response.ChallengeName}");基礎

204

Amazon Cognito

開発者ガイドreturn response;}• API 詳細については、「 リファレンスInitiateAuth」の「」を参照してください。 AWSSDK for .NET API
Go
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// SignIn signs in a user to Amazon Cognito using a username and password
authentication flow.
func (actor CognitoActions) SignIn(clientId string, userName string, password
string) (*types.AuthenticationResultType, error) {var authResult *types.AuthenticationResultType
output, err := actor.CognitoClient.InitiateAuth(context.TODO(),&cognitoidentityprovider.InitiateAuthInput{
AuthFlow:"USER_PASSWORD_AUTH",
ClientId:
aws.String(clientId),
AuthParameters: map[string]string{"USERNAME": userName, "PASSWORD": password},})
if err != nil {var resetRequired *types.PasswordResetRequiredException
if errors.As(err, &resetRequired) {log.Println(*resetRequired.Message)} else {基礎

205

Amazon Cognito

開発者ガイドlog.Printf("Couldn't sign in user %v. Here's why: %v\n", userName, err)}
} else {authResult = output.AuthenticationResult}
return authResult, err}• API 詳細については、「 リファレンスInitiateAuth」の「」を参照してください。 AWSSDK for Go API
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const initiateAuth = ({ username, password, clientId }) => {const client = new CognitoIdentityProviderClient({});
const command = new InitiateAuthCommand({AuthFlow: AuthFlowType.USER_PASSWORD_AUTH,
AuthParameters: {USERNAME: username,PASSWORD: password,},
ClientId: clientId,});
return client.send(command);};• API 詳細については、「 リファレンスInitiateAuth」の「」を参照してください。 AWSSDK for JavaScript API
基礎

206

Amazon Cognito

開発者ガイドPythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

この例は、トラッキング対象デバイスを使用して認証を開始する方法を示しています。サイン
インを完了するには、クライアントは Secure Remote Password (SRP) チャレンジに正しく応答する必要があります。
class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef sign_in_with_tracked_device(self,
user_name,password,
device_key,device_group_key,device_password,
aws_srp,
):
基礎

207

Amazon Cognito

開発者ガイド"""Signs in to Amazon Cognito as a user who has a tracked device. Signing inwith a tracked device lets a user sign in without entering a new MFA
code.
Signing in with a tracked device requires that the client respond to the
SRP
protocol. The scenario associated with this example uses the warrant
packageto help with SRP calculations.
For more information on SRP, see https://en.wikipedia.org/wiki/
Secure_Remote_Password_protocol.
:param user_name: The user that is associated with the device.
:param password: The user's password.
:param device_key: The key of a tracked device.
:param device_group_key: The group key of a tracked device.
:param device_password: The password that is associated with the device.
:param aws_srp: A class that helps with SRP calculations. The scenario
associated with this example uses the warrant package.
:return: The result of the authentication. When successful, this contains
anaccess token for the user.
"""try:
srp_helper = aws_srp.AWSSRP(
username=user_name,password=device_password,
pool_id="_",
client_id=self.client_id,
client_secret=None,client=self.cognito_idp_client,)
response_init = self.cognito_idp_client.initiate_auth(ClientId=self.client_id,
AuthFlow="USER_PASSWORD_AUTH",
AuthParameters={"USERNAME": user_name,"PASSWORD": password,"DEVICE_KEY": device_key,
},
)

基礎

208

Amazon Cognito

開発者ガイドif response_init["ChallengeName"] != "DEVICE_SRP_AUTH":
raise RuntimeError(f"Expected DEVICE_SRP_AUTH challenge but got{response_init['ChallengeName']}.")
auth_params = srp_helper.get_auth_params()
auth_params["DEVICE_KEY"] = device_key
response_auth = self.cognito_idp_client.respond_to_auth_challenge(
ClientId=self.client_id,
ChallengeName="DEVICE_SRP_AUTH",
ChallengeResponses=auth_params,)
if response_auth["ChallengeName"] != "DEVICE_PASSWORD_VERIFIER":
raise RuntimeError(f"Expected DEVICE_PASSWORD_VERIFIER challenge but got "f"{response_init['ChallengeName']}.")
challenge_params = response_auth["ChallengeParameters"]
challenge_params["USER_ID_FOR_SRP"] = device_group_key + device_key
cr = srp_helper.process_challenge(challenge_params, {"USERNAME":
user_name})cr["USERNAME"] = user_namecr["DEVICE_KEY"] = device_key
response_verifier =self.cognito_idp_client.respond_to_auth_challenge(
ClientId=self.client_id,
ChallengeName="DEVICE_PASSWORD_VERIFIER",
ChallengeResponses=cr,)
auth_tokens = response_verifier["AuthenticationResult"]
except ClientError as err:
logger.error("Couldn't start client sign in for %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return auth_tokens

基礎

209

Amazon Cognito

開発者ガイド• API 詳細については、InitiateAuth「 for AWS SDK Python (Boto3) APIリファレンス」の「」を参照してください。
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ListUserPoolsAWS SDKで を使用する CLI
以下のコード例は、ListUserPools の使用方法を示しています。
.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// List the Amazon Cognito user pools for an account.
/// </summary>/// <returns>A list of UserPoolDescriptionType objects.</returns>
public async Task<List<UserPoolDescriptionType>> ListUserPoolsAsync(){
var userPools = new List<UserPoolDescriptionType>();var userPoolsPaginator = _cognitoService.Paginators.ListUserPools(newListUserPoolsRequest());
await foreach (var response in userPoolsPaginator.Responses){
userPools.AddRange(response.UserPools);}
return userPools;
}
基礎

210

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for .NET API
CLIAWS CLI
ユーザープールを一覧表示するには
次の例では、最大 20 のユーザープールを一覧表示します。
コマンド:
aws cognito-idp list-user-pools --max-results 20

出力:{"UserPools": [{"CreationDate": 1547763720.822,"LastModifiedDate": 1547763720.822,"LambdaConfig": {},"Id": "us-west-2_aaaaaaaaa","Name": "MyUserPool"}]}• API 詳細については、「 コマンドリファレンスListUserPools」の「」を参照してください。 AWS CLI

基礎

211

Amazon Cognito

開発者ガイドGo
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

package main
import ("context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws""github.com/aws/aws-sdk-go-v2/config""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types")// main uses the AWS SDK for Go V2 to create an Amazon Simple Notification
Service// (Amazon SNS) client and list the topics in your account.
// This example uses the default settings specified in your shared credentials// and config files.
func main() {sdkConfig, err := config.LoadDefaultConfig(context.TODO())
if err != nil {fmt.Println("Couldn't load default configuration. Have you set up your AWS
account?")
fmt.Println(err)
return}cognitoClient := cognitoidentityprovider.NewFromConfig(sdkConfig)
fmt.Println("Let's list the user pools for your account.")
var pools []types.UserPoolDescriptionType
paginator := cognitoidentityprovider.NewListUserPoolsPaginator(

基礎

212

Amazon Cognito

開発者ガイドcognitoClient, &cognitoidentityprovider.ListUserPoolsInput{MaxResults:
aws.Int32(10)})for paginator.HasMorePages() {output, err := paginator.NextPage(context.TODO())
if err != nil {log.Printf("Couldn't get user pools. Here's why: %v\n", err)
} else {pools = append(pools, output.UserPools...)}}if len(pools) == 0 {fmt.Println("You don't have any user pools!")} else {for _, pool := range pools {fmt.Printf("\t%v: %v\n", *pool.Name, *pool.Id)}}}• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Go API
Java
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
基礎

213

Amazon Cognito

開発者ガイドimportsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class ListUserPools {public static void main(String[] args) {CognitoIdentityProviderClient cognitoClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();listAllUserPools(cognitoClient);
cognitoClient.close();}public static void listAllUserPools(CognitoIdentityProviderClient
cognitoClient) {try {ListUserPoolsRequest request = ListUserPoolsRequest.builder().maxResults(10).build();ListUserPoolsResponse response =
cognitoClient.listUserPools(request);
response.userPools().forEach(userpool -> {System.out.println("User pool " + userpool.name() + ", User ID "+ userpool.id());});} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}

基礎

214

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスListUserPools」の「」を参照してください。 AWSSDK for Java 2.x API
Rust
SDK Rust 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

async fn show_pools(client: &Client) -> Result<(), Error> {let response = client.list_user_pools().max_results(10).send().await?;
let pools = response.user_pools();
println!("User pools:");for pool in pools {println!(" ID:{}", pool.id().unwrap_or_default());
println!(" Name:{}", pool.name().unwrap_or_default());
println!(" Lambda Config:{:?}", pool.lambda_config().unwrap());
println!(" Last modified:{}",pool.last_modified_date().unwrap().to_chrono_utc()?
);
println!(" Creation date:{:?}",
pool.creation_date().unwrap().to_chrono_utc());
println!();}println!("Next token: {}", response.next_token().unwrap_or_default());Ok(())}• API 詳細については、Rust リファレンスのListUserPools「」の「」を参照してください。
AWS SDK API
基礎

215

Amazon Cognito

開発者ガイドデベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ListUsersで を使用する AWS SDK CLI
以下のコード例は、ListUsers の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Get a list of users for the Amazon Cognito user pool.
/// </summary>/// <param name="userPoolId">The user pool ID.</param>/// <returns>A list of users.</returns>
public async Task<List<UserType>> ListUsersAsync(string userPoolId){var request = new ListUsersRequest{
UserPoolId = userPoolId};
var users = new List<UserType>();var usersPaginator = _cognitoService.Paginators.ListUsers(request);
await foreach (var response in usersPaginator.Responses){
users.AddRange(response.Users);
基礎

216

Amazon Cognito

開発者ガイド}return users;}• API 詳細については、「 リファレンスListUsers」の「」を参照してください。 AWS SDK
for .NET API
CLIAWS CLI
ユーザーを一覧表示するには
この例では最大 20 のユーザーを一覧表示します。
コマンド:
aws cognito-idp list-users --user-pool-id us-west-2_aaaaaaaaa --limit 20

出力:{"Users": [{"Username": "22704aa3-fc10-479a-97eb-2af5806bd327","Enabled": true,"UserStatus": "FORCE_CHANGE_PASSWORD","UserCreateDate": 1548089817.683,"UserLastModifiedDate": 1548089817.683,"Attributes": [{"Name": "sub","Value": "22704aa3-fc10-479a-97eb-2af5806bd327"},{"Name": "email_verified","Value": "true"},{"Name": "email",
基礎

217

Amazon Cognito

開発者ガイド"Value": "mary@example.com"
}
]
}
]
}

• API 詳細については、「 コマンドリファレンスListUsers」の「」を参照してください。
AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUsersRequest;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ListUsersResponse;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation topic:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html*/
public class ListUsers {public static void main(String[] args) {基礎

218

Amazon Cognito

開発者ガイドfinal String usage = """Usage:<userPoolId>\s
Where:
userPoolId - The ID given to your user pool when it's
created.
""";if (args.length != 1) {System.out.println(usage);
System.exit(1);}String userPoolId = args[0];CognitoIdentityProviderClient cognitoClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();listAllUsers(cognitoClient, userPoolId);
listUsersFilter(cognitoClient, userPoolId);
cognitoClient.close();}public static void listAllUsers(CognitoIdentityProviderClient cognitoClient,
String userPoolId) {try {ListUsersRequest usersRequest = ListUsersRequest.builder().userPoolId(userPoolId).build();ListUsersResponse response = cognitoClient.listUsers(usersRequest);
response.users().forEach(user -> {System.out.println("User " + user.username() + " Status " +user.userStatus() + " Created "+ user.userCreateDate());});} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);

基礎

219

Amazon Cognito

開発者ガイド}}// Shows how to list users by using a filter.
public static void listUsersFilter(CognitoIdentityProviderClient
cognitoClient, String userPoolId) {try {String filter = "email = \"tblue@noserver.com\"";ListUsersRequest usersRequest = ListUsersRequest.builder().userPoolId(userPoolId).filter(filter).build();ListUsersResponse response = cognitoClient.listUsers(usersRequest);
response.users().forEach(user -> {System.out.println("User with filter applied " + user.username()+ " Status " + user.userStatus()+ " Created " + user.userCreateDate());});} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 リファレンスListUsers」の「」を参照してください。 AWS SDK
for Java 2.x API
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

220

Amazon Cognito

開発者ガイドconst listUsers = ({ userPoolId }) => {const client = new CognitoIdentityProviderClient({});
const command = new ListUsersCommand({
UserPoolId: userPoolId,});
return client.send(command);};• API 詳細については、「 リファレンスListUsers」の「」を参照してください。 AWS SDK
for JavaScript API
KotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun listAllUsers(userPoolId: String) {val request =ListUsersRequest {this.userPoolId = userPoolId}
CognitoIdentityProviderClient { region = "us-east-1" }.use { cognitoClient ->val response = cognitoClient.listUsers(request)
response.users?.forEach { user ->println("The user name is ${user.username}")
}
}
}

基礎

221

Amazon Cognito

開発者ガイド• API 詳細については、Kotlin リファレンスのListUsers「」の「」を参照してください。
AWS SDK API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef list_users(self):"""
Returns a list of the users in the current user pool.
:return: The list of users.
"""
try:
response =self.cognito_idp_client.list_users(UserPoolId=self.user_pool_id)
基礎

222

Amazon Cognito

開発者ガイドusers = response["Users"]
except ClientError as err:
logger.error("Couldn't list users for %s. Here's why: %s: %s",
self.user_pool_id,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return users• API 詳細については、「 for Python (Boto3) リファレンスListUsers」の「」を参照してくだ
さい。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または ResendConfirmationCode で を使用する AWS SDK CLI
以下のコード例は、ResendConfirmationCode の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

223

Amazon Cognito

開発者ガイド/// <summary>/// Send a new confirmation code to a user.
/// </summary>/// <param name="clientId">The Id of the client application.</param>/// <param name="userName">The username of user who will receive the code.</param>/// <returns>The delivery details.</returns>
public async Task<CodeDeliveryDetailsType> ResendConfirmationCodeAsync(stringclientId, string userName){var codeRequest = new ResendConfirmationCodeRequest{
ClientId = clientId,
Username = userName,};var response = await_cognitoService.ResendConfirmationCodeAsync(codeRequest);
Console.WriteLine($"Method of delivery is{response.CodeDeliveryDetails.DeliveryMedium}");return response.CodeDeliveryDetails;}• API 詳細については、「 リファレンスResendConfirmationCode」の「」を参照してください。 AWS SDK for .NET APIC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;
基礎

224

Amazon Cognito

開発者ガイド// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::ResendConfirmationCodeRequest
request;request.SetUsername(userName);request.SetClientId(clientID);
Aws::CognitoIdentityProvider::Model::ResendConfirmationCodeOutcome
outcome =client.ResendConfirmationCode(request);
if (outcome.IsSuccess()) {std::cout<< "CognitoIdentityProvider::ResendConfirmationCode was
successful."<< std::endl;}
else {
std::cerr << "Error with
CognitoIdentityProvider::ResendConfirmationCode. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}• API 詳細については、「 リファレンスResendConfirmationCode」の「」を参照してください。 AWS SDK for C++ API
CLIAWS CLI
確認コードを再送信するには次の resend-confirmation-code 例では、ユーザー jane に確認コードを送信します。
aws cognito-idp resend-confirmation-code \--client-id 12a3b456c7de890f11g123hijk \基礎

225

Amazon Cognito

開発者ガイド--username jane

出力:{
"CodeDeliveryDetails": {"Destination": "j***@e***.com","DeliveryMedium": "EMAIL","AttributeName": "email"}}詳細については、「Amazon Cognito デベロッパーガイド」の「ユーザーアカウントのサイン
アップと確認」を参照してください。
• API 詳細については、「 コマンドリファレンスResendConfirmationCode」の「」を参照してください。 AWS CLIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

public static void resendConfirmationCode(CognitoIdentityProviderClient
identityProviderClient, String clientId,
String userName) {try {ResendConfirmationCodeRequest codeRequest =ResendConfirmationCodeRequest.builder().clientId(clientId).username(userName).build();ResendConfirmationCodeResponse response =identityProviderClient.resendConfirmationCode(codeRequest);
基礎

226

Amazon Cognito

開発者ガイドSystem.out.println("Method of delivery is " +response.codeDeliveryDetails().deliveryMediumAsString());} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}• API 詳細については、「 リファレンスResendConfirmationCode」の「」を参照してください。 AWS SDK for Java 2.x API
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const resendConfirmationCode = ({ clientId, username }) => {const client = new CognitoIdentityProviderClient({});
const command = new ResendConfirmationCodeCommand({
ClientId: clientId,
Username: username,});return client.send(command);};• API 詳細については、「 リファレンスResendConfirmationCode」の「」を参照してください。 AWS SDK for JavaScript API

基礎

227

Amazon Cognito

開発者ガイドKotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun resendConfirmationCode(clientIdVal: String?,
userNameVal: String?,) {val codeRequest =ResendConfirmationCodeRequest {clientId = clientIdVal
username = userNameVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val response = identityProviderClient.resendConfirmationCode(codeRequest)
println("Method of delivery is " +(response.codeDeliveryDetails?.deliveryMedium))}}• API 詳細については、Kotlin リファレンス ResendConfirmationCodeの「」の「」を参照してください。 AWS SDK API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

228

Amazon Cognito

開発者ガイドclass CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef resend_confirmation(self, user_name):"""
Prompts Amazon Cognito to resend an email with a new confirmation code.
:param user_name: The name of the user who will receive the email.
:return: Delivery information about where the email is sent.
"""try:
kwargs = {"ClientId": self.client_id, "Username": user_name}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)response = self.cognito_idp_client.resend_confirmation_code(**kwargs)delivery = response["CodeDeliveryDetails"]
except ClientError as err:
logger.error("Couldn't resend confirmation to %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return delivery

基礎

229

Amazon Cognito

開発者ガイド• API 詳細については、「 for Python (Boto3) リファレンスResendConfirmationCode」の「」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または RespondToAuthChallengeAWS SDKで を使用する CLI
以下のコード例は、RespondToAuthChallenge の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFACLIAWS CLI
認証チャレンジに応答するには
この例では initiate-auth で開始された認証チャレンジに応答します。これはNEW_PASSWORD_REQUIRED チャレンジへのレスポンスです。ユーザー
jane@example.com のパスワードを設定します。
コマンド:
aws cognito-idp respond-to-auth-challenge --client-id 3n4b5urk1ft4fl3mg5e62d9ado--challenge-name NEW_PASSWORD_REQUIRED --challenge-responses
USERNAME=jane@example.com,NEW_PASSWORD="password" --session "SESSION_TOKEN"

出力:{"ChallengeParameters": {},"AuthenticationResult": {"AccessToken": "ACCESS_TOKEN","ExpiresIn": 3600,
基礎

230

Amazon Cognito

開発者ガイド"TokenType": "Bearer","RefreshToken": "REFRESH_TOKEN","IdToken": "ID_TOKEN","NewDeviceMetadata": {"DeviceKey": "us-west-2_fec070d2-fa88-424a-8ec8-b26d7198eb23","DeviceGroupKey": "-wt2ha1Zd"}}}• API 詳細については、「 コマンドリファレンスRespondToAuthChallenge」の「」を参照してください。 AWS CLIJavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const respondToAuthChallenge = ({clientId,
username,session,userPoolId,
code,}) => {
const client = new CognitoIdentityProviderClient({});
const command = new RespondToAuthChallengeCommand({
ChallengeName: ChallengeNameType.SOFTWARE_TOKEN_MFA,
ChallengeResponses: {SOFTWARE_TOKEN_MFA_CODE: code,
USERNAME: username,},
ClientId: clientId,
UserPoolId: userPoolId,
Session: session,
基礎

231

Amazon Cognito

開発者ガイド});return client.send(command);};• API 詳細については、「 リファレンスRespondToAuthChallenge」の「」を参照してください。 AWS SDK for JavaScript API
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

追跡対象デバイスでサインインします。サインインを完了するには、クライアントは Secure
Remote Password (SRP) チャレンジに正しく応答する必要があります。
class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secret

基礎

232

Amazon Cognito

開発者ガイドdef sign_in_with_tracked_device(self,
user_name,password,
device_key,device_group_key,device_password,
aws_srp,):"""Signs in to Amazon Cognito as a user who has a tracked device. Signing inwith a tracked device lets a user sign in without entering a new MFA
code.
Signing in with a tracked device requires that the client respond to the
SRP
protocol. The scenario associated with this example uses the warrant
packageto help with SRP calculations.
For more information on SRP, see https://en.wikipedia.org/wiki/
Secure_Remote_Password_protocol.
:param user_name: The user that is associated with the device.
:param password: The user's password.
:param device_key: The key of a tracked device.
:param device_group_key: The group key of a tracked device.
:param device_password: The password that is associated with the device.
:param aws_srp: A class that helps with SRP calculations. The scenario
associated with this example uses the warrant package.
:return: The result of the authentication. When successful, this contains
anaccess token for the user.
"""try:
srp_helper = aws_srp.AWSSRP(
username=user_name,password=device_password,
pool_id="_",
client_id=self.client_id,
client_secret=None,client=self.cognito_idp_client,
)

基礎

233

Amazon Cognito

開発者ガイドresponse_init = self.cognito_idp_client.initiate_auth(ClientId=self.client_id,
AuthFlow="USER_PASSWORD_AUTH",
AuthParameters={"USERNAME": user_name,"PASSWORD": password,"DEVICE_KEY": device_key,},)
if response_init["ChallengeName"] != "DEVICE_SRP_AUTH":
raise RuntimeError(f"Expected DEVICE_SRP_AUTH challenge but got{response_init['ChallengeName']}.")
auth_params = srp_helper.get_auth_params()
auth_params["DEVICE_KEY"] = device_key
response_auth = self.cognito_idp_client.respond_to_auth_challenge(
ClientId=self.client_id,
ChallengeName="DEVICE_SRP_AUTH",
ChallengeResponses=auth_params,)
if response_auth["ChallengeName"] != "DEVICE_PASSWORD_VERIFIER":
raise RuntimeError(f"Expected DEVICE_PASSWORD_VERIFIER challenge but got "f"{response_init['ChallengeName']}.")
challenge_params = response_auth["ChallengeParameters"]
challenge_params["USER_ID_FOR_SRP"] = device_group_key + device_key
cr = srp_helper.process_challenge(challenge_params, {"USERNAME":
user_name})cr["USERNAME"] = user_namecr["DEVICE_KEY"] = device_key
response_verifier =self.cognito_idp_client.respond_to_auth_challenge(
ClientId=self.client_id,
ChallengeName="DEVICE_PASSWORD_VERIFIER",
ChallengeResponses=cr,)
auth_tokens = response_verifier["AuthenticationResult"]
except ClientError as err:
logger.error("Couldn't start client sign in for %s. Here's why: %s: %s",

基礎

234

Amazon Cognito

開発者ガイドuser_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return auth_tokens• API 詳細については、「 for Python (Boto3) リファレンスRespondToAuthChallenge」の「」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または SignUp で を使用する AWS SDK CLI
以下のコード例は、SignUp の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Lambda 関数を使用して登録済みのユーザーを自動的に確認する• Lambda 関数を使用して登録済みのユーザーを自動的に移行する• を必要とするユーザープールでユーザーをサインアップする MFA.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>
基礎

235

Amazon Cognito

開発者ガイド/// Sign up a new user.
/// </summary>/// <param name="clientId">The client Id of the application.</param>/// <param name="userName">The username to use.</param>/// <param name="password">The user's password.</param>/// <param name="email">The email address of the user.</param>/// <returns>A Boolean value indicating whether the user was confirmed.</returns>
public async Task<bool> SignUpAsync(string clientId, string userName, string
password, string email){var userAttrs = new AttributeType{
Name = "email",
Value = email,};var userAttrsList = new List<AttributeType>();userAttrsList.Add(userAttrs);
var signUpRequest = new SignUpRequest{
UserAttributes = userAttrsList,
Username = userName,
ClientId = clientId,
Password = password};
var response = await _cognitoService.SignUpAsync(signUpRequest);
return response.HttpStatusCode == HttpStatusCode.OK;}• API 詳細については、「 リファレンスSignUp」の「」を参照してください。 AWS SDK
for .NET API

基礎

236

Amazon Cognito

開発者ガイドC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::SignUpRequest request;
request.AddUserAttributes(
Aws::CognitoIdentityProvider::Model::AttributeType().WithName("email").WithValue(email));request.SetUsername(userName);request.SetPassword(password);request.SetClientId(clientID);
Aws::CognitoIdentityProvider::Model::SignUpOutcome outcome =client.SignUp(request);
if (outcome.IsSuccess()) {std::cout << "The signup request for " << userName << " wassuccessful."<< std::endl;}
else if (outcome.GetError().GetErrorType() ==Aws::CognitoIdentityProvider::CognitoIdentityProviderErrors::USERNAME_EXISTS) {std::cout<< "The username already exists. Please enter a different
username."<< std::endl;
userExists = true;}else {
基礎

237

Amazon Cognito

開発者ガイドstd::cerr << "Error with CognitoIdentityProvider::SignUpRequest. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}• API 詳細については、「 リファレンスSignUp」の「」を参照してください。 AWS SDK for
C++ APICLIAWS CLI
ユーザーをサインアップするには
この例では jane@example.com をサインアップします。
コマンド:
aws cognito-idp sign-up --client-id 3n4b5urk1ft4fl3mg5e62d9ado -username jane@example.com --password PASSWORD --user-attributes
Name="email",Value="jane@example.com" Name="name",Value="Jane"

出力:{"UserConfirmed": false,"UserSub": "e04d60a6-45dc-441c-a40b-e25a787d4862"}• API 詳細については、「 コマンドリファレンスSignUp」の「」を参照してください。 AWS
CLI

基礎

238

Amazon Cognito

開発者ガイドGo
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// SignUp signs up a user with Amazon Cognito.
func (actor CognitoActions) SignUp(clientId string, userName string, password
string, userEmail string) (bool, error) {confirmed := false
output, err := actor.CognitoClient.SignUp(context.TODO(),&cognitoidentityprovider.SignUpInput{
ClientId: aws.String(clientId),
Password: aws.String(password),
Username: aws.String(userName),
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value: aws.String(userEmail)},},})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't sign up user %v. Here's why: %v\n", userName, err)}
} else {confirmed = output.UserConfirmed}
return confirmed, err
}
基礎

239

Amazon Cognito

開発者ガイド• API 詳細については、「 リファレンスSignUp」の「」を参照してください。 AWS SDK for
Go APIJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

public static void signUp(CognitoIdentityProviderClient
identityProviderClient, String clientId, String userName,
String password, String email) {AttributeType userAttrs = AttributeType.builder().name("email").value(email).build();List<AttributeType> userAttrsList = new ArrayList<>();
userAttrsList.add(userAttrs);
try {SignUpRequest signUpRequest = SignUpRequest.builder().userAttributes(userAttrsList).username(userName).clientId(clientId).password(password).build();identityProviderClient.signUp(signUpRequest);
System.out.println("User has been signed up ");} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
基礎

240

Amazon Cognito

開発者ガイド}• API 詳細については、「 リファレンスSignUp」の「」を参照してください。 AWS SDK forJava 2.x API
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const signUp = ({ clientId, username, password, email }) => {const client = new CognitoIdentityProviderClient({});
const command = new SignUpCommand({
ClientId: clientId,
Username: username,
Password: password,
UserAttributes: [{ Name: "email", Value: email }],});return client.send(command);};• API 詳細については、「 リファレンスSignUp」の「」を参照してください。 AWS SDK for
JavaScript API

基礎

241

Amazon Cognito

開発者ガイドKotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

suspend fun signUp(
clientIdVal: String?,
userNameVal: String?,
passwordVal: String?,
emailVal: String?,) {val userAttrs =AttributeType {name = "email"value = emailVal}
val userAttrsList = mutableListOf<AttributeType>()userAttrsList.add(userAttrs)
val signUpRequest =SignUpRequest {userAttributes = userAttrsList
username = userNameValclientId = clientIdVal
password = passwordVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->identityProviderClient.signUp(signUpRequest)
println("User has been signed up")}}

• API 詳細については、Kotlin リファレンス SignUpの「」の「」を参照してください。 AWSSDK API
基礎

242

Amazon Cognito

開発者ガイドPythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef sign_up_user(self, user_name, password, user_email):"""Signs up a new user with Amazon Cognito. This action prompts Amazon
Cognitoto send an email to the specified email address. The email contains acode thatcan be used to confirm the user.
When the user already exists, the user status is checked to determine
whetherthe user has been confirmed.
:param user_name: The user name that identifies the new user.
基礎

243

Amazon Cognito

開発者ガイド:param password: The password for the new user.
:param user_email: The email address for the new user.
:return: True when the user is already confirmed with Amazon Cognito.
Otherwise, false.
"""try:kwargs = {"ClientId": self.client_id,"Username": user_name,"Password": password,"UserAttributes": [{"Name": "email", "Value": user_email}],}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)response = self.cognito_idp_client.sign_up(**kwargs)
confirmed = response["UserConfirmed"]
except ClientError as err:
if err.response["Error"]["Code"] == "UsernameExistsException":
response = self.cognito_idp_client.admin_get_user(
UserPoolId=self.user_pool_id, Username=user_name)logger.warning("User %s exists and is %s.", user_name,response["UserStatus"])
confirmed = response["UserStatus"] == "CONFIRMED"
else:
logger.error("Couldn't sign up %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],)raise
return confirmed• API 詳細については、SignUp「 for AWS SDK Python (Boto3) APIリファレンス」の「」を参照してください。

基礎

244

Amazon Cognito

開発者ガイドデベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または UpdateUserPoolAWS SDKで を使用する CLI
以下のコード例は、UpdateUserPool の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• Lambda 関数を使用して登録済みのユーザーを自動的に確認する• Lambda 関数を使用して登録済みのユーザーを自動的に移行する• Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビティデータを書き込む
CLI
AWS CLI
ユーザープールを更新するには
この例では、ユーザープールにタグを追加します。
コマンド:
aws cognito-idp update-user-pool --user-pool-id us-west-2_aaaaaaaaa --user-pooltags Team=Blue,Area=West• API 詳細については、「 コマンドリファレンスUpdateUserPool」の「」を参照してください。 AWS CLIGoSDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

基礎

245

Amazon Cognito

開発者ガイドtype CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// Trigger and TriggerInfo define typed data for updating an Amazon Cognito
trigger.
type Trigger int
const (
PreSignUp Trigger = iota
UserMigration
PostAuthentication)
type TriggerInfo struct {Trigger
Trigger
HandlerArn *string}// UpdateTriggers adds or removes Lambda triggers for a user pool. When a trigger
is specified with a `nil` value,// it is removed from the user pool.
func (actor CognitoActions) UpdateTriggers(userPoolId string,
triggers ...TriggerInfo) error {output, err := actor.CognitoClient.DescribeUserPool(context.TODO(),&cognitoidentityprovider.DescribeUserPoolInput{
UserPoolId: aws.String(userPoolId),})
if err != nil {log.Printf("Couldn't get info about user pool %v. Here's why: %v\n",userPoolId, err)
return err}
lambdaConfig := output.UserPool.LambdaConfig
for _, trigger := range triggers {switch trigger.Trigger {case PreSignUp:
lambdaConfig.PreSignUp = trigger.HandlerArncase UserMigration:
lambdaConfig.UserMigration = trigger.HandlerArn

基礎

246

Amazon Cognito

開発者ガイドcase PostAuthentication:
lambdaConfig.PostAuthentication = trigger.HandlerArn}}_, err = actor.CognitoClient.UpdateUserPool(context.TODO(),&cognitoidentityprovider.UpdateUserPoolInput{
UserPoolId:
aws.String(userPoolId),
LambdaConfig: lambdaConfig,})
if err != nil {log.Printf("Couldn't update user pool %v. Here's why: %v\n", userPoolId, err)}
return err}• API 詳細については、「 リファレンスUpdateUserPool」の「」を参照してください。
AWS SDK for Go API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
または VerifySoftwareToken で を使用する AWS SDK CLI
以下のコード例は、VerifySoftwareToken の使用方法を示しています。
アクション例は、より大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。次のコード例で、このアクションのコンテキストを確認できます。
• を必要とするユーザープールでユーザーをサインアップする MFA

基礎

247

Amazon Cognito

開発者ガイド.NETAWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/// <summary>/// Verify the TOTP and register for MFA.
/// </summary>/// <param name="session">The name of the session.</param>/// <param name="code">The MFA code.</param>/// <returns>The status of the software token.</returns>
public async Task<VerifySoftwareTokenResponseType>
VerifySoftwareTokenAsync(string session, string code){
var tokenRequest = new VerifySoftwareTokenRequest{
UserCode = code,
Session = session,};var verifyResponse = await_cognitoService.VerifySoftwareTokenAsync(tokenRequest);
return verifyResponse.Status;}• API 詳細については、「 リファレンスVerifySoftwareToken」の「」を参照してください。
AWS SDK for .NET API

基礎

248

Amazon Cognito

開発者ガイドC++
SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);
Aws::CognitoIdentityProvider::Model::VerifySoftwareTokenRequest request;
request.SetUserCode(userCode);request.SetSession(session);
Aws::CognitoIdentityProvider::Model::VerifySoftwareTokenOutcome outcome =client.VerifySoftwareToken(request);
if (outcome.IsSuccess()) {std::cout << "Verification of the code was successful."<< std::endl;
session = outcome.GetResult().GetSession();}else {
std::cerr << "Error with
CognitoIdentityProvider::VerifySoftwareToken. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}• API 詳細については、「 リファレンスVerifySoftwareToken」の「」を参照してください。
AWS SDK for C++ API

基礎

249

Amazon Cognito

開発者ガイドJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

// Verify the TOTP and register for MFA.
public static void verifyTOTP(CognitoIdentityProviderClient
identityProviderClient, String session, String code) {try {VerifySoftwareTokenRequest tokenRequest =VerifySoftwareTokenRequest.builder().userCode(code).session(session).build();VerifySoftwareTokenResponse verifyResponse =identityProviderClient.verifySoftwareToken(tokenRequest);
System.out.println("The status of the token is " +verifyResponse.statusAsString());} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}• API 詳細については、「 リファレンスVerifySoftwareToken」の「」を参照してください。
AWS SDK for Java 2.x API

基礎

250

Amazon Cognito

開発者ガイドJavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

const verifySoftwareToken = (totp) => {const client = new CognitoIdentityProviderClient({});// The 'Session' is provided in the response to 'AssociateSoftwareToken'.
const session = process.env.SESSION;
if (!session) {throw new Error("Missing a valid Session. Did you run 'admin-initiate-auth'?",);}const command = new VerifySoftwareTokenCommand({Session: session,
UserCode: totp,});
return client.send(command);};• API 詳細については、「 リファレンスVerifySoftwareToken」の「」を参照してください。
AWS SDK for JavaScript API

基礎

251

Amazon Cognito

開発者ガイドKotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

// Verify the TOTP and register for MFA.
suspend fun verifyTOTP(
sessionVal: String?,
codeVal: String?,) {val tokenRequest =VerifySoftwareTokenRequest {userCode = codeVal
session = sessionVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val verifyResponse =identityProviderClient.verifySoftwareToken(tokenRequest)
println("The status of the token is ${verifyResponse.status}")}}• API 詳細については、Kotlin リファレンス VerifySoftwareTokenの「」の「」を参照してください。 AWS SDK API

基礎

252

Amazon Cognito

開発者ガイドPythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""
def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.
:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef verify_mfa(self, session, user_code):"""
Verify a new MFA application that is associated with a user.
:param session: Session information returned from a previous call to
initiate
authentication.
:param user_code: A code generated by the associated MFA application.
:return: Status that indicates whether the MFA application is verified.
"""
try:
response = self.cognito_idp_client.verify_software_token(
Session=session, UserCode=user_code
基礎

253

Amazon Cognito

開発者ガイド)except ClientError as err:
logger.error("Couldn't verify MFA. Here's why: %s: %s",
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
response.pop("ResponseMetadata", None)
return response• API 詳細については、「 for Python (Boto3) リファレンスVerifySoftwareToken」の「」を参照してください。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

を使用した Amazon Cognito ID プロバイダーのシナリオ AWS SDKs
次のコード例は、 を使用して Amazon Cognito ID プロバイダーで一般的なシナリオを実装する方法を示しています AWS SDKs。これらのシナリオは、Amazon Cognito ID プロバイダー内で複数の関数を呼び出すか、他の と組み合わせて特定のタスクを実行する方法を示しています AWS サービ
ス。各シナリオには、完全なソースコードへのリンクが含まれており、そこからコードの設定方法と実行方法に関する手順を確認できます。
シナリオは、サービスアクションをコンテキストで理解するのに役立つ中級レベルの経験を対象としています。
例• を使用して Lambda 関数で既知の Amazon Cognito ユーザーを自動的に確認する AWS SDK• を使用して Lambda 関数を使用して既知の Amazon Cognito ユーザーを自動的に移行する AWS
SDK• MFA を使用する必要がある Amazon Cognito ユーザープールでユーザーをサインアップする AWS
SDK
シナリオ

254

Amazon Cognito

開発者ガイド• を使用して Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビティ
データを書き込む AWS SDKを使用して Lambda 関数で既知の Amazon Cognito ユーザーを自動的に確認する
AWS SDK
次のコード例は、Lambda 関数を使用して登録済みの Amazon Cognito ユーザーを確認する方法を示しています。
• PreSignUp トリガーの Lambda 関数を呼び出すようにユーザープールを設定します。
• Amazon Cognito でユーザーをサインアップする• Lambda 関数は DynamoDB テーブルをスキャンし、登録済みのユーザーを自動的に確認します。
• 新しいユーザーとしてサインインし、リソースをクリーンアップします。
Go
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

コマンドプロンプトからインタラクティブのシナリオを実行します。

// AutoConfirm separates the steps of this scenario into individual functions sothat// they are simpler to read and understand.
type AutoConfirm struct {helper
IScenarioHelper
questioner
demotools.IQuestioner
resources
Resources
cognitoActor *actions.CognitoActions}// NewAutoConfirm constructs a new auto confirm runner.
シナリオ

255

Amazon Cognito

開発者ガイドfunc NewAutoConfirm(sdkConfig aws.Config, questioner demotools.IQuestioner,
helper IScenarioHelper) AutoConfirm {scenario := AutoConfirm{
helper:helper,questioner:questioner,
resources:
Resources{},cognitoActor: &actions.CognitoActions{CognitoClient:cognitoidentityprovider.NewFromConfig(sdkConfig)},}
scenario.resources.init(scenario.cognitoActor, questioner)
return scenario}// AddPreSignUpTrigger adds a Lambda handler as an invocation target for the
PreSignUp trigger.
func (runner *AutoConfirm) AddPreSignUpTrigger(userPoolId string, functionArn
string) {log.Printf("Let's add a Lambda function to handle the PreSignUp trigger from
Cognito.\n" +"This trigger happens when a user signs up, and lets your function take action
before the main Cognito\n" +"sign up processing occurs.\n")err := runner.cognitoActor.UpdateTriggers(
userPoolId,
actions.TriggerInfo{Trigger: actions.PreSignUp, HandlerArn:
aws.String(functionArn)})
if err != nil {panic(err)}log.Printf("Lambda function %v added to user pool %v to handle the PreSignUp
trigger.\n",functionArn, userPoolId)}// SignUpUser signs up a user from the known user table with a password you
specify.
func (runner *AutoConfirm) SignUpUser(clientId string, usersTable string)(string, string) {log.Println("Let's sign up a user to your Cognito user pool. When the user's
email matches an email in the\n" +"DynamoDB known users table, it is automatically verified and the user isconfirmed.")knownUsers, err := runner.helper.GetKnownUsers(usersTable)

シナリオ

256

Amazon Cognito

開発者ガイドif err != nil {panic(err)}userChoice := runner.questioner.AskChoice("Which user do you want to use?\n",knownUsers.UserNameList())
user := knownUsers.Users[userChoice]var signedUp bool
var userConfirmed bool
password := runner.questioner.AskPassword("Enter a password that has at least
eight characters, uppercase, lowercase, numbers and symbols.\n"+"(the password will not display as you type):", 8)
for !signedUp {log.Printf("Signing up user '%v' with email '%v' to Cognito.\n", user.UserName,user.UserEmail)userConfirmed, err = runner.cognitoActor.SignUp(clientId, user.UserName,password, user.UserEmail)if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {password = runner.questioner.AskPassword("Enter another password:", 8)} else {panic(err)}} else {signedUp = true}}
log.Printf("User %v signed up, confirmed = %v.\n", user.UserName, userConfirmed)
log.Println(strings.Repeat("-", 88))
return user.UserName, password}// SignInUser signs in a user.
func (runner *AutoConfirm) SignInUser(clientId string, userName string, password
string) string {runner.questioner.Ask("Press Enter when you're ready to continue.")log.Printf("Let's sign in as %v...\n", userName)
authResult, err := runner.cognitoActor.SignIn(clientId, userName, password)
if err != nil {panic(err)
}

シナリオ

257

Amazon Cognito

開発者ガイドlog.Printf("Successfully signed in. Your access token starts with: %v...\n",(*authResult.AccessToken)[:10])
log.Println(strings.Repeat("-", 88))
return *authResult.AccessToken}// Run runs the scenario.
func (runner *AutoConfirm) Run(stackName string) {defer func() {if r := recover(); r != nil {log.Println("Something went wrong with the demo.")runner.resources.Cleanup()}}()
log.Println(strings.Repeat("-", 88))
log.Printf("Welcome\n")log.Println(strings.Repeat("-", 88))
stackOutputs, err := runner.helper.GetStackOutputs(stackName)
if err != nil {panic(err)}runner.resources.userPoolId = stackOutputs["UserPoolId"]
runner.helper.PopulateUserTable(stackOutputs["TableName"])runner.AddPreSignUpTrigger(stackOutputs["UserPoolId"],
stackOutputs["AutoConfirmFunctionArn"])
runner.resources.triggers = append(runner.resources.triggers, actions.PreSignUp)
userName, password := runner.SignUpUser(stackOutputs["UserPoolClientId"],
stackOutputs["TableName"])runner.helper.ListRecentLogEvents(stackOutputs["AutoConfirmFunction"])runner.resources.userAccessTokens = append(runner.resources.userAccessTokens,runner.SignInUser(stackOutputs["UserPoolClientId"], userName, password))runner.resources.Cleanup()
log.Println(strings.Repeat("-", 88))
log.Println("Thanks for watching!")log.Println(strings.Repeat("-", 88))
}

シナリオ

258

Amazon Cognito

開発者ガイドLambda 関数を使用して PreSignUp トリガーを処理します。

const TABLE_NAME = "TABLE_NAME"// UserInfo defines structured user data that can be marshalled to a DynamoDB
format.
type UserInfo struct {UserName string `dynamodbav:"UserName"`
UserEmail string `dynamodbav:"UserEmail"`}// GetKey marshals the user email value to a DynamoDB key format.
func (user UserInfo) GetKey() map[string]dynamodbtypes.AttributeValue {userEmail, err := attributevalue.Marshal(user.UserEmail)if err != nil {panic(err)}
return map[string]dynamodbtypes.AttributeValue{"UserEmail": userEmail}}type handler struct {dynamoClient *dynamodb.Client}// HandleRequest handles the PreSignUp event by looking up a user in an Amazon
DynamoDB table and// specifying whether they should be confirmed and verified.
func (h *handler) HandleRequest(ctx context.Context, event
events.CognitoEventUserPoolsPreSignup) (events.CognitoEventUserPoolsPreSignup,
error) {log.Printf("Received presignup from %v for user '%v'", event.TriggerSource,
event.UserName)
if event.TriggerSource != "PreSignUp_SignUp" {// Other trigger sources, such as PreSignUp_AdminInitiateAuth, ignore theresponse from this handler.
return event, nil}tableName := os.Getenv(TABLE_NAME)
user := UserInfo{
UserEmail: event.Request.UserAttributes["email"],
シナリオ

259

Amazon Cognito

開発者ガイド}log.Printf("Looking up email %v in table %v.\n", user.UserEmail, tableName)
output, err := h.dynamoClient.GetItem(ctx, &dynamodb.GetItemInput{
Key:user.GetKey(),
TableName: aws.String(tableName),})
if err != nil {log.Printf("Error looking up email %v.\n", user.UserEmail)return event, err}
if output.Item == nil {log.Printf("Email %v not found. Email verification is required.\n",user.UserEmail)return event, err}
err = attributevalue.UnmarshalMap(output.Item, &user)
if err != nil {log.Printf("Couldn't unmarshal DynamoDB item. Here's why: %v\n", err)
return event, err}
if user.UserName != event.UserName {log.Printf("UserEmail %v found, but stored UserName '%v' does not match
supplied UserName '%v'. Verification is required.\n",user.UserEmail, user.UserName, event.UserName)} else {log.Printf("UserEmail %v found with matching UserName %v. User is confirmed.
\n", user.UserEmail, user.UserName)
event.Response.AutoConfirmUser = true
event.Response.AutoVerifyEmail = true}
return event, err}
func main() {sdkConfig, err := config.LoadDefaultConfig(context.TODO())
if err != nil {log.Panicln(err)}h := handler{
dynamoClient: dynamodb.NewFromConfig(sdkConfig),
}

シナリオ

260

Amazon Cognito

開発者ガイドlambda.Start(h.HandleRequest)}

一般的なタスクを実行する構造体を作成します。

// IScenarioHelper defines common functions used by the workflows in thisexample.
type IScenarioHelper interface {Pause(secs int)
GetStackOutputs(stackName string) (actions.StackOutputs, error)
PopulateUserTable(tableName string)
GetKnownUsers(tableName string) (actions.UserList, error)
AddKnownUser(tableName string, user actions.User)
ListRecentLogEvents(functionName string)}// ScenarioHelper contains AWS wrapper structs used by the workflows in thisexample.
type ScenarioHelper struct {questioner demotools.IQuestioner
dynamoActor *actions.DynamoActions
cfnActor*actions.CloudFormationActions
cwlActor*actions.CloudWatchLogsActions
isTestRun
bool}// NewScenarioHelper constructs a new scenario helper.
func NewScenarioHelper(sdkConfig aws.Config, questioner demotools.IQuestioner)
ScenarioHelper {scenario := ScenarioHelper{
questioner: questioner,
dynamoActor: &actions.DynamoActions{DynamoClient:dynamodb.NewFromConfig(sdkConfig)},
cfnActor:&actions.CloudFormationActions{CfnClient:cloudformation.NewFromConfig(sdkConfig)},
cwlActor:&actions.CloudWatchLogsActions{CwlClient:cloudwatchlogs.NewFromConfig(sdkConfig)},}
return scenario
}
シナリオ

261

Amazon Cognito

開発者ガイド// Pause waits for the specified number of seconds.
func (helper ScenarioHelper) Pause(secs int) {if !helper.isTestRun {time.Sleep(time.Duration(secs) * time.Second)}}// GetStackOutputs gets the outputs from the specified CloudFormation stack in a
structured format.
func (helper ScenarioHelper) GetStackOutputs(stackName string)(actions.StackOutputs, error) {return helper.cfnActor.GetOutputs(stackName), nil}// PopulateUserTable fills the known user table with example data.
func (helper ScenarioHelper) PopulateUserTable(tableName string) {log.Printf("First, let's add some users to the DynamoDB %v table we'll use forthis example.\n", tableName)err := helper.dynamoActor.PopulateTable(tableName)
if err != nil {panic(err)}}// GetKnownUsers gets the users from the known users table in a structured
format.
func (helper ScenarioHelper) GetKnownUsers(tableName string) (actions.UserList,
error) {knownUsers, err := helper.dynamoActor.Scan(tableName)
if err != nil {log.Printf("Couldn't get known users from table %v. Here's why: %v\n",tableName, err)}
return knownUsers, err}// AddKnownUser adds a user to the known users table.
func (helper ScenarioHelper) AddKnownUser(tableName string, user actions.User) {log.Printf("Adding user '%v' with email '%v' to the DynamoDB known users
table...\n",user.UserName, user.UserEmail)err := helper.dynamoActor.AddUser(tableName, user)
if err != nil {

シナリオ

262

Amazon Cognito

開発者ガイドpanic(err)}}// ListRecentLogEvents gets the most recent log stream and events for the
specified Lambda function and displays them.
func (helper ScenarioHelper) ListRecentLogEvents(functionName string) {log.Println("Waiting a few seconds to let Lambda write to CloudWatch Logs...")
helper.Pause(10)log.Println("Okay, let's check the logs to find what's happened recently withyour Lambda function.")logStream, err := helper.cwlActor.GetLatestLogStream(functionName)
if err != nil {panic(err)}log.Printf("Getting some recent events from log stream %v\n",*logStream.LogStreamName)
events, err := helper.cwlActor.GetLogEvents(functionName,*logStream.LogStreamName, 10)if err != nil {panic(err)}for _, event := range events {log.Printf("\t%v", *event.Message)}log.Println(strings.Repeat("-", 88))}

Amazon Cognito アクションをラップする構造体を作成します。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// Trigger and TriggerInfo define typed data for updating an Amazon Cognito
trigger.
type Trigger int
シナリオ

263

Amazon Cognito

開発者ガイドconst (
PreSignUp Trigger = iota
UserMigration
PostAuthentication)
type TriggerInfo struct {Trigger
Trigger
HandlerArn *string}// UpdateTriggers adds or removes Lambda triggers for a user pool. When a trigger
is specified with a `nil` value,// it is removed from the user pool.
func (actor CognitoActions) UpdateTriggers(userPoolId string,
triggers ...TriggerInfo) error {output, err := actor.CognitoClient.DescribeUserPool(context.TODO(),&cognitoidentityprovider.DescribeUserPoolInput{
UserPoolId: aws.String(userPoolId),})
if err != nil {log.Printf("Couldn't get info about user pool %v. Here's why: %v\n",userPoolId, err)
return err}
lambdaConfig := output.UserPool.LambdaConfig
for _, trigger := range triggers {switch trigger.Trigger {case PreSignUp:
lambdaConfig.PreSignUp = trigger.HandlerArncase UserMigration:
lambdaConfig.UserMigration = trigger.HandlerArncase PostAuthentication:
lambdaConfig.PostAuthentication = trigger.HandlerArn}}_, err = actor.CognitoClient.UpdateUserPool(context.TODO(),&cognitoidentityprovider.UpdateUserPoolInput{
UserPoolId:
aws.String(userPoolId),
LambdaConfig: lambdaConfig,})
if err != nil {log.Printf("Couldn't update user pool %v. Here's why: %v\n", userPoolId, err)

シナリオ

264

Amazon Cognito

開発者ガイド}return err}// SignUp signs up a user with Amazon Cognito.
func (actor CognitoActions) SignUp(clientId string, userName string, password
string, userEmail string) (bool, error) {confirmed := false
output, err := actor.CognitoClient.SignUp(context.TODO(),&cognitoidentityprovider.SignUpInput{
ClientId: aws.String(clientId),
Password: aws.String(password),
Username: aws.String(userName),
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value: aws.String(userEmail)},},})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't sign up user %v. Here's why: %v\n", userName, err)}
} else {confirmed = output.UserConfirmed}
return confirmed, err}// SignIn signs in a user to Amazon Cognito using a username and password
authentication flow.
func (actor CognitoActions) SignIn(clientId string, userName string, password
string) (*types.AuthenticationResultType, error) {var authResult *types.AuthenticationResultType
output, err := actor.CognitoClient.InitiateAuth(context.TODO(),&cognitoidentityprovider.InitiateAuthInput{
AuthFlow:"USER_PASSWORD_AUTH",
ClientId:
aws.String(clientId),
AuthParameters: map[string]string{"USERNAME": userName, "PASSWORD": password},

シナリオ

265

Amazon Cognito

開発者ガイド})if err != nil {var resetRequired *types.PasswordResetRequiredException
if errors.As(err, &resetRequired) {log.Println(*resetRequired.Message)} else {log.Printf("Couldn't sign in user %v. Here's why: %v\n", userName, err)}
} else {authResult = output.AuthenticationResult}
return authResult, err}// ForgotPassword starts a password recovery flow for a user. This flow typicallysends a confirmation code// to the user's configured notification destination, such as email.
func (actor CognitoActions) ForgotPassword(clientId string, userName string)(*types.CodeDeliveryDetailsType, error) {output, err := actor.CognitoClient.ForgotPassword(context.TODO(),&cognitoidentityprovider.ForgotPasswordInput{
ClientId: aws.String(clientId),
Username: aws.String(userName),})
if err != nil {log.Printf("Couldn't start password reset for user '%v'. Here;s why: %v\n",userName, err)}
return output.CodeDeliveryDetails, err}// ConfirmForgotPassword confirms a user with a confirmation code and a new
password.
func (actor CognitoActions) ConfirmForgotPassword(clientId string, code string,userName string, password string) error {_, err := actor.CognitoClient.ConfirmForgotPassword(context.TODO(),&cognitoidentityprovider.ConfirmForgotPasswordInput{
ClientId:
aws.String(clientId),
ConfirmationCode: aws.String(code),
Password:
aws.String(password),

シナリオ

266

Amazon Cognito

開発者ガイドUsername:
aws.String(userName),})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't confirm user %v. Here's why: %v", userName, err)}}
return err}// DeleteUser removes a user from the user pool.
func (actor CognitoActions) DeleteUser(userAccessToken string) error {_, err := actor.CognitoClient.DeleteUser(context.TODO(),&cognitoidentityprovider.DeleteUserInput{
AccessToken: aws.String(userAccessToken),})if err != nil {log.Printf("Couldn't delete user. Here's why: %v\n", err)}
return err}// AdminCreateUser uses administrator credentials to add a user to a user pool.
This method leaves the user// in a state that requires they enter a new password next time they sign in.
func (actor CognitoActions) AdminCreateUser(userPoolId string, userName string,userEmail string) error {_, err := actor.CognitoClient.AdminCreateUser(context.TODO(),&cognitoidentityprovider.AdminCreateUserInput{
UserPoolId:
aws.String(userPoolId),
Username:
aws.String(userName),
MessageAction: types.MessageActionTypeSuppress,
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value:
aws.String(userEmail)}},})if err != nil {var userExists *types.UsernameExistsException

シナリオ

267

Amazon Cognito

開発者ガイドif errors.As(err, &userExists) {log.Printf("User %v already exists in the user pool.", userName)
err = nil
} else {log.Printf("Couldn't create user %v. Here's why: %v\n", userName, err)}}
return err}// AdminSetUserPassword uses administrator credentials to set a password for auser without requiring a// temporary password.
func (actor CognitoActions) AdminSetUserPassword(userPoolId string, userName
string, password string) error {_, err := actor.CognitoClient.AdminSetUserPassword(context.TODO(),&cognitoidentityprovider.AdminSetUserPasswordInput{
Password:
aws.String(password),
UserPoolId: aws.String(userPoolId),
Username:
aws.String(userName),
Permanent: true,})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't set password for user %v. Here's why: %v\n", userName,err)}}return err}

DynamoDB アクションをラップする構造体を作成します。

// DynamoActions encapsulates the Amazon Simple Notification Service (Amazon SNS)actions
シナリオ

268

Amazon Cognito

開発者ガイド// used in the examples.
type DynamoActions struct {DynamoClient *dynamodb.Client}// User defines structured user data.
type User struct {UserName string
UserEmail string
LastLogin *LoginInfo `dynamodbav:",omitempty"`}// LoginInfo defines structured custom login data.
type LoginInfo struct {UserPoolId string
ClientId
stringTime
string}// UserList defines a list of users.
type UserList struct {Users []User}// UserNameList returns the usernames contained in a UserList as a list of
strings.
func (users *UserList) UserNameList() []string {names := make([]string, len(users.Users))
for i := 0; i < len(users.Users); i++ {names[i] = users.Users[i].UserName}
return names}// PopulateTable adds a set of test users to the table.
func (actor DynamoActions) PopulateTable(tableName string) error {var err error
var item map[string]types.AttributeValuevar writeReqs []types.WriteRequest
for i := 1; i < 4; i++ {item, err = attributevalue.MarshalMap(User{UserName: fmt.Sprintf("test_user_%v", i), UserEmail: fmt.Sprintf("test_email_%v@example.com", i)})
if err != nil {

シナリオ

269

Amazon Cognito

開発者ガイドlog.Printf("Couldn't marshall user into DynamoDB format. Here's why: %v\n",err)
return err}
writeReqs = append(writeReqs, types.WriteRequest{PutRequest:&types.PutRequest{Item: item}})}_, err = actor.DynamoClient.BatchWriteItem(context.TODO(),&dynamodb.BatchWriteItemInput{
RequestItems: map[string][]types.WriteRequest{tableName: writeReqs},})
if err != nil {log.Printf("Couldn't populate table %v with users. Here's why: %v\n",tableName, err)}
return err}// Scan scans the table for all items.
func (actor DynamoActions) Scan(tableName string) (UserList, error) {var userList UserList
output, err := actor.DynamoClient.Scan(context.TODO(), &dynamodb.ScanInput{
TableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't scan table %v for items. Here's why: %v\n", tableName,err)} else {err = attributevalue.UnmarshalListOfMaps(output.Items, &userList.Users)
if err != nil {log.Printf("Couldn't unmarshal items into users. Here's why: %v\n", err)}}
return userList, err}// AddUser adds a user item to a table.
func (actor DynamoActions) AddUser(tableName string, user User) error {userItem, err := attributevalue.MarshalMap(user)
if err != nil {log.Printf("Couldn't marshall user to item. Here's why: %v\n", err)}_, err = actor.DynamoClient.PutItem(context.TODO(), &dynamodb.PutItemInput{
Item:
userItem,

シナリオ

270

Amazon Cognito

開発者ガイドTableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't put item in table %v. Here's why: %v", tableName, err)}
return err}

Logs CloudWatch アクションをラップする構造体を作成します。

type CloudWatchLogsActions struct {CwlClient *cloudwatchlogs.Client}// GetLatestLogStream gets the most recent log stream for a Lambda function.
func (actor CloudWatchLogsActions) GetLatestLogStream(functionName string)(types.LogStream, error) {var logStream types.LogStream
logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName)
output, err := actor.CwlClient.DescribeLogStreams(context.TODO(),&cloudwatchlogs.DescribeLogStreamsInput{
Descending:aws.Bool(true),
Limit:
aws.Int32(1),LogGroupName: aws.String(logGroupName),
OrderBy:
types.OrderByLastEventTime,})if err != nil {log.Printf("Couldn't get log streams for log group %v. Here's why: %v\n",logGroupName, err)
} else {logStream = output.LogStreams[0]}return logStream, err}// GetLogEvents gets the most recent eventCount events from the specified log
stream.
func (actor CloudWatchLogsActions) GetLogEvents(functionName string,logStreamName string, eventCount int32) ([]types.OutputLogEvent, error) {
シナリオ

271

Amazon Cognito

開発者ガイドvar events []types.OutputLogEvent
logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName)
output, err := actor.CwlClient.GetLogEvents(context.TODO(),&cloudwatchlogs.GetLogEventsInput{
LogStreamName: aws.String(logStreamName),
Limit:
aws.Int32(eventCount),
LogGroupName: aws.String(logGroupName),})
if err != nil {log.Printf("Couldn't get log event for log stream %v. Here's why: %v\n",logStreamName, err)
} else {events = output.Events}
return events, err}

AWS CloudFormation アクションをラップする構造体を作成します。

// StackOutputs defines a map of outputs from a specific stack.
type StackOutputs map[string]string
type CloudFormationActions struct {CfnClient *cloudformation.Client}// GetOutputs gets the outputs from a CloudFormation stack and puts them into a
structured format.
func (actor CloudFormationActions) GetOutputs(stackName string) StackOutputs {output, err := actor.CfnClient.DescribeStacks(context.TODO(),&cloudformation.DescribeStacksInput{
StackName: aws.String(stackName),})
if err != nil || len(output.Stacks) == 0 {log.Panicf("Couldn't find a CloudFormation stack named %v. Here's why: %v\n",stackName, err)}
stackOutputs := StackOutputs{}
for _, out := range output.Stacks[0].Outputs {stackOutputs[*out.OutputKey] = *out.OutputValue
シナリオ

272

Amazon Cognito

開発者ガイド}return stackOutputs}

リソースをクリーンアップします。

// Resources keeps track of AWS resources created during an example and handles// cleanup when the example finishes.
type Resources struct {userPoolId
stringuserAccessTokens []string
triggers[]actions.Trigger
cognitoActor *actions.CognitoActions
questioner
demotools.IQuestioner}
func (resources *Resources) init(cognitoActor *actions.CognitoActions, questioner
demotools.IQuestioner) {resources.userAccessTokens = []string{}
resources.triggers = []actions.Trigger{}
resources.cognitoActor = cognitoActor
resources.questioner = questioner}// Cleanup deletes all AWS resources created during an example.
func (resources *Resources) Cleanup() {defer func() {if r := recover(); r != nil {log.Printf("Something went wrong during cleanup.\n%v\n", r)log.Println("Use the AWS Management Console to remove any remaining resources\n" +"that were created for this scenario.")}}()wantDelete := resources.questioner.AskBool("Do you want to remove all of the AWS
resources that were created "+"during this demo (y/n)?", "y")if wantDelete {
シナリオ

273

Amazon Cognito

開発者ガイドfor _, accessToken := range resources.userAccessTokens {err := resources.cognitoActor.DeleteUser(accessToken)
if err != nil {log.Println("Couldn't delete user during cleanup.")panic(err)}log.Println("Deleted user.")}triggerList := make([]actions.TriggerInfo, len(resources.triggers))
for i := 0; i < len(resources.triggers); i++ {triggerList[i] = actions.TriggerInfo{Trigger: resources.triggers[i],HandlerArn: nil}}
err := resources.cognitoActor.UpdateTriggers(resources.userPoolId,
triggerList...)if err != nil {log.Println("Couldn't update Cognito triggers during cleanup.")panic(err)}log.Println("Removed Cognito triggers from user pool.")} else {log.Println("Be sure to remove resources when you're done with them to avoid
unexpected charges!")}}• API 詳細については、「 AWS SDK for Go APIリファレンス」の以下のトピックを参照してください。
• DeleteUser• InitiateAuth• SignUp• UpdateUserPool
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

シナリオ

274

Amazon Cognito

開発者ガイドを使用して Lambda 関数を使用して既知の Amazon Cognito ユーザーを自動的に移行
する AWS SDK
次のコード例は、Lambda 関数を使用して登録済みの Amazon Cognito ユーザーを自動的に移行する
方法を示しています。
• MigrateUser トリガーの Lambda 関数を呼び出すようにユーザープールを設定します。
• ユーザープールにないユーザー名と E メールで Amazon Cognito にサインインします。
• Lambda 関数は DynamoDB テーブルをスキャンし、登録済みのユーザーをユーザープールに自動的に移行します。
• パスワードを忘れた場合のフローを実行して、移行したユーザーのパスワードをリセットします。
• 新しいユーザーとしてサインインし、リソースをクリーンアップします。
Go
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

コマンドプロンプトからインタラクティブのシナリオを実行します。

import ("errors"
"fmt"
"log"
"strings""user_pools_and_lambda_triggers/actions""github.com/aws/aws-sdk-go-v2/aws""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider""github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types""github.com/awsdocs/aws-doc-sdk-examples/gov2/demotools"
)

シナリオ

275

Amazon Cognito

開発者ガイド// MigrateUser separates the steps of this scenario into individual functions sothat// they are simpler to read and understand.
type MigrateUser struct {helper
IScenarioHelper
questioner
demotools.IQuestioner
resources
Resources
cognitoActor *actions.CognitoActions}// NewMigrateUser constructs a new migrate user runner.
func NewMigrateUser(sdkConfig aws.Config, questioner demotools.IQuestioner,
helper IScenarioHelper) MigrateUser {scenario := MigrateUser{
helper:helper,questioner:questioner,
resources:
Resources{},cognitoActor: &actions.CognitoActions{CognitoClient:cognitoidentityprovider.NewFromConfig(sdkConfig)},}
scenario.resources.init(scenario.cognitoActor, questioner)
return scenario}// AddMigrateUserTrigger adds a Lambda handler as an invocation target for the
MigrateUser trigger.
func (runner *MigrateUser) AddMigrateUserTrigger(userPoolId string, functionArn
string) {log.Printf("Let's add a Lambda function to handle the MigrateUser trigger from
Cognito.\n" +"This trigger happens when an unknown user signs in, and lets your function
take action before Cognito\n" +"rejects the user.\n\n")err := runner.cognitoActor.UpdateTriggers(
userPoolId,
actions.TriggerInfo{Trigger: actions.UserMigration, HandlerArn:
aws.String(functionArn)})
if err != nil {panic(err)}log.Printf("Lambda function %v added to user pool %v to handle the MigrateUser
trigger.\n",functionArn, userPoolId)

シナリオ

276

Amazon Cognito

開発者ガイドlog.Println(strings.Repeat("-", 88))}// SignInUser adds a new user to the known users table and signs that user in toAmazon Cognito.
func (runner *MigrateUser) SignInUser(usersTable string, clientId string) (bool,
actions.User) {log.Println("Let's sign in a user to your Cognito user pool. When the username
and email matches an entry in the\n" +"DynamoDB known users table, the email is automatically verified and the user
is migrated to the Cognito user pool.")user := actions.User{}user.UserName = runner.questioner.Ask("\nEnter a username:")user.UserEmail = runner.questioner.Ask("\nEnter an email that you own. Thisemail will be used to confirm user migration\n" +"during this example:")runner.helper.AddKnownUser(usersTable, user)
var err error
var resetRequired *types.PasswordResetRequiredException
var authResult *types.AuthenticationResultTypesignedIn := false
for !signedIn && resetRequired == nil {log.Printf("Signing in to Cognito as user '%v'. The expected result is a
PasswordResetRequiredException.\n\n", user.UserName)
authResult, err = runner.cognitoActor.SignIn(clientId, user.UserName, "_")
if err != nil {if errors.As(err, &resetRequired) {log.Printf("\nUser '%v' is not in the Cognito user pool but was found in the
DynamoDB known users table.\n"+"User migration is started and a password reset is required.",user.UserName)} else {panic(err)}} else {log.Printf("User '%v' successfully signed in. This is unexpected and probably
means you have not\n"+"cleaned up a previous run of this scenario, so the user exist in the Cognito
user pool.\n"+"You can continue this example and select to clean up resources, or manually
remove\n"+

シナリオ

277

Amazon Cognito

開発者ガイド"the user from your user pool and try again.", user.UserName)runner.resources.userAccessTokens = append(runner.resources.userAccessTokens,*authResult.AccessToken)
signedIn = true}}
log.Println(strings.Repeat("-", 88))
return resetRequired != nil, user}// ResetPassword starts a password recovery flow.
func (runner *MigrateUser) ResetPassword(clientId string, user actions.User) {wantCode := runner.questioner.AskBool(fmt.Sprintf("In order to migrate the user
to Cognito, you must be able to receive a confirmation\n"+"code by email at %v. Do you want to send a code (y/n)?", user.UserEmail), "y")if !wantCode {log.Println("To complete this example and successfully migrate a user to
Cognito, you must enter an email\n" +"you own that can receive a confirmation code.")return}codeDelivery, err := runner.cognitoActor.ForgotPassword(clientId, user.UserName)
if err != nil {panic(err)}log.Printf("\nA confirmation code has been sent to %v.",*codeDelivery.Destination)code := runner.questioner.Ask("Check your email and enter it here:")confirmed := false
password := runner.questioner.AskPassword("\nEnter a password that has at least
eight characters, uppercase, lowercase, numbers and symbols.\n"+"(the password will not display as you type):", 8)
for !confirmed {log.Printf("\nConfirming password reset for user '%v'.\n", user.UserName)
err = runner.cognitoActor.ConfirmForgotPassword(clientId, code, user.UserName,password)
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {password = runner.questioner.AskPassword("\nEnter another password:", 8)} else {panic(err)

シナリオ

278

Amazon Cognito

開発者ガイド}} else {confirmed = true}}
log.Printf("User '%v' successfully confirmed and migrated.\n", user.UserName)
log.Println("Signing in with your username and password...")
authResult, err := runner.cognitoActor.SignIn(clientId, user.UserName, password)
if err != nil {panic(err)}log.Printf("Successfully signed in. Your access token starts with: %v...\n",(*authResult.AccessToken)[:10])
runner.resources.userAccessTokens = append(runner.resources.userAccessTokens,*authResult.AccessToken)
log.Println(strings.Repeat("-", 88))}// Run runs the scenario.
func (runner *MigrateUser) Run(stackName string) {defer func() {if r := recover(); r != nil {log.Println("Something went wrong with the demo.")runner.resources.Cleanup()}}()
log.Println(strings.Repeat("-", 88))
log.Printf("Welcome\n")log.Println(strings.Repeat("-", 88))
stackOutputs, err := runner.helper.GetStackOutputs(stackName)
if err != nil {panic(err)}runner.resources.userPoolId = stackOutputs["UserPoolId"]
runner.AddMigrateUserTrigger(stackOutputs["UserPoolId"],
stackOutputs["MigrateUserFunctionArn"])
runner.resources.triggers = append(runner.resources.triggers,
actions.UserMigration)

シナリオ

279

Amazon Cognito

開発者ガイドresetNeeded, user := runner.SignInUser(stackOutputs["TableName"],stackOutputs["UserPoolClientId"])
if resetNeeded {runner.helper.ListRecentLogEvents(stackOutputs["MigrateUserFunction"])runner.ResetPassword(stackOutputs["UserPoolClientId"], user)}
runner.resources.Cleanup()
log.Println(strings.Repeat("-", 88))
log.Println("Thanks for watching!")log.Println(strings.Repeat("-", 88))}

Lambda 関数を使用して MigrateUser トリガーを処理します。

const TABLE_NAME = "TABLE_NAME"// UserInfo defines structured user data that can be marshalled to a DynamoDB
format.
type UserInfo struct {UserName string `dynamodbav:"UserName"`
UserEmail string `dynamodbav:"UserEmail"`}
type handler struct {dynamoClient *dynamodb.Client}// HandleRequest handles the MigrateUser event by looking up a user in an Amazon
DynamoDB table and// specifying whether they should be migrated to the user pool.
func (h *handler) HandleRequest(ctx context.Context, event
events.CognitoEventUserPoolsMigrateUser)(events.CognitoEventUserPoolsMigrateUser, error) {log.Printf("Received migrate trigger from %v for user '%v'",
event.TriggerSource, event.UserName)
if event.TriggerSource != "UserMigration_Authentication" {return event, nil
}
シナリオ

280

Amazon Cognito

開発者ガイドtableName := os.Getenv(TABLE_NAME)
user := UserInfo{
UserName: event.UserName,}
log.Printf("Looking up user '%v' in table %v.\n", user.UserName, tableName)filterEx := expression.Name("UserName").Equal(expression.Value(user.UserName))
expr, err := expression.NewBuilder().WithFilter(filterEx).Build()
if err != nil {log.Printf("Error building expression to query for user '%v'.\n",user.UserName)
return event, err}
output, err := h.dynamoClient.Scan(ctx, &dynamodb.ScanInput{
TableName:
aws.String(tableName),
FilterExpression:
expr.Filter(),ExpressionAttributeNames: expr.Names(),ExpressionAttributeValues: expr.Values(),})
if err != nil {log.Printf("Error looking up user '%v'.\n", user.UserName)
return event, err}
if output.Items == nil || len(output.Items) == 0 {log.Printf("User '%v' not found, not migrating user.\n", user.UserName)
return event, err}
var users []UserInfo
err = attributevalue.UnmarshalListOfMaps(output.Items, &users)
if err != nil {log.Printf("Couldn't unmarshal DynamoDB items. Here's why: %v\n", err)
return event, err}
user = users[0]log.Printf("UserName '%v' found with email %v. User is migrated and must reset
password.\n", user.UserName, user.UserEmail)event.CognitoEventUserPoolsMigrateUserResponse.UserAttributes =map[string]string{"email":user.UserEmail,"email_verified": "true", // email_verified is required for the forgot password
flow.
}

シナリオ

281

Amazon Cognito

開発者ガイドevent.CognitoEventUserPoolsMigrateUserResponse.FinalUserStatus ="RESET_REQUIRED"
event.CognitoEventUserPoolsMigrateUserResponse.MessageAction = "SUPPRESS"
return event, err}
func main() {sdkConfig, err := config.LoadDefaultConfig(context.TODO())
if err != nil {log.Panicln(err)}h := handler{
dynamoClient: dynamodb.NewFromConfig(sdkConfig),}
lambda.Start(h.HandleRequest)}

一般的なタスクを実行する構造体を作成します。

// IScenarioHelper defines common functions used by the workflows in thisexample.
type IScenarioHelper interface {Pause(secs int)
GetStackOutputs(stackName string) (actions.StackOutputs, error)
PopulateUserTable(tableName string)
GetKnownUsers(tableName string) (actions.UserList, error)
AddKnownUser(tableName string, user actions.User)
ListRecentLogEvents(functionName string)}// ScenarioHelper contains AWS wrapper structs used by the workflows in thisexample.
type ScenarioHelper struct {questioner demotools.IQuestioner
dynamoActor *actions.DynamoActions
cfnActor*actions.CloudFormationActions
cwlActor*actions.CloudWatchLogsActions
isTestRun
bool
}
シナリオ

282

Amazon Cognito

開発者ガイド// NewScenarioHelper constructs a new scenario helper.
func NewScenarioHelper(sdkConfig aws.Config, questioner demotools.IQuestioner)
ScenarioHelper {scenario := ScenarioHelper{
questioner: questioner,
dynamoActor: &actions.DynamoActions{DynamoClient:dynamodb.NewFromConfig(sdkConfig)},
cfnActor:&actions.CloudFormationActions{CfnClient:cloudformation.NewFromConfig(sdkConfig)},
cwlActor:&actions.CloudWatchLogsActions{CwlClient:cloudwatchlogs.NewFromConfig(sdkConfig)},}
return scenario}// Pause waits for the specified number of seconds.
func (helper ScenarioHelper) Pause(secs int) {if !helper.isTestRun {time.Sleep(time.Duration(secs) * time.Second)}}// GetStackOutputs gets the outputs from the specified CloudFormation stack in a
structured format.
func (helper ScenarioHelper) GetStackOutputs(stackName string)(actions.StackOutputs, error) {return helper.cfnActor.GetOutputs(stackName), nil}// PopulateUserTable fills the known user table with example data.
func (helper ScenarioHelper) PopulateUserTable(tableName string) {log.Printf("First, let's add some users to the DynamoDB %v table we'll use forthis example.\n", tableName)err := helper.dynamoActor.PopulateTable(tableName)
if err != nil {panic(err)}}// GetKnownUsers gets the users from the known users table in a structured
format.
func (helper ScenarioHelper) GetKnownUsers(tableName string) (actions.UserList,
error) {

シナリオ

283

Amazon Cognito

開発者ガイドknownUsers, err := helper.dynamoActor.Scan(tableName)
if err != nil {log.Printf("Couldn't get known users from table %v. Here's why: %v\n",tableName, err)}
return knownUsers, err}// AddKnownUser adds a user to the known users table.
func (helper ScenarioHelper) AddKnownUser(tableName string, user actions.User) {log.Printf("Adding user '%v' with email '%v' to the DynamoDB known users
table...\n",user.UserName, user.UserEmail)err := helper.dynamoActor.AddUser(tableName, user)
if err != nil {panic(err)}}// ListRecentLogEvents gets the most recent log stream and events for the
specified Lambda function and displays them.
func (helper ScenarioHelper) ListRecentLogEvents(functionName string) {log.Println("Waiting a few seconds to let Lambda write to CloudWatch Logs...")
helper.Pause(10)log.Println("Okay, let's check the logs to find what's happened recently withyour Lambda function.")logStream, err := helper.cwlActor.GetLatestLogStream(functionName)
if err != nil {panic(err)}log.Printf("Getting some recent events from log stream %v\n",*logStream.LogStreamName)
events, err := helper.cwlActor.GetLogEvents(functionName,*logStream.LogStreamName, 10)if err != nil {panic(err)}for _, event := range events {log.Printf("\t%v", *event.Message)}log.Println(strings.Repeat("-", 88))
}

シナリオ

284

Amazon Cognito

開発者ガイドAmazon Cognito アクションをラップする構造体を作成します。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client}// Trigger and TriggerInfo define typed data for updating an Amazon Cognito
trigger.
type Trigger int
const (
PreSignUp Trigger = iota
UserMigration
PostAuthentication)
type TriggerInfo struct {Trigger
Trigger
HandlerArn *string}// UpdateTriggers adds or removes Lambda triggers for a user pool. When a trigger
is specified with a `nil` value,// it is removed from the user pool.
func (actor CognitoActions) UpdateTriggers(userPoolId string,
triggers ...TriggerInfo) error {output, err := actor.CognitoClient.DescribeUserPool(context.TODO(),&cognitoidentityprovider.DescribeUserPoolInput{
UserPoolId: aws.String(userPoolId),})
if err != nil {log.Printf("Couldn't get info about user pool %v. Here's why: %v\n",userPoolId, err)
return err}
lambdaConfig := output.UserPool.LambdaConfig
for _, trigger := range triggers {
シナリオ

285

Amazon Cognito

開発者ガイドswitch trigger.Trigger {case PreSignUp:
lambdaConfig.PreSignUp = trigger.HandlerArncase UserMigration:
lambdaConfig.UserMigration = trigger.HandlerArncase PostAuthentication:
lambdaConfig.PostAuthentication = trigger.HandlerArn}}_, err = actor.CognitoClient.UpdateUserPool(context.TODO(),&cognitoidentityprovider.UpdateUserPoolInput{
UserPoolId:
aws.String(userPoolId),
LambdaConfig: lambdaConfig,})
if err != nil {log.Printf("Couldn't update user pool %v. Here's why: %v\n", userPoolId, err)}
return err}// SignUp signs up a user with Amazon Cognito.
func (actor CognitoActions) SignUp(clientId string, userName string, password
string, userEmail string) (bool, error) {confirmed := false
output, err := actor.CognitoClient.SignUp(context.TODO(),&cognitoidentityprovider.SignUpInput{
ClientId: aws.String(clientId),
Password: aws.String(password),
Username: aws.String(userName),
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value: aws.String(userEmail)},},})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't sign up user %v. Here's why: %v\n", userName, err)}
} else {confirmed = output.UserConfirmed

シナリオ

286

Amazon Cognito

開発者ガイド}return confirmed, err}// SignIn signs in a user to Amazon Cognito using a username and password
authentication flow.
func (actor CognitoActions) SignIn(clientId string, userName string, password
string) (*types.AuthenticationResultType, error) {var authResult *types.AuthenticationResultType
output, err := actor.CognitoClient.InitiateAuth(context.TODO(),&cognitoidentityprovider.InitiateAuthInput{
AuthFlow:"USER_PASSWORD_AUTH",
ClientId:
aws.String(clientId),
AuthParameters: map[string]string{"USERNAME": userName, "PASSWORD": password},})
if err != nil {var resetRequired *types.PasswordResetRequiredException
if errors.As(err, &resetRequired) {log.Println(*resetRequired.Message)} else {log.Printf("Couldn't sign in user %v. Here's why: %v\n", userName, err)}
} else {authResult = output.AuthenticationResult}
return authResult, err}// ForgotPassword starts a password recovery flow for a user. This flow typicallysends a confirmation code// to the user's configured notification destination, such as email.
func (actor CognitoActions) ForgotPassword(clientId string, userName string)(*types.CodeDeliveryDetailsType, error) {output, err := actor.CognitoClient.ForgotPassword(context.TODO(),&cognitoidentityprovider.ForgotPasswordInput{
ClientId: aws.String(clientId),
Username: aws.String(userName),})
if err != nil {

シナリオ

287

Amazon Cognito

開発者ガイドlog.Printf("Couldn't start password reset for user '%v'. Here;s why: %v\n",userName, err)}
return output.CodeDeliveryDetails, err}// ConfirmForgotPassword confirms a user with a confirmation code and a new
password.
func (actor CognitoActions) ConfirmForgotPassword(clientId string, code string,userName string, password string) error {_, err := actor.CognitoClient.ConfirmForgotPassword(context.TODO(),&cognitoidentityprovider.ConfirmForgotPasswordInput{
ClientId:
aws.String(clientId),
ConfirmationCode: aws.String(code),
Password:
aws.String(password),
Username:
aws.String(userName),})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't confirm user %v. Here's why: %v", userName, err)}}
return err}// DeleteUser removes a user from the user pool.
func (actor CognitoActions) DeleteUser(userAccessToken string) error {_, err := actor.CognitoClient.DeleteUser(context.TODO(),&cognitoidentityprovider.DeleteUserInput{
AccessToken: aws.String(userAccessToken),})if err != nil {log.Printf("Couldn't delete user. Here's why: %v\n", err)}
return err
}

シナリオ

288

Amazon Cognito

開発者ガイド// AdminCreateUser uses administrator credentials to add a user to a user pool.
This method leaves the user// in a state that requires they enter a new password next time they sign in.
func (actor CognitoActions) AdminCreateUser(userPoolId string, userName string,userEmail string) error {_, err := actor.CognitoClient.AdminCreateUser(context.TODO(),&cognitoidentityprovider.AdminCreateUserInput{
UserPoolId:
aws.String(userPoolId),
Username:
aws.String(userName),
MessageAction: types.MessageActionTypeSuppress,
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value:
aws.String(userEmail)}},})if err != nil {var userExists *types.UsernameExistsException
if errors.As(err, &userExists) {log.Printf("User %v already exists in the user pool.", userName)
err = nil
} else {log.Printf("Couldn't create user %v. Here's why: %v\n", userName, err)}}
return err}// AdminSetUserPassword uses administrator credentials to set a password for auser without requiring a// temporary password.
func (actor CognitoActions) AdminSetUserPassword(userPoolId string, userName
string, password string) error {_, err := actor.CognitoClient.AdminSetUserPassword(context.TODO(),&cognitoidentityprovider.AdminSetUserPasswordInput{
Password:
aws.String(password),
UserPoolId: aws.String(userPoolId),
Username:
aws.String(userName),
Permanent: true,})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {

シナリオ

289

Amazon Cognito

開発者ガイドlog.Println(*invalidPassword.Message)} else {log.Printf("Couldn't set password for user %v. Here's why: %v\n", userName,err)}}return err}

DynamoDB アクションをラップする構造体を作成します。

// DynamoActions encapsulates the Amazon Simple Notification Service (Amazon SNS)actions// used in the examples.
type DynamoActions struct {DynamoClient *dynamodb.Client}// User defines structured user data.
type User struct {UserName string
UserEmail string
LastLogin *LoginInfo `dynamodbav:",omitempty"`}// LoginInfo defines structured custom login data.
type LoginInfo struct {UserPoolId string
ClientId
stringTime
string}// UserList defines a list of users.
type UserList struct {Users []User}// UserNameList returns the usernames contained in a UserList as a list of
strings.
func (users *UserList) UserNameList() []string {
シナリオ

290

Amazon Cognito

開発者ガイドnames := make([]string, len(users.Users))
for i := 0; i < len(users.Users); i++ {names[i] = users.Users[i].UserName}
return names}// PopulateTable adds a set of test users to the table.
func (actor DynamoActions) PopulateTable(tableName string) error {var err error
var item map[string]types.AttributeValuevar writeReqs []types.WriteRequest
for i := 1; i < 4; i++ {item, err = attributevalue.MarshalMap(User{UserName: fmt.Sprintf("test_user_%v", i), UserEmail: fmt.Sprintf("test_email_%v@example.com", i)})
if err != nil {log.Printf("Couldn't marshall user into DynamoDB format. Here's why: %v\n",err)
return err}
writeReqs = append(writeReqs, types.WriteRequest{PutRequest:&types.PutRequest{Item: item}})}_, err = actor.DynamoClient.BatchWriteItem(context.TODO(),&dynamodb.BatchWriteItemInput{
RequestItems: map[string][]types.WriteRequest{tableName: writeReqs},})
if err != nil {log.Printf("Couldn't populate table %v with users. Here's why: %v\n",tableName, err)}
return err}// Scan scans the table for all items.
func (actor DynamoActions) Scan(tableName string) (UserList, error) {var userList UserList
output, err := actor.DynamoClient.Scan(context.TODO(), &dynamodb.ScanInput{
TableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't scan table %v for items. Here's why: %v\n", tableName,err)} else {

シナリオ

291

Amazon Cognito

開発者ガイドerr = attributevalue.UnmarshalListOfMaps(output.Items, &userList.Users)
if err != nil {log.Printf("Couldn't unmarshal items into users. Here's why: %v\n", err)}}
return userList, err}// AddUser adds a user item to a table.
func (actor DynamoActions) AddUser(tableName string, user User) error {userItem, err := attributevalue.MarshalMap(user)
if err != nil {log.Printf("Couldn't marshall user to item. Here's why: %v\n", err)}_, err = actor.DynamoClient.PutItem(context.TODO(), &dynamodb.PutItemInput{
Item:
userItem,
TableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't put item in table %v. Here's why: %v", tableName, err)}
return err}

Logs CloudWatch アクションをラップする構造体を作成します。

type CloudWatchLogsActions struct {CwlClient *cloudwatchlogs.Client}// GetLatestLogStream gets the most recent log stream for a Lambda function.
func (actor CloudWatchLogsActions) GetLatestLogStream(functionName string)(types.LogStream, error) {var logStream types.LogStream
logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName)
output, err := actor.CwlClient.DescribeLogStreams(context.TODO(),&cloudwatchlogs.DescribeLogStreamsInput{
Descending:aws.Bool(true),
Limit:
aws.Int32(1),LogGroupName: aws.String(logGroupName),
シナリオ

292

Amazon Cognito

開発者ガイドOrderBy:
types.OrderByLastEventTime,})if err != nil {log.Printf("Couldn't get log streams for log group %v. Here's why: %v\n",logGroupName, err)
} else {logStream = output.LogStreams[0]}return logStream, err}// GetLogEvents gets the most recent eventCount events from the specified log
stream.
func (actor CloudWatchLogsActions) GetLogEvents(functionName string,logStreamName string, eventCount int32) ([]types.OutputLogEvent, error) {var events []types.OutputLogEvent
logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName)
output, err := actor.CwlClient.GetLogEvents(context.TODO(),&cloudwatchlogs.GetLogEventsInput{
LogStreamName: aws.String(logStreamName),
Limit:
aws.Int32(eventCount),
LogGroupName: aws.String(logGroupName),})
if err != nil {log.Printf("Couldn't get log event for log stream %v. Here's why: %v\n",logStreamName, err)
} else {events = output.Events}
return events, err}

AWS CloudFormation アクションをラップする構造体を作成します。

// StackOutputs defines a map of outputs from a specific stack.
type StackOutputs map[string]string
type CloudFormationActions struct {CfnClient *cloudformation.Client
シナリオ

293

Amazon Cognito

開発者ガイド}// GetOutputs gets the outputs from a CloudFormation stack and puts them into a
structured format.
func (actor CloudFormationActions) GetOutputs(stackName string) StackOutputs {output, err := actor.CfnClient.DescribeStacks(context.TODO(),&cloudformation.DescribeStacksInput{
StackName: aws.String(stackName),})
if err != nil || len(output.Stacks) == 0 {log.Panicf("Couldn't find a CloudFormation stack named %v. Here's why: %v\n",stackName, err)}
stackOutputs := StackOutputs{}
for _, out := range output.Stacks[0].Outputs {stackOutputs[*out.OutputKey] = *out.OutputValue}
return stackOutputs}

リソースをクリーンアップします。

// Resources keeps track of AWS resources created during an example and handles// cleanup when the example finishes.
type Resources struct {userPoolId
stringuserAccessTokens []string
triggers[]actions.Trigger
cognitoActor *actions.CognitoActions
questioner

demotools.IQuestioner}
func (resources *Resources) init(cognitoActor *actions.CognitoActions, questioner
demotools.IQuestioner) {resources.userAccessTokens = []string{}
resources.triggers = []actions.Trigger{}
resources.cognitoActor = cognitoActor
resources.questioner = questioner
}
シナリオ

294

Amazon Cognito

開発者ガイド// Cleanup deletes all AWS resources created during an example.
func (resources *Resources) Cleanup() {defer func() {if r := recover(); r != nil {log.Printf("Something went wrong during cleanup.\n%v\n", r)log.Println("Use the AWS Management Console to remove any remaining resources\n" +"that were created for this scenario.")}}()wantDelete := resources.questioner.AskBool("Do you want to remove all of the AWS
resources that were created "+"during this demo (y/n)?", "y")if wantDelete {for _, accessToken := range resources.userAccessTokens {err := resources.cognitoActor.DeleteUser(accessToken)
if err != nil {log.Println("Couldn't delete user during cleanup.")panic(err)}log.Println("Deleted user.")}triggerList := make([]actions.TriggerInfo, len(resources.triggers))
for i := 0; i < len(resources.triggers); i++ {triggerList[i] = actions.TriggerInfo{Trigger: resources.triggers[i],HandlerArn: nil}}
err := resources.cognitoActor.UpdateTriggers(resources.userPoolId,
triggerList...)if err != nil {log.Println("Couldn't update Cognito triggers during cleanup.")panic(err)}log.Println("Removed Cognito triggers from user pool.")} else {log.Println("Be sure to remove resources when you're done with them to avoid
unexpected charges!")
}
}

シナリオ

295

Amazon Cognito

開発者ガイド• API 詳細については、「 AWS SDK for Go APIリファレンス」の以下のトピックを参照してください。
• ConfirmForgotPassword• DeleteUser• ForgotPassword• InitiateAuth• SignUp• UpdateUserPool
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

MFA を使用する必要がある Amazon Cognito ユーザープールでユーザーをサインアッ
プする AWS SDK
次のコード例は、以下を実行する方法を示しています。
• ユーザー名、パスワード、E メールアドレスでサインアップしてユーザーを確認します。
• MFA アプリケーションをユーザーに関連付けることで、多要素認証を設定します。
• パスワードとMFAコードを使用してサインインします。
.NET
AWS SDK for .NET
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

namespace CognitoBasics;
public class CognitoBasics
{
シナリオ

296

Amazon Cognito

開発者ガイドprivate static ILogger logger = null!;static async Task Main(string[] args){// Set up dependency injection for Amazon Cognito.
using var host = Host.CreateDefaultBuilder(args).ConfigureLogging(logging =>logging.AddFilter("System", LogLevel.Debug).AddFilter<DebugLoggerProvider>("Microsoft",
LogLevel.Information).AddFilter<ConsoleLoggerProvider>("Microsoft",
LogLevel.Trace)).ConfigureServices((_, services) =>services.AddAWSService<IAmazonCognitoIdentityProvider>().AddTransient<CognitoWrapper>()).Build();logger = LoggerFactory.Create(builder => { builder.AddConsole(); }).CreateLogger<CognitoBasics>();var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("settings.json") // Load settings from .json file.
.AddJsonFile("settings.local.json",true) // Optionally load local settings.
.Build();var cognitoWrapper = host.Services.GetRequiredService<CognitoWrapper>();Console.WriteLine(new string('-', 80));
UiMethods.DisplayOverview();
Console.WriteLine(new string('-', 80));// clientId - The app client Id value that you get from the AWS CDK
script.
var clientId = configuration["ClientId"]; // "*** REPLACE WITH CLIENT ID
VALUE FROM CDK SCRIPT";// poolId - The pool Id that you get from the AWS CDK script.
var poolId = configuration["PoolId"]!; // "*** REPLACE WITH POOL ID VALUEFROM CDK SCRIPT";var userName = configuration["UserName"];var password = configuration["Password"];

シナリオ

297

Amazon Cognito

開発者ガイドvar email = configuration["Email"];// If the username wasn't set in the configuration file,// get it from the user now.
if (userName is null){do{Console.Write("Username: ");userName = Console.ReadLine();}while (string.IsNullOrEmpty(userName));}Console.WriteLine($"\nUsername: {userName}");// If the password wasn't set in the configuration file,// get it from the user now.
if (password is null){do{Console.Write("Password: ");password = Console.ReadLine();}while (string.IsNullOrEmpty(password));}// If the email address wasn't set in the configuration file,// get it from the user now.
if (email is null){do{Console.Write("Email: ");email = Console.ReadLine();} while (string.IsNullOrEmpty(email));}// Now sign up the user.
Console.WriteLine($"\nSigning up {userName} with email address:{email}");await cognitoWrapper.SignUpAsync(clientId, userName, password, email);// Add the user to the user pool.

シナリオ

298

Amazon Cognito

開発者ガイドConsole.WriteLine($"Adding {userName} to the user pool");
await cognitoWrapper.GetAdminUserAsync(userName, poolId);
UiMethods.DisplayTitle("Get confirmation code");Console.WriteLine($"Conformation code sent to {userName}.");
Console.Write("Would you like to send a new code? (Y/N) ");var answer = Console.ReadLine();if (answer!.ToLower() == "y"){await cognitoWrapper.ResendConfirmationCodeAsync(clientId, userName);
Console.WriteLine("Sending a new confirmation code");}Console.Write("Enter confirmation code (from Email): ");var code = Console.ReadLine();await cognitoWrapper.ConfirmSignupAsync(clientId, code, userName);
UiMethods.DisplayTitle("Checking status");
Console.WriteLine($"Rechecking the status of {userName} in the userpool");
await cognitoWrapper.GetAdminUserAsync(userName, poolId);
Console.WriteLine($"Setting up authenticator for {userName} in the userpool");
var setupResponse = await cognitoWrapper.InitiateAuthAsync(clientId,
userName, password);var setupSession = await
cognitoWrapper.AssociateSoftwareTokenAsync(setupResponse.Session);
Console.Write("Enter the 6-digit code displayed in Google Authenticator:");
var setupCode = Console.ReadLine();var setupResult = await
cognitoWrapper.VerifySoftwareTokenAsync(setupSession, setupCode);
Console.WriteLine($"Setup status: {setupResult}");Console.WriteLine($"Now logging in {userName} in the user pool");var authSession = await cognitoWrapper.AdminInitiateAuthAsync(clientId,
poolId, userName, password);

シナリオ

299

Amazon Cognito

開発者ガイドConsole.Write("Enter a new 6-digit code displayed in Google
Authenticator: ");var authCode = Console.ReadLine();var authResult = await
cognitoWrapper.AdminRespondToAuthChallengeAsync(userName, clientId, authCode,authSession, poolId);
Console.WriteLine($"Authenticated and received access token:{authResult.AccessToken}");Console.WriteLine(new string('-', 80));
Console.WriteLine("Cognito scenario is complete.");Console.WriteLine(new string('-', 80));}}

using System.Net;
namespace CognitoActions;/// <summary>/// Methods to perform Amazon Cognito Identity Provider actions.
/// </summary>public class CognitoWrapper{
private readonly IAmazonCognitoIdentityProvider _cognitoService;/// <summary>/// Constructor for the wrapper class containing Amazon Cognito actions.
/// </summary>/// <param name="cognitoService">The Amazon Cognito client object.</param>
public CognitoWrapper(IAmazonCognitoIdentityProvider cognitoService){_cognitoService = cognitoService;}/// <summary>/// List the Amazon Cognito user pools for an account.
/// </summary>/// <returns>A list of UserPoolDescriptionType objects.</returns>
public async Task<List<UserPoolDescriptionType>> ListUserPoolsAsync(){
var userPools = new List<UserPoolDescriptionType>();

シナリオ

300

Amazon Cognito

開発者ガイドvar userPoolsPaginator = _cognitoService.Paginators.ListUserPools(newListUserPoolsRequest());
await foreach (var response in userPoolsPaginator.Responses){
userPools.AddRange(response.UserPools);}
return userPools;}/// <summary>/// Get a list of users for the Amazon Cognito user pool.
/// </summary>/// <param name="userPoolId">The user pool ID.</param>/// <returns>A list of users.</returns>
public async Task<List<UserType>> ListUsersAsync(string userPoolId){var request = new ListUsersRequest{
UserPoolId = userPoolId};
var users = new List<UserType>();var usersPaginator = _cognitoService.Paginators.ListUsers(request);
await foreach (var response in usersPaginator.Responses){
users.AddRange(response.Users);}
return users;}/// <summary>/// Respond to an admin authentication challenge.
/// </summary>/// <param name="userName">The name of the user.</param>/// <param name="clientId">The client ID.</param>/// <param name="mfaCode">The multi-factor authentication code.</param>/// <param name="session">The current application session.</param>

シナリオ

301

Amazon Cognito

開発者ガイド/// <param name="clientId">The user pool ID.</param>/// <returns>The result of the authentication response.</returns>
public async Task<AuthenticationResultType> AdminRespondToAuthChallengeAsync(
string userName,string clientId,
string mfaCode,string session,
string userPoolId){
Console.WriteLine("SOFTWARE_TOKEN_MFA challenge is generated");var challengeResponses = new Dictionary<string, string>();challengeResponses.Add("USERNAME", userName);challengeResponses.Add("SOFTWARE_TOKEN_MFA_CODE", mfaCode);var respondToAuthChallengeRequest = new
AdminRespondToAuthChallengeRequest{
ChallengeName = ChallengeNameType.SOFTWARE_TOKEN_MFA,
ClientId = clientId,
ChallengeResponses = challengeResponses,
Session = session,
UserPoolId = userPoolId,};var response = await_cognitoService.AdminRespondToAuthChallengeAsync(respondToAuthChallengeRequest);
Console.WriteLine($"Response to Authentication{response.AuthenticationResult.TokenType}");return response.AuthenticationResult;}/// <summary>/// Verify the TOTP and register for MFA.
/// </summary>/// <param name="session">The name of the session.</param>/// <param name="code">The MFA code.</param>/// <returns>The status of the software token.</returns>
public async Task<VerifySoftwareTokenResponseType>
VerifySoftwareTokenAsync(string session, string code){
var tokenRequest = new VerifySoftwareTokenRequest
{

シナリオ

302

Amazon Cognito

開発者ガイドUserCode = code,
Session = session,};var verifyResponse = await_cognitoService.VerifySoftwareTokenAsync(tokenRequest);
return verifyResponse.Status;}/// <summary>/// Get an MFA token to authenticate the user with the authenticator.
/// </summary>/// <param name="session">The session name.</param>/// <returns>The session name.</returns>
public async Task<string> AssociateSoftwareTokenAsync(string session){
var softwareTokenRequest = new AssociateSoftwareTokenRequest{
Session = session,};
var tokenResponse = await_cognitoService.AssociateSoftwareTokenAsync(softwareTokenRequest);
var secretCode = tokenResponse.SecretCode;Console.WriteLine($"Use the following secret code to set up theauthenticator: {secretCode}");return tokenResponse.Session;}/// <summary>/// Initiate an admin auth request.
/// </summary>/// <param name="clientId">The client ID to use.</param>/// <param name="userPoolId">The ID of the user pool.</param>/// <param name="userName">The username to authenticate.</param>/// <param name="password">The user's password.</param>/// <returns>The session to use in challenge-response.</returns>
public async Task<string> AdminInitiateAuthAsync(string clientId, string
userPoolId, string userName, string password)

シナリオ

303

Amazon Cognito

開発者ガイド{var authParameters = new Dictionary<string, string>();authParameters.Add("USERNAME", userName);
authParameters.Add("PASSWORD", password);var request = new AdminInitiateAuthRequest{
ClientId = clientId,
UserPoolId = userPoolId,
AuthParameters = authParameters,
AuthFlow = AuthFlowType.ADMIN_USER_PASSWORD_AUTH,};var response = await _cognitoService.AdminInitiateAuthAsync(request);
return response.Session;}/// <summary>/// Initiate authorization.
/// </summary>/// <param name="clientId">The client Id of the application.</param>/// <param name="userName">The name of the user who is authenticating.</
param>/// <param name="password">The password for the user who is authenticating.</
param>/// <returns>The response from the initiate auth request.</returns>
public async Task<InitiateAuthResponse> InitiateAuthAsync(string clientId,
string userName, string password){
var authParameters = new Dictionary<string, string>();authParameters.Add("USERNAME", userName);
authParameters.Add("PASSWORD", password);
var authRequest = new InitiateAuthRequest{
ClientId = clientId,
AuthParameters = authParameters,
AuthFlow = AuthFlowType.USER_PASSWORD_AUTH,};var response = await _cognitoService.InitiateAuthAsync(authRequest);
Console.WriteLine($"Result Challenge is : {response.ChallengeName}");

シナリオ

304

Amazon Cognito

開発者ガイドreturn response;}/// <summary>/// Confirm that the user has signed up.
/// </summary>/// <param name="clientId">The Id of this application.</param>/// <param name="code">The confirmation code sent to the user.</param>/// <param name="userName">The username.</param>/// <returns>True if successful.</returns>
public async Task<bool> ConfirmSignupAsync(string clientId, string code,
string userName){var signUpRequest = new ConfirmSignUpRequest{
ClientId = clientId,
ConfirmationCode = code,
Username = userName,};var response = await _cognitoService.ConfirmSignUpAsync(signUpRequest);
if (response.HttpStatusCode == HttpStatusCode.OK){
Console.WriteLine($"{userName} was confirmed");return true;}
return false;}/// <summary>/// Initiates and confirms tracking of the device.
/// </summary>/// <param name="accessToken">The user's access token.</param>/// <param name="deviceKey">The key of the device from Amazon Cognito.</param>/// <param name="deviceName">The device name.</param>/// <returns></returns>
public async Task<bool> ConfirmDeviceAsync(string accessToken, string
deviceKey, string deviceName){var request = new ConfirmDeviceRequest{
AccessToken = accessToken,

シナリオ

305

Amazon Cognito

開発者ガイドDeviceKey = deviceKey,
DeviceName = deviceName};var response = await _cognitoService.ConfirmDeviceAsync(request);
return response.UserConfirmationNecessary;}/// <summary>/// Send a new confirmation code to a user.
/// </summary>/// <param name="clientId">The Id of the client application.</param>/// <param name="userName">The username of user who will receive the code.</param>/// <returns>The delivery details.</returns>
public async Task<CodeDeliveryDetailsType> ResendConfirmationCodeAsync(stringclientId, string userName){var codeRequest = new ResendConfirmationCodeRequest{
ClientId = clientId,
Username = userName,};var response = await_cognitoService.ResendConfirmationCodeAsync(codeRequest);
Console.WriteLine($"Method of delivery is{response.CodeDeliveryDetails.DeliveryMedium}");return response.CodeDeliveryDetails;}/// <summary>/// Get the specified user from an Amazon Cognito user pool withadministrator access.
/// </summary>/// <param name="userName">The name of the user.</param>/// <param name="poolId">The Id of the Amazon Cognito user pool.</param>/// <returns>Async task.</returns>
public async Task<UserStatusType> GetAdminUserAsync(string userName, string
poolId)シナリオ

306

Amazon Cognito

開発者ガイド{AdminGetUserRequest userRequest = new AdminGetUserRequest{
Username = userName,
UserPoolId = poolId,};var response = await _cognitoService.AdminGetUserAsync(userRequest);
Console.WriteLine($"User status {response.UserStatus}");return response.UserStatus;}/// <summary>/// Sign up a new user.
/// </summary>/// <param name="clientId">The client Id of the application.</param>/// <param name="userName">The username to use.</param>/// <param name="password">The user's password.</param>/// <param name="email">The email address of the user.</param>/// <returns>A Boolean value indicating whether the user was confirmed.</returns>
public async Task<bool> SignUpAsync(string clientId, string userName, string
password, string email){var userAttrs = new AttributeType{
Name = "email",
Value = email,};var userAttrsList = new List<AttributeType>();userAttrsList.Add(userAttrs);
var signUpRequest = new SignUpRequest{
UserAttributes = userAttrsList,
Username = userName,
ClientId = clientId,
Password = password
};

シナリオ

307

Amazon Cognito

開発者ガイドvar response = await _cognitoService.SignUpAsync(signUpRequest);
return response.HttpStatusCode == HttpStatusCode.OK;}}• API 詳細については、「 AWS SDK for .NET APIリファレンス」の以下のトピックを参照してください。
• AdminGetUser• AdminInitiateAuth• AdminRespondToAuthChallenge• AssociateSoftwareToken• ConfirmDevice• ConfirmSignUp• InitiateAuth• ListUsers• ResendConfirmationCode• RespondToAuthChallenge• SignUp• VerifySoftwareTokenC++SDK C++ 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

Aws::Client::ClientConfiguration clientConfig;// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
シナリオ

308

Amazon Cognito

開発者ガイド//! Scenario that adds a user to an Amazon Cognito user pool.
/*!
\sa gettingStartedWithUserPools()\param clientID: Client ID associated with an Amazon Cognito user pool.
\param userPoolID: An Amazon Cognito user pool ID.
\param clientConfig: Aws client configuration.
\return bool: Successful completion.
*/bool AwsDoc::Cognito::gettingStartedWithUserPools(const Aws::String &clientID,
const Aws::String &userPoolID,
const
Aws::Client::ClientConfiguration &clientConfig) {printAsterisksLine();std::cout<< "Welcome to the Amazon Cognito example scenario."<< std::endl;
printAsterisksLine();std::cout<< "This scenario will add a user to an Amazon Cognito user pool."<< std::endl;
const Aws::String userName = askQuestion("Enter a new username: ");const Aws::String password = askQuestion("Enter a new password: ");const Aws::String email = askQuestion("Enter a valid email for the user: ");std::cout << "Signing up " << userName << std::endl;
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient
client(clientConfig);bool userExists = false;
do {// 1. Add a user with a username, password, and email address.
Aws::CognitoIdentityProvider::Model::SignUpRequest request;
request.AddUserAttributes(
Aws::CognitoIdentityProvider::Model::AttributeType().WithName("email").WithValue(email));request.SetUsername(userName);request.SetPassword(password);request.SetClientId(clientID);
Aws::CognitoIdentityProvider::Model::SignUpOutcome outcome =client.SignUp(request);
if (outcome.IsSuccess()) {

シナリオ

309

Amazon Cognito

開発者ガイドstd::cout << "The signup request for " << userName << " wassuccessful."<< std::endl;}
else if (outcome.GetError().GetErrorType() ==Aws::CognitoIdentityProvider::CognitoIdentityProviderErrors::USERNAME_EXISTS) {std::cout<< "The username already exists. Please enter a different
username."<< std::endl;
userExists = true;}else {
std::cerr << "Error with CognitoIdentityProvider::SignUpRequest. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}} while (userExists);
printAsterisksLine();std::cout << "Retrieving status of " << userName << " in the user pool."<< std::endl;// 2. Confirm that the user was added to the user pool.
if (!checkAdminUserStatus(userName, userPoolID, client)) {return false;}
std::cout << "A confirmation code was sent to " << email << "." << std::endl;
bool resend = askYesNoQuestion("Would you like to send a new code? (y/n) ");if (resend) {// Request a resend of the confirmation code to the email address.
(ResendConfirmationCode)
Aws::CognitoIdentityProvider::Model::ResendConfirmationCodeRequest
request;request.SetUsername(userName);request.SetClientId(clientID);
Aws::CognitoIdentityProvider::Model::ResendConfirmationCodeOutcome
outcome =client.ResendConfirmationCode(request);

シナリオ

310

Amazon Cognito

開発者ガイドif (outcome.IsSuccess()) {std::cout<< "CognitoIdentityProvider::ResendConfirmationCode was
successful."<< std::endl;}
else {
std::cerr << "Error with
CognitoIdentityProvider::ResendConfirmationCode. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}}
printAsterisksLine();{// 4. Send the confirmation code that's received in the email.
(ConfirmSignUp)
const Aws::String confirmationCode = askQuestion("Enter the confirmation code that was emailed: ");Aws::CognitoIdentityProvider::Model::ConfirmSignUpRequest request;
request.SetClientId(clientID);
request.SetConfirmationCode(confirmationCode);request.SetUsername(userName);
Aws::CognitoIdentityProvider::Model::ConfirmSignUpOutcome outcome =client.ConfirmSignUp(request);
if (outcome.IsSuccess()) {std::cout << "ConfirmSignup was Successful."<< std::endl;}
else {
std::cerr << "Error with CognitoIdentityProvider::ConfirmSignUp. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}}
std::cout << "Rechecking the status of " << userName << " in the user pool."<< std::endl;

シナリオ

311

Amazon Cognito

開発者ガイドif (!checkAdminUserStatus(userName, userPoolID, client)) {return false;}
printAsterisksLine();std::cout << "Initiating authorization using the username and password."<< std::endl;
Aws::String session;// 5. Initiate authorization with username and password. (AdminInitiateAuth)if (!adminInitiateAuthorization(clientID, userPoolID, userName, password,
session, client)) {return false;}
printAsterisksLine();std::cout<< "Starting setup of time-based one-time password (TOTP) multifactor authentication (MFA)."<< std::endl;{// 6. Request a setup key for one-time password (TOTP)//
multi-factor authentication (MFA). (AssociateSoftwareToken)
Aws::CognitoIdentityProvider::Model::AssociateSoftwareTokenRequest
request;request.SetSession(session);
Aws::CognitoIdentityProvider::Model::AssociateSoftwareTokenOutcome
outcome =client.AssociateSoftwareToken(request);
if (outcome.IsSuccess()) {std::cout<< "Enter this setup key into an authenticator app, forexample Google Authenticator."<< std::endl;
std::cout << "Setup key: " << outcome.GetResult().GetSecretCode()<< std::endl;#ifdef USING_QR
printAsterisksLine();

シナリオ

312

Amazon Cognito

開発者ガイドstd::cout << "\nOr scan the QR code in the file '" << QR_CODE_PATH <<"."<< std::endl;
saveQRCode(std::string("otpauth://totp/") + userName + "?secret=" +outcome.GetResult().GetSecretCode());#endif // USING_QR
session = outcome.GetResult().GetSession();}else {
std::cerr << "Error with
CognitoIdentityProvider::AssociateSoftwareToken. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}}
askQuestion("Type enter to continue...", alwaysTrueTest);
printAsterisksLine();{Aws::String userCode = askQuestion("Enter the 6 digit code displayed in the authenticator app: ");// 7. Send the MFA code copied from an authenticator app.
(VerifySoftwareToken)
Aws::CognitoIdentityProvider::Model::VerifySoftwareTokenRequest request;
request.SetUserCode(userCode);request.SetSession(session);
Aws::CognitoIdentityProvider::Model::VerifySoftwareTokenOutcome outcome =client.VerifySoftwareToken(request);
if (outcome.IsSuccess()) {std::cout << "Verification of the code was successful."<< std::endl;
session = outcome.GetResult().GetSession();}else {
std::cerr << "Error with
CognitoIdentityProvider::VerifySoftwareToken. "<< outcome.GetError().GetMessage()<< std::endl;

シナリオ

313

Amazon Cognito

開発者ガイドreturn false;}}
printAsterisksLine();std::cout << "You have completed the MFA authentication setup." << std::endl;
std::cout << "Now, sign in." << std::endl;// 8. Initiate authorization again with username and password.
(AdminInitiateAuth)if (!adminInitiateAuthorization(clientID, userPoolID, userName, password,
session, client)) {return false;}
Aws::String accessToken;{
Aws::String mfaCode = askQuestion("Re-enter the 6 digit code displayed in the authenticator app:");// 9. Send a new MFA code copied from an authenticator app.
(AdminRespondToAuthChallenge)
Aws::CognitoIdentityProvider::Model::AdminRespondToAuthChallengeRequest
request;request.AddChallengeResponses("USERNAME", userName);request.AddChallengeResponses("SOFTWARE_TOKEN_MFA_CODE", mfaCode);request.SetChallengeName(
Aws::CognitoIdentityProvider::Model::ChallengeNameType::SOFTWARE_TOKEN_MFA);
request.SetClientId(clientID);
request.SetUserPoolId(userPoolID);
request.SetSession(session);
Aws::CognitoIdentityProvider::Model::AdminRespondToAuthChallengeOutcome
outcome =client.AdminRespondToAuthChallenge(request);
if (outcome.IsSuccess()) {std::cout << "Here is the response to the challenge.\n" <<outcome.GetResult().GetAuthenticationResult().Jsonize().View().WriteReadable()<< std::endl;

シナリオ

314

Amazon Cognito

開発者ガイドaccessToken =outcome.GetResult().GetAuthenticationResult().GetAccessToken();}else {
std::cerr << "Error with
CognitoIdentityProvider::AdminRespondToAuthChallenge. "<< outcome.GetError().GetMessage()<< std::endl;
return false;}
std::cout << "You have successfully added a user to Amazon Cognito."<< std::endl;}
if (askYesNoQuestion("Would you like to delete the user that you just added?
(y/n) ")) {// 10. Delete the user that you just added. (DeleteUser)
Aws::CognitoIdentityProvider::Model::DeleteUserRequest request;
request.SetAccessToken(accessToken);
Aws::CognitoIdentityProvider::Model::DeleteUserOutcome outcome =client.DeleteUser(request);
if (outcome.IsSuccess()) {std::cout << "The user " << userName << " was deleted."<< std::endl;}
else {
std::cerr << "Error with CognitoIdentityProvider::DeleteUser. "<< outcome.GetError().GetMessage()<< std::endl;}}
return true;}//! Routine which checks the user status in an Amazon Cognito user pool.
/*!
\sa checkAdminUserStatus()\param userName: A username.
\param userPoolID: An Amazon Cognito user pool ID.
\return bool: Successful completion.

シナリオ

315

Amazon Cognito

開発者ガイド*/bool AwsDoc::Cognito::checkAdminUserStatus(const Aws::String &userName,
const Aws::String &userPoolID,
const
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient &client) {Aws::CognitoIdentityProvider::Model::AdminGetUserRequest request;
request.SetUsername(userName);request.SetUserPoolId(userPoolID);
Aws::CognitoIdentityProvider::Model::AdminGetUserOutcome outcome =client.AdminGetUser(request);
if (outcome.IsSuccess()) {std::cout << "The status for " << userName << " is " <<Aws::CognitoIdentityProvider::Model::UserStatusTypeMapper::GetNameForUserStatusType(outcome.GetResult().GetUserStatus()) << std::endl;
std::cout << "Enabled is " << outcome.GetResult().GetEnabled() <<std::endl;}
else {
std::cerr << "Error with CognitoIdentityProvider::AdminGetUser. "<< outcome.GetError().GetMessage()<< std::endl;}
return outcome.IsSuccess();}//! Routine which starts authorization of an Amazon Cognito user.
//! This routine requires administrator credentials.
/*!
\sa adminInitiateAuthorization()\param clientID: Client ID of tracked device.
\param userPoolID: An Amazon Cognito user pool ID.
\param userName: A username.
\param password: A password.
\param sessionResult: String to receive a session token.
\return bool: Successful completion.
*/bool AwsDoc::Cognito::adminInitiateAuthorization(const Aws::String &clientID,
const Aws::String &userPoolID,
const Aws::String &userName,
const Aws::String &password,

シナリオ

316

Amazon Cognito

開発者ガイドAws::String &sessionResult,const
Aws::CognitoIdentityProvider::CognitoIdentityProviderClient &client) {Aws::CognitoIdentityProvider::Model::AdminInitiateAuthRequest request;
request.SetClientId(clientID);
request.SetUserPoolId(userPoolID);
request.AddAuthParameters("USERNAME", userName);request.AddAuthParameters("PASSWORD", password);request.SetAuthFlow(
Aws::CognitoIdentityProvider::Model::AuthFlowType::ADMIN_USER_PASSWORD_AUTH);

Aws::CognitoIdentityProvider::Model::AdminInitiateAuthOutcome outcome =client.AdminInitiateAuth(request);
if (outcome.IsSuccess()) {std::cout << "Call to AdminInitiateAuth was successful." << std::endl;
sessionResult = outcome.GetResult().GetSession();}else {
std::cerr << "Error with CognitoIdentityProvider::AdminInitiateAuth. "<< outcome.GetError().GetMessage()<< std::endl;}
return outcome.IsSuccess();}• API 詳細については、「 AWS SDK for C++ APIリファレンス」の以下のトピックを参照してください。
• AdminGetUser• AdminInitiateAuth• AdminRespondToAuthChallenge• AssociateSoftwareToken• ConfirmDevice• ConfirmSignUp• InitiateAuth• ListUsers
シナリオ

317

Amazon Cognito

開発者ガイド• ResendConfirmationCode• RespondToAuthChallenge• SignUp• VerifySoftwareTokenJava
SDK for Java 2.x
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AdminGetUserRequest;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AdminGetUserResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AdminInitiateAuthRequest;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AdminInitiateAuthResponse;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AdminRespondToAuthChalleng
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AdminRespondToAuthChalleng
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AssociateSoftwareTokenRequ
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AssociateSoftwareTokenResp
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AttributeType;importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.AuthFlowType;importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ChallengeNameType;
シナリオ

318

Amazon Cognito

開発者ガイドimportsoftware.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderExc
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ConfirmSignUpRequest;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ResendConfirmationCodeRequimportsoftware.amazon.awssdk.services.cognitoidentityprovider.model.ResendConfirmationCodeResp
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.SignUpRequest;
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.VerifySoftwareTokenRequest
importsoftware.amazon.awssdk.services.cognitoidentityprovider.model.VerifySoftwareTokenRespons
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;/*** Before running this Java V2 code example, set up your development* environment, including your credentials.
** For more information, see the following documentation:** https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/getstarted.html** TIP: To set up the required user pool, run the AWS Cloud Development Kit (AWS* CDK) script provided in this GitHub repo at* resources/cdk/cognito_scenario_user_pool_with_mfa.
** This code example performs the following operations:** 1. Invokes the signUp method to sign up a user.
* 2. Invokes the adminGetUser method to get the user's confirmation status.
* 3. Invokes the ResendConfirmationCode method if the user requested another* code.
* 4. Invokes the confirmSignUp method.
* 5. Invokes the AdminInitiateAuth to sign in. This results in being prompted* to set up TOTP (time-based one-time password). (The response is

シナリオ

319

Amazon Cognito

開発者ガイド* “ChallengeName”: “MFA_SETUP”).
* 6. Invokes the AssociateSoftwareToken method to generate a TOTP MFA private* key. This can be used with Google Authenticator.
* 7. Invokes the VerifySoftwareToken method to verify the TOTP and register for* MFA.
* 8. Invokes the AdminInitiateAuth to sign in again. This results in being* prompted to submit a TOTP (Response: “ChallengeName”: “SOFTWARE_TOKEN_MFA”).
* 9. Invokes the AdminRespondToAuthChallenge to get back a token.
*/
public class CognitoMVP {public static final String DASHES = new String(new char[80]).replace("\0","-");public static void main(String[] args) throws NoSuchAlgorithmException,
InvalidKeyException {final String usage = """Usage:<clientId> <poolId>
Where:
clientId - The app client Id value that you can get from the
AWS CDK script.
poolId - The pool Id that you can get from the AWS CDK
script.\s""";
if (args.length != 2) {System.out.println(usage);
System.exit(1);}String clientId = args[0];String poolId = args[1];CognitoIdentityProviderClient identityProviderClient =CognitoIdentityProviderClient.builder().region(Region.US_EAST_1).build();System.out.println(DASHES);
System.out.println("Welcome to the Amazon Cognito example scenario.");System.out.println(DASHES);

シナリオ

320

Amazon Cognito

開発者ガイドSystem.out.println(DASHES);
System.out.println("*** Enter your user name");Scanner in = new Scanner(System.in);
String userName = in.nextLine();System.out.println("*** Enter your password");String password = in.nextLine();System.out.println("*** Enter your email");
String email = in.nextLine();System.out.println("1. Signing up " + userName);
signUp(identityProviderClient, clientId, userName, password, email);
System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("2. Getting " + userName + " in the user pool");getAdminUser(identityProviderClient, userName, poolId);
System.out.println("*** Conformation code sent to " + userName + ". Would
you like to send a new code? (Yes/No)");System.out.println(DASHES);
System.out.println(DASHES);
String ans = in.nextLine();if (ans.compareTo("Yes") == 0) {resendConfirmationCode(identityProviderClient, clientId, userName);
System.out.println("3. Sending a new confirmation code");}System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("4. Enter confirmation code that was emailed");String code = in.nextLine();confirmSignUp(identityProviderClient, clientId, code, userName);
System.out.println("Rechecking the status of " + userName + " in the userpool");
getAdminUser(identityProviderClient, userName, poolId);
System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("5. Invokes the initiateAuth to sign in");

シナリオ

321

Amazon Cognito

開発者ガイドAdminInitiateAuthResponse authResponse =
initiateAuth(identityProviderClient, clientId, userName, password,
poolId);String mySession = authResponse.session();
System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("6. Invokes the AssociateSoftwareToken method togenerate a TOTP key");
String newSession = getSecretForAppMFA(identityProviderClient,
mySession);
System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("*** Enter the 6-digit code displayed in Google
Authenticator");
String myCode = in.nextLine();System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("7. Verify the TOTP and register for MFA");
verifyTOTP(identityProviderClient, newSession, myCode);
System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("8. Re-enter a 6-digit code displayed in Google
Authenticator");
String mfaCode = in.nextLine();AdminInitiateAuthResponse authResponse1 =initiateAuth(identityProviderClient, clientId, userName, password,
poolId);System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("9. Invokes the AdminRespondToAuthChallenge");
String session2 = authResponse1.session();adminRespondToAuthChallenge(identityProviderClient, userName, clientId,
mfaCode, session2);
System.out.println(DASHES);
System.out.println(DASHES);
System.out.println("All Amazon Cognito operations were successfully
performed");
System.out.println(DASHES);

シナリオ

322

Amazon Cognito

開発者ガイド}// Respond to an authentication challenge.
public static void adminRespondToAuthChallenge(CognitoIdentityProviderClient
identityProviderClient,
String userName, String clientId, String mfaCode, String session) {System.out.println("SOFTWARE_TOKEN_MFA challenge is generated");Map<String, String> challengeResponses = new HashMap<>();
challengeResponses.put("USERNAME", userName);challengeResponses.put("SOFTWARE_TOKEN_MFA_CODE", mfaCode);
AdminRespondToAuthChallengeRequest respondToAuthChallengeRequest =AdminRespondToAuthChallengeRequest.builder().challengeName(ChallengeNameType.SOFTWARE_TOKEN_MFA).clientId(clientId).challengeResponses(challengeResponses).session(session).build();AdminRespondToAuthChallengeResponse respondToAuthChallengeResult =identityProviderClient.adminRespondToAuthChallenge(respondToAuthChallengeRequest);
System.out.println("respondToAuthChallengeResult.getAuthenticationResult()"+ respondToAuthChallengeResult.authenticationResult());}// Verify the TOTP and register for MFA.
public static void verifyTOTP(CognitoIdentityProviderClient
identityProviderClient, String session, String code) {try {VerifySoftwareTokenRequest tokenRequest =VerifySoftwareTokenRequest.builder().userCode(code).session(session).build();VerifySoftwareTokenResponse verifyResponse =identityProviderClient.verifySoftwareToken(tokenRequest);
System.out.println("The status of the token is " +verifyResponse.statusAsString());} catch (CognitoIdentityProviderException e) {

シナリオ

323

Amazon Cognito

開発者ガイドSystem.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}public static AdminInitiateAuthResponse
initiateAuth(CognitoIdentityProviderClient identityProviderClient,
String clientId, String userName, String password, String userPoolId){
try {Map<String, String> authParameters = new HashMap<>();
authParameters.put("USERNAME", userName);
authParameters.put("PASSWORD", password);
AdminInitiateAuthRequest authRequest =AdminInitiateAuthRequest.builder().clientId(clientId).userPoolId(userPoolId).authParameters(authParameters).authFlow(AuthFlowType.ADMIN_USER_PASSWORD_AUTH).build();AdminInitiateAuthResponse response =identityProviderClient.adminInitiateAuth(authRequest);
System.out.println("Result Challenge is : " +response.challengeName());
return response;} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}return null;}public static String getSecretForAppMFA(CognitoIdentityProviderClient
identityProviderClient, String session) {AssociateSoftwareTokenRequest softwareTokenRequest =AssociateSoftwareTokenRequest.builder().session(session).build();AssociateSoftwareTokenResponse tokenResponse = identityProviderClient

シナリオ

324

Amazon Cognito

開発者ガイド.associateSoftwareToken(softwareTokenRequest);
String secretCode = tokenResponse.secretCode();System.out.println("Enter this token into Google Authenticator");
System.out.println(secretCode);
return tokenResponse.session();}public static void confirmSignUp(CognitoIdentityProviderClient
identityProviderClient, String clientId, String code,
String userName) {try {ConfirmSignUpRequest signUpRequest = ConfirmSignUpRequest.builder().clientId(clientId).confirmationCode(code).username(userName).build();identityProviderClient.confirmSignUp(signUpRequest);
System.out.println(userName + " was confirmed");} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}public static void resendConfirmationCode(CognitoIdentityProviderClient
identityProviderClient, String clientId,
String userName) {try {ResendConfirmationCodeRequest codeRequest =ResendConfirmationCodeRequest.builder().clientId(clientId).username(userName).build();ResendConfirmationCodeResponse response =identityProviderClient.resendConfirmationCode(codeRequest);
System.out.println("Method of delivery is " +response.codeDeliveryDetails().deliveryMediumAsString());} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);

シナリオ

325

Amazon Cognito

開発者ガイド}}public static void signUp(CognitoIdentityProviderClient
identityProviderClient, String clientId, String userName,
String password, String email) {AttributeType userAttrs = AttributeType.builder().name("email").value(email).build();List<AttributeType> userAttrsList = new ArrayList<>();
userAttrsList.add(userAttrs);
try {SignUpRequest signUpRequest = SignUpRequest.builder().userAttributes(userAttrsList).username(userName).clientId(clientId).password(password).build();identityProviderClient.signUp(signUpRequest);
System.out.println("User has been signed up ");} catch (CognitoIdentityProviderException e) {System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}public static void getAdminUser(CognitoIdentityProviderClient
identityProviderClient, String userName,
String poolId) {try {AdminGetUserRequest userRequest = AdminGetUserRequest.builder().username(userName).userPoolId(poolId).build();AdminGetUserResponse response =identityProviderClient.adminGetUser(userRequest);
System.out.println("User status " + response.userStatusAsString());} catch (CognitoIdentityProviderException e) {

シナリオ

326

Amazon Cognito

開発者ガイドSystem.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);}}}• API 詳細については、「 AWS SDK for Java 2.x APIリファレンス」の以下のトピックを参照してください。
• AdminGetUser• AdminInitiateAuth• AdminRespondToAuthChallenge• AssociateSoftwareToken• ConfirmDevice• ConfirmSignUp• InitiateAuth• ListUsers• ResendConfirmationCode• RespondToAuthChallenge• SignUp• VerifySoftwareToken
JavaScript
SDK の JavaScript (v3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

最良のエクスペリエンスを得るには、 GitHub リポジトリのクローンを作成し、この例を実行します。次のコードは、サンプルアプリケーション全体のサンプルを表しています。
import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js";
シナリオ

327

Amazon Cognito

開発者ガイドimport { signUp } from "../../../actions/sign-up.js";
import { FILE_USER_POOLS } from "./constants.js";
import { getSecondValuesFromEntries } from "@aws-doc-sdk-examples/lib/utils/utilcsv.js";
const validateClient = (clientId) => {if (!clientId) {throw new Error(`App client id is missing. Did you run 'create-user-pool'?`,);}};const validateUser = (username, password, email) => {if (!(username && password && email)) {throw new Error(`Username, password, and email must be provided as arguments to the 'signup' command.`,);}};const signUpHandler = async (commands) => {const [_, username, password, email] = commands;
try {
validateUser(username, password, email);/*** @type {string[]}*/
const values = getSecondValuesFromEntries(FILE_USER_POOLS);
const clientId = values[0];validateClient(clientId);log(`Signing up.`);await signUp({ clientId, username, password, email });log(`Signed up. A confirmation email has been sent to: ${email}.`);
log(`Run 'confirm-sign-up ${username} <code>' to confirm your account.`);} catch (err) {log(err);}};
export { signUpHandler };

シナリオ

328

Amazon Cognito

開発者ガイドconst signUp = ({ clientId, username, password, email }) => {const client = new CognitoIdentityProviderClient({});
const command = new SignUpCommand({
ClientId: clientId,
Username: username,
Password: password,
UserAttributes: [{ Name: "email", Value: email }],});return client.send(command);};
import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js";
import { confirmSignUp } from "../../../actions/confirm-sign-up.js";
import { FILE_USER_POOLS } from "./constants.js";
import { getSecondValuesFromEntries } from "@aws-doc-sdk-examples/lib/utils/utilcsv.js";
const validateClient = (clientId) => {if (!clientId) {throw new Error(`App client id is missing. Did you run 'create-user-pool'?`,);}};const validateUser = (username) => {if (!username) {throw new Error(`Username name is missing. It must be provided as an argument to the'confirm-sign-up' command.`,);}};const validateCode = (code) => {if (!code) {throw new Error(`Verification code is missing. It must be provided as an argument to the'confirm-sign-up' command.`,
);
}
};

シナリオ

329

Amazon Cognito

開発者ガイドconst confirmSignUpHandler = async (commands) => {const [_, username, code] = commands;
try {
validateUser(username);
validateCode(code);/*** @type {string[]}*/
const values = getSecondValuesFromEntries(FILE_USER_POOLS);
const clientId = values[0];validateClient(clientId);log(`Confirming user.`);await confirmSignUp({ clientId, username, code });log(`User confirmed. Run 'admin-initiate-auth ${username} <password>' to signin.`,);} catch (err) {log(err);}};
export { confirmSignUpHandler };const confirmSignUp = ({ clientId, username, code }) => {const client = new CognitoIdentityProviderClient({});
const command = new ConfirmSignUpCommand({
ClientId: clientId,
Username: username,
ConfirmationCode: code,});
return client.send(command);};
import qrcode from "qrcode-terminal";
import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js";
import { adminInitiateAuth } from "../../../actions/admin-initiate-auth.js";
import { associateSoftwareToken } from "../../../actions/associate-softwaretoken.js";
import { FILE_USER_POOLS } from "./constants.js";

シナリオ

330

Amazon Cognito

開発者ガイドimport { getFirstEntry } from "@aws-doc-sdk-examples/lib/utils/util-csv.js";
const handleMfaSetup = async (session, username) => {const { SecretCode, Session } = await associateSoftwareToken(session);// Store the Session for use with 'VerifySoftwareToken'.
process.env.SESSION = Session;console.log("Scan this code in your preferred authenticator app, then run 'verifysoftware-token' to finish the setup.",);qrcode.generate(`otpauth://totp/${username}?secret=${SecretCode}`,{ small: true },console.log,);};
const handleSoftwareTokenMfa = (session) => {// Store the Session for use with 'AdminRespondToAuthChallenge'.
process.env.SESSION = session;};
const validateClient = (id) => {if (!id) {throw new Error(`User pool client id is missing. Did you run 'create-user-pool'?`,);}};const validateId = (id) => {if (!id) {throw new Error(`User pool id is missing. Did you run 'create-user-pool'?`);}};
const validateUser = (username, password) => {if (!(username && password)) {throw new Error(`Username and password must be provided as arguments to the 'admininitiate-auth' command.`,
);

シナリオ

331

Amazon Cognito

開発者ガイド}};const adminInitiateAuthHandler = async (commands) => {const [_, username, password] = commands;
try {
validateUser(username, password);
const [userPoolId, clientId] = getFirstEntry(FILE_USER_POOLS);
validateId(userPoolId);
validateClient(clientId);log("Signing in.");const { ChallengeName, Session } = await adminInitiateAuth({clientId,
userPoolId,
username,password,});
if (ChallengeName === "MFA_SETUP") {log("MFA setup is required.");return handleMfaSetup(Session, username);}if (ChallengeName === "SOFTWARE_TOKEN_MFA") {handleSoftwareTokenMfa(Session);log(`Run 'admin-respond-to-auth-challenge ${username} <totp>'`);}} catch (err) {log(err);}};
export { adminInitiateAuthHandler };const adminInitiateAuth = ({ clientId, userPoolId, username, password }) => {const client = new CognitoIdentityProviderClient({});
const command = new AdminInitiateAuthCommand({
ClientId: clientId,
UserPoolId: userPoolId,
AuthFlow: AuthFlowType.ADMIN_USER_PASSWORD_AUTH,

シナリオ

332

Amazon Cognito

開発者ガイドAuthParameters: { USERNAME: username, PASSWORD: password },});return client.send(command);};
import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js";
import { adminRespondToAuthChallenge } from "../../../actions/admin-respond-toauth-challenge.js";
import { getFirstEntry } from "@aws-doc-sdk-examples/lib/utils/util-csv.js";
import { FILE_USER_POOLS } from "./constants.js";
const verifyUsername = (username) => {if (!username) {throw new Error(`Username is missing. It must be provided as an argument to the 'adminrespond-to-auth-challenge' command.`,);}};const verifyTotp = (totp) => {if (!totp) {throw new Error(`Time-based one-time password (TOTP) is missing. It must be provided as anargument to the 'admin-respond-to-auth-challenge' command.`,);}};const storeAccessToken = (token) => {process.env.AccessToken = token;};
const adminRespondToAuthChallengeHandler = async (commands) => {const [_, username, totp] = commands;
try {verifyUsername(username);verifyTotp(totp);
const [userPoolId, clientId] = getFirstEntry(FILE_USER_POOLS);
const session = process.env.SESSION;

シナリオ

333

Amazon Cognito

開発者ガイドconst { AuthenticationResult } = await adminRespondToAuthChallenge({clientId,
userPoolId,
username,
totp,
session,});storeAccessToken(AuthenticationResult.AccessToken);log("Successfully authenticated.");} catch (err) {log(err);}};
export { adminRespondToAuthChallengeHandler };const respondToAuthChallenge = ({clientId,
username,session,userPoolId,
code,}) => {
const client = new CognitoIdentityProviderClient({});
const command = new RespondToAuthChallengeCommand({
ChallengeName: ChallengeNameType.SOFTWARE_TOKEN_MFA,
ChallengeResponses: {SOFTWARE_TOKEN_MFA_CODE: code,
USERNAME: username,},
ClientId: clientId,
UserPoolId: userPoolId,
Session: session,});
return client.send(command);};
import { log } from "@aws-doc-sdk-examples/lib/utils/util-log.js";
import { verifySoftwareToken } from "../../../actions/verify-software-token.js";

シナリオ

334

Amazon Cognito

開発者ガイドconst validateTotp = (totp) => {if (!totp) {throw new Error(`Time-based one-time password (TOTP) must be provided to the 'validatesoftware-token' command.`,);}};const verifySoftwareTokenHandler = async (commands) => {const [_, totp] = commands;
try {
validateTotp(totp);
log("Verifying TOTP.");
await verifySoftwareToken(totp);
log("TOTP Verified. Run 'admin-initiate-auth' again to sign-in.");} catch (err) {console.log(err);}};
export { verifySoftwareTokenHandler };const verifySoftwareToken = (totp) => {const client = new CognitoIdentityProviderClient({});// The 'Session' is provided in the response to 'AssociateSoftwareToken'.
const session = process.env.SESSION;
if (!session) {throw new Error("Missing a valid Session. Did you run 'admin-initiate-auth'?",);}const command = new VerifySoftwareTokenCommand({Session: session,
UserCode: totp,});
return client.send(command);
};

シナリオ

335

Amazon Cognito

開発者ガイド• API 詳細については、「 AWS SDK for JavaScript APIリファレンス」の以下のトピックを参照してください。
• AdminGetUser• AdminInitiateAuth• AdminRespondToAuthChallenge• AssociateSoftwareToken• ConfirmDevice• ConfirmSignUp• InitiateAuth• ListUsers• ResendConfirmationCode• RespondToAuthChallenge• SignUp• VerifySoftwareToken
KotlinSDK Kotlin 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

/**
Before running this Kotlin code example, set up your development environment,
including your credentials.
For more information, see the following documentation:
https://docs.aws.amazon.com/sdk-for-kotlin/latest/developer-guide/setup.html
シナリオ

336

Amazon Cognito

開発者ガイドTIP: To set up the required user pool, run the AWS Cloud Development
Kit (AWS CDK) script provided in this GitHub repo at resources/cdk/
cognito_scenario_user_pool_with_mfa.
This code example performs the following operations:
1. Invokes the signUp method to sign up a user.
2. Invokes the adminGetUser method to get the user's confirmation status.
3. Invokes the ResendConfirmationCode method if the user requested another code.
4. Invokes the confirmSignUp method.
5. Invokes the initiateAuth to sign in. This results in being prompted to
set up TOTP (time-based one-time password). (The response is “ChallengeName”:“MFA_SETUP”).
6. Invokes the AssociateSoftwareToken method to generate a TOTP MFA private key.
This can be used with Google Authenticator.
7. Invokes the VerifySoftwareToken method to verify the TOTP and register for
MFA.
8. Invokes the AdminInitiateAuth to sign in again. This results in being
prompted to submit a TOTP (Response: “ChallengeName”: “SOFTWARE_TOKEN_MFA”).
9. Invokes the AdminRespondToAuthChallenge to get back a token.
*/
suspend fun main(args: Array<String>) {val usage = """Usage:<clientId> <poolId>
Where:
clientId - The app client Id value that you can get from the AWS CDK
script.
poolId - The pool Id that you can get from the AWS CDK script.
"""
if (args.size != 2) {println(usage)
exitProcess(1)}val clientId = args[0]val poolId = args[1]// Use the console to get data from the user.
println("*** Enter your use name")
val inOb = Scanner(System.`in`)val userName = inOb.nextLine()

シナリオ

337

Amazon Cognito

開発者ガイドprintln(userName)
println("*** Enter your password")
val password: String = inOb.nextLine()
println("*** Enter your email")val email = inOb.nextLine()
println("*** Signing up $userName")
signUp(clientId, userName, password, email)println("*** Getting $userName in the user pool")
getAdminUser(userName, poolId)
println("*** Conformation code sent to $userName. Would you like to send a
new code? (Yes/No)")val ans = inOb.nextLine()if (ans.compareTo("Yes") == 0) {println("*** Sending a new confirmation code")
resendConfirmationCode(clientId, userName)}
println("*** Enter the confirmation code that was emailed")
val code = inOb.nextLine()
confirmSignUp(clientId, code, userName)
println("*** Rechecking the status of $userName in the user pool")
getAdminUser(userName, poolId)
val authResponse = checkAuthMethod(clientId, userName, password, poolId)
val mySession = authResponse.session
val newSession = getSecretForAppMFA(mySession)
println("*** Enter the 6-digit code displayed in Google Authenticator")
val myCode = inOb.nextLine()// Verify the TOTP and register for MFA.
verifyTOTP(newSession, myCode)println("*** Re-enter a 6-digit code displayed in Google Authenticator")
val mfaCode: String = inOb.nextLine()
val authResponse1 = checkAuthMethod(clientId, userName, password, poolId)
val session2 = authResponse1.session
adminRespondToAuthChallenge(userName, clientId, mfaCode, session2)
}

シナリオ

338

Amazon Cognito

開発者ガイドsuspend fun checkAuthMethod(clientIdVal: String,userNameVal: String,
passwordVal: String,userPoolIdVal: String,): AdminInitiateAuthResponse {val authParas = mutableMapOf<String, String>()authParas["USERNAME"] = userNameVal
authParas["PASSWORD"] = passwordVal
val authRequest =AdminInitiateAuthRequest {clientId = clientIdVal
userPoolId = userPoolIdVal
authParameters = authParas
authFlow = AuthFlowType.AdminUserPasswordAuth}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val response = identityProviderClient.adminInitiateAuth(authRequest)
println("Result Challenge is ${response.challengeName}")return response}}
suspend fun resendConfirmationCode(clientIdVal: String?,
userNameVal: String?,) {val codeRequest =ResendConfirmationCodeRequest {clientId = clientIdVal
username = userNameVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val response = identityProviderClient.resendConfirmationCode(codeRequest)
println("Method of delivery is " +(response.codeDeliveryDetails?.deliveryMedium))
}
}

シナリオ

339

Amazon Cognito

開発者ガイド// Respond to an authentication challenge.
suspend fun adminRespondToAuthChallenge(
userName: String,clientIdVal: String?,
mfaCode: String,sessionVal: String?,) {println("SOFTWARE_TOKEN_MFA challenge is generated")val challengeResponsesOb = mutableMapOf<String, String>()challengeResponsesOb["USERNAME"] = userName
challengeResponsesOb["SOFTWARE_TOKEN_MFA_CODE"] = mfaCodeval adminRespondToAuthChallengeRequest =AdminRespondToAuthChallengeRequest {challengeName = ChallengeNameType.SoftwareTokenMfa
clientId = clientIdVal
challengeResponses = challengeResponsesOb
session = sessionVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val respondToAuthChallengeResult =identityProviderClient.adminRespondToAuthChallenge(adminRespondToAuthChallengeRequest)
println("respondToAuthChallengeResult.getAuthenticationResult()${respondToAuthChallengeResult.authenticationResult}")}}// Verify the TOTP and register for MFA.
suspend fun verifyTOTP(
sessionVal: String?,
codeVal: String?,) {val tokenRequest =VerifySoftwareTokenRequest {userCode = codeVal
session = sessionVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val verifyResponse =identityProviderClient.verifySoftwareToken(tokenRequest)

シナリオ

340

Amazon Cognito

開発者ガイドprintln("The status of the token is ${verifyResponse.status}")}}suspend fun getSecretForAppMFA(sessionVal: String?): String? {val softwareTokenRequest =AssociateSoftwareTokenRequest {session = sessionVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val tokenResponse =identityProviderClient.associateSoftwareToken(softwareTokenRequest)
val secretCode = tokenResponse.secretCode
println("Enter this token into Google Authenticator")
println(secretCode)return tokenResponse.session}}
suspend fun confirmSignUp(
clientIdVal: String?,
codeVal: String?,
userNameVal: String?,) {val signUpRequest =ConfirmSignUpRequest {clientId = clientIdVal
confirmationCode = codeVal
username = userNameVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->identityProviderClient.confirmSignUp(signUpRequest)
println("$userNameVal was confirmed")}}suspend fun getAdminUser(
userNameVal: String?,
poolIdVal: String?,
) {

シナリオ

341

Amazon Cognito

開発者ガイドval userRequest =AdminGetUserRequest {username = userNameVal
userPoolId = poolIdVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->val response = identityProviderClient.adminGetUser(userRequest)
println("User status ${response.userStatus}")}}suspend fun signUp(
clientIdVal: String?,
userNameVal: String?,
passwordVal: String?,
emailVal: String?,) {val userAttrs =AttributeType {name = "email"value = emailVal}
val userAttrsList = mutableListOf<AttributeType>()userAttrsList.add(userAttrs)
val signUpRequest =SignUpRequest {userAttributes = userAttrsList
username = userNameValclientId = clientIdVal
password = passwordVal}
CognitoIdentityProviderClient { region = "us-east-1" }.use{ identityProviderClient ->identityProviderClient.signUp(signUpRequest)
println("User has been signed up")
}
}

シナリオ

342

Amazon Cognito

開発者ガイド• API 詳細については、AWS SDKKotlin APIリファレンス の の以下のトピックを参照してください。
• AdminGetUser• AdminInitiateAuth• AdminRespondToAuthChallenge• AssociateSoftwareToken• ConfirmDevice• ConfirmSignUp• InitiateAuth• ListUsers• ResendConfirmationCode• RespondToAuthChallenge• SignUp• VerifySoftwareToken
PythonSDK for Python (Boto3)Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

シナリオで使用される Amazon Cognito 関数をラップするクラスを作成します。
class CognitoIdentityProviderWrapper:"""Encapsulates Amazon Cognito actions"""

シナリオ

def __init__(self, cognito_idp_client, user_pool_id, client_id,
client_secret=None):""":param cognito_idp_client: A Boto3 Amazon Cognito Identity Provider
client.
:param user_pool_id: The ID of an existing Amazon Cognito user pool.

343

Amazon Cognito

開発者ガイド:param client_id: The ID of a client application registered with the userpool.
:param client_secret: The client secret, if the client has a secret.
"""self.cognito_idp_client = cognito_idp_client
self.user_pool_id = user_pool_id
self.client_id = client_id
self.client_secret = client_secretdef _secret_hash(self, user_name):"""
Calculates a secret hash from a user name and a client secret.
:param user_name: The user name to use when calculating the hash.
:return: The secret hash.
"""
key = self.client_secret.encode()
msg = bytes(user_name + self.client_id, "utf-8")
secret_hash = base64.b64encode(
hmac.new(key, msg, digestmod=hashlib.sha256).digest()).decode()
logger.info("Made secret hash for %s: %s.", user_name, secret_hash)return secret_hash
def sign_up_user(self, user_name, password, user_email):"""Signs up a new user with Amazon Cognito. This action prompts Amazon
Cognitoto send an email to the specified email address. The email contains acode thatcan be used to confirm the user.
When the user already exists, the user status is checked to determine
whetherthe user has been confirmed.
:param user_name: The user name that identifies the new user.
:param password: The password for the new user.
:param user_email: The email address for the new user.
:return: True when the user is already confirmed with Amazon Cognito.
Otherwise, false.
"""
try:

シナリオ

344

Amazon Cognito

開発者ガイドkwargs = {"ClientId": self.client_id,"Username": user_name,"Password": password,"UserAttributes": [{"Name": "email", "Value": user_email}],}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)response = self.cognito_idp_client.sign_up(**kwargs)
confirmed = response["UserConfirmed"]
except ClientError as err:
if err.response["Error"]["Code"] == "UsernameExistsException":
response = self.cognito_idp_client.admin_get_user(
UserPoolId=self.user_pool_id, Username=user_name)logger.warning("User %s exists and is %s.", user_name,response["UserStatus"])
confirmed = response["UserStatus"] == "CONFIRMED"
else:
logger.error("Couldn't sign up %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],)raise
return confirmed

def resend_confirmation(self, user_name):"""
Prompts Amazon Cognito to resend an email with a new confirmation code.
:param user_name: The name of the user who will receive the email.
:return: Delivery information about where the email is sent.
"""try:
kwargs = {"ClientId": self.client_id, "Username": user_name}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)response = self.cognito_idp_client.resend_confirmation_code(**kwargs)delivery = response["CodeDeliveryDetails"]

シナリオ

345

Amazon Cognito

開発者ガイドexcept ClientError as err:
logger.error("Couldn't resend confirmation to %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return delivery

def confirm_user_sign_up(self, user_name, confirmation_code):"""
Confirms a previously created user. A user must be confirmed before they
can sign in to Amazon Cognito.
:param user_name: The name of the user to confirm.
:param confirmation_code: The confirmation code sent to the user's
registeredemail address.
:return: True when the confirmation succeeds.
"""try:kwargs = {"ClientId": self.client_id,"Username": user_name,"ConfirmationCode": confirmation_code,}
if self.client_secret is not None:kwargs["SecretHash"] = self._secret_hash(user_name)self.cognito_idp_client.confirm_sign_up(**kwargs)
except ClientError as err:
logger.error("Couldn't confirm sign up for %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return True

シナリオ

346

Amazon Cognito

開発者ガイドdef list_users(self):"""
Returns a list of the users in the current user pool.
:return: The list of users.
"""
try:
response =self.cognito_idp_client.list_users(UserPoolId=self.user_pool_id)
users = response["Users"]
except ClientError as err:
logger.error("Couldn't list users for %s. Here's why: %s: %s",
self.user_pool_id,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return users

def start_sign_in(self, user_name, password):"""
Starts the sign-in process for a user by using administrator credentials.
This method of signing in is appropriate for code running on a secure
server.
If the user pool is configured to require MFA and this is the first signin
for the user, Amazon Cognito returns a challenge response to set up an
MFA application. When this occurs, this function gets an MFA secret from
Amazon Cognito and returns it to the caller.
:param user_name: The name of the user to sign in.
:param password: The user's password.
:return: The result of the sign-in attempt. When sign-in is successful,
thisreturns an access token that can be used to get AWS credentials.
Otherwise,
Amazon Cognito returns a challenge to set up an MFA application,
or a challenge to enter an MFA code from a registered MFAapplication.
"""

シナリオ

347

Amazon Cognito

開発者ガイドtry:
kwargs = {"UserPoolId": self.user_pool_id,"ClientId": self.client_id,"AuthFlow": "ADMIN_USER_PASSWORD_AUTH","AuthParameters": {"USERNAME": user_name, "PASSWORD": password},}
if self.client_secret is not None:kwargs["AuthParameters"]["SECRET_HASH"] =self._secret_hash(user_name)response = self.cognito_idp_client.admin_initiate_auth(**kwargs)
challenge_name = response.get("ChallengeName", None)
if challenge_name == "MFA_SETUP":
if ("SOFTWARE_TOKEN_MFA"
in response["ChallengeParameters"]["MFAS_CAN_SETUP"]):
response.update(self.get_mfa_secret(response["Session"]))else:
raise RuntimeError("The user pool requires MFA setup, but the user pool is
not ""configured for TOTP MFA. This example requires TOTP
MFA.")
except ClientError as err:
logger.error("Couldn't start sign in for %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
response.pop("ResponseMetadata", None)
return response

def get_mfa_secret(self, session):"""
Gets a token that can be used to associate an MFA application with the
user.

シナリオ

348

Amazon Cognito

開発者ガイド:param session: Session information returned from a previous call to
initiate
authentication.
:return: An MFA token that can be used to set up an MFA application.
"""try:
response =self.cognito_idp_client.associate_software_token(Session=session)
except ClientError as err:
logger.error("Couldn't get MFA secret. Here's why: %s: %s",
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
response.pop("ResponseMetadata", None)
return responsedef verify_mfa(self, session, user_code):"""
Verify a new MFA application that is associated with a user.
:param session: Session information returned from a previous call to
initiate
authentication.
:param user_code: A code generated by the associated MFA application.
:return: Status that indicates whether the MFA application is verified.
"""
try:
response = self.cognito_idp_client.verify_software_token(
Session=session, UserCode=user_code)
except ClientError as err:
logger.error("Couldn't verify MFA. Here's why: %s: %s",
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
response.pop("ResponseMetadata", None)
return response

シナリオ

349

Amazon Cognito

開発者ガイドdef respond_to_mfa_challenge(self, user_name, session, mfa_code):"""
Responds to a challenge for an MFA code. This completes the second stepofa two-factor sign-in. When sign-in is successful, it returns an access
token
that can be used to get AWS credentials from Amazon Cognito.
:param user_name: The name of the user who is signing in.
:param session: Session information returned from a previous call to
initiate
authentication.
:param mfa_code: A code generated by the associated MFA application.
:return: The result of the authentication. When successful, this contains
anaccess token for the user.
"""try:kwargs = {"UserPoolId": self.user_pool_id,"ClientId": self.client_id,"ChallengeName": "SOFTWARE_TOKEN_MFA","Session": session,"ChallengeResponses": {"USERNAME": user_name,"SOFTWARE_TOKEN_MFA_CODE": mfa_code,},}
if self.client_secret is not None:kwargs["ChallengeResponses"]["SECRET_HASH"] = self._secret_hash(user_name)response =self.cognito_idp_client.admin_respond_to_auth_challenge(**kwargs)
auth_result = response["AuthenticationResult"]
except ClientError as err:
if err.response["Error"]["Code"] == "ExpiredCodeException":logger.warning("Your MFA code has expired or has been used already. Youmight have ""to wait a few seconds until your app shows you a new code."
)

シナリオ

350

Amazon Cognito

開発者ガイドelse:
logger.error("Couldn't respond to mfa challenge for %s. Here's why: %s:%s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return auth_result

def confirm_mfa_device(self,
user_name,device_key,device_group_key,device_password,
access_token,
aws_srp,):"""
Confirms an MFA device to be tracked by Amazon Cognito. When a device istracked, its key and password can be used to sign in without requiring a
new
MFA code from the MFA application.
:param user_name: The user that is associated with the device.
:param device_key: The key of the device, returned by Amazon Cognito.
:param device_group_key: The group key of the device, returned by Amazon
Cognito.
:param device_password: The password that is associated with the device.
:param access_token: The user's access token.
:param aws_srp: A class that helps with Secure Remote Password (SRP)
calculations. The scenario associated with this example
uses
the warrant package.
:return: True when the user must confirm the device. Otherwise, False.
When
False, the device is automatically confirmed and tracked.
"""
srp_helper = aws_srp.AWSSRP(
username=user_name,

シナリオ

351

Amazon Cognito

開発者ガイドpassword=device_password,
pool_id="_",
client_id=self.client_id,
client_secret=None,client=self.cognito_idp_client,)
device_and_pw = f"{device_group_key}{device_key}:{device_password}"
device_and_pw_hash = aws_srp.hash_sha256(device_and_pw.encode("utf-8"))salt = aws_srp.pad_hex(aws_srp.get_random(16))
x_value = aws_srp.hex_to_long(aws_srp.hex_hash(salt +device_and_pw_hash))verifier = aws_srp.pad_hex(pow(srp_helper.val_g, x_value,
srp_helper.big_n))device_secret_verifier_config = {"PasswordVerifier": base64.standard_b64encode(
bytearray.fromhex(verifier)).decode("utf-8"),"Salt":
base64.standard_b64encode(bytearray.fromhex(salt)).decode("utf-8"),}try:
response = self.cognito_idp_client.confirm_device(
AccessToken=access_token,
DeviceKey=device_key,
DeviceSecretVerifierConfig=device_secret_verifier_config,)
user_confirm = response["UserConfirmationNecessary"]
except ClientError as err:
logger.error("Couldn't confirm mfa device %s. Here's why: %s: %s",
device_key,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise
else:
return user_confirm

def sign_in_with_tracked_device(self,
user_name,password,
device_key,

シナリオ

352

Amazon Cognito

開発者ガイドdevice_group_key,device_password,
aws_srp,):"""Signs in to Amazon Cognito as a user who has a tracked device. Signing inwith a tracked device lets a user sign in without entering a new MFA
code.
Signing in with a tracked device requires that the client respond to the
SRP
protocol. The scenario associated with this example uses the warrant
packageto help with SRP calculations.
For more information on SRP, see https://en.wikipedia.org/wiki/
Secure_Remote_Password_protocol.
:param user_name: The user that is associated with the device.
:param password: The user's password.
:param device_key: The key of a tracked device.
:param device_group_key: The group key of a tracked device.
:param device_password: The password that is associated with the device.
:param aws_srp: A class that helps with SRP calculations. The scenario
associated with this example uses the warrant package.
:return: The result of the authentication. When successful, this contains
anaccess token for the user.
"""try:
srp_helper = aws_srp.AWSSRP(
username=user_name,password=device_password,
pool_id="_",
client_id=self.client_id,
client_secret=None,client=self.cognito_idp_client,)
response_init = self.cognito_idp_client.initiate_auth(ClientId=self.client_id,
AuthFlow="USER_PASSWORD_AUTH",
AuthParameters={"USERNAME": user_name,

シナリオ

353

Amazon Cognito

開発者ガイド"PASSWORD": password,"DEVICE_KEY": device_key,},)
if response_init["ChallengeName"] != "DEVICE_SRP_AUTH":
raise RuntimeError(f"Expected DEVICE_SRP_AUTH challenge but got{response_init['ChallengeName']}.")
auth_params = srp_helper.get_auth_params()
auth_params["DEVICE_KEY"] = device_key
response_auth = self.cognito_idp_client.respond_to_auth_challenge(
ClientId=self.client_id,
ChallengeName="DEVICE_SRP_AUTH",
ChallengeResponses=auth_params,)
if response_auth["ChallengeName"] != "DEVICE_PASSWORD_VERIFIER":
raise RuntimeError(f"Expected DEVICE_PASSWORD_VERIFIER challenge but got "f"{response_init['ChallengeName']}.")
challenge_params = response_auth["ChallengeParameters"]
challenge_params["USER_ID_FOR_SRP"] = device_group_key + device_key
cr = srp_helper.process_challenge(challenge_params, {"USERNAME":
user_name})cr["USERNAME"] = user_namecr["DEVICE_KEY"] = device_key
response_verifier =self.cognito_idp_client.respond_to_auth_challenge(
ClientId=self.client_id,
ChallengeName="DEVICE_PASSWORD_VERIFIER",
ChallengeResponses=cr,)
auth_tokens = response_verifier["AuthenticationResult"]
except ClientError as err:
logger.error("Couldn't start client sign in for %s. Here's why: %s: %s",user_name,
err.response["Error"]["Code"],err.response["Error"]["Message"],
)
raise

シナリオ

354

Amazon Cognito

開発者ガイドelse:
return auth_tokens

シナリオを実行するクラスを作成します。この例では、Amazon Cognito が追跡するMFAデバ
イスを登録し、追跡対象デバイスからのパスワードと情報を使用してサインインする方法も示します。これにより、新しいMFAコードを入力する必要がなくなります。
def run_scenario(cognito_idp_client, user_pool_id, client_id):logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
print("-" * 88)
print("Welcome to the Amazon Cognito user signup with MFA demo.")print("-" * 88)
cog_wrapper = CognitoIdentityProviderWrapper(
cognito_idp_client, user_pool_id, client_id)
user_name = q.ask("Let's sign up a new user. Enter a user name: ",q.non_empty)
password = q.ask("Enter a password for the user: ", q.non_empty)
email = q.ask("Enter a valid email address that you own: ", q.non_empty)
confirmed = cog_wrapper.sign_up_user(user_name, password, email)while not confirmed:
print(
f"User {user_name} requires confirmation. Check {email} for "f"a verification code.")
confirmation_code = q.ask("Enter the confirmation code from the email: ")if not confirmation_code:
if q.ask("Do you need another confirmation code (y/n)? ",q.is_yesno):delivery = cog_wrapper.resend_confirmation(user_name)print(
f"Confirmation code sent by {delivery['DeliveryMedium']} "f"to {delivery['Destination']}."
)
else:

シナリオ

355

Amazon Cognito

開発者ガイドconfirmed = cog_wrapper.confirm_user_sign_up(user_name,confirmation_code)
print(f"User {user_name} is confirmed and ready to use.")print("-" * 88)
print("Let's get a list of users in the user pool.")q.ask("Press Enter when you're ready.")users = cog_wrapper.list_users()
if users:
print(f"Found {len(users)} users:")pp(users)
else:
print("No users found.")print("-" * 88)
print("Let's sign in and get an access token.")auth_tokens = None
challenge = "ADMIN_USER_PASSWORD_AUTH"
response = {}while challenge is not None:
if challenge == "ADMIN_USER_PASSWORD_AUTH":
response = cog_wrapper.start_sign_in(user_name, password)
challenge = response["ChallengeName"]
elif response["ChallengeName"] == "MFA_SETUP":
print("First, we need to set up an MFA application.")qr_img = qrcode.make(f"otpauth://totp/{user_name}?secret={response['SecretCode']}")qr_img.save("qr.png")
q.ask("Press Enter to see a QR code on your screen. Scan it into an MFA""application, such as Google Authenticator.")webbrowser.open("qr.png")
mfa_code = q.ask("Enter the verification code from your MFA application: ",q.non_empty)
response = cog_wrapper.verify_mfa(response["Session"], mfa_code)
print(f"MFA device setup {response['Status']}")
print("Now that an MFA application is set up, let's sign in again.")print(

シナリオ

356

Amazon Cognito

開発者ガイド"You might have to wait a few seconds for a new MFA code toappear in ""your MFA application.")challenge = "ADMIN_USER_PASSWORD_AUTH"
elif response["ChallengeName"] == "SOFTWARE_TOKEN_MFA":
auth_tokens = None
while auth_tokens is None:mfa_code = q.ask("Enter a verification code from your MFA application: ",q.non_empty)
auth_tokens = cog_wrapper.respond_to_mfa_challenge(
user_name, response["Session"], mfa_code)
print(f"You're signed in as {user_name}.")print("Here's your access token:")pp(auth_tokens["AccessToken"])print("And your device information:")pp(auth_tokens["NewDeviceMetadata"])challenge = Noneelse:
raise Exception(f"Got unexpected challenge{response['ChallengeName']}")
print("-" * 88)
device_group_key = auth_tokens["NewDeviceMetadata"]["DeviceGroupKey"]device_key = auth_tokens["NewDeviceMetadata"]["DeviceKey"]device_password = base64.standard_b64encode(os.urandom(40)).decode("utf-8")
print("Let's confirm your MFA device so you don't have re-enter MFA tokens
for it.")q.ask("Press Enter when you're ready.")
cog_wrapper.confirm_mfa_device(user_name,device_key,device_group_key,device_password,
auth_tokens["AccessToken"],aws_srp,)print(f"Your device {device_key} is confirmed.")print("-" * 88)

シナリオ

357

Amazon Cognito

開発者ガイドprint(
f"Now let's sign in as {user_name} from your confirmed device{device_key}.\n"f"Because this device is tracked by Amazon Cognito, you won't have to reenter an MFA code.")
q.ask("Press Enter when ready.")auth_tokens = cog_wrapper.sign_in_with_tracked_device(user_name, password, device_key, device_group_key, device_password,
aws_srp)print("You're signed in. Your access token is:")pp(auth_tokens["AccessToken"])print("-" * 88)
print("Don't forget to delete your user pool when you're done with thisexample.")print("\nThanks for watching!")
print("-" * 88)

def main():parser = argparse.ArgumentParser(
description="Shows how to sign up a new user with Amazon Cognito andassociate ""the user with an MFA application for multi-factor authentication.")parser.add_argument("user_pool_id", help="The ID of the user pool to use for the example.")parser.add_argument("client_id", help="The ID of the client application to use for theexample.")args = parser.parse_args()
try:
run_scenario(boto3.client("cognito-idp"), args.user_pool_id,
args.client_id)
except Exception:
logging.exception("Something went wrong with the demo.")

if __name__ == "__main__":main()

シナリオ

358

Amazon Cognito

開発者ガイド• API 詳細については、 AWS SDK for Python (Boto3) APIリファレンス の以下のトピックを参照してください。
• AdminGetUser• AdminInitiateAuth• AdminRespondToAuthChallenge• AssociateSoftwareToken• ConfirmDevice• ConfirmSignUp• InitiateAuth• ListUsers• ResendConfirmationCode• RespondToAuthChallenge• SignUp• VerifySoftwareToken
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

を使用して Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアク
ティビティデータを書き込む AWS SDK
次のコード例は、Amazon Cognito ユーザー認証後に Lambda 関数を使用してカスタムアクティビ
ティデータを書き込む方法を示しています。
• 管理者関数を使用して、ユーザーをユーザープールに追加します。
• PostAuthentication トリガーの Lambda 関数を呼び出すようにユーザープールを設定します。
• 新しいユーザーを Amazon Cognito にサインインします。
• Lambda 関数は、カスタム情報を CloudWatch Logs と DynamoDB テーブルに書き込みます。
• DynamoDB テーブルからカスタムデータを取得して表示し、リソースをクリーンアップします。
シナリオ

359

Amazon Cognito

開発者ガイドGo
SDK Go V2 用Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

コマンドプロンプトからインタラクティブのシナリオを実行します。

// ActivityLog separates the steps of this scenario into individual functions sothat// they are simpler to read and understand.
type ActivityLog struct {helper
IScenarioHelper
questioner
demotools.IQuestioner
resources
Resources
cognitoActor *actions.CognitoActions}// NewActivityLog constructs a new activity log runner.
func NewActivityLog(sdkConfig aws.Config, questioner demotools.IQuestioner,
helper IScenarioHelper) ActivityLog {scenario := ActivityLog{
helper:helper,questioner:questioner,
resources:
Resources{},cognitoActor: &actions.CognitoActions{CognitoClient:cognitoidentityprovider.NewFromConfig(sdkConfig)},}
scenario.resources.init(scenario.cognitoActor, questioner)
return scenario}// AddUserToPool selects a user from the known users table and uses administrator
credentials to add the user to the user pool.
func (runner *ActivityLog) AddUserToPool(userPoolId string, tableName string)(string, string) {log.Println("To facilitate this example, let's add a user to the user pool using
administrator privileges.")
シナリオ

360

Amazon Cognito

開発者ガイドusers, err := runner.helper.GetKnownUsers(tableName)
if err != nil {panic(err)}user := users.Users[0]log.Printf("Adding known user %v to the user pool.\n", user.UserName)
err = runner.cognitoActor.AdminCreateUser(userPoolId, user.UserName,user.UserEmail)if err != nil {panic(err)}pwSet := false
password := runner.questioner.AskPassword("\nEnter a password that has at least
eight characters, uppercase, lowercase, numbers and symbols.\n"+"(the password will not display as you type):", 8)
for !pwSet {log.Printf("\nSetting password for user '%v'.\n", user.UserName)
err = runner.cognitoActor.AdminSetUserPassword(userPoolId, user.UserName,password)
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {password = runner.questioner.AskPassword("\nEnter another password:", 8)} else {panic(err)}} else {pwSet = true}}
log.Println(strings.Repeat("-", 88))
return user.UserName, password}// AddActivityLogTrigger adds a Lambda handler as an invocation target for the
PostAuthentication trigger.
func (runner *ActivityLog) AddActivityLogTrigger(userPoolId string,
activityLogArn string) {log.Println("Let's add a Lambda function to handle the PostAuthentication
trigger from Cognito.\n" +"This trigger happens after a user is authenticated, and lets your function
take action, such as logging\n" +

シナリオ

361

Amazon Cognito

開発者ガイド"the outcome.")err := runner.cognitoActor.UpdateTriggers(
userPoolId,
actions.TriggerInfo{Trigger: actions.PostAuthentication, HandlerArn:
aws.String(activityLogArn)})
if err != nil {panic(err)}runner.resources.triggers = append(runner.resources.triggers,
actions.PostAuthentication)
log.Printf("Lambda function %v added to user pool %v to handle
PostAuthentication Cognito trigger.\n",activityLogArn, userPoolId)log.Println(strings.Repeat("-", 88))}// SignInUser signs in as the specified user.
func (runner *ActivityLog) SignInUser(clientId string, userName string, password
string) {log.Printf("Now we'll sign in user %v and check the results in the logs and the
DynamoDB table.", userName)runner.questioner.Ask("Press Enter when you're ready.")authResult, err := runner.cognitoActor.SignIn(clientId, userName, password)
if err != nil {panic(err)}log.Println("Sign in successful.","The PostAuthentication Lambda handler writes custom information to CloudWatch
Logs.")
runner.resources.userAccessTokens = append(runner.resources.userAccessTokens,*authResult.AccessToken)}// GetKnownUserLastLogin gets the login info for a user from the Amazon DynamoDB
table and displays it.
func (runner *ActivityLog) GetKnownUserLastLogin(tableName string, userName
string) {log.Println("The PostAuthentication handler also writes login data to the
DynamoDB table.")runner.questioner.Ask("Press Enter when you're ready to continue.")
users, err := runner.helper.GetKnownUsers(tableName)
if err != nil {

シナリオ

362

Amazon Cognito

開発者ガイドpanic(err)}for _, user := range users.Users {if user.UserName == userName {log.Println("The last login info for the user in the known users table is:")log.Printf("\t%+v", *user.LastLogin)}}log.Println(strings.Repeat("-", 88))}// Run runs the scenario.
func (runner *ActivityLog) Run(stackName string) {defer func() {if r := recover(); r != nil {log.Println("Something went wrong with the demo.")runner.resources.Cleanup()}}()
log.Println(strings.Repeat("-", 88))
log.Printf("Welcome\n")log.Println(strings.Repeat("-", 88))
stackOutputs, err := runner.helper.GetStackOutputs(stackName)
if err != nil {panic(err)}runner.resources.userPoolId = stackOutputs["UserPoolId"]
runner.helper.PopulateUserTable(stackOutputs["TableName"])userName, password := runner.AddUserToPool(stackOutputs["UserPoolId"],
stackOutputs["TableName"])runner.AddActivityLogTrigger(stackOutputs["UserPoolId"],
stackOutputs["ActivityLogFunctionArn"])
runner.SignInUser(stackOutputs["UserPoolClientId"], userName, password)
runner.helper.ListRecentLogEvents(stackOutputs["ActivityLogFunction"])runner.GetKnownUserLastLogin(stackOutputs["TableName"], userName)runner.resources.Cleanup()
log.Println(strings.Repeat("-", 88))
log.Println("Thanks for watching!")

シナリオ

363

Amazon Cognito

開発者ガイドlog.Println(strings.Repeat("-", 88))}

Lambda 関数を使用して PostAuthentication トリガーを処理します。

const TABLE_NAME = "TABLE_NAME"// LoginInfo defines structured login data that can be marshalled to a DynamoDB
format.
type LoginInfo struct {UserPoolId string `dynamodbav:"UserPoolId"`
ClientId
string `dynamodbav:"ClientId"`
Time
string `dynamodbav:"Time"`}// UserInfo defines structured user data that can be marshalled to a DynamoDB
format.
type UserInfo struct {UserName string`dynamodbav:"UserName"`
UserEmail string`dynamodbav:"UserEmail"`
LastLogin LoginInfo `dynamodbav:"LastLogin"`}// GetKey marshals the user email value to a DynamoDB key format.
func (user UserInfo) GetKey() map[string]dynamodbtypes.AttributeValue {userEmail, err := attributevalue.Marshal(user.UserEmail)if err != nil {panic(err)}
return map[string]dynamodbtypes.AttributeValue{"UserEmail": userEmail}}type handler struct {dynamoClient *dynamodb.Client}// HandleRequest handles the PostAuthentication event by writing custom data to
the logs and// to an Amazon DynamoDB table.

シナリオ

364

Amazon Cognito

開発者ガイドfunc (h *handler) HandleRequest(ctx context.Context,
event events.CognitoEventUserPoolsPostAuthentication)(events.CognitoEventUserPoolsPostAuthentication, error) {log.Printf("Received post authentication trigger from %v for user '%v'",
event.TriggerSource, event.UserName)tableName := os.Getenv(TABLE_NAME)
user := UserInfo{
UserName: event.UserName,
UserEmail: event.Request.UserAttributes["email"],
LastLogin: LoginInfo{
UserPoolId: event.UserPoolID,
ClientId:
event.CallerContext.ClientID,
Time:
time.Now().Format(time.UnixDate),},}// Write to CloudWatch Logs.
fmt.Printf("%#v", user)// Also write to an external system. This examples uses DynamoDB to demonstrate.
userMap, err := attributevalue.MarshalMap(user)
if err != nil {log.Printf("Couldn't marshal to DynamoDB map. Here's why: %v\n", err)
} else if len(userMap) == 0 {log.Printf("User info marshaled to an empty map.")} else {_, err := h.dynamoClient.PutItem(ctx, &dynamodb.PutItemInput{
Item:
userMap,
TableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't write to DynamoDB. Here's why: %v\n", err)
} else {log.Printf("Wrote user info to DynamoDB table %v.\n", tableName)}}
return event, nil}func main() {sdkConfig, err := config.LoadDefaultConfig(context.TODO())
if err != nil {log.Panicln(err)
}

シナリオ

365

Amazon Cognito

開発者ガイドh := handler{
dynamoClient: dynamodb.NewFromConfig(sdkConfig),}
lambda.Start(h.HandleRequest)}

一般的なタスクを実行する構造体を作成します。

// IScenarioHelper defines common functions used by the workflows in thisexample.
type IScenarioHelper interface {Pause(secs int)
GetStackOutputs(stackName string) (actions.StackOutputs, error)
PopulateUserTable(tableName string)
GetKnownUsers(tableName string) (actions.UserList, error)
AddKnownUser(tableName string, user actions.User)
ListRecentLogEvents(functionName string)}// ScenarioHelper contains AWS wrapper structs used by the workflows in thisexample.
type ScenarioHelper struct {questioner demotools.IQuestioner
dynamoActor *actions.DynamoActions
cfnActor*actions.CloudFormationActions
cwlActor*actions.CloudWatchLogsActions
isTestRun
bool}// NewScenarioHelper constructs a new scenario helper.
func NewScenarioHelper(sdkConfig aws.Config, questioner demotools.IQuestioner)
ScenarioHelper {scenario := ScenarioHelper{
questioner: questioner,
dynamoActor: &actions.DynamoActions{DynamoClient:dynamodb.NewFromConfig(sdkConfig)},
cfnActor:&actions.CloudFormationActions{CfnClient:cloudformation.NewFromConfig(sdkConfig)},
cwlActor:&actions.CloudWatchLogsActions{CwlClient:cloudwatchlogs.NewFromConfig(sdkConfig)},
シナリオ

366

Amazon Cognito

開発者ガイド}return scenario}// Pause waits for the specified number of seconds.
func (helper ScenarioHelper) Pause(secs int) {if !helper.isTestRun {time.Sleep(time.Duration(secs) * time.Second)}}// GetStackOutputs gets the outputs from the specified CloudFormation stack in a
structured format.
func (helper ScenarioHelper) GetStackOutputs(stackName string)(actions.StackOutputs, error) {return helper.cfnActor.GetOutputs(stackName), nil}// PopulateUserTable fills the known user table with example data.
func (helper ScenarioHelper) PopulateUserTable(tableName string) {log.Printf("First, let's add some users to the DynamoDB %v table we'll use forthis example.\n", tableName)err := helper.dynamoActor.PopulateTable(tableName)
if err != nil {panic(err)}}// GetKnownUsers gets the users from the known users table in a structured
format.
func (helper ScenarioHelper) GetKnownUsers(tableName string) (actions.UserList,
error) {knownUsers, err := helper.dynamoActor.Scan(tableName)
if err != nil {log.Printf("Couldn't get known users from table %v. Here's why: %v\n",tableName, err)}
return knownUsers, err}// AddKnownUser adds a user to the known users table.
func (helper ScenarioHelper) AddKnownUser(tableName string, user actions.User) {log.Printf("Adding user '%v' with email '%v' to the DynamoDB known users
table...\n",

シナリオ

367

Amazon Cognito

開発者ガイドuser.UserName, user.UserEmail)err := helper.dynamoActor.AddUser(tableName, user)
if err != nil {panic(err)}}// ListRecentLogEvents gets the most recent log stream and events for the
specified Lambda function and displays them.
func (helper ScenarioHelper) ListRecentLogEvents(functionName string) {log.Println("Waiting a few seconds to let Lambda write to CloudWatch Logs...")
helper.Pause(10)log.Println("Okay, let's check the logs to find what's happened recently withyour Lambda function.")logStream, err := helper.cwlActor.GetLatestLogStream(functionName)
if err != nil {panic(err)}log.Printf("Getting some recent events from log stream %v\n",*logStream.LogStreamName)
events, err := helper.cwlActor.GetLogEvents(functionName,*logStream.LogStreamName, 10)if err != nil {panic(err)}for _, event := range events {log.Printf("\t%v", *event.Message)}log.Println(strings.Repeat("-", 88))}

Amazon Cognito アクションをラップする構造体を作成します。

type CognitoActions struct {CognitoClient *cognitoidentityprovider.Client
}

シナリオ

368

Amazon Cognito

開発者ガイド// Trigger and TriggerInfo define typed data for updating an Amazon Cognito
trigger.
type Trigger int
const (
PreSignUp Trigger = iota
UserMigration
PostAuthentication)
type TriggerInfo struct {Trigger
Trigger
HandlerArn *string}// UpdateTriggers adds or removes Lambda triggers for a user pool. When a trigger
is specified with a `nil` value,// it is removed from the user pool.
func (actor CognitoActions) UpdateTriggers(userPoolId string,
triggers ...TriggerInfo) error {output, err := actor.CognitoClient.DescribeUserPool(context.TODO(),&cognitoidentityprovider.DescribeUserPoolInput{
UserPoolId: aws.String(userPoolId),})
if err != nil {log.Printf("Couldn't get info about user pool %v. Here's why: %v\n",userPoolId, err)
return err}
lambdaConfig := output.UserPool.LambdaConfig
for _, trigger := range triggers {switch trigger.Trigger {case PreSignUp:
lambdaConfig.PreSignUp = trigger.HandlerArncase UserMigration:
lambdaConfig.UserMigration = trigger.HandlerArncase PostAuthentication:
lambdaConfig.PostAuthentication = trigger.HandlerArn}}_, err = actor.CognitoClient.UpdateUserPool(context.TODO(),&cognitoidentityprovider.UpdateUserPoolInput{
UserPoolId:
aws.String(userPoolId),
LambdaConfig: lambdaConfig,

シナリオ

369

Amazon Cognito

開発者ガイド})if err != nil {log.Printf("Couldn't update user pool %v. Here's why: %v\n", userPoolId, err)}
return err}// SignUp signs up a user with Amazon Cognito.
func (actor CognitoActions) SignUp(clientId string, userName string, password
string, userEmail string) (bool, error) {confirmed := false
output, err := actor.CognitoClient.SignUp(context.TODO(),&cognitoidentityprovider.SignUpInput{
ClientId: aws.String(clientId),
Password: aws.String(password),
Username: aws.String(userName),
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value: aws.String(userEmail)},},})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't sign up user %v. Here's why: %v\n", userName, err)}
} else {confirmed = output.UserConfirmed}
return confirmed, err}// SignIn signs in a user to Amazon Cognito using a username and password
authentication flow.
func (actor CognitoActions) SignIn(clientId string, userName string, password
string) (*types.AuthenticationResultType, error) {var authResult *types.AuthenticationResultType
output, err := actor.CognitoClient.InitiateAuth(context.TODO(),&cognitoidentityprovider.InitiateAuthInput{

シナリオ

370

Amazon Cognito

開発者ガイドAuthFlow:"USER_PASSWORD_AUTH",
ClientId:
aws.String(clientId),
AuthParameters: map[string]string{"USERNAME": userName, "PASSWORD": password},})
if err != nil {var resetRequired *types.PasswordResetRequiredException
if errors.As(err, &resetRequired) {log.Println(*resetRequired.Message)} else {log.Printf("Couldn't sign in user %v. Here's why: %v\n", userName, err)}
} else {authResult = output.AuthenticationResult}
return authResult, err}// ForgotPassword starts a password recovery flow for a user. This flow typicallysends a confirmation code// to the user's configured notification destination, such as email.
func (actor CognitoActions) ForgotPassword(clientId string, userName string)(*types.CodeDeliveryDetailsType, error) {output, err := actor.CognitoClient.ForgotPassword(context.TODO(),&cognitoidentityprovider.ForgotPasswordInput{
ClientId: aws.String(clientId),
Username: aws.String(userName),})
if err != nil {log.Printf("Couldn't start password reset for user '%v'. Here;s why: %v\n",userName, err)}
return output.CodeDeliveryDetails, err}// ConfirmForgotPassword confirms a user with a confirmation code and a new
password.
func (actor CognitoActions) ConfirmForgotPassword(clientId string, code string,userName string, password string) error {_, err := actor.CognitoClient.ConfirmForgotPassword(context.TODO(),&cognitoidentityprovider.ConfirmForgotPasswordInput{

シナリオ

371

Amazon Cognito

開発者ガイドClientId:
aws.String(clientId),
ConfirmationCode: aws.String(code),
Password:
aws.String(password),
Username:
aws.String(userName),})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't confirm user %v. Here's why: %v", userName, err)}}
return err}// DeleteUser removes a user from the user pool.
func (actor CognitoActions) DeleteUser(userAccessToken string) error {_, err := actor.CognitoClient.DeleteUser(context.TODO(),&cognitoidentityprovider.DeleteUserInput{
AccessToken: aws.String(userAccessToken),})if err != nil {log.Printf("Couldn't delete user. Here's why: %v\n", err)}
return err}// AdminCreateUser uses administrator credentials to add a user to a user pool.
This method leaves the user// in a state that requires they enter a new password next time they sign in.
func (actor CognitoActions) AdminCreateUser(userPoolId string, userName string,userEmail string) error {_, err := actor.CognitoClient.AdminCreateUser(context.TODO(),&cognitoidentityprovider.AdminCreateUserInput{
UserPoolId:
aws.String(userPoolId),
Username:
aws.String(userName),
MessageAction: types.MessageActionTypeSuppress,
UserAttributes: []types.AttributeType{{Name: aws.String("email"), Value:
aws.String(userEmail)}},

シナリオ

372

Amazon Cognito

開発者ガイド})if err != nil {var userExists *types.UsernameExistsException
if errors.As(err, &userExists) {log.Printf("User %v already exists in the user pool.", userName)
err = nil
} else {log.Printf("Couldn't create user %v. Here's why: %v\n", userName, err)}}
return err}// AdminSetUserPassword uses administrator credentials to set a password for auser without requiring a// temporary password.
func (actor CognitoActions) AdminSetUserPassword(userPoolId string, userName
string, password string) error {_, err := actor.CognitoClient.AdminSetUserPassword(context.TODO(),&cognitoidentityprovider.AdminSetUserPasswordInput{
Password:
aws.String(password),
UserPoolId: aws.String(userPoolId),
Username:
aws.String(userName),
Permanent: true,})
if err != nil {var invalidPassword *types.InvalidPasswordException
if errors.As(err, &invalidPassword) {log.Println(*invalidPassword.Message)} else {log.Printf("Couldn't set password for user %v. Here's why: %v\n", userName,err)}}return err}

DynamoDB アクションをラップする構造体を作成します。

シナリオ

373

Amazon Cognito

開発者ガイド// DynamoActions encapsulates the Amazon Simple Notification Service (Amazon SNS)actions// used in the examples.
type DynamoActions struct {DynamoClient *dynamodb.Client}// User defines structured user data.
type User struct {UserName string
UserEmail string
LastLogin *LoginInfo `dynamodbav:",omitempty"`}// LoginInfo defines structured custom login data.
type LoginInfo struct {UserPoolId string
ClientId
stringTime
string}// UserList defines a list of users.
type UserList struct {Users []User}// UserNameList returns the usernames contained in a UserList as a list of
strings.
func (users *UserList) UserNameList() []string {names := make([]string, len(users.Users))
for i := 0; i < len(users.Users); i++ {names[i] = users.Users[i].UserName}
return names}// PopulateTable adds a set of test users to the table.
func (actor DynamoActions) PopulateTable(tableName string) error {var err error
var item map[string]types.AttributeValuevar writeReqs []types.WriteRequest
for i := 1; i < 4; i++ {

シナリオ

374

Amazon Cognito

開発者ガイドitem, err = attributevalue.MarshalMap(User{UserName: fmt.Sprintf("test_user_%v", i), UserEmail: fmt.Sprintf("test_email_%v@example.com", i)})
if err != nil {log.Printf("Couldn't marshall user into DynamoDB format. Here's why: %v\n",err)
return err}
writeReqs = append(writeReqs, types.WriteRequest{PutRequest:&types.PutRequest{Item: item}})}_, err = actor.DynamoClient.BatchWriteItem(context.TODO(),&dynamodb.BatchWriteItemInput{
RequestItems: map[string][]types.WriteRequest{tableName: writeReqs},})
if err != nil {log.Printf("Couldn't populate table %v with users. Here's why: %v\n",tableName, err)}
return err}// Scan scans the table for all items.
func (actor DynamoActions) Scan(tableName string) (UserList, error) {var userList UserList
output, err := actor.DynamoClient.Scan(context.TODO(), &dynamodb.ScanInput{
TableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't scan table %v for items. Here's why: %v\n", tableName,err)} else {err = attributevalue.UnmarshalListOfMaps(output.Items, &userList.Users)
if err != nil {log.Printf("Couldn't unmarshal items into users. Here's why: %v\n", err)}}
return userList, err}// AddUser adds a user item to a table.
func (actor DynamoActions) AddUser(tableName string, user User) error {userItem, err := attributevalue.MarshalMap(user)
if err != nil {log.Printf("Couldn't marshall user to item. Here's why: %v\n", err)

シナリオ

375

Amazon Cognito

開発者ガイド}_, err = actor.DynamoClient.PutItem(context.TODO(), &dynamodb.PutItemInput{
Item:
userItem,
TableName: aws.String(tableName),})
if err != nil {log.Printf("Couldn't put item in table %v. Here's why: %v", tableName, err)}
return err}

Logs CloudWatch アクションをラップする構造体を作成します。

type CloudWatchLogsActions struct {CwlClient *cloudwatchlogs.Client}// GetLatestLogStream gets the most recent log stream for a Lambda function.
func (actor CloudWatchLogsActions) GetLatestLogStream(functionName string)(types.LogStream, error) {var logStream types.LogStream
logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName)
output, err := actor.CwlClient.DescribeLogStreams(context.TODO(),&cloudwatchlogs.DescribeLogStreamsInput{
Descending:aws.Bool(true),
Limit:
aws.Int32(1),LogGroupName: aws.String(logGroupName),
OrderBy:
types.OrderByLastEventTime,})if err != nil {log.Printf("Couldn't get log streams for log group %v. Here's why: %v\n",logGroupName, err)
} else {logStream = output.LogStreams[0]}return logStream, err}// GetLogEvents gets the most recent eventCount events from the specified log
stream.
シナリオ

376

Amazon Cognito

開発者ガイドfunc (actor CloudWatchLogsActions) GetLogEvents(functionName string,logStreamName string, eventCount int32) ([]types.OutputLogEvent, error) {var events []types.OutputLogEvent
logGroupName := fmt.Sprintf("/aws/lambda/%s", functionName)
output, err := actor.CwlClient.GetLogEvents(context.TODO(),&cloudwatchlogs.GetLogEventsInput{
LogStreamName: aws.String(logStreamName),
Limit:
aws.Int32(eventCount),
LogGroupName: aws.String(logGroupName),})
if err != nil {log.Printf("Couldn't get log event for log stream %v. Here's why: %v\n",logStreamName, err)
} else {events = output.Events}
return events, err}

AWS CloudFormation アクションをラップする構造体を作成します。

// StackOutputs defines a map of outputs from a specific stack.
type StackOutputs map[string]string
type CloudFormationActions struct {CfnClient *cloudformation.Client}// GetOutputs gets the outputs from a CloudFormation stack and puts them into a
structured format.
func (actor CloudFormationActions) GetOutputs(stackName string) StackOutputs {output, err := actor.CfnClient.DescribeStacks(context.TODO(),&cloudformation.DescribeStacksInput{
StackName: aws.String(stackName),})
if err != nil || len(output.Stacks) == 0 {log.Panicf("Couldn't find a CloudFormation stack named %v. Here's why: %v\n",stackName, err)
}
シナリオ

377

Amazon Cognito

開発者ガイドstackOutputs := StackOutputs{}
for _, out := range output.Stacks[0].Outputs {stackOutputs[*out.OutputKey] = *out.OutputValue}
return stackOutputs}

リソースをクリーンアップします。

// Resources keeps track of AWS resources created during an example and handles// cleanup when the example finishes.
type Resources struct {userPoolId
stringuserAccessTokens []string
triggers[]actions.Trigger
cognitoActor *actions.CognitoActions
questioner
demotools.IQuestioner}
func (resources *Resources) init(cognitoActor *actions.CognitoActions, questioner
demotools.IQuestioner) {resources.userAccessTokens = []string{}
resources.triggers = []actions.Trigger{}
resources.cognitoActor = cognitoActor
resources.questioner = questioner}// Cleanup deletes all AWS resources created during an example.
func (resources *Resources) Cleanup() {defer func() {if r := recover(); r != nil {log.Printf("Something went wrong during cleanup.\n%v\n", r)log.Println("Use the AWS Management Console to remove any remaining resources\n" +"that were created for this scenario.")
}
}()

シナリオ

378

Amazon Cognito

開発者ガイドwantDelete := resources.questioner.AskBool("Do you want to remove all of the AWS
resources that were created "+"during this demo (y/n)?", "y")if wantDelete {for _, accessToken := range resources.userAccessTokens {err := resources.cognitoActor.DeleteUser(accessToken)
if err != nil {log.Println("Couldn't delete user during cleanup.")panic(err)}log.Println("Deleted user.")}triggerList := make([]actions.TriggerInfo, len(resources.triggers))
for i := 0; i < len(resources.triggers); i++ {triggerList[i] = actions.TriggerInfo{Trigger: resources.triggers[i],HandlerArn: nil}}
err := resources.cognitoActor.UpdateTriggers(resources.userPoolId,
triggerList...)if err != nil {log.Println("Couldn't update Cognito triggers during cleanup.")panic(err)}log.Println("Removed Cognito triggers from user pool.")} else {log.Println("Be sure to remove resources when you're done with them to avoid
unexpected charges!")}}• API 詳細については、「 AWS SDK for Go APIリファレンス」の以下のトピックを参照してください。
• AdminCreateUser• AdminSetUserPassword• DeleteUser• InitiateAuth• UpdateUserPool

シナリオ

379

Amazon Cognito

開発者ガイドデベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

を使用した Amazon Cognito Sync のコード例 AWS SDKs
次のコード例は、 AWS Software Development Kit () で Amazon Cognito Sync を使用する方法を示していますSDK。
アクションはより大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。アクションは個々のサービス機能を呼び出す方法を示していますが、コンテキスト内のアクションは、関連するシナリオで確認できます。
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。
コードの例• を使用した Amazon Cognito Sync の基本的な例 AWS SDKs
• を使用した Amazon Cognito Sync のアクション AWS SDKs
• または ListIdentityPoolUsageAWS SDKで を使用する CLIを使用した Amazon Cognito Sync の基本的な例 AWS SDKs
次のコード例は、 で AWS Amazon Cognito Sync の基本を使用する方法を示していますSDKs。
例• を使用した Amazon Cognito Sync のアクション AWS SDKs
• または ListIdentityPoolUsageAWS SDKで を使用する CLIを使用した Amazon Cognito Sync のアクション AWS SDKs
次のコード例は、 で個々の Amazon Cognito Sync アクションを実行する方法を示しています AWS
SDKs。各例には GitHub、コードの設定と実行の手順を示す へのリンクが含まれています。
以下の例には、最も一般的に使用されるアクションのみ含まれています。詳細なリストについては、Amazon Cognito Sync ReferenceAPI」を参照してください。
Amazon Cognito Sync

380

Amazon Cognito

開発者ガイド例• または ListIdentityPoolUsageAWS SDKで を使用する CLIまたは ListIdentityPoolUsageAWS SDKで を使用する CLI
次のコード例は、ListIdentityPoolUsage を使用する方法を示しています。
Rust
SDK Rust 用
Noteについては、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リ
ポジトリでの設定と実行の方法を確認してください。

async fn show_pools(client: &Client) -> Result<(), Error> {let response = client.list_identity_pool_usage().max_results(10).send().await?;let pools = response.identity_pool_usages();
println!("Identity pools:");for pool in pools {println!(" Identity pool ID:{}",
pool.identity_pool_id().unwrap_or_default());
println!(" Data storage:{}",
pool.data_storage().unwrap_or_default());
println!(" Sync sessions count: {}",
pool.sync_sessions_count().unwrap_or_default());
println!(
基礎

381

Amazon Cognito

開発者ガイド" Last modified:{}",pool.last_modified_date().unwrap().to_chrono_utc()?
);
println!();}println!("Next token: {}", response.next_token().unwrap_or_default());Ok(())}• API 詳細については、Rust リファレンスのListIdentityPoolUsage「」の「」を参照してくだ
さい。 AWS SDK API
デベロッパーガイドとコード例の完全なリスト AWS SDKについては、「」を参照してくださいでのこのサービスの使用 AWS SDK。このトピックには、開始方法に関する情報と以前のSDKバージョンの詳細も含まれています。

基礎

382

Amazon Cognito

開発者ガイドマルチテナントアプリケーションのベストプラクティス
Amazon Cognito ユーザープールは、Amazon Cognito クォータ内にとどまる必要がある大量のリク
エストを生成するマルチテナントアプリケーションで動作します。カスタマーベースが大きくなった
ときにこの容量をスケールアップするには、追加のクォータ容量 を購入できます。
Note
Amazon Cognito クォータは、 AWS アカウント および ごとに適用されます AWS リー
ジョン。これらのクォータは、アプリケーション内のすべてのテナント間で共有されます。Amazon Cognito サービスクォータを確認し、クォータがアプリケーション内の想定ボリュームと想定テナント数を満たしていることを確認します。

このセクションでは、同じ リージョンと 内の Amazon Cognito リソース間でテナントを分離するために実装できる方法について説明します AWS アカウント。また、テナントを複数の AWS アカウ
ント またはリージョンに分割し、それぞれに独自のクォータを与えることもできます。マルチリー
ジョンマルチテナンシーのその他の利点には、可能な限り高いレベルの分離、グローバルに分散されたユーザーの最短ネットワーク転送時間、組織内の既存の分散モデルの遵守などがあります。
単一リージョンのマルチテナンシーは、顧客や管理者にとっても利点があります。
次のリストでは、共有リソースを使用したマルチテナンシーの利点の一部について説明します。
マルチテナンシーの利点
共通ユーザーディレクトリ
マルチテナンシーは、顧客が複数のアプリケーションにアカウントを持つモデルをサポートしま
す。サードパーティープロバイダーの ID を 1 つの一貫したユーザープールプロファイルにリンクできます。ユーザープロファイルがテナントに固有である場合、単一のユーザープールを持つマルチテナンシー戦略には、ユーザー管理へのエントリポイントが 1 つあります。
一般的なセキュリティ
共有ユーザープールでは、セキュリティの単一の標準を作成し、同じ高度なセキュリティ 、多要
素認証 (MFA）、およびAWS WAF標準をすべてのテナントに適用できます。 AWS WAF ウェブ
は関連付けるリソース AWS リージョン と同じ に存在するACL必要があるため、マルチテナン
シーは複雑なリソースへの共有アクセスを提供します。マルチリージョンの Amazon Cognito ア
383

Amazon Cognito

開発者ガイドプリケーションで一貫したセキュリティ設定を維持する場合は、リソース間で設定を複製する運用標準を適用する必要があります。
一般的なカスタマイズを使用して、ユーザープールと ID プールをカスタマイズできます AWS Lambda。ユーザープー
ルの Lambda トリガーの設定と、アイデンティティプールの Amazon Cognito イベントの設定が複雑になる可能性があります。Lambda 関数は、ユーザープールまたは ID プール AWS リー
ジョン と同じ に存在する必要があります。共有 Lambda 関数は、リージョン内のカスタム認証
フロー、ユーザー移行、トークン生成、およびその他の関数の標準を適用できます。
共通メッセージング
Amazon Simple Notification Service (Amazon SNS) では、ユーザーにSMSメッセージを送信する前に、リージョンで追加の設定が必要です。リージョンに含まれる Amazon Simple EmailService (Amazon SES) で検証された ID とドメインを使用して E メールメッセージを送信できます。
マルチテナンシーを使用すると、この設定とメンテナンスのオーバーヘッドをすべてのテナン
ト間で共有できます。Amazon SNSと Amazon SESはすべての で利用できるわけではないため
AWS リージョン、リソースをリージョン間で分割するには追加の考慮事項が必要です。
カスタムメッセージングプロバイダー を使用すると、メッセージ配信を管理するための単一のLambda 関数の一般的なカスタマイズが得られます。
ホストされた UI は、既に認証されたユーザーを認識するように、ブラウザにセッション Cookie を設定します。ユーザープールでローカルユーザーを認証すると、そのセッション Cookie は同じユー
ザープール内のすべてのアプリクライアントに対してユーザーを認証します。ローカルユーザーは、
外部 IdP を介したフェデレーションなしに、ユーザープールディレクトリにのみ存在します。セッション Cookieは 1 時間有効です。セッション Cookie の有効期間を変更することはできません。
ホストされた UI セッション Cookie を使用してアプリケーションクライアント間でサインインを防ぐには、2 つの方法があります。
• ユーザーをテナントごとのユーザープールに分割します。
• ホストされた UI サインインを Amazon Cognito ユーザープールのAPIサインインに置き換えま
す。
トピック
384

Amazon Cognito

開発者ガイド• ユーザープールのマルチテナンシーのベストプラクティス• アプリケーションクライアントマルチテナンシーのベストプラクティス• ユーザープールグループのマルチテナンシーのベストプラクティス• カスタム属性マルチテナンシーのベストプラクティス• カスタムスコープマルチテナンシーのベストプラクティス• マルチテナンシーのセキュリティに関する推奨事項

ユーザープールのマルチテナンシーのベストプラクティス
アプリ内のテナントごとにユーザープールを作成します。このアプローチは各テナントを最大限に分離します。テナントごとに異なる設定を実装することができます。ユーザープールによるテナント分
離により、 user-to-tenant マッピングに柔軟性がもたらされます。同じユーザーに複数のプロファイ
ルを作成することができます。ただし、ユーザーはそれぞれ、アクセスできるテナントごとに個別にサインアップする必要があります。
このアプローチを使用すると、テナントごとにホストされた UI を個別に設定し、アプリケーショ
ンのテナント固有のインスタンスにユーザーをリダイレクトできます。このアプローチを使用して、Amazon API Gateway などのバックエンドサービスと統合することもできます。
次の図は、専用ユーザープールを持つ各テナントを示しています。

テナントごとのユーザープール

385

Amazon Cognito

開発者ガイドユーザープールのマルチテナンシーを実装するタイミング
分離とカスタマイズが主な懸念事項である場合。ユーザーとテナントの関係は、複数のユーザープー
ルを持つアーキテクチャでは複雑な場合があります。2 つの教育テナントがある例を考えてみましょう。同じユーザーが、あるアプリではアクセスが制限された学生であり、別のアプリでは高レベルのアクセス許可を持つ教師である可能性があります。1 つのアプリMFAで を要求するが、別のアプリ
では要求しないか、別のパスワードポリシーを持つ場合があります。ローカルユーザーはホストさ
テナントごとのユーザープール

386

Amazon Cognito

開発者ガイドれた UI を使用してユーザープール内の複数のアプリケーションクライアントにサインインできるため、複数のテナントにホストされた UI でサインインさせたい場合にも、ユーザープールのマルチテ
ナンシーが最適です。
労力レベル
このアプローチを使用するには、高い開発労力と運用労力がかかります。アプリケーションファミ
リーの一貫した予測可能な結果を確保するには、Amazon Cognito リソースをオートメーションツールと統合し、認証アーキテクチャがより複雑になるにつれてベースラインを維持する必要があります。アプリケーション用に 1 つの開始場所を作成する場合は、ユーザーインターフェイス (UI) 要素を構築して、ユーザーを正しいリソースにルーティングする最初の決定をキャプチャする必要があります。

アプリケーションクライアントマルチテナンシーのベストプラク
ティス
アプリ内のテナントごとにアプリクライアントを作成します。アプリケーションクライアントマルチ
テナンシーを使用すると、テナントにリンクされたアプリケーションクライアントに任意のユーザーを割り当て、単一のユーザープロファイルを保持できます。ユーザープール内の ID プロバイダー(IdPs） の一部またはすべてをアプリケーションクライアントに割り当てることができるため、テナントアプリケーションクライアントはテナント固有の IdP によるサインインを許可できます。ユー
ザーが複数のテナントに存在する場合、プロファイルを複数の にリンク IdPs して一貫したユーザー
エクスペリエンスを実現できます。
次の図は、共有ユーザープール内の専用アプリケーションクライアントを持つ各テナントを示しています。

テナントごとのアプリケーションクライアント

387

Amazon Cognito

開発者ガイドアプリケーションクライアントマルチテナンシーを実装するタイミング
Lambda トリガー、パスワードポリシー、E メールとSMSメッセージのコンテンツと配信方法など、
ユーザープールレベルで設定のユニバーサル設定を選択できる場合。共有ユーザープールのユーザー
テナントごとのアプリケーションクライアント

388

Amazon Cognito

開発者ガイドは任意のアプリクライアントにサインインできるため、アプリクライアントマルチテナンシーは
app-client-specific IdPs または Amazon Cognito ユーザープール でのサインインに最適ですAPI。ア
プリケーションクライアントマルチテナンシーは、ユーザーが複数のアプリケーション間で移行できるようにする環境にも適しています one-to-many。
労力レベル
アプリケーションクライアントマルチテナンシーには中程度の労力が必要です。アプリケーション
クライアントマルチテナンシーの主な課題は、テナントがホストされた UI Cookie を提示し、アプリ
ケーションを切り替える機能です。アプリケーションクライアントマルチテナンシーアーキテクチャ
では、分離が必要な場所でホストされた UI サインインを避けます。アプリクライアントロジックが組み込まれたモバイルアプリやウェブアプリへのリンクを配信することも、ユーザーのテナンシーを決定する初期 UI 要素を構築することもできます。複数のユーザープールと ID プール間で設定を標準化して維持する必要がないため、労力のレベルが低くなります。

ユーザープールグループのマルチテナンシーのベストプラクティス
グループベースのマルチテナンシーは、アーキテクチャで ID プールを持つ Amazon Cognito ユー
ザープールが必要な場合に最適です。
ユーザープール ID とアクセストークンには cognito:groupsクレームが含まれています。さらに、ID トークンには cognito:rolesおよび cognito:preferred_roleクレームが含まれます。
アプリでの認証の主な結果が ID プールからの一時的な AWS 認証情報である場合、ユーザーのグ
ループメンバーシップは、受け取るIAMロールとアクセス許可を決定できます。
例として、それぞれがアプリケーションアセットを独自の Amazon S3 バケットに保存している 3 つのテナントを考えてみましょう。各テナントのユーザーを関連付けられたグループに割り当て、グ
ループの優先ロールを設定し、そのロールにバケットへの読み取りアクセスを許可します。
次の図は、アプリケーションクライアントとユーザープールを共有するテナントと、IAMロールの適格性を決定するユーザープール内の専用グループを示しています。

テナントごとのユーザープールグループ

389

Amazon Cognito

テナントごとのユーザープールグループ

開発者ガイド390

Amazon Cognito

開発者ガイドグループマルチテナンシーを実装するタイミング
AWS リソースへのアクセスが主な懸念事項である場合。Amazon Cognito ユーザープールのユー
ザープールのグループは、ロールベースのアクセスコントロール () のメカニズムですRBAC。ユー
ザープールに多数のグループを設定し、グループの優先順位で複雑なRBAC決定を行うことができます。ID プールは、優先度が最も高いロール、グループクレーム内の任意のロール、またはユーザーのトークン内の他のクレームの認証情報を割り当てることができます。
労力レベル
グループメンバーシップだけでマルチテナンシーを維持する労力のレベルは低くなります。ただし、ロール選択の組み込み容量を超えてユーザープールグループのIAMロールを拡張するには、ユーザーのトークンのグループメンバーシップを処理するアプリケーションロジックを構築し、クライ
アントで何をするかを決定する必要があります。Amazon Verified Permissions をアプリケーションと統合して、クライアント側の承認を決定できます。グループ識別子は現在、Verified Permissions
IsAuthorizedWithTokenAPIオペレーションでは処理されませんが、グループメンバーのクレームなど、トークンの内容を解析するカスタムコードを開発できます。

カスタム属性マルチテナンシーのベストプラクティス
Amazon Cognito は、選択した名前のカスタム属性をサポートします。カスタム属性が役立つシナリ
オの 1 つは、共有ユーザープール内のユーザーのテナンシーを区別する場合です。などの属性に値をユーザーに割り当てるとcustom:tenantID、アプリケーションはそれに応じてテナント固有のリ
ソースへのアクセスを割り当てることができます。テナント ID を定義するカスタム属性は、アプリ
クライアントに対してイミュータブルまたは読み取り専用にする必要があります。
次の図は、アプリケーションクライアントとユーザープールを共有するテナントと、それらが属するテナントを示すユーザープール内のカスタム属性を示しています。

テナントごとのカスタム属性

391

Amazon Cognito

開発者ガイドカスタム属性がテナンシーを決定する場合、単一のアプリケーションまたはサインイン を配布でき
ますURL。ユーザーがサインインすると、アプリはロードするアセット、適用するブランド、表示すテナントごとのカスタム属性

392

Amazon Cognito

開発者ガイドる機能を決定するcustom:tenantIDクレームを処理できます。ユーザー属性からの高度なアクセス
コントロールの決定については、Amazon Verified Permissions でユーザープールを ID プロバイダーとして設定し、ID またはアクセストークンの内容からアクセス決定を生成します。
カスタム属性マルチテナンシーを実装するタイミング
テナンシーが表面レベルの場合。テナント属性は、ブランド化とレイアウトの結果に貢献できます。
テナント間で大幅な分離を実現する場合、カスタム属性は最適な選択肢ではありません。MFA やホ
ストされた UI ブランドなど、ユーザープールレベルまたはアプリケーションクライアントレベルで設定する必要があるテナント間の違いは、カスタム属性が提供しない方法でテナント間の区別を作成する必要があります。ID プールを使用すると、ID トークンのカスタム属性クレームからユーザーからIAMロールを選択することもできます。
労力レベル
カスタム属性のマルチテナンシーは、アプリケーションに対するテナントベースの承認決定の義務を転送するため、労力のレベルが高い傾向があります。OIDC クレームを解析するクライアント設定、または Amazon Verified Permissions を既に熟知している場合、このアプローチには最低レベルの労力が必要になる場合があります。

カスタムスコープマルチテナンシーのベストプラクティス
Amazon Cognito は、リソースサーバー のカスタム OAuth 2.0 スコープをサポートしています。
???カスタムスコープを持つ machine-to-machine (M2M) 認証モデルのユーザープールにアプリケー
ションクライアントのマルチテナンシーを実装できます。スコープベースのマルチテナンシーは、ア
プリケーションクライアントまたはアプリケーション設定でアクセスを定義することでM2M マルチ
テナンシーの実装に必要な労力を削減します。
Note
現在、アクセストークンをカスタマイズして、クライアント認証情報 (M2M) 認証フローにカ
スタムクレームまたはスコープを追加することはできません。

次の図は、カスタムスコープマルチテナンシーのオプションを 1 つ示しています。ユーザープール
内の関連するスコープにアクセスできる専用のアプリケーションクライアントを持つ各テナントが表示されます。
テナントごとのカスタムスコープ

393

Amazon Cognito

テナントごとのカスタムスコープ

開発者ガイド394

Amazon Cognito

開発者ガイドカスタムスコープのマルチテナンシーを実装するタイミング
使用が機密クライアント内のクライアント認証情報による M2M 認証である場合。ベストプラクティ
スとして、アプリケーションクライアント専用のリソースサーバーを作成します。カスタムスコープのマルチテナンシーは、リクエスト依存またはクライアント依存の にすることができます。
リクエスト依存テナントの要件に一致するスコープのみをリクエストするアプリケーションロジックを実装します。例えば、アプリケーションクライアントは API A と API B への読み取りおよび書き込みアクセスを発行できますが、テナントアプリケーション A は API A の読み取りスコープとテナンシー
を示すスコープのみをリクエストします。このモデルでは、テナント間で共有スコープをより複雑に組み合わせることができます。
クライアント依存
承認リクエストでアプリケーションクライアントに割り当てられたすべてのスコープをリクエストします。これを行うには、 scopeリクエストの リクエストパラメータを に省略しますトーク
ンエンドポイント。このモデルにより、アプリケーションクライアントはカスタムスコープに追加するアクセスインジケータを保存できます。
いずれの場合も、アプリケーションは、依存するデータソースに対する権限を示すスコープを持つア
クセストークンを受け取ります。スコープは、アプリケーションに他の情報を表示することもできます。
• テナンシーを指定する• リクエストのログ記録に貢献• アプリケーションAPIsがクエリを許可されていることを示す• アクティブな顧客の初期チェックを通知します。
労力レベル
カスタムスコープのマルチテナンシーには、アプリケーションの規模に応じてさまざまなレベルの労力が必要です。アプリケーションがアクセストークンを解析し、適切なAPIリクエストを行うことを許可するアプリケーションロジックを考案する必要があります。
例えば、リソースサーバーのスコープは の形式になります[resource server identifier]/[name]。リソースサーバー識別子がテナントスコープからの認可決定に関連している可能性が低
く、スコープ名を一貫して解析する必要があります。
テナントごとのカスタムスコープ

395

Amazon Cognito

開発者ガイドリソースの例
次の AWS CloudFormation テンプレートは、1 つのリソースサーバーとアプリケーションクライア
ントを使用して、カスタムスコープのマルチテナンシー用のユーザープールを作成します。
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template illustrating scope-based multi-tenancy
Resources:
MyUserPool:
Type: "AWS::Cognito::UserPool"
MyUserPoolDomain:
Type: AWS::Cognito::UserPoolDomain
Properties:
UserPoolId: !Ref MyUserPool# Note that the value for "Domain" must be unique across all of AWS.
# In production, you may want to consider using a custom domain.
# See: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-add-custom-domain.html#cognito-user-pools-add-custom-domain-adding
Domain: !Sub "example-userpool-domain-${AWS::AccountId}"
MyUserPoolResourceServer:
Type: "AWS::Cognito::UserPoolResourceServer"
Properties:
Identifier: resource1
Name: resource1
Scopes:- ScopeDescription: Read-only access
ScopeName: readScope
UserPoolId: !Ref MyUserPool
MyUserPoolTenantBatch1ResourceServer:
Type: "AWS::Cognito::UserPoolResourceServer"
Properties:
Identifier: TenantBatch1
Name: TenantBatch1
Scopes:- ScopeDescription: tenant1 identifier
ScopeName: tenant1- ScopeDescription: tenant2 identifier
ScopeName: tenant2
UserPoolId: !Ref MyUserPool
MyUserPoolClientTenant1:
Type: "AWS::Cognito::UserPoolClient"
Properties:
AllowedOAuthFlows:
リソースの例396

Amazon Cognito

開発者ガイド- client_credentials
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthScopes:- !Sub "${MyUserPoolTenantBatch1ResourceServer}/tenant1"- !Sub "${MyUserPoolResourceServer}/readScope"
GenerateSecret: true
UserPoolId: !Ref MyUserPool
Outputs:
UserPoolClientId:
Description: User pool client ID
Value: !Ref MyUserPoolClientTenant1
UserPoolDomain:
Description: User pool domain
Value: !Sub "https://${MyUserPoolDomain}.auth.${AWS::Region}.amazoncognito.com"

マルチテナンシーのセキュリティに関する推奨事項
アプリケーションの安全性を高めるために、以下を推奨します。
• Amazon Verified Permissions を使用してアプリのテナンシーを検証します。アプリケーションでユーザーのリクエストを許可する前に、ユーザープール、アプリケーションクライアント、グルー
プ、またはカスタム属性の使用権限を調べるポリシーを構築します。Amazon Cognito ユーザー
プールを念頭に置いて Verified Permissions ID ソース AWS を作成しました。Verified Permissionsには、マルチテナンシー管理に関する追加のガイダンスがあります。
• ドメインの一致に基づいたテナントへのユーザーアクセスを承認するために、検証済みの E メー
ルアドレスのみを使用します。E メールアドレスと電話番号は、アプリが検証するか、外部 IdP が検証の証明を提供しない限り、信頼しないでください。これらの許可を設定する方法の詳細については、「属性の許可と範囲」を参照してください。
• テナントを識別するユーザープロファイル属性には、イミュータブルな、または読み取り専用のカ
スタム属性を使用します。変更不可能な属性の値は、ユーザーを作成するとき、またはユーザーがユーザープールにサインアップするときにのみ設定できます。また、アプリクライアントに属性への読み取り専用アクセスを許可します。
• テナントの外部 IdP とアプリケーションクライアント間の 1:1 マッピングを使用して、不正なクロ
ステナントアクセスを防止します。外部 IdP によって認証され、有効な Amazon Cognito セッショ
ン Cookie を持つユーザーは、同じ IdP を信頼する他のテナントアプリケーションにアクセスできます。
• アプリケーションにテナントマッチングおよび認可ロジックを実装する場合は、テナントへのユー
ザーアクセスを認可する基準を変更できないようにユーザーを制限してください。また、フェデマルチテナンシーのセキュリティに関する推奨事項

397

Amazon Cognito

開発者ガイドレーションのために外部 IdP が使用されている場合は、テナント ID プロバイダー管理者がユー
ザーアクセスを変更できないように制限してください。

マルチテナンシーのセキュリティに関する推奨事項

398

Amazon Cognito

開発者ガイド一般的な Amazon Cognito シナリオ
このトピックでは、Amazon Cognito を使用するための 6 つの一般的なシナリオについて説明します。
Amazon Cognito の主な 2 つのコンポーネントは、ユーザープールと ID プールです。ユーザープー
ルは、ウェブおよびモバイルユーザーにサインアップとサインインオプションを提供するユーザー
ディレクトリです。ID プールは、ユーザーに他の へのアクセスを許可するための一時的な AWS 認
証情報を提供します AWS サービス。
ユーザープールは、Amazon Cognito のユーザーディレクトリです。アプリユーザーは、ユーザープールから直接サインインすることも、サードパーティー ID プロバイダー (IdP) を介してフェデ
レーションすることもできます。ユーザープールは、Facebook、Google、Amazon、Apple を介したソーシャルサインイン、および OpenID Connect (OIDC) と SAML から返されるトークンの処理のオーバーヘッドを管理します IdPs。ユーザーが直接またはサードパーティーを通じてサインインするかどうかにかかわらず、ユーザープールのすべてのメンバーには、SDK を通じてアクセスできる
ディレクトリプロファイルがあります。
ID プールを使用すると、ユーザーは Amazon S3 や DynamoDB などの のサービスにアクセス AWSするための一時的な AWS 認証情報を取得できます。ID プールは、匿名ゲストユーザーと、サードパーティー を介したフェデレーションをサポートします IdPs。
トピック• ユーザープールを使用して認証する• ユーザープールを使用してサーバー側のリソースにアクセスする• ユーザープールと共に API Gateway と Lambda を使用してリソースにアクセスする• ユーザープールと ID プールを使用して AWS サービスにアクセスする• サードパーティーで認証を行い、ID プールを使用して AWS サービスにアクセスする• Amazon Cognito で AWS AppSync リソースにアクセスする

ユーザープールを使用して認証する
ユーザーがユーザープールを使用して認証できるようにすることが可能です。アプリユーザーは、
ユーザープールから直接サインインすることも、サードパーティー ID プロバイダー (IdP) を介してフェデレーションすることもできます。ユーザープールは、Facebook、Google、Amazon、Apple
ユーザープールを使用して認証する

399

Amazon Cognito

開発者ガイドを介したソーシャルサインイン、および OpenID Connect (OIDC) と SAML から返されるトークンの処理のオーバーヘッドを管理します IdPs。
認証が正常に行われると、ウェブまたはモバイルアプリが Amazon Cognito からユーザープールトー
クンを受け取ります。これらのトークンを使用して、アプリケーションが他の AWS のサービスにアクセスできるようにする AWS 認証情報を取得できます。または、サーバー側のリソースまたはAmazon API Gateway へのアクセスを制御するためにトークンを使用することも可能です。
詳細については、「ユーザープール認証フロー」および「ユーザープールでのトークンの使用」を参照してください。

ユーザープールを使用してサーバー側のリソースにアクセスする
ユーザープールへのサインインが正常に行われると、ウェブまたはモバイルアプリが Amazon
Cognito からユーザープールトークンを受け取ります。サーバー側のリソースへのアクセスを制御す
るには、これらのトークンを使用します。また、ユーザープールグループを作成して許可を管理した
り、異なるタイプのユーザーを表したりすることもできます。グループを使用して、リソースをアクセス制御する方法の詳細については、「ユーザープールにグループを追加する」を参照してください。

サーバー側のリソースにアクセスする400

Amazon Cognito

開発者ガイドユーザープールのドメインを設定した後、Amazon Cognito が、アプリにサインアップおよびサインインページを追加できるようにするホストされたウェブの UI をプロビジョニングします。このOAuth 2.0 認証基盤を使用することで、独自のリソースサーバーを作成でき、ユーザーは保護されたリソースにアクセスできるようになります。詳細については、「スコープ、M2M 、リソースサー
バーによるAPI認可」を参照してください。
ユーザープール認証の詳細については、「ユーザープール認証フロー」および「ユーザープールでのトークンの使用」を参照してください。

ユーザープールと共に API Gateway と Lambda を使用してリソースにアクセスする
ユーザーが API Gateway 経由で API にアクセスできるようにすることが可能です。API Gateway
は、正常に行われたユーザープール認証からのトークンを検証し、これらのトークンを Lambda 関
数などのリソース、または独自の API へのアクセス権をユーザーに付与するために使用します。
ユーザープール内のグループは、グループメンバーシップを IAM ロールにマップすることによって、API Gateway でアクセス許可を制御するために使用できます。ユーザーがメンバーとなっているグループは、アプリユーザーのサインイン時にユーザープールより付与される ID トークンに含まれます。ユーザープールグループの詳細については、「ユーザープールにグループを追加する」を参照してください。
Amazon Cognito オーソライザーの Lambda 関数による検証のために、API Gateway へのリクエスト
でユーザープールトークンを送信することができます。API Gateway の詳細については、「Amazon
Cognito ユーザープールをオーソライザーとして使用して REST API へのアクセスを制御する」を参照してください。
API Gateway と Lambda を使用してリソースにアクセスする

401

Amazon Cognito

開発者ガイドユーザープールと ID プールを使用して AWS サービスにアクセスする
ユーザープールの認証が正常に行われると、アプリケーションが Amazon Cognito からユーザープー
ルトークンを受け取ります。ID プールを使用して、他の AWS のサービスへの一時的なアクセスと交換できます。詳細については、「サインイン後の ID プール AWS サービス を使用した へのアクセス」および「Amazon Cognito ID プールの開始方法」を参照してください。

ユーザープールと ID プールを使用して AWS サービスにアクセスする

402

Amazon Cognito

開発者ガイドサードパーティーで認証を行い、ID プールを使用して AWS サー
ビスにアクセスする
ID プールを介して AWS のサービスへのアクセスをユーザーに許可できます。ID プールには、サードパーティー ID プロバイダーによって認証されたユーザーからの IdP トークンが必要です (匿名ゲストの場合は何も必要ありません)。代わりに、アイデンティティプールは、他の AWS サービスにアクセスするために使用できる一時的な AWS 認証情報を付与します。詳細については、「Amazon
Cognito ID プールの開始方法」を参照してください。

サードパーティーで認証を行い、ID プールを使用して AWS サービスにアクセスする

403

Amazon Cognito

開発者ガイドAmazon Cognito で AWS AppSync リソースにアクセスする
Amazon Cognito ユーザープール認証が成功したトークンを使用して、 AWS AppSync リソースへのアクセス権をユーザーに付与できます。詳細については、「AWS AppSync デベロッパーガイド」の「AMAZON_COGNITO_USER_POOLS 認証」を参照してください。
ID プールから受信した IAM 認証情報を使用して、 AWS AppSync GraphQL API へのリクエストに署名することもできます。「AWS_IAM 認証」を参照してください。

Amazon Cognito で AWS AppSync リソースにアクセスする

404

Amazon Cognito

Amazon Cognito で AWS AppSync リソースにアクセスする

開発者ガイド405

Amazon Cognito

開発者ガイドAmazon Cognito user pools
Amazon Cognito ユーザープールは、ウェブおよびモバイルアプリケーションの認証と承認のための
ユーザーディレクトリです。アプリの観点から見ると、Amazon Cognito ユーザープールは OpenID
Connect (OIDC) ID プロバイダー (IdP) です。ユーザープールには、セキュリティ、ID フェデレー
ション、アプリ統合、ユーザーエクスペリエンスのカスタマイズなどの機能が何層も追加されます。
例えば、ユーザーのセッションが信頼できるソースからのものであることを確認できます。Amazon
Cognito ディレクトリを外部 ID プロバイダーと組み合わせることができます。任意の で AWS
SDK、アプリケーションに最適なAPI認証モデルを選択できます。また、Amazon Cognito のデフォ
ルトの動作を変更またはオーバーホールする AWS Lambda 関数を追加することもできます。

トピック
• 機能
• ユーザープールでの認証• Amazon Cognito ユーザープールAPIとユーザープールエンドポイントの使用• ユーザープール設定の更新• Amazon Cognito でホストされた UI およびフェデレーションエンドポイントの設定と使用• スコープ、M2M 、リソースサーバーによるAPI認可• サードパーティー経由のユーザープールへのサインインの追加• Lambda トリガーを使用したユーザープールワークフローのカスタマイズ• ユーザープール分析に Amazon Pinpoint を使用する• ユーザープール内のユーザーを管理する• Amazon Cognito ユーザープールの E メール設定• SMS Amazon Cognito ユーザープールのメッセージ設定
406

Amazon Cognito

開発者ガイド• ユーザープールでのトークンの使用• ユーザープール認証に成功した後のリソースへのアクセス• Amazon Cognito ユーザープールのセキュリティ機能を使用する

機能
Amazon Cognito ユーザープには次の機能があります。

サインアップAmazon Cognito ユーザープールには、ユーザープールにユーザープロファイルを追加するためのユーザー主導型、管理者主導型、およびプログラムによる方法があります。Amazon Cognito ユー
ザープールは、以下のサインアップモデルをサポートしています。アプリでは、これらのモデルを任意に組み合わせて、アプリで使用できます。
Important
ユーザープールでユーザーサインアップを有効にすると、インターネット上のすべてのユー
ザーがアカウントにサインアップしてアプリケーションにサインインできるようになります。アプリケーションをパブリックサインアップで開く場合を除き、ユーザープールで自己登録を有効にしないでください。この設定を変更するには、ユーザープールコンソー
ルのサインアップエクスペリエンスタブでセルフサービスサインアップを更新するか、
CreateUserPool または UpdateUserPoolAPIリクエスト AllowAdminCreateUserOnlyの の値を更新します。
ユーザープールに設定できるセキュリティ機能については、「Amazon Cognito ユーザー
プールのセキュリティ機能を使用する」を参照してください。

1. ユーザーはアプリに情報を入力し、ユーザープールにネイティブなユーザープロファイルを作成できます。API サインアップオペレーションを呼び出して、ユーザープールにユーザーを登録できます。これらのサインアップオペレーションは、誰でも開くことも、クライアントシークレッ
トまたは AWS 認証情報を使用して承認することもできます。
2. ユーザーを Amazon Cognito への情報の受け渡しを許可できるサードパーティーの IdP にリダ
イレクトできます。Amazon Cognito OIDC は、ID OAuth トークン、2.0 userInfo データ、および SAML 2.0 アサーションをユーザープールのユーザープロファイルに処理します。Amazon
Cognito に受信させる属性は、属性マッピングルールに基づいて制御します。
機能407

Amazon Cognito

開発者ガイド3. パブリックサインアップやフェデレーションサインアップをスキップして、独自のデータソースとスキーマに基づいてユーザーを作成できます。Amazon Cognito コンソールまたは でユーザーを直接追加しますAPI。CSV ファイルからユーザーをインポートします。既存のディレクトリで新しいユーザーを検索し、既存のデータからユーザープロファイルを入力する just-in-time AWS
Lambda 関数を実行します。
ユーザーがサインアップしたら、Amazon Cognito がアクセストークンと ID トークンにリストする
グループにユーザーを追加できます。ID トークンを ID プールに渡すときに、ユーザープールグルー
プをIAMロールにリンクすることもできます。
関連トピック• ユーザープール内のユーザーを管理する• Amazon Cognito ユーザープールAPIとユーザープールエンドポイントの使用• を使用した Amazon Cognito ID プロバイダーのコード例 AWS SDKs

サインイン
Amazon Cognito は、スタンドアロンのユーザーディレクトリおよび ID プロバイダー (IdP) として使用し、アプリケーションの ID プロバイダー (IdP) として使用できます。ユーザーは、Amazon
Cognito によってホストされる UI でサインインするか、Amazon Cognito ユーザープール を介して独自の UI でサインインできますAPI。フロントエンドのカスタム UI の背後にあるアプリケーション
層は、正当なリクエストを確認するためのいくつかの方法のいずれかを使用してバックエンドのリク
エストを承認できます。
外部ディレクトリ (オプションで Amazon Cognito に組み込まれたユーザーディレクトリと組み合わせる) を使用してユーザーをサインインさせるには、次の統合を追加できます。
1. 2.0 OAuth ソーシャルサインインを使用してサインインし、コンシューマーユーザーデータをイン
ポートします。Amazon Cognito は 2.0 を通じて Google、Facebook、Amazon、Apple OAuth とのサインインをサポートしています。
2. サインインして、エンタープライズユーザーデータをインポートSAMLし、OIDCサインインします。SAML または OpenID Connect (OIDC) ID プロバイダー (IdP) からのクレームを受け入れるよ
うに Amazon Cognito を設定することもできます。
3. 外部ユーザープロファイルをネイティブユーザープロファイルにリンクします。リンクされたユーザーは、サードパーティーのユーザー ID を使用してサインインし、組み込みディレクトリのユーザーに割り当てたアクセス権を受け取ることができます。
サインイン

408

Amazon Cognito

開発者ガイド関連トピック• サードパーティー経由のユーザープールへのサインインの追加• フェデレーションユーザーを既存のユーザープロファイルにリンクする
M achine-to-machine 認証
一部のセッションは human-to-machine インタラクションではありません。自動プロセスAPIによって へのリクエストを承認できるサービスアカウントが必要になる場合があります。2OAuth.0 スコー
プで machine-to-machine 認証用のアクセストークンを生成するには、クライアント認証情報付与を生成するアプリケーションクライアントを追加できます。
関連トピック• スコープ、M2M 、リソースサーバーによるAPI認可

ホストされた UI
ユーザーインターフェイスを構築しない場合は、カスタマイズされた Amazon Cognito がホストする UI をユーザーに提供できます。ホストされた UI は、サインアップ、サインイン、多要素認証(MFA）、パスワードリセット用の一連のウェブページです。ホストされた UI を既存のドメインに追加するか、 AWS サブドメインでプレフィックス識別子を使用できます。
関連トピック• Amazon Cognito でホストされた UI およびフェデレーションエンドポイントの設定と使用• ユーザープールのドメインを設定する

セキュリティ
ローカルユーザーは、SMSメッセージからのコード、または多要素認証 (MFA) コードを生成するアプリを使用して、追加の認証要素を提供できます。アプリMFAでセットアップして処理するメカニズムを構築することも、ホストされた UI に管理させることもできます。Amazon Cognito ユーザー
プールは、ユーザーが信頼できるデバイスからサインインMFAするときにバイパスできます。
最初にMFAユーザーに を要求しない場合は、条件付きで要求できます。高度なセキュリティ機能を使用すると、Amazon Cognito は悪意のあるアクティビティの可能性を検出しMFA、ユーザーに のセットアップ、またはサインインのブロックを要求できます。
ホストされた UI

409

Amazon Cognito

開発者ガイドユーザープールへのネットワークトラフィックが悪意のあるものである可能性がある場合は、それをモニタリングし、 AWS WAF ウェブ でアクションを実行できますACLs。
関連トピック• ユーザープールMFAへの の追加• ユーザープールの高度なセキュリティ機能• AWS WAF ウェブとユーザープールACLの関連付け

カスタマーユーザーエクスペリエンス
ユーザーのサインアップ、サインイン、またはプロファイル更新のほとんどの段階で、Amazon
Cognito がリクエストを処理する方法をカスタマイズできます。Lambda トリガーを使用すると、ID
トークンを変更したり、カスタム条件に基づいてサインアップリクエストを拒否したりできます。自分のカスタム認証フローを作成できます。
カスタム CSSと ロゴをアップロードして、ホストされた UI に使い慣れたルックアンドフィールをユーザーに提供できます。
関連トピック• Lambda トリガーを使用したユーザープールワークフローのカスタマイズ• カスタム認証チャレンジの Lambda トリガー
• 組み込みのサインインおよびサインアップウェブページのカスタマイズ

モニタリングと分析
Amazon Cognito ユーザープールは、ホストされた UI へのAPIリクエストを含むリクエストをに記録します AWS CloudTrail。Amazon CloudWatch Logs でパフォーマンスメトリクスを確認
し、Lambda トリガー CloudWatch を使用してカスタムログを にプッシュし、Service Quotas コン
ソールでAPIリクエストボリュームをモニタリングできます。
Amazon Pinpoint キャンペーンへのAPIリクエストからデバイスとセッションのデータをログ記録することもできます。Amazon Pinpoint では、ユーザーアクティビティの分析に基づいて、アプリから
プッシュ通知を送信できます。
関連トピック• を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail
カスタマーユーザーエクスペリエンス

410

Amazon Cognito

開発者ガイド• および Service Quotas でのクォータ CloudWatch と使用状況の追跡• ユーザープール分析に Amazon Pinpoint を使用する

Amazon Cognito アイデンティティプール統合
Amazon Cognito のもう半分はアイデンティティプールです。ID プールは AWS サービス、ユーザーからの Amazon DynamoDB や Amazon S3 などの へのAPIリクエストを承認およびモニタリングする認証情報を提供します。ユーザープール内のユーザーをどのように分類したかに基づいてデータを保護する ID ベースのアクセスポリシーを構築できます。ID プールは、ユーザープール認証とは無関
係に、さまざまな ID プロバイダーからのトークンと SAML 2.0 アサーションを受け入れることもできます。
関連トピック• サインイン後の ID プール AWS サービス を使用した へのアクセス• Amazon Cognito アイデンティティプール

ユーザープールでの認証
アプリユーザーは、ユーザープールから直接サインインすることも、サードパーティー
ID プロバイダー (IdP) を介してフェデレーションすることもできます。ユーザープール
は、Facebook、Google、Amazon、Apple を介したソーシャルサインイン、および OpenID Connect(OIDC) と SAML から返されるトークンの処理のオーバーヘッドを管理します IdPs。
認証が正常に行われると、Amazon Cognito がアプリにユーザープールトークンを返します。このトークンを使用して、独自のサーバー側のリソース、または Amazon API Gateway へのアクセス権をユーザーに付与できます。または、他の AWS のサービスにアクセスするための AWS 認証情報と交換することもできます。

Amazon Cognito アイデンティティプール統合

411

Amazon Cognito

開発者ガイドウェブまたはモバイルアプリのためのユーザープールトークンの処理と管理は、Amazon Cognito
SDK を通じてクライアント側で提供されます。同様に、Mobile SDK for iOS と Mobile SDK for
Android は、有効な (期限が切れていない) 更新トークンが存在し、ID トークンとアクセストークンの最小残存有効期間が 5 分になっている場合に ID トークンとアクセストークンを自動的に更新します。SDK および 、Android、iOS のサンプルコードについては、Amazon Cognito ユーザープール
SDKs」を参照してください。 JavaScript
アプリユーザーが正常にログインすると、Amazon Cognito がセッションを作成し、認証されたユー
ザーの ID トークン、アクセストークン、および更新トークンを返します。
JavaScript// Amazon Cognito creates a session which includes the id, access, and refresh
tokens of an authenticated user.
var authenticationData = {Username : 'username',
Password : 'password',};
var authenticationDetails = newAmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = { UserPoolId : 'us-east-1_ExaMPle',
ClientId : '1example23456789'};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {Username : 'username',
Pool : userPool};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {onSuccess: function (result) {var accessToken = result.getAccessToken().getJwtToken();/* Use the idToken for Logins Map when Federating User Pools withidentity pools or when passing through an Authorization Header to an API Gateway
Authorizer */var idToken = result.idToken.jwtToken;},
onFailure: function(err) {alert(err);
},
認証

412

Amazon Cognito

開発者ガイド});Android// Session is an object of the type CognitoUserSession, and includes the id, access,and refresh tokens for a user.
String idToken = session.getIdToken().getJWTToken();
String accessToken = session.getAccessToken().getJWT();

iOS - swift// AWSCognitoIdentityUserSession includes id, access, and refresh tokens for a user.
- (AWSTask<AWSCognitoIdentityUserSession *> *)getSession;

iOS - objective-C// AWSCognitoIdentityUserSession includes the id, access, and refresh tokens for auser.
[[user getSession:@"username" password:@"password" validationData:nil scopes:nil]continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserSession *> *_Nonnull task) {// success, task.result has user session
return nil;
}];

トピック
• ユーザープール認証フロー• ユーザープールアプリクライアント• ユーザープール内のユーザーデバイスの使用

ユーザープール認証フロー
Amazon Cognito には、ユーザーを認証する方法がいくつか用意されています。ドメインの有無にかかわらず、すべてのユーザープールはユーザープール でユーザーを認証できますAPI。ユーザープー
ユーザープール認証フロー413

Amazon Cognito

開発者ガイドルにドメインを追加すると、ユーザープール エンドポイントを使用できます。ユーザープールは、さまざまな認証モデルとリクエストのAPIリクエストフローAPIをサポートします。
ユーザーのアイデンティティを検証するため、Amazon Cognito では、パスワードの他にも新しいタ
イプのチャレンジが導入されています。Amazon Cognito 認証では、通常、次の順序で 2 つのAPIオ
ペレーションを実装する必要があります。
Public authentication
1. InitiateAuth
2. RespondToAuthChallenge
InitiateAuth および RespondToAuthChallengeは、クライアント側のパブリックアプリ
ケーションクライアントで使用するAPIsための認証されていません。
Server-side authentication
1. AdminInitiateAuth
2. AdminRespondToAuthChallenge
AdminInitiateAuth と はIAM認証情報AdminRespondToAuthChallengeを必要とし、サーバー側の機密アプリケーションクライアントに適しています。
認証が失敗するか、Amazon Cognito がユーザーにトークンを発行するまで、ユーザーは連続してチャレンジに回答して認証を進めます。カスタム認証フローをサポートするために、さまざまなチャ
レンジを含むプロセスで Amazon Cognito でこれらの手順を繰り返すことができます。

ユーザープール認証フロー414

Amazon Cognito

ユーザープール認証フロー

開発者ガイド415

Amazon Cognito

開発者ガイド通常、アプリケーションはユーザーから情報を収集するプロンプトを生成し、その情報をAPIリ
クエストで Amazon Cognito に送信します。多要素認証 () でユーザーを設定したユーザープールのInitiateAuthフローを考えてみましょうMFA。
1. アプリケーションは、ユーザーにユーザー名とパスワードの入力を求めます。
2. ユーザー名とパスワードをパラメータとして InitiateAuth に含めます。
3. Amazon Cognito から SMS_MFA チャレンジとセッション識別子が返されます。
4. アプリケーションは、ユーザーに電話からのMFAコードの入力を求めます。
5. そのコードとセッション ID を RespondToAuthChallenge リクエストに含めます。
ユーザープールの機能によっては、アプリケーションが Amazon Cognito からトークンを取得する前に、InitiateAuth へのいくつかのチャレンジに対応することが必要になります。Amazon Cognito
は、各リクエストへの応答にセッション文字列を含めます。API リクエストを認証フローに結合するには、前のリクエストに対するレスポンスのセッション文字列を後続の各リクエストに含めます。デ
フォルトでは、セッション文字列が期限切れになる前に、ユーザーに各チャレンジを完了するまでに3 分間が与えられます。この期間を調整するには、アプリケーションクライアントの認証フローセッ
ション持続期間を変更します。次の手順では、アプリクライアントの構成で、この設定を変更する方法について説明します。
Note
認証フローセッション期間の設定は、Amazon Cognito ユーザープール による認証に適用されますAPI。Amazon Cognito がホストする UI では、多要素認証の場合はセッション時間を3 分、パスワードリセットコードの場合は 8 分に設定しています。

Amazon Cognito console
アプリクライアントの認証フローセッション持続期間を設定するには (AWS Management
Console)1.

ユーザープールの [App integration] (アプリの統合) タブで、[App clients and analytics] (アプリクライアントと分析) コンテナからアプリクライアントの名前を選択します。

2.

[アプリケーションクライアントに関する情報] コンテナで [編集] を選択します。

ユーザープール認証フロー416

Amazon Cognito

3.

開発者ガイド

認証フローセッション期間を、SMSMFAコードに必要な有効期間に分単位で変更します。こ
れにより、ユーザーがアプリクライアントで認証チャレンジを完了するまでの時間も変更さ
れます。

4.

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

Amazon Cognito API
アプリケーションクライアント認証フローセッション期間を設定するには (Amazon Cognito
API）
1.

DescribeUserPoolClient リクエストから既存のユーザープール設定を使用してUpdateUserPoolClient リクエストを準備します。UpdateUserPoolClient リクエス
トには、既存のアプリクライアントのプロパティをすべて含める必要があります。

2.

の値を、SMSMFAコードに必要な有効期間AuthSessionValidityに分単位で変更します。これにより、ユーザーがアプリクライアントで認証チャレンジを完了するまでの時間も変更されます。

アプリクライアントの詳細については、「ユーザープールアプリクライアント」を参照してください。
AWS Lambda トリガーを使用して、ユーザーの認証方法をカスタマイズできます。トリガーは独自のチャレンジを認証フローの一部として発行し検証を行います。
また、安全なバックエンドサーバーでは、管理者の認証フローを使用することもできます。ユーザー移行の認証フローを使用すると、ユーザーがパスワードをリセットしなくてもユーザー移行できます。
サインインの試行の失敗に対する、Amazon Cognito ロックアウト動作
認証されていないサインインまたは IAM認証されたサインイン試行が 5 回失敗すると、Amazon
Cognito は 1 秒間ユーザーをロックアウトします。ロックアウトの期間は、試行が 1 回失敗す
るたびに 2 倍になり、最大で約 15 分になります。ロックアウト期間中に試行すると Password
attempts exceeded 例外が生成され、その後のロックアウト期間の長さには影響しません。
サインイン試行の累積失敗回数 n (Password attempts exceeded 例外を含まない) に対して、Amazon Cognito はユーザーを 2^(n-5) 秒間ロックアウトします。ロックアウトを n=0 初期状態にリセットするには、ユーザーは、ロックアウト期間後にサインインに成功するか、連続 15 分間、
サインイン試行を開始してはなりません。この動作は変更される可能性があります。この動作は、パスワードベースの認証も実行しない限り、カスタムチャレンジに適用されません。
ユーザープール認証フロー417

Amazon Cognito

開発者ガイドトピック• クライアント側の認証フロー• サーバー側の認証フロー• カスタム認証フロー• 組み込みの認証フローとチャレンジ• カスタム認証フローとチャレンジ• カスタム認証フローでSRPパスワード検証を使用する• 管理認証フロー• ユーザー移行の認証フロークライアント側の認証フロー
以下のプロセスは、 AWS Amplifyまたは で作成したユーザークライアント側のアプリで機能しま
すAWS SDKs。
1. ユーザーがアプリにユーザー名とパスワードを入力します。
2. アプリは、ユーザーのユーザー名とセキュアリモートパスワード (SRP) の詳細を使用してInitiateAuthオペレーションを呼び出します。
このAPIオペレーションは、認証パラメータを返します。
Note
アプリケーションは、 に組み込まれている AWS Amazon Cognito SRP機能SRPの詳細を生成しますSDKs。
3. アプリが RespondToAuthChallenge 操作を呼び出します。呼び出しが成功すると、Amazon
Cognito からユーザーのトークンが返され、認証フローが完了します。
Amazon Cognito に必要なチャレンジが別に存在する場合は、RespondToAuthChallenge を呼び出してもトークンは返されません。代わりに、呼び出しによってセッションが返されます。
4. がセッションをRespondToAuthChallenge返す場合、アプリケーションは再度 を呼び出しRespondToAuthChallengeます。今回はセッションとチャレンジレスポンス (MFAコードなど) を使用します。
ユーザープール認証フロー

418

Amazon Cognito

開発者ガイドサーバー側の認証フロー
ユーザーアプリケーションがなく、代わりに Java、Ruby、または Node.js の安全なバックエンドまたはサーバー側のアプリケーションを使用する場合は、Amazon Cognito ユーザープールAPIに認証されたサーバー側を使用できます。
サーバー側のアプリでのユーザープール認証は、クライアント側のアプリでの認証に似ています。次の点が異なります。
• サーバー側のアプリケーションは ( の代わりに) AdminInitiateAuthAPIオペ
レーションを呼び出しますInitiateAuth。このオペレーションには、 cognitoidp:AdminInitiateAuthおよび を含むアクセス許可を持つ AWS 認証情報が必要ですcognito-idp:AdminRespondToAuthChallenge。オペレーションからは、必要な認証パラ
メータが返されます。
• サーバー側のアプリが認証パラメータを取得したら、 ( の代わりに)
AdminRespondToAuthChallengeAPIオペレーションを呼び出しますRespondToAuthChallenge。AdminRespondToAuthChallenge API 操作は、 AWS 認証情報を指定した場合にのみ成功します。
AWS 認証情報を使用した Amazon Cognito APIリクエストの署名の詳細については、 AWS 全般のリ
ファレンスの「署名バージョン 4 の署名プロセス」を参照してください。
AdminInitiateAuth および AdminRespondToAuthChallengeAPIオペレーションは、次のいずれかの方法で明示的に有効にしない限り、管理者サインインの username-and-password ユーザー認証情報を受け付けることはできません。
• CreateUserPoolClient または UpdateUserPoolClient を呼び出すとき
は、ExplicitAuthFlow パラメータに ALLOW_ADMIN_USER_PASSWORD_AUTH (以前はADMIN_NO_SRP_AUTH と呼ばれています) を含めます。
• アプリクライアントの認証フローのリストに ALLOW_ADMIN_USER_PASSWORD_AUTH を追加します。ユーザープールの [App integration] (アプリ統合) タブの [App clients and analytics] (アプリクライアントと分析) でアプリクライアントを設定します。詳細については、「ユーザープールアプ
リクライアント」を参照してください。

カスタム認証フロー
Amazon Cognito ユーザープールでは、カスタム認証フローを使用することもできます。これにより、 AWS Lambda トリガーを使用してチャレンジ/レスポンスベースの認証モデルを作成できます。
ユーザープール認証フロー

419

Amazon Cognito

開発者ガイドカスタム認証フローを使用すると、チャレンジとレスポンスサイクルをカスタマイズすることが可能になり、さまざまな要件に対応できます。フローは、使用する認証のタイプを示し、初期認証パラメータを提供する InitiateAuthAPIオペレーションの呼び出しから始まります。Amazon Cognito
は、以下のいずれかの情報を使用して InitiateAuth コールに応答します。
• ユーザーへのチャレンジ、ならびにセッションおよびパラメータ。
• ユーザーが認証に失敗した場合はエラー。
• InitiateAuth コールで渡されたパラメータがユーザーのサインインに十分な場合は、ID、アクセス権限、更新トークン。(通常、ユーザーまたはアプリケーションは最初にチャレンジに応答する必要がありますが、カスタムコードはこれを判定する必要があります。)
Amazon Cognito がチャレンジで InitiateAuth コールに応答する場合、アプリは追加の入力を収集して、RespondToAuthChallenge 操作を呼び出します。このコールは、チャレン
ジ応答を提供し、セッションを返します。Amazon Cognito は、RespondToAuthChallenge
コールに対しても InitiateAuth コール同様の対応をします。ユーザーがサインインしている場合、Amazon Cognito はトークンを提供します。ユーザーがサインインしていない場
合、Amazon Cognito は別のチャレンジまたはエラーを提供します。Amazon Cognito が別のチャ
レンジを返した場合、ユーザーが正常にサインインするかエラーが返されるまで、シーケンスが繰り返され、アプリは RespondToAuthChallenge を呼び出します。InitiateAuth およびRespondToAuthChallengeAPIオペレーションの詳細については、 API ドキュメントを参照してください。

組み込みの認証フローとチャレンジ
Amazon Cognito にはAuthFlow、標準認証フローが Secure Remote Password (SRP) プロトコルを使用してユーザー名とパスワードを検証できるように、組み込みの と ChallengeNameの値が含まれています。 AWS SDKs には、Amazon Cognito によるこれらのフローのサポートが組み込まれています。
フローは USER_SRP_AUTH を AuthFlow として InitiateAuth に送信することから始まります。また、AuthParameters の USERNAME および SRP_A の値を送信します。InitiateAuth コールが成功した時点で、レスポンスのチャレンジパラメータには PASSWORD_VERIFIER が ChallengeName および SRP_B として含められています。次に、アプリは RespondToAuthChallenge を呼び出します。この呼び出しには
PASSWORD_VERIFIER ChallengeName と、ChallengeResponses の必要なパラメータが使用されます。RespondToAuthChallenge の呼び出しが成功し、ユーザーのサインインが受け入れられると、Amazon Cognito によりトークンが発行されます。ユーザーの多要素認証
ユーザープール認証フロー

420

Amazon Cognito

開発者ガイド(MFA) を有効にした場合、Amazon Cognito は ChallengeNameの を返しますSMS_MFA。アプリ
は、RespondToAuthChallenge への別の呼び出しを通じて、必要なコードを提供できます。

カスタム認証フローとチャレンジ
アプリはカスタム認証フローを開始するために、InitiateAuth を CUSTOM_AUTH としてAuthflow を呼び出すことができます。カスタム認証フローで、3 つの Lambda トリガーがチャレ
ンジとレスポンスの検証を制御します。
• DefineAuthChallenge Lambda トリガーは、以前のチャレンジとレスポンスのセッション配列
を入力として使用します。そして、次のチャレンジ名と、ユーザーが認証済みで、トークンを付与できるかどうかを示すブール値を生成します。この Lambda トリガーは、チャレンジを通じてユーザーのパスを制御するステートマシンです。
• CreateAuthChallenge Lambda トリガーは、チャレンジ名を入力として使用し、チャレンジとパラメータを生成してレスポンスを評価します。DefineAuthChallenge が次のチャレンジ
として CUSTOM_CHALLENGE を返すと、認証フローは、CreateAuthChallenge を呼び出します。CreateAuthChallengeLambda トリガーは、チャレンジメタデータパラメータで次のタイ
プのチャレンジを渡します。
• VerifyAuthChallengeResponse Lambda 関数は、レスポンスを評価し、レスポンスが有効であるかどうかを示すブール値を返します。
カスタム認証フローでは、SRPパスワード検証や MFA経由など、組み込みチャレンジの組み合わせを使用することもできますSMS。CAPTCHA やシークレットの質問などのカスタムチャレンジを使用できます。

カスタム認証フローでSRPパスワード検証を使用する
カスタム認証フローSRPに を含める場合は、 で始める必要がありますSRP。
• カスタムフローでSRPパスワード検証を開始するには、アプリは InitiateAuthを
CUSTOM_AUTHとして呼び出しますAuthflow。AuthParameters マップでは、アプリからのリクエストには SRP_A: (SRPA 値) と が含まれますCHALLENGE_NAME: SRP_A。
• CUSTOM_AUTH フローは、challengeName: SRP_A および challengeResult: true の初期セッションにより、DefineAuthChallenge の Lambda トリガーを呼び出します。Lambda
関数は、challengeName: PASSWORD_VERIFIER、issueTokens: false、および
failAuthentication: false により、応答します。

ユーザープール認証フロー

421

Amazon Cognito

開発者ガイド• 次に、アプリは RespondToAuthChallengechallengeName:PASSWORD_VERIFIERとchallengeResponsesマップ内の に必要なその他のパラメータSRPを呼び出す必要があります。
• Amazon Cognito がパスワードを検証すると、challengeName: PASSWORD_VERIFIERと challengeResult: true の 2 番目のセッションで、RespondToAuthChallenge
により Lambda トリガーの DefineAuthChallenge が呼び出されます。その時点でDefineAuthChallenge Lambda トリガーは、challengeName: CUSTOM_CHALLENGE を使用して応答することでカスタムチャレンジを開始します。
• MFA がユーザーに対して有効になっている場合、Amazon Cognito がパスワードを検証すると、ユーザーは でセットアップまたはサインインするように求められますMFA。

Note
Amazon Cognito がホストするサインインウェブページは、カスタム認証チャレンジのLambda トリガー をアクティブ化できません。

サンプルコードを含めた Lambda トリガーの詳細については、「Lambda トリガーを使用したユー
ザープールワークフローのカスタマイズ」を参照してください。

管理認証フロー
認証のベストプラクティスは、パスワードの検証SRPに カスタム認証フローで説明されているAPIオペレーションを使用することです。そのアプローチ AWS SDKsを使用し、このアプローチは を使用するのに役立ちますSRP。ただし、SRP計算を避けたい場合は、安全なバッ
クエンドサーバーに代替の管理APIオペレーションセットを使用できます。これらバックエン
ド管理の実装では、InitiateAuth の代わりに AdminInitiateAuth を使用します。同時に、RespondToAuthChallenge の代わりには AdminRespondToAuthChallenge を使用します。パスワードはプレーンテキストで送信できるため、これらのオペレーションを使用するときにSRP計算を行う必要はありません。以下がその例です。
AdminInitiateAuth Request {"AuthFlow":"ADMIN_USER_PASSWORD_AUTH","AuthParameters":{"USERNAME":"<username>","PASSWORD":"<password>"},"ClientId":"<clientId>",
ユーザープール認証フロー422

Amazon Cognito

開発者ガイド"UserPoolId":"<userPoolId>"}

これらの管理認証オペレーションには、開発者の認証情報が必要であり、 AWS Signature Version
4 (SigV4) の署名プロセスが使用されます。これらのオペレーションはSDKs、Lambda 関数に便利な Node.js を含む標準 AWS で使用できます。これらのオペレーションを使用し、同時にパス
ワードをプレーンテキストで受け入れるには、コンソールでそれらをアプリケーション向けに有効化する必要があります。または、ADMIN_USER_PASSWORD_AUTH または ExplicitAuthFlow
への呼び出しで CreateUserPoolClient をUpdateUserPoolClient パラメータに渡すことができます。InitiateAuth および RespondToAuthChallenge オペレーションでは、ADMIN_USER_PASSWORD_AUTH AuthFlow は受け入れられません。
AdminInitiateAuth からのレスポンス ChallengeParameters では、USER_ID_FOR_SRP
属性 (存在する場合) に、ユーザーのエイリアス (E メールアドレスや電話番号など) ではなく、実際のユーザー名が含まれています。AdminRespondToAuthChallenge への呼び出しの
ChallengeResponses では、このユーザー名を USERNAME パラメータで渡す必要があります。
Note
バックエンド管理者実装は、管理者認証フローを使用しているため、フローはデバイス追跡をサポートしていません。デバイス追跡が有効にしている場合、管理者認証は成功します
が、アクセストークンの更新に関する呼び出しはいずれも失敗します。

ユーザー移行の認証フロー
ユーザー移行用 Lambda トリガーは、レガシーのユーザー管理システムからユーザープールにユー
ザーを移行する際に役立ちます。USER_PASSWORD_AUTH 認証フローを選択している場合には、移行中のユーザーがパスワードをリセットする必要はありません。このフローは、認証中に暗号化されたSSL接続を介してユーザーのパスワードをサービスに送信します。
すべてのユーザーを移行したら、フローをより安全なSRPフローに切り替えます。SRP フローはネットワーク経由でパスワードを送信しません。
Lambda トリガーの詳細については、「Lambda トリガーを使用したユーザープールワークフローの
カスタマイズ」を参照してください。
Lambda トリガーを使用したユーザーの移行の詳細については、「ユーザー移行の Lambda トリ
ガーを使用したユーザープールへのユーザーのインポート」を参照してください。
ユーザープール認証フロー423

Amazon Cognito

開発者ガイドユーザープールアプリクライアント
ユーザープールアプリケーションクライアントは、Amazon Cognito で認証される 1 つのモバイルア
プリケーションまたはウェブアプリケーションを操作するユーザープール内の設定です。アプリケー
ションクライアントは、認証されたオペレーションと認証されていないAPIオペレーションを呼び出し、ユーザーの属性の一部またはすべてを読み取ったり変更したりできます。アプリでは、登録、サ
インイン、パスワードを忘れた場合の処理を行う際に、アプリクライアントに対して自分自身を識別する必要があります。これらのAPIリクエストには、アプリケーションクライアント ID による自己識別と、オプションのクライアントシークレットによる認可を含める必要があります。認可されたク
ライアントアプリケーションのみがこれらの認証されていないオペレーションを呼び出せるように、
アプリケーションクライアントIDsまたはシークレットを保護する必要があります。さらに、認証されたAPIリクエストに AWS 認証情報で署名するようにアプリを設定する場合は、ユーザーの検査から認証情報を保護する必要があります。
ユーザープールには複数のアプリを作成できます。アプリクライアントは、アプリのコードプラット
フォームにリンクされている場合もあれば、ユーザープール内の別のテナントにリンクされている場
合もあります。例えば、サーバー側アプリケーション用のアプリと、別の Android アプリを作成することができます。各アプリには独自のアプリのクライアント ID があります。
アプリケーションクライアントレベルで、次のユーザープール機能の設定を適用できます。
1. 分析
2. ホストされた UI IdPs、グラントタイプ、コールバックURLs、カスタマイズ
3. リソースサーバーとカスタムスコープ
4. 脅威からの保護
5. 属性の読み取りおよび書き込みアクセス許可
6. トークンの有効期限と失効
7. 認証フローアプリクライアントの種類
Amazon Cognito でアプリケーションクライアントを作成する場合、標準のOAuthクライアントタイ
プパブリッククライアントと機密クライアント に基づいてオプションを事前に入力できます。クライアントシークレットを持つ機密クライアントを設定します。クライアントタイプの詳細について
は、IETFRFC「6749 #2.1」を参照してください。
アプリクライアント

424

Amazon Cognito

開発者ガイドパブリッククライアント
パブリッククライアントは、ブラウザまたはモバイルデバイスで実行されます。信頼できるサー
バー側リソースがないため、クライアントシークレットはありません。
機密クライアント
機密クライアントには、認証されていないAPIオペレーションのためにクライアントシークレッ
トで信頼できるサーバー側のリソースがあります。アプリケーションは、バックエンドサーバー
上でデーモンまたはシェルスクリプトとして実行されることがあります。
クライアントシークレット
クライアントシークレットまたはクライアントパスワードは、アプリケーションクライアントへのすべてのAPIリクエストでアプリケーションが使用する必要がある固定文字列です。アプリク
ライアントには、アプリクライアントには、client_credentials 付与を実行するためのクラ
イアントシークレットが必要です。詳細については、IETFRFC「6749 #2.3.1」を参照してください。
アプリを作成した後は、シークレットを変更できません。シークレットキーを更新したい場合、新規のシークレットで新しいアプリケーションを作成できます。また、そのアプリのクライアン
ト ID を使用するアプリケーションからのアクセスを遮断するためにアプリケーションを削除できます。
パブリックアプリでは、機密クライアントとクライアントシークレットを使用できます。Amazon
CloudFront プロキシを使用して、転送SECRET_HASH中の を追加します。詳細については、ブログの「Amazon プロキシを使用して Amazon Cognito のパブリッククライアントを保護する
CloudFront AWS 」を参照してください。

JSON ウェブトークン
Amazon Cognito アプリクライアントは、次のタイプのJSONウェブトークン (JWTs) を発行できます。
アイデンティティ (ID) トークン
ユーザーがユーザープールから認証されていることを示す検証可能なステートメント。OpenID
Connect (OIDC) は、2.0 で定義されているアクセストークンと更新トークンの標準に ID トークンの仕様を追加しました。 OAuthID トークンには、アプリがユーザープロファイルの作成やリソースのプロビジョニングに使用できるユーザー属性などの ID 情報が含まれています。詳細については、「ID トークンの使用」を参照してください。
アプリクライアント

425

Amazon Cognito

開発者ガイドアクセストークン
ユーザーのアクセス権を示す検証可能なステートメント。アクセストークンには、 OIDCおよび2.0 の機能であるスコープ OAuth が含まれています。アプリはバックエンドリソースにスコープを提示しAPI、ユーザープールがユーザーまたはマシンに のデータ、または独自のユーザーデー
タへのアクセスを許可したことを証明できます。カスタムスコープを持つアクセストークンは、
多くの場合、M2M クライアント認証情報の付与により、リソースサーバーへのアクセスを許可します。詳細については、「アクセストークンの使用」を参照してください。
更新トークン
ユーザーのトークンが有効期限切れになったときにアプリがユーザープールに提示できる、暗号化された初期認証ステートメント。更新トークンをリクエストすると、有効期限が切れていな
い新しいアクセストークンと ID トークンが返されます。詳細については、「更新トークンの使用」を参照してください。
各アプリクライアントのこれらのトークンの有効期限は、Amazon Cognito コンソールでユーザープールの [アプリケーションの統合] タブから設定できます。

アプリクライアントの用語
Amazon Cognito コンソールで、アプリクライアントに使用できる用語は次のとおりです。
許可されたコールバック URLs
コールバックは、サインインが成功した後にユーザーがリダイレクトされる場所URLを示します。少なくとも 1 つのコールバック を選択しますURL。コールバックは次のURL条件を満たす必要があります。
• 絶対 であることURI。
• クライアントに事前登録されている。
• フラグメントコンポーネントを含まない。
OAuth 「2.0 - リダイレクトエンドポイント」を参照してください。
Amazon Cognito は、テスト目的限定の HTTPS を除き、HTTP ではなく http://localhost を使用します。
URLs などのアプリケーションのコールバックもサポートmyapp://exampleされています。
アプリクライアント

426

Amazon Cognito

開発者ガイド許可されたサインアウト URLs
サインアウトは、サインアウト後にユーザーがリダイレクトされる場所URLを示します。
属性の読み取りおよび書き込み許可
ユーザープールには多数の顧客があり、それぞれに独自のアプリクライアントと があります
IdPs。アプリに関連したユーザー属性のみの読み取りおよび書き込みアクセスを許可するように
アプリクライアントに設定できます。 machine-to-machine (M2M) 認証などの場合は、どのユー
ザー属性にもアクセスを許可できません。
属性の読み取りおよび書き込みアクセス権限の設定に関する考慮事項• アプリケーションクライアントを作成し、属性の読み取りおよび書き込みアクセス許可をカスタマイズしない場合、Amazon Cognito はすべてのユーザープール属性に読み取りおよび書き込みアクセス許可を付与します。
• イミュータブルなカスタム属性への書き込みアクセス権を付与できます。アプリクライアント
は、ユーザーを作成またはサインアップするときに、イミュータブルな属性に値を書き込むことができます。その後は、ユーザーのイミュータブルなカスタム属性に値を書き込むことはできません。
• アプリクライアントは、ユーザープール内の必須属性への書き込み権限を持っている必要があります。Amazon Cognito コンソールは、必須の属性を自動的に書き込み可能に設定します。
• アプリケーションクライアントに対して、email_verified またはphone_number_verified への書き込みアクセス権限を付与することはできません。ユー
ザープール管理者は、これらの値を変更できます。ユーザーは、これらの属性の値を属性の検証でのみ変更できます。
認証フロー
アプリクライアントが許可するサインイン方法。アプリは、ユーザー名とパスワードによる認証、セキュアリモートパスワード (SRP）、Lambda トリガーによるカスタム認証、トークンの更新をサポートできます。セキュリティのベストプラクティスとして、SRP認証をプライマリサ
インイン方法として使用します。ホストされた UI は、 を使用してユーザーを自動的にサインインしますSRP。
カスタムスコープ
カスタムスコープは、[リソースサーバー] で各自のリソースサーバー用に定義したものです。
形式は です。resource-server-identifier/scope。 「」を参照してくださいスコープ、M2M 、リソースサーバーによるAPI認可。
アプリクライアント

427

Amazon Cognito

開発者ガイドデフォルトのリダイレクト URI
サードパーティーの を使用するユーザーの認証リクエストの redirect_uriパラメータを置き換えます IdPs。このアプリケーションクライアント設定は、 CreateUserPoolClient またはUpdateUserPoolClientAPIリクエストの DefaultRedirectURIパラメータを使用して設定します。これは、アプリクライアントの CallbackURLs のメンバーでURLもある必要があります。Amazon Cognito は、次のURL場合に、認証されたセッションをこれにリダイレクトします。
1. アプリクライアントには、1 つの ID プロバイダーが割り当てられ、複数のコールバック
URLsが定義されています。ユーザープールは、認証リクエストにredirect_uriパラメータが含まれていない場合、認証サーバーにデフォルトのリダイレクトをリダイレクトURIします。
2. アプリクライアントには、1 つの ID プロバイダーが割り当てられ、1 つのコールバック
URLsが定義されています。このシナリオでは、デフォルトのコールバック を定義する必要はありませんURL。redirect_uri パラメータを含まないリクエストは、使用可能なコール
バック にリダイレクトされますURL。
ID プロバイダ
ユーザープールの外部 ID プロバイダー (IdPs) の一部またはすべてを選択して、ユーザーを認証できます。アプリクライアントは、ユーザープール内のローカルユーザーのみを認証することもできます。IdP をアプリクライアントに追加すると、IdP への認証リンクを生成して、ホストされた UI サインインページで表示できます。複数の を割り当てることはできますが IdPs、少なく
とも 1 つを割り当てる必要があります。外部 の使用の詳細については、 IdPs「」を参照してく
ださいサードパーティー経由のユーザープールへのサインインの追加。
OpenID Connect のスコープ
次の OAuth スコープを 1 つ以上選択し、アクセストークン用にリクエストできるアクセス権限を指定します。
• openid スコープでは、ID トークンとユーザーの固有 ID を取得することを宣言します。また、リクエストに含まれる追加のスコープに応じて、すべてまたは一部のユーザー属性もリク
エストします。openid スコープをリクエストしない限り、Amazon Cognito は ID トークンを返しません。openid スコープは、有効期限やキー ID などの構造的な ID トークンのクレームを承認し、UserInfo エンドポイント からのレスポンスで受け取るユーザー属性を決定します。
• リクエストするスコープが openid のみである場合、Amazon Cognito は現在のアプリケー
ションクライアントが読み取ることができるすべてのユーザー属性を ID トークンに入力します。このスコープだけを使用したアクセストークンへの userInfo レスポンスにより、すべてのユーザー属性が返されます。
アプリクライアント

428

Amazon Cognito

開発者ガイド• phone、email、profile などの他のスコープで openid をリクエストすると、ID トーク
ンと userInfo はユーザー固有の ID と追加のスコープで定義された属性を返します。
• phone スコープは phone_number クレームおよび phone_number_verified クレームへのアクセスを付与します。このスコープは openid スコープを使用する場合にのみリクエストできます。
• email スコープは email クレームおよび email_verified クレームへのアクセスを付与します。このスコープは openid スコープを使用する場合にのみリクエストできます。
• このaws.cognito.signin.user.adminスコープは、 UpdateUserAttributesや などのアク
セストークンを必要とする Amazon Cognito ユーザープールAPIオペレーションへのアクセスを許可しますVerifyUserAttribute。
• profile スコープはクライアントが読み取り可能なすべてのユーザー属性へのアクセスを付与します。このスコープは openid スコープを使用する場合にのみリクエストできます。
スコープの詳細については、「標準OIDCスコープのリスト」を参照してください。
OAuth グラントタイプ
OAuth グラントは、ユーザープールトークンを取得する認証方法です。Amazon Cognito は、以下の付与タイプをサポートしています。これらのOAuth権限をアプリに統合するには、ユーザー
プールにドメインを追加する必要があります。
認証コード付与
認証コード付与は、アプリがトークンエンドポイントを使用してユーザープールのトークンと交換できるコードを生成します。認証コードを交換すると、アプリは ID、アクセス、更新の各トークンを受け取ります。このOAuthフローは、暗黙的な付与と同様に、ユーザーのブラウザで発生します。認証コード付与は、トークンがユーザーのセッションで表示されないため、Amazon
Cognito が提供する最も安全な付与です。代わりに、アプリはトークンを返すリクエストを生成し、保護されたストレージにトークンをキャッシュできます。詳細については、「6749 #1.3.1」の「認証コード」を参照してください。 IETF RFC
Note
パブリッククライアントアプリケーションのベストプラクティスとして、認証コードの付
与OAuthフローのみをアクティブ化し、コード交換用の証明キー (PKCE) を実装してトークン交換を制限します。ではPKCE、クライアントはトークンエンドポイントに元の認証
リクエストで提示されたのと同じシークレットを提供した場合にのみ、認証コードを交換できます。の詳細についてはPKCE、IETF「7636RFC」を参照してください。

アプリクライアント

429

Amazon Cognito

開発者ガイド

暗黙的な付与
暗黙的な付与は、認可エンドポイント からアクセストークンと ID トークンをユーザのブラウザ
セッションに直接配信します (更新トークンは配信しません)。暗黙的な許可は、トークンエンド
ポイントへの別のリクエストの要件を削除しますが、 PKCEと互換性がなく、更新トークンを返しません。この付与は、認証コード付与を完了できないテストシナリオやアプリアーキテクチャに対応できます。詳細については、IETF「6749 #1RFC.3.2 の暗黙的な付与」を参照してください。認証コード付与と暗黙的な付与の両方をアプリクライアントで有効にして、必要に応じて使い分けることができます。
クライアント認証情報の付与
クライアント認証情報の付与は machine-to-machine (M2M) 通信用です。認証コード付与と暗黙的な付与は、認証された人間のユーザーにトークンを発行します。クライアント認証情報は、非インタラクティブシステムから にスコープベースの認可を付与しますAPI。アプリは、トークン
エンドポイントに対してクライアント認証情報を直接リクエストし、アクセストークンを受け取ることができます。詳細については、「6749 #1.3.4 のクライアント認証情報」を参照してくだ
さい。 IETF RFC クライアント認証情報の付与は、クライアントシークレットを持ち、認証コー
ド付与や暗黙的な付与をサポートしていないアプリクライアントでのみ有効化できます。
Note
ユーザーとしてクライアント認証情報フローを呼び出すことはないため、このフローでアクセストークンに追加できるのはカスタムスコープのみです。カスタムスコープは、各自のリソースサーバー用に定義したものです。openid や profile などのデフォルトのス
コープは、人間以外のユーザーには適用されません。
ID トークンはユーザー属性の検証であるため、M2M 通信には関係なく、クライアント認
証情報の付与では ID トークンを発行しません。「スコープ、M2M 、リソースサーバー
によるAPI認可」を参照してください。

クライアント認証情報の付与は、 AWS 請求書にコストを追加します。詳細については、「Amazon Cognito の料金」を参照してください。

アプリクライアント

430

Amazon Cognito

開発者ガイドアプリクライアントの作成
AWS Management Console
アプリクライアントを作成する (コンソール)
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入
力します。

2.

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

3.

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

4.

[App integration] (アプリケーションの統合) タブを選択します。

5.

[App clients] (アプリケーションクライアント) で、[Create an app client] (アプリケーション
クライアントの作成) を選択します。

6.

[App type] (アプリケーションタイプ) を選択します。[Public client] (パブリッククライアン
ト)、[Confidential client] (機密保持クライアント)、または [Other] (その他)。

7.

[App client name] (アプリケーションクライアント名) を入力します。

8.

[クライアントシークレットを生成] を選択して、Amazon Cognito でクライアントシークレットを自動生成します。クライアントシークレットは通常、機密クライアントに関連付けられます。

9.

アプリケーションクライアントで許可したい [Authentication flows] (認証のフロー) を選択します。

10. 認証フローセッション持続期間を設定します。これは、セッショントークンが期限切れになる前にユーザーが各認証チャレンジを完了しなければならない期間です。
11. (オプション) トークンの有効期限を設定する場合は、以下の手順を実行します。
a.

アプリケーションクライアントの [Refresh token expiration] (トークンの有効期限を更新) を指定します。デフォルト値は 30 日です。これは、1 時間から 10 年の任意の値に変更できます。

b.

アプリケーションクライアントの [Access token expiration] (アクセストークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。

c.

アプリケーションクライアントの [ID token expiration] (ID トークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。

アプリクライアント

431

Amazon Cognito

開発者ガイドImportant
ホストされた UI を使用してトークンの有効期間を 1 時間未満に設定した場合、ユーザーは、現在 1 時間に固定されているセッション cookie の期間に基づいてトークンを使用できるようになります。
12. このアプリケーションクライアントに、[Enable token revocation] (トークンの失効を有効化)するかどうかを選択してください。これにより、Amazon Cognito が発行するトークンサイ
ズが増加します。
13. このアプリクライアントに対して、[ユーザー存在エラーを防ぐ] かどうかを選択します。Amazon Cognito は、ユーザー名またはパスワードのいずれかが間違っているという一般的なメッセージで、存在しないユーザーのサインインリクエストに応答します。
14. ホストされた UI をこのアプリクライアントで使用する場合は、[ホストされた UI 設定] を設
定します。
a.

1 つ以上の許可されたコールバック URLsを入力します。これらは、Amazon Cognito
URLsが認証の完了後にユーザーをリダイレクトするウェブまたはアプリです。

b.

1 つ以上の許可されたサインアウト を入力しますURLs。これらは、アプリケーション
URLsが へのリクエストで受け入れるものですログアウトエンドポイント。

c.

アプリにユーザーをサインインできるようにする ID プロバイダーを 1 つ以上選択します。既存の の任意の組み合わせを選択できます IdPs。ユーザープールだけで、または
ユーザープールで IdPs 設定した 1 つ以上のサードパーティーでユーザーを認証できます。

d.

アプリケーションクライアントが受け入れる OAuth 2.0 許可タイプを選択します。
• トークンエンドポイント でトークンと交換できるコードをアプリに渡すには、[認証コード付与] を選択します。
• ID トークンとアクセストークンをアプリに直接渡すには、[暗黙的な付与] を選択します。暗黙的な付与フローは、トークンをユーザーに直接公開します。
• ユーザー認証情報ではなく、クライアントシークレットの知識に基づいてアプリにア
クセストークンを渡すには、[クライアント認証情報] を選択します。クライアント認
証情報の付与フローは、認証コード付与フローや暗黙的な付与フローと相互に排他的です。

e.

このアプリクライアントでの使用を認可する [OpenID Connect スコープ] を選択します。ユーザープール を通じてaws.cognito.signin.user.admin、スコープ のみの

アプリクライアント

432

Amazon Cognito

開発者ガイドアクセストークンを生成できますAPI。その他のスコープについては、トークンエンド
ポイント にアクセストークンをリクエストする必要があります。
f.

アプリクライアントで認可するカスタムスコープを選択します。カスタムスコープは、
サードパーティーの へのアクセスを許可するために最も頻繁に使用されますAPIs。

15. このアプリクライアントに、属性の読み取りおよび書き込み許可を設定します。アプリクラ
イアントは、ユーザープールの属性スキーマのすべて、または限定されたサブセットの読み取りと書き込みのアクセス許可を持つことができます。
16. [Create app client] を選択します。
17. [Client id] (クライアント ID) を書き留めます。これにより、サインアップリクエストとサイ
ンインリクエストでアプリケーションクライアントを識別します。
AWS CLIaws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --clientname myApp

Note
コールバックとログアウトのJSON形式を使用してURLs、 CLIがそれらをリモートパラ
メータファイルとして扱うのを防ぎます。
--callback-urls "["https://example.com"]"--logout-urls "["https://example.com"]"

詳細については、 AWS CLI コマンドリファレンスを参照してください。 create-user-pool-client
Amazon Cognito user pools API
CreateUserPoolClient API リクエストを生成します。デフォルト値に設定しないすべてのパラメータには、値を指定する必要があります。

ユーザープールアプリケーションクライアントの更新 (AWS CLI および AWS API）
で AWS CLI、次のコマンドを入力します。
アプリクライアント

433

Amazon Cognito

開発者ガイドaws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id"MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code""implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]"--supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"

コマンドが成功すると、 は確認 AWS CLI を返します。
{"UserPoolClient": {"ClientId": "MyClientID","SupportedIdentityProviders": ["LoginWithAmazon","MySAMLIdP"],"CallbackURLs": ["https://example.com"],"AllowedOAuthScopes": ["openid"],"ClientName": "Example","AllowedOAuthFlows": ["implicit","code"],"RefreshTokenValidity": 30,"AuthSessionValidity": 3,"CreationDate": 1524628110.29,"AllowedOAuthFlowsUserPoolClient": true,"UserPoolId": "MyUserPoolID","LastModifiedDate": 1530055177.553}}

詳細については、 AWS CLI コマンドリファレンスを参照してください。 update-user-pool-client
AWS API: UpdateUserPoolClient

ユーザープールアプリクライアント (AWS CLI および AWS API) に関する情報の取得
aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --clientid MyClientID

アプリクライアント

434

Amazon Cognito

開発者ガイド詳細については、 AWS CLI コマンドリファレンスを参照してください。 describe-user-pool-client
AWS API: DescribeUserPoolClient

ユーザープール内のすべてのアプリクライアント情報を一覧表示する (AWS CLI および AWS API）
aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3

詳細については、 AWS CLI コマンドリファレンスを参照してください。 list-user-pool-clientsAWS API: ListUserPoolClients

ユーザープールアプリクライアントの削除 (AWS CLI および AWS API）
aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id"MyAppClientID"

詳細については、 AWS CLI コマンドリファレンスを参照してください。 delete-user-pool-client
AWS API: DeleteUserPoolClient

ユーザープール内のユーザーデバイスの使用
ローカルユーザープールのユーザーを Amazon Cognito ユーザープール でサインインするとAPI、高度なセキュリティ機能からのユーザーのアクティビティログを各デバイスに関連付けることができます。また、オプションで、信頼できるデバイスを使用している場合は、多要素認証 (MFA) をスキッ
プできます。Amazon Cognito には、デバイス情報がまだ含まれていないサインインへのレスポンスにデバイスキーが含まれます。デバイスキーの形式は Region_UUID です。デバイスキー、Secure
Remote Password (SRP) ライブラリ、およびデバイス認証を許可するユーザープールを使用すると、アプリ内のユーザーに現在のデバイスを信頼するように促し、サインイン時にMFAコードの入力を求めなくなります。
トピック• 記憶済みデバイスのセットアップ• デバイスキーの取得• デバイスでのサインイン
デバイスの使用

435

Amazon Cognito

開発者ガイド• デバイスの表示、更新、削除

記憶済みデバイスのセットアップ
Amazon Cognito ユーザープールでは、ユーザーの各デバイスを固有のデバイス識別子、つまりデバ
イスキーに関連付けることができます。サインイン時にデバイスキーを提示してデバイス認証を行うと、2 つの機能を利用できます。
1. 高度なセキュリティ機能により、セキュリティと分析を目的として、特定のデバイスでのユー
ザーアクティビティをモニタリングできます。ユーザーがログインすると、アプリでは、オプションで各ユーザーとそのデバイスを認証して、アクティビティログにデバイス情報を追加することができます。
2. デバイスを覚えておくと、信頼できるデバイス認証フローもサポートされます。このフローでは、アプリのセキュリティ要件やユーザーの好みに応じて、ユーザーは後で MFA なしでサインインすることを選択できます。例えば、アプリケーションは 30、60、または 90 日間、デバイスを信頼するようにユーザーに求める場合があります。この日付をカスタム属性に保存し、その日付にデバイスの記憶済みステータスを変更できます。次に、ユーザーに対してMFAコードの送信を再プロンプトし、認証が成功した後にデバイスを再度記憶するように設定する必要があります。
記憶されているデバイスは、MFAアクティブなユーザープールMFAでのみオーバーライドできます。
ユーザーが記憶されているデバイスでログインする場合、認証フロー中に追加のデバイス認証を実行する必要があります。詳細については、「デバイスでのサインイン」を参照してください。
ユーザープールの [サインインエクスペリエンス] タブの [デバイスの追跡] で、ユーザープールがデバイスを記憶するように設定します。Amazon Cognito コンソールを使用して記憶済みデバイス機能をセットアップするときは、[常に]、[User Opt-In] (ユーザーオプトイン)、および [いいえ] の 3 つのオプションがあります。
記憶しない
ユーザープールでは、ログイン時にデバイスを記憶するように求めるメッセージは表示されません。
常に記憶する
アプリがユーザーのデバイスを確認すると、ユーザープールは常にデバイスを記憶し、今後のデバイスサインインの成功時にMFAチャレンジを返しません。
デバイスの使用

436

Amazon Cognito

開発者ガイドユーザーオプトイン
アプリがユーザーのデバイスを確認すると、ユーザープールはMFAチャレンジを自動的に抑制しません。デバイスを記憶するかどうかをユーザーが選択するようにユーザーに求める必要があります。
[常に記憶する] または [ユーザーオプトイン] を選択すると、ユーザーが未確認のデバイスからサインインするたびに、Amazon Cognito はデバイス ID キーとシークレットを生成します。デバイスキー
は、ユーザーがデバイス認証を実行したときにアプリがユーザープールに送信する最初の識別子です。
確認済みの各ユーザーデバイスでは、自動的に記憶されるかオプトインされたかに関係なく、ユーザーがサインインするたびにデバイス識別子キーとシークレットを使用してデバイスを認証できます。
CreateUserPool または UpdateUserPoolAPIリクエストでユーザープールの記憶済みデバイス設定を構成することもできます。詳細については、 DeviceConfigurationプロパティを参照してください。
Amazon Cognito ユーザープールAPIには、記憶されたデバイスに対する追加のオペレーションがあります。
1. ListDevices および は、ユーザーのデバイスキーとそのメタデータのリストAdminListDevicesを返します。
2. GetDevice と は、単一のデバイスのデバイスキーとメタデータAdminGetDeviceを返します。
3. UpdateDeviceStatus ユーザーのデバイスを記憶済みまたは記憶されていないものとしてAdminUpdateDeviceStatus設定します。
4. ForgetDevice および は、プロファイルからユーザーの確認済みデバイスAdminForgetDeviceを削除します。
API で始まる名前の オペレーションAdminは、サーバー側のアプリケーションで使用するためのものであり、IAM認証情報で認証される必要があります。詳細については、「Amazon Cognito ユー
ザープールAPIとユーザープールエンドポイントの使用」を参照してください。

デバイスキーの取得
ユーザーがユーザープールでサインインAPIし、認証パラメータにデバイスキーを として含めない場
合DEVICE_KEY、Amazon Cognito はレスポンスに新しいデバイスキーを返します。クライアント側
デバイスの使用

437

Amazon Cognito

開発者ガイドパブリックアプリでは、デバイスキーをアプリストレージに配置することで、今後のリクエストに含められるようになります。機密のサーバー側アプリで、ブラウザー Cookie または別のクライアント
側トークンをユーザーのデバイスキーで設定します。
ユーザーが信頼できるデバイスを使用してサインインする前に、アプリはデバイスキーを確認して追加情報を提供する必要があります。Amazon Cognito にConfirmDeviceリクエストを生成し、デバイスキー、わかりやすい名前、パスワード検証子、ソルトを使用してユーザーのデバイスを確認します。ユーザープールでオプトインデバイス認証を設定した場合、Amazon Cognito はConfirmDevice リクエストに、ユーザーは現在のデバイスを記憶するかどうかを選択する必要があるプロンプトで応答する必要があります。UpdateDeviceStatus リクエストでユーザーの選択に応答します。
ユーザーのデバイスを確認したが、記憶されるように設定しなかった場合、Amazon Cognito は関連付けを保存しますが、デバイスキーを入力するとデバイス以外のサインインで続行します。デバイス
は、ユーザーのセキュリティとトラブルシューティングに役立つログを生成できます。確認済みで記憶されていないデバイスは、サインイン機能を利用しませんが、セキュリティモニタリングログ機能は利用します。アプリクライアントの高度なセキュリティ機能を有効にし、デバイスのフットプリン
トをリクエストにエンコードすると、Amazon Cognito はユーザーイベントを確認済みのデバイスに関連付けます。
新しいデバイスキーを取得するには
1. InitiateAuth API リクエストを使用してユーザーのサインインセッションを開始します。
2. ユーザーのサインインセッションが完了したことを示すJSONウェブトークン (JWTs) を受信するRespondToAuthChallengeまで、 ですべての認証チャレンジに応答します。
3. アプリで、Amazon Cognito がその RespondToAuthChallenge または InitiateAuth レスポ
ンスの NewDeviceMetadata に返す値 (DeviceGroupKey および DeviceKey) を記録します。
4. ソルトとパスワードの検証子という新しいSRPシークレットをユーザーに生成します。この関数
は、SRPライブラリSDKsを提供する で使用できます。
5. ユーザーにデバイス名の入力を求めるか、ユーザーのデバイス特性からデバイス名を生成します。
6. ユーザーのアクセストークン、デバイスキー、デバイス名、シーSRPクレット
をConfirmDeviceAPIリクエストに入力します。ユーザープールがデバイスを [常に記憶する] に設定されていれば、ユーザー登録は完了です。
7. Amazon Cognito が "UserConfirmationNecessary": true で ConfirmDevice に応答した場合は、デバイスを記憶するかどうかを選択するようユーザーに促します。ユーザーがデバ
イスを記憶したいことを確認した場合は、ユーザーのアクセストークン、デバイスキー、およ
デバイスの使用

438

Amazon Cognito

開発者ガイドび を使用して UpdateDeviceStatusAPIリクエストを生成します"DeviceRememberedStatus":"remembered"。
8. Amazon Cognito にデバイスを記憶するように指示した場合、次回サインインするときにMFAチャ
レンジではなくチャレンジが表示されますDEVICE_SRP_AUTH。

デバイスでのサインイン
ユーザーのデバイスを記憶するように設定すると、Amazon Cognito は同じデバイスキーでサインインするときにMFAコードを送信する必要がなくなります。デバイス認証は、 MFA認証チャレンジを
デバイス認証チャレンジに置き換えるだけです。グループとしてサインインすることはできません。
ユーザーはまずパスワードまたはカスタムチャレンジを使用して認証を完了する必要があります。記憶しているデバイスでのユーザーの認証プロセスは次のとおりです。
カスタム認証チャレンジ Lambda トリガー を使用するフローでデバイス認証を実行するには、InitiateAuthAPIリクエストで DEVICE_KEYパラメータを渡します。ユーザーがすべてのチャレンジに成功し、CUSTOM_CHALLENGE チャレンジが true の issueTokens 値を返すと、Amazon
Cognito は最後の 1 つの DEVICE_SRP_AUTH チャレンジを返します。
デバイスでのサインインするには
1. ユーザーのデバイスキーをクライアントストレージから取得します。
2. InitiateAuth API リクエストを使用してユーザーのサインインセッションを開始します。USER_SRP_AUTH、REFRESH_TOKEN_AUTH、USER_PASSWORD_AUTH、またはCUSTOM_AUTH の AuthFlow を選択します。AuthParameters で、ユーザーのデバイスキーを
DEVICE_KEY パラメータに追加し、選択したログインフローに必要なその他のパラメータを含めます。
a. 認証チャレンジへの PASSWORD_VERIFIER レスポンスのパラメータで DEVICE_KEY を渡すこともできます。
3. レスポンスに DEVICE_SRP_AUTH チャレンジを受け取るまで、チャレンジレスポンスを完了します。
4. RespondToAuthChallenge API リクエストで、、、DEVICE_SRP_AUTHおよび
ChallengeNameの および パラメータの USERNAMEを送信しますDEVICE_KEYSRP_A。
5. Amazon Cognito は DEVICE_PASSWORD_VERIFIER チャレンジで応答します。このチャレンジレ
スポンスには、SECRET_BLOCK および SRP_B の値が含まれます。

デバイスの使用

439

Amazon Cognito

開発者ガイド

6. SRP ライブラリで、、PASSWORD_CLAIM_SIGNATURE、、TIMESTAMP、および
PASSWORD_CLAIM_SECRET_BLOCKDEVICE_KEYパラメータを生成USERNAMEして送信します。
これらは追加の RespondToAuthChallenge リクエストで送信してください。
7. ユーザーの を受け取るまで、追加のチャレンジを完了しますJWTs。
次の擬似コードは、DEVICE_PASSWORD_VERIFIER チャレンジレスポンスの値を計算する方法を示しています。
PASSWORD_CLAIM_SECRET_BLOCK = SECRET_BLOCKTIMESTAMP = Tue Sep 25 00:09:40 UTC 2018
PASSWORD_CLAIM_SIGNATURE = Base64(SHA256_HMAC(K_USER, DeviceGroupKey + DeviceKey +PASSWORD_CLAIM_SECRET_BLOCK + TIMESTAMP))
K_USER = SHA256_HASH(S_USER)S_USER = (SRP_B - k * gx)(a + ux)
x = SHA256_HASH(salt + FULL_PASSWORD)
u = SHA256_HASH(SRP_A + SRP_B)
k = SHA256_HASH(N + g)

デバイスの表示、更新、削除
Amazon Cognito を使用して、アプリケーションに次の機能を実装できますAPI。
1. ユーザーの現在のデバイスに関する情報を表示します。
2. ユーザーのすべてのデバイスのリストを表示します。
3. デバイスの「記憶済み」状態を解除する
4. デバイスの記憶状態を更新します。
以下の説明のAPIリクエストを承認するアクセストークンには、
aws.cognito.signin.user.adminスコープが含まれている必要があります。Amazon
Cognito は、Amazon Cognito ユーザープール で生成するすべてのアクセストークンに、このスコープのクレームを追加しますAPI。サードパーティー IdPs は、Amazon Cognito MFAに認証するユーザーのデバイスと を個別に管理する必要があります。ホストされた UI では
aws.cognito.signin.user.admin スコープをリクエストできますが、ホストされた UI はデバ
イス情報を高度なセキュリティのユーザーログに自動的に追加するので、デバイスの記憶は提供しません。
デバイスに関する情報を表示する
デバイスの使用

440

Amazon Cognito

開発者ガイドユーザーのデバイスに関する情報をクエリして、そのデバイスが現在も使用されているかどうかを判断できます。例えば、記憶されているデバイスが 90 日間サインインしていない場合に、そのデバイスを非アクティブ化することができます。
• ユーザーのデバイス情報をパブリッククライアントアプリに表示するには、ユーザーのアクセス
キーとデバイスキーをGetDeviceAPIリクエストで送信します。
• 機密クライアントアプリにユーザーのデバイス情報を表示するには、 AWS 認証情報を使用してAdminGetDevice API リクエストに署名し、ユーザーのユーザー名、デバイスキー、およびユーザープールを送信します。
ユーザーのすべてのデバイスのリストを表示する
ユーザーのすべてのデバイスとそのプロパティのリストを表示できます。例えば、現在のデバイスが記憶されているデバイスと一致することを検証することが可能です。
• パブリッククライアントアプリで、ユーザーのアクセストークンをListDevicesAPIリクエストで送信します。
• 機密クライアントアプリで、 AWS 認証情報を使用して AdminListDevices API リクエストに署名し、ユーザーのユーザー名とユーザープールを送信します。
デバイスの「記憶済み」状態を解除する
ユーザーのデバイスキーは削除できます。これは、ユーザーがデバイスを使用しなくなったと判断した場合や、異常なアクティビティを検出してユーザーにMFA再度完了するように促す場合に実行できます。デバイスを後で再登録するには、新しいデバイスキーを生成して保存する必要があります。
• パブリッククライアントアプリで、ユーザーのデバイスキーとアクセストークンをForgetDeviceAPIリクエストで送信します。
• 機密クライアントアプリで、ユーザーのデバイスキーとアクセストークンをAdminForgetDeviceAPIリクエストで送信します。

Amazon Cognito ユーザープールAPIとユーザープールエンドポイ
ントの使用
サインアップ、サインイン、ユーザープール内のユーザー管理を行うには、2 つのオプションがあります。
API および エンドポイントの使用

441

Amazon Cognito

開発者ガイド1. ユーザープールのエンドポイントには、ホストされた UI とフェデレーションエンドポイントが含まれます。これらは、ユーザープールのドメインを選択すると Amazon Cognito がアクティブ化
するパブリックウェブページのパッケージを構成します。サインアップ、サインイン、パスワー
ド管理、多要素認証 (MFA) のページなど、Amazon Cognito ユーザープールの認証および承認機
能をすばやく開始するには、ホストされた UI の組み込みユーザーインターフェイスを使用します。他のユーザープールエンドポイントは、サードパーティーの ID プロバイダー () による認証を容易にしますIdPs。行われるサービスには以下が含まれます。
a. saml2/idpresponse や など IdPs、 からの認証されたクレームのサービスプロバイダーコー
ルバックエンドポイントoauth2/idpresponse。Amazon Cognito がアプリと IdP の間の中間
サービスプロバイダー (SP) である場合、コールバックエンドポイントはサービスを表します。
b. 環境に関する情報を提供するエンドポイント (oauth2/userInfo や jwks.json など)。アプ
リケーションは、 AWS SDKsおよび 2.0 ライブラリを使用してトークンを検証したり、ユー
ザープロファイルデータを取得したりするときにOAuth、これらのエンドポイントを使用します。
2. Amazon Cognito ユーザープールAPIは、独自のカスタムフロントエンドでサインイン情報を収集した後、ウェブまたはモバイルアプリがユーザーを認証するための一連のツールです。ユーザー
プールAPI認証では、次のJSONウェブトークンが生成されます。
a. ユーザーからの検証可能な属性クレームを含む ID トークン。
b. AWS サービスエンドポイント へのトークン認証APIリクエストの作成をユーザーに許可するア
クセストークン。
Note
デフォルトでは、ユーザープールAPI認証からのアクセストークンには
aws.cognito.signin.user.adminスコープのみが含まれます。サードパーティーの へのリクエストを承認するなど、追加のスコープを持つアクセストークンを生成す
るには、ユーザープールエンドポイントを介して認証中にスコープをリクエストするか
API、 にカスタムスコープを追加しますトークン生成前の Lambda トリガー。アクセス
トークンのカスタマイズにより AWS 、請求にコストがかかります。

通常はユーザープールのエンドポイントを使用してサインインするフェデレーションユーザーを、
プロファイルがユーザープールに対してローカルであるユーザーとリンクできます。ローカルユー
ザーは、外部 IdP を介したフェデレーションなしに、ユーザープールディレクトリにのみ存在しま
す。AdminLinkProviderForUser API リクエストでフェデレーション ID をローカルユーザーにリンク
API および エンドポイントの使用

442

Amazon Cognito

開発者ガイドすると、ユーザーはユーザープール でサインインできますAPI。詳細については、「フェデレーショ
ンユーザーを既存のユーザープロファイルにリンクする」を参照してください。
Amazon Cognito ユーザープールAPIはデュアルパーパスです。Amazon Cognito ユーザープールリ
ソースを作成して設定します。例えば、ユーザープールの作成、 AWS Lambda トリガーの追加、ホストされた UI ドメインの設定を行うことができます。ユーザープールは、ローカルユーザーとリンクされたユーザーに対してサインアップ、サインイン、およびその他のユーザーオペレーションAPI
も実行します。
Amazon Cognito ユーザープールのシナリオ例 API
1.

ユーザーは、アプリで作成した [Create an account] (アカウントを作成) ボタンを選択します。E
メールアドレスとパスワードを入力します。

2.

アプリケーションはSignUpAPIリクエストを送信し、ユーザープールに新しいユーザーを作成します。

3.

アプリケーションは、ユーザーに E メールの確認コードを求めます。ユーザーは、E メール
メッセージで受け取ったコードを入力します。

4.

アプリケーションは、ユーザーの確認コードを含むConfirmSignUpAPIリクエストを送信します。

5.

アプリケーションは、ユーザーにユーザー名とパスワードの入力を求め、情報を入力します。

6.

アプリケーションは InitiateAuthAPIリクエストを送信し、ID トークン、アクセストークン、および更新トークンを保存します。アプリはOIDCライブラリを呼び出してユーザーのトークンを管理し、そのユーザーの永続セッションを維持します。

Amazon Cognito ユーザープール ではAPI、IdP を介してフェデレーションするユーザーをサインインすることはできません。これらのユーザーは、ユーザープールのエンドポイントを使用して認証する必要があります。ホストされた UI を含むユーザープールエンドポイントの詳細については、「ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス」を参照してください。フェデレーションユーザーは、ホストされた UI で起動して IdP を選択することも、ホスト
UI をスキップしてユーザーを IdP に直接送信してサインインさせることもできます。へのAPIリクエ
ストに IdP パラメータ認可エンドポイントが含まれている場合、Amazon Cognito はユーザーを IdP
サインインページにサイレントにリダイレクトします。
ユーザープールエンドポイントのサンプルシナリオ
1.

ユーザーは、アプリで作成した [Create an account] (アカウントを作成) ボタンを選択します。

API および エンドポイントの使用

443

Amazon Cognito

2.

開発者ガイド開発者の認証情報を登録したソーシャル ID プロバイダーのリストをユーザーに提示します。
ユーザーは Apple を選択します。

3.

アプリは、プロバイダー名 SignInWithApple で 認可エンドポイント へのリクエストを開始
します。

4.

ユーザーのブラウザで Apple OAuth認証ページが開きます。ユーザーは、Amazon Cognito がプ
ロファイル情報を読み取ることを許可することを選択します。

5.

Amazon Cognito は Apple アクセストークンを確認し、ユーザーの Apple プロファイルを照会します。

6.

ユーザーは Amazon Cognito 認証コードをアプリケーションに提示します。

7.

アプリケーションは認証コードを トークンエンドポイント と交換し、ID トークン、アクセス
トークン、更新トークンを保存します。アプリはOIDCライブラリを呼び出してユーザーのトークンを管理し、そのユーザーの永続セッションを維持します。

ユーザープールAPIとユーザープールエンドポイントは、このガイドで説明されているさまざまなシ
ナリオをサポートしています。以下のセクションでは、ユーザープールがサインアップ、サインイ
ン、リソース管理の要件をサポートするクラスにAPIさらに分割される方法について説明します。

Amazon Cognito ユーザープールの認証されたオペレーションと認証されていないAPIオペレーション
Amazon Cognito ユーザープール はAPI、リソース管理インターフェイスとユーザー向け認証および認可インターフェイスの両方であり、そのオペレーションで従う認証モデルを組み合わせます。API
オペレーションによっては、IAM認証情報、アクセストークン、セッショントークン、クライアント
シークレット、またはこれらの組み合わせを使用して認証を提供する必要がある場合があります。
多くのユーザー認証および承認操作では、リクエストの認証済みバージョンと認証されていないバー
ジョンを選択できます。認証されていない操作は、モバイルアプリなど、ユーザーに配布するアプリのセキュリティ上のベストプラクティスです。コードにシークレットを含める必要はありません。
IAM認証された管理オペレーション および のIAMポリシーでのみアクセス許可を割り当てることができますIAM認証されたユーザーオペレーション。
IAM認証された管理オペレーション
IAM- 認証された管理オペレーションは、 のように、ユーザープールとアプリケーションクライアントの設定を変更して表示します AWS Management Console。
ユーザープールAPI認証

444

Amazon Cognito

開発者ガイド

例えば、 UpdateUserPoolAPIリクエストでユーザープールを変更するには、リソースを更新するた
めの AWS 認証情報とIAMアクセス許可を提示する必要があります。
AWS Command Line Interface （AWS CLI) または でこれらのリクエストを承認するには AWS
SDK、リクエストにIAM認証情報を追加する環境変数またはクライアント設定で環境を設定します。詳細については、「」の AWS 「 認証情報 AWS を使用した へのアクセス」を参照してくださ
いAWS 全般のリファレンス。Amazon Cognito ユーザープール のサービスエンドポイントにリクエ
ストを直接送信することもできますAPI。リクエストのヘッダーに埋め込んだ AWS 認証情報を使用して、これらのリクエストを承認または署名する必要があります。詳細については、「リクエストの署名 AWS API」を参照してください。
IAM認証された管理オペレーション
AddCustomAttributes
CreateGroup
CreateIdentityProvider
CreateResourceServer
CreateUserImportJob
CreateUserPool
CreateUserPoolClient
CreateUserPoolDomain
DeleteGroup
DeleteIdentityProvider
DeleteResourceServer
DeleteUserPool
DeleteUserPoolClient
DeleteUserPoolDomain

ユーザープールAPI認証

445

Amazon Cognito

開発者ガイドIAM認証された管理オペレーション
DescribeIdentityProvider
DescribeResourceServer
DescribeRiskConfiguration
DescribeUserImportJob
DescribeUserPool
DescribeUserPoolClient
DescribeUserPoolDomain
GetCSVHeader
GetGroup
GetIdentityProviderByIdentifier
GetSigningCertificate
GetUICustomization
GetUserPoolMfaConfig
ListGroups
ListIdentityProviders
ListResourceServers
ListTagsForResource
ListUserImportJobs
ListUserPoolClients
ListUserPools
ListUsers
ユーザープールAPI認証

446

Amazon Cognito

開発者ガイドIAM認証された管理オペレーション
ListUsersInGroup
SetRiskConfiguration
SetUICustomization
SetUserPoolMfaConfig
StartUserImportJob
StopUserImportJob
TagResource
UntagResource
UpdateGroup
UpdateIdentityProvider
UpdateResourceServer
UpdateUserPool
UpdateUserPoolClient
UpdateUserPoolDomain

IAM認証されたユーザーオペレーション
IAM-認証されたユーザーオペレーションは、ユーザーのサインアップ、サインイン、認証情報の管理、変更、表示を行います。
例えば、ウェブフロントエンドをバックアップするサーバー側のアプリケーション層を設定できます。サーバー側のアプリは、Amazon Cognito リソースへの特権アクセスで信頼するOAuth機密クライアントです。アプリにユーザーを登録するために、サーバーは AdminCreateUserAPIリクエストにAWS 認証情報を含めることができます。OAuth クライアントタイプの詳細については、「2.0 認証
フレームワークOAuth」の「クライアントタイプ」を参照してください。

ユーザープールAPI認証

447

Amazon Cognito

開発者ガイドAWS CLI または でこれらのリクエストを承認するには AWS SDK、リクエストにIAM認証情報を追加する環境変数またはクライアント設定を使用してサーバー側のアプリケーション環境を設定します。詳細については、「」の AWS 「 認証情報 AWS を使用した へのアクセス」を参照してくださ
いAWS 全般のリファレンス。Amazon Cognito ユーザープール のサービスエンドポイントにリクエ
ストを直接送信することもできますAPI。リクエストのヘッダーに埋め込んだ AWS 認証情報を使用して、これらのリクエストを承認または署名する必要があります。詳細については、「リクエストの署名 AWS API」を参照してください。
アプリケーションクライアントにクライアントシークレットがある場合は、IAM認証情報と、オペ
レーションに応じて、 の SecretHashパラメータまたは SECRET_HASH値の両方を指定する必要がありますAuthParameters。詳細については、「シークレットハッシュ 値の計算」を参照してくだ
さい。
IAM認証されたユーザーオペレーション
AdminAddUserToGroup
AdminConfirmSignUp
AdminCreateUser
AdminDeleteUser
AdminDeleteUserAttributes
AdminDisableProviderForUser
AdminDisableUser
AdminEnableUser
AdminForgetDevice
AdminGetDevice
AdminGetUser
AdminInitiateAuth
AdminLinkProviderForUser

ユーザープールAPI認証

448

Amazon Cognito

開発者ガイドIAM認証されたユーザーオペレーション
AdminListDevices
AdminListGroupsForUser
AdminListUserAuthEvents
AdminRemoveUserFromGroup
AdminResetUserPassword
AdminRespondToAuthChallenge
AdminSetUserMFAPreference
AdminSetUserPassword
AdminSetUserSettings
AdminUpdateAuthEventFeedback
AdminUpdateDeviceStatus
AdminUpdateUserAttributes
AdminUserGlobalSignOut

認証されていないユーザーオペレーション
認証されていないユーザーオペレーションでは、ユーザーのサインアップ、サインイン、およびパス
ワードのリセットが開始されます。インターネット上の全員にサインアップしてアプリにサインイン
させたい場合は、認証されていないオペレーションまたはパブリックAPIオペレーションを使用します。
例えば、アプリにユーザーを登録するには、シークレットへの特権アクセスを提供しないOAuthパブ
リッククライアントを配布できます。このユーザーを認証されていないAPIオペレーション に登録できますSignUp。

ユーザープールAPI認証

449

Amazon Cognito

開発者ガイドを使用して開発したパブリッククライアントでこれらのリクエストを送信するには AWS SDK、認証情報を設定する必要はありません。また、追加の承認なしで、Amazon Cognito ユーザープールのサービスエンドポイントAPIにリクエストを直接送信することもできます。
アプリケーションクライアントにクライアントシークレットがある場合は、オペレーションによっては、AuthParameters で SecretHash パラメータまたは SECRET_HASH 値を指定する必要があります。詳細については、「シークレットハッシュ 値の計算」を参照してください。
認証されていないユーザーオペレーション
SignUpConfirmSignUp
ResendConfirmationCode
ForgotPassword
ConfirmForgotPassword
InitiateAuth

トークン認証によるユーザーオペレーション
トークン認証によるユーザーオペレーションは、ユーザーがサインインしたか、サインインプロセスを開始した後に、ユーザーのサインアウト、認証情報の管理、変更、表示を行います。アプリでシー
クレットを配布せず、ユーザー自身の認証情報を使用してリクエストを承認する場合は、トークン認
証APIオペレーションを使用します。ユーザーがサインインを完了した場合は、アクセストークンを使用してトークン認証APIリクエストを承認する必要があります。ユーザーがサインインプロセスの途中で、Amazon Cognito が前のAPIリクエストへのレスポンスで返したセッショントークンを使用
して、トークン認証リクエストを承認する必要があります。
例えば、パブリッククライアントでは、書き込みアクセスをユーザー自身のプロファイルのみに制限する方法でユーザーのプロファイルを更新する場合があります。この更新を行うために、クライアン
トはユーザーのアクセストークンをUpdateUserAttributesAPIリクエストに含めることができます。
を使用して開発したパブリッククライアントでこれらのリクエストを送信するには AWS SDK、認証情報を設定する必要はありません。リクエストには AccessToken または Session パラメータを含めてください。Amazon Cognito ユーザープール のサービスエンドポイントにリクエストを直接送
ユーザープールAPI認証

450

Amazon Cognito

開発者ガイド信することもできますAPI。サービスエンドポイントへのリクエストを承認するには、リクエストのPOST本文にアクセストークンまたはセッショントークンを含めます。
トークン認証オペレーションのAPIリクエストに署名するには、アクセストークンをリクエストのAuthorizationヘッダーとして 形式で含めますBearer <Base64-encoded access token>。
トークン認証によるユーザーオペレーション

AccessTok
en

セッション

✓

RespondTo
AuthChallenge
ChangePassword✓

GetUser✓

UpdateUse✓rAttributes
DeleteUse✓rAttributes
DeleteUser✓

ConfirmDevice✓

ForgetDevice✓

GetDevice✓

ListDevices✓

UpdateDev✓

iceStatus
GetUserAt✓

tributeVerificationCode

ユーザープールAPI認証

451

Amazon Cognito

開発者ガイドトークン認証によるユーザーオペレーション

AccessToken

VerifyUse

✓

セッション

rAttribute
SetUserSettings✓

SetUserMF✓

APreference
GlobalSignOut✓

Associate✓✓

SoftwareToken✓

UpdateAut
hEventFeedback
VerifySof✓✓

twareToken
RevokeToken 1

1 パラメータ RevokeToken として更新トークンを取得します。更新トークンは、認証トークンとして、またターゲットリソースとして機能します。

ユーザープール設定の更新
で Amazon Cognito ユーザープールの設定を変更するには AWS Management Console、このガイドの他の領域で説明されているように、ユーザープール設定の機能ベースのタブに移動し、フィールドを更新します。ユーザープールを作成した後に、この設定を変更することはできません。以下の設定を変更する場合は、新しいユーザープールまたはアプリクライアントを作成する必要があります。
ユーザープール名API パラメータ名: PoolName

ユーザープールの更新

452

Amazon Cognito

開発者ガイドユーザープールに割り当てた分かりやすい名前。ユーザープール名を変更するには、新しいユー
ザープールを作成します。
Amazon Cognito ユーザープールサインインオプション
API パラメータ名: AliasAttributes および UsernameAttributes
ユーザーがサインインするときにユーザー名として渡すことができる属性。ユーザープールを作成するときに、ユーザー名、E メールアドレス、電話番号、または優先ユーザー名を使用してサ
インインを許可するかどうかを選択できます。ユーザープールサインインオプションを変更するには、新しいユーザープールを作成します。
ユーザー名の大文字と小文字を区別する
API パラメータ名: UsernameConfiguration
大文字と小文字以外の別のユーザー名と一致するユーザー名を作成した場合、Amazon Cognito
では同じユーザーまたは一意のユーザーとして扱うことができます。詳細については、「ユーザープールの大文字と小文字の区別」を参照してください。大文字と小文字の区別を変更するには、新しいユーザープールを作成します。
クライアントシークレット
API パラメータ名: GenerateSecret
アプリクライアントを作成するときに、信頼されたソースだけがユーザープールにリクエストを送信できるように、クライアントシークレットを生成できます。詳細については、「ユーザー
プールアプリクライアント」を参照してください。クライアントシークレットを変更するには、同じユーザープール内に新しいアプリクライアントを作成します。
必須属性
API パラメータ名: スキーマ
ユーザーのサインアップ時または作成時に値を提供する必要がある属性。詳細については、「ユーザープール属性」を参照してください。必要な属性を変更するには、新しいユーザープー
ルを作成します。
カスタム属性API パラメータ名: スキーマ
カスタム名を持つ属性です。ユーザーのカスタム属性の値を変更することはできますが、ユー
ザープールからカスタム属性を削除することはできません。詳細については、「ユーザープー
ユーザープールの更新

453

Amazon Cognito

開発者ガイドル属性」を参照してください。カスタム属性の最大数に達してリストを変更する場合は、新しい
ユーザープールを作成します。

SMS 設定ユーザープールで SMS メッセージをアクティブ化した後は、非アクティブ化することはできません。
• ユーザープールの作成時に SMS メッセージを設定することを選択した場合、セットアップの完了
後に SMS を非アクティブ化することはできません。
• 作成したユーザープールで SMS メッセージをアクティブ化することはできますが、それ以降はSMS を非アクティブ化することはできません。
• Amazon Cognito は、ユーザーアカウントの招待と復旧、属性検証、および多要素認証 (MFA) に
SMS メッセージを使用できます。SMS メッセージをアクティブ化した後は、これらの関数に対していつでも SMS メッセージを有効または無効にできます。
• SMS メッセージ設定には、Amazon SNS でメッセージを送信するために Amazon Cognito
Amazon SNSロールが含まれています。割り当てられたロールはいつでも変更できます。

AWS SDK、、 AWS CDKまたは REST API を使用したユーザープールの更新Amazon Cognito コンソールでは、ユーザープール設定を一度に 1 つのパラメータで変更できます。
例えば、Lambda トリガーを追加するには、Lambda トリガーを追加を選択し、関数とトリガータイ
プを選択します。Amazon Cognito ユーザープール API は、ユーザープールとアプリケーションクラ
イアントの更新オペレーションで、ユーザープールのパラメータの完全なセットが必要になるように構造化されています。ただし、コンソールは、この更新オペレーションを他のユーザープール設定で透過的に自動化します。
内の他の場所で変更を行うと AWS アカウント 、変更する設定に関連しない更新でエラーが発生することがあります。例えば AWS WAF、削除された Amazon SES ID や の IAM アクセス許可の変更。現在のパラメータのいずれかが無効になった場合、修正するまで設定を更新することはできません。このようなエラーが発生した場合は、エラーレスポンスを調べて、言及されている設定を検証します。
AWS Cloud Development Kit (AWS CDK)、Amazon Cognito ユーザープール REST API および AWS
SDKsは、Amazon Cognito リソースの自動化とプログラムによる設定のためのツールです。これら
SMS 設定454

Amazon Cognito

開発者ガイドのツールを使用したリクエストは、Amazon Cognito コンソールと同様に、リクエスト本文の完全なリソース設定で設定を更新する必要があります。大まかに言うと、次のプロセスを実行する必要があります。
1. 既存のリソース の設定を記述する オペレーションから出力をキャプチャします。
2. 設定を変更して出力を変更します。
3. リソースを更新するオペレーションで、変更された設定を送信します。
次の手順では、 UpdateUserPool API オペレーションを使用して設定を更新します。入力フィール
ドが異なる同じアプローチが UpdateUserPoolClientに適用されます。
Important
既存のパラメータの値を提供しない場合、Amazon Cognito はそれらをデフォルト値に設定します。例えば、既存の LambdaConfig がある場合に、空の LambdaConfig でUpdateUserPool を送信すると、すべての Lambda 関数のユーザープールトリガーへの割り当てが削除されます。ユーザープール設定の変更を自動化する場合は、適宜計画を立てて
ください。

1.

を使用して、ユーザープールの既存の状態をキャプチャします DescribeUserPool。

2.

DescribeUserPool の出力を UpdateUserPool のリクエストパラメータと一致するように
フォーマットします。出力される JSON から次のトップレベルフィールドとその子オブジェク
トを削除します。
• Arn• CreationDate• CustomDomain• UpdateUserPoolDomain API オペレーションでこのフィールドを更新します。
• Domain• UpdateUserPoolDomain API オペレーションでこのフィールドを更新します。
• EmailConfigurationFailure• EstimatedNumberOfUsers• Id• LastModifiedDate

AWS SDK、、 AWS CDKまたは REST API を使用したユーザープールの更新

455

Amazon Cognito

開発者ガイド• Name• SchemaAttributes• SmsConfigurationFailure• Status3.

生成された JSON が UpdateUserPool のリクエストパラメータと一致することを確認します。

4.

生成された JSON で変更するパラメータを変更します。

5.

変更した JSON をリクエスト入力として使用する UpdateUserPool API リクエストを送信します。

また、 AWS CLIの update-user-pool の --cli-input-json パラメータで、この修正した
DescribeUserPool の出力を使用することもできます。
または、次の AWS CLI コマンドを実行して、 の受け入れられた入力フィールドの値が空白の JSONを生成しますupdate-user-pool。その後、これらのフィールドにユーザープールの既存の値を入力できます。
aws cognito-idp update-user-pool --generate-cli-skeleton --output json

次のコマンドを実行して、アプリクライアント用に同じ JSON オブジェクトを生成します。
aws cognito-idp update-user-pool-client --generate-cli-skeleton --output json

Amazon Cognito でホストされた UI およびフェデレーションエン
ドポイントの設定と使用ドメインを持つ Amazon Cognito ユーザープールは、OAuth-2.0 準拠の認証サーバーであり、認証用の ready-to-use ホストユーザーインターフェイス (UI) です。認証サーバーは、認証リクエストをルーティングし、JSONウェブトークン (JWTs) を発行および管理し、ユーザー属性情報を配信します。ホストされた UI は、ユーザープール内の基本的なサインアップ、サインイン、多要素認証、パスワードリセットのアクティビティを行う Web インターフェイスの集まりです。また、アプリに関連付けるサードパーティー ID プロバイダー (IdPs) による認証の中心的なハブでもあります。ユー
ザーを認証および承認する際、アプリはホストされた UI と承認エンドポイントを呼び出すことができます。ホストされた UI ユーザーエクスペリエンスを、ブランドに合わせて独自のロゴやCSSカス
タマイズを行うことができます。ホストされた UI と認証サーバーのコンポーネントについて詳しくホストされた UI とOAuthサーバー

456

Amazon Cognito

開発者ガイドは、「ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス」を参照してください。
Note
Amazon Cognito でホストされた UI は、カスタム認証チャレンジの Lambda トリガーを使用したカスタム認証フローをサポートしていません。

トピック• でホストされた UI を設定する AWS Amplify• Amazon Cognito コンソールでの ホストされた UI のセットアップ• サインインページの表示• Amazon Cognito ユーザープールでホストされた UI について知っておくべきこと• ユーザープールのドメインを設定する• 組み込みのサインインおよびサインアップウェブページのカスタマイズ• ホストされた UI でのサインアップとサインイン

でホストされた UI を設定する AWS Amplify
AWS Amplify を使用してウェブまたはモバイルアプリに認証を追加する場合は、 AWS Amplify フ
レームワークのコマンドラインインターフェイス (CLI) とライブラリを使用して、ホストされた UIを設定できます。アプリに認証を追加するには、 CLI AWS Amplify を使用して Authカテゴリを
プロジェクトに追加します。次に、クライアントコードで、 AWS Amplify ライブラリを使用してAmazon Cognito ユーザープールでユーザーを認証します。
事前に構築されたホストされた UI を表示することも、Facebook、Google、Amazon、Apple OAuthなどのソーシャルサインインプロバイダーにリダイレクトする 2.0 エンドポイントを介してユーザーをフェデレーションすることもできます。ユーザーがソーシャルプロバイダーで正常に認証されると、 は必要に応じてユーザープールに新しいユーザー AWS Amplify を作成し、ユーザーのOIDC
トークンをアプリケーションに提供します。
次の例は、 AWS Amplify を使用して、アプリ内のソーシャルプロバイダーでホストされた UI を設定する方法を示しています。
• AWS Amplify の認証 JavaScript。
• AWS Amplify Swift の 認証。
でホストされた UI を設定する AWS Amplify

457

Amazon Cognito

開発者ガイド• AWS Amplify Flutter の認証。
• AWS Amplify Android の 認証。

Amazon Cognito コンソールでの ホストされた UI のセットアップ
アプリケーションクライアントの作成
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

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

4.

[App integration] (アプリケーションの統合) タブを選択します。

5.

[App clients] (アプリケーションクライアント) で、[Create an app client] (アプリケーションクラ
イアントの作成) を選択します。

6.

[App type] (アプリケーションタイプ) を選択します。[Public client] (パブリッククライアン
ト)、[Confidential client] (機密保持クライアント)、または [Other] (その他)。パブリッククライ
アントは通常、ユーザーのデバイスから動作し、認証されていない とトークン認証された を使用しますAPIs。機密クライアントは通常、クライアントシークレットとAPI認証情報で信頼する中央サーバー上のアプリケーションから動作し、認証ヘッダーと AWS Identity and Access
Management 認証情報を使用してリクエストに署名します。ユースケースが、パブリッククラ
イアントまたは機密保持クライアントの事前構成されたアプリケーションクライアント設定と異なる場合、その他を選択します。

7.

[App client name] (アプリケーションクライアント名) を入力します。

8.

アプリケーションクライアントで許可したい [Authentication flows] (認証のフロー) を選択します。

9.

認証フローセッション持続期間を設定します。これは、セッショントークンが期限切れになる前にユーザーが各認証チャレンジを完了しなければならない期間です。

10. (オプション) トークンの有効期限を設定します。
a.

アプリケーションクライアントの [Refresh token expiration] (トークンの有効期限を更新) を指定します。デフォルト値は 30 日です。これは、1 時間から 10 年の任意の値に変更できます。

b.

アプリケーションクライアントの [Access token expiration] (アクセストークンの有効期限)を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。

Amazon Cognito コンソールでの ホストされた UI のセットアップ

458

Amazon Cognitoc.

開発者ガイドアプリケーションクライアントの [ID token expiration] (ID トークンの有効期限) を指定します。デフォルト値は 1 時間です。これは、5 分から 24 時間の任意の値に変更できます。
Important
ホストされた UI を使用してトークンの有効期間を 1 時間未満に設定した場合、ユーザーは、現在 1 時間に固定されているセッション cookie の期間に基づいてトークンを使用できるようになります。

11. [Generate client secret] (クライアントシークレットの生成) を選択して、 Amazon Cognito にクライアントシークレットを生成させます。クライアントシークレットは通常、機密クライアントに関連付けられます。
12. このアプリケーションクライアントに、[Enable token revocation] (トークンの失効を有効化) す
るかどうかを選択してください。これにより、トークンサイズが増加します。トークンの取り消しの詳細については、「Revoking Tokens」を参照してください。
13. このアプリケーションのクライアントに対して、[Prevent error messages that reveal user
existence] (ユーザーの存在を知らせるエラーメッセージを表示しない) ようにするか選択します。Amazon Cognito は、ユーザー名またはパスワードのいずれかが間違っているという一般的なメッセージで、存在しないユーザーのサインインリクエストに応答します。
14. (オプション) このアプリケーションクライアントに、[Attribute read and write permissions] (属性の読み取りと書き込みのアクセス許可) を構成します。アプリケーションクライアントは、
ユーザープールの属性スキーマの限定サブセットに対して、読み取りと書き込みの許可が得られます。
15. [Create] (作成) を選択します。
16. [Client id] (クライアント ID) を書き留めます。これにより、サインアップリクエストとサインイ
ンリクエストでアプリケーションクライアントを識別します。
アプリを設定する
1.

[App integration] (アプリケーションの統合) タブで、[App clients] (アプリケーションクライアント) のアプリケーションクライアントを選択します。現在のホストされた UI 情報を確認してく
ださい。

2.

「許可されたURLコールバック (s)」にコールバックを追加しますURL。コールバックURLとは、サインインが成功するとユーザーが にリダイレクトされる場所です。

Amazon Cognito コンソールでの ホストされた UI のセットアップ

459

Amazon Cognito

3.

開発者ガイド「許可されたサインアウト (s)」にサインアウトを追加しますURL。 URLサインアウトURLとは、サインアウト後にユーザーが にリダイレクトされる場所です。

4.

ID プロバイダーリストから少なくとも 1 つ追加してください。

5.

OAuth 2.0 付与タイプ で、認証コード付与を選択して認証コードを返し、それをユーザープー
ルトークンと交換します。トークンはエンドユーザーに直接公開されないため、侵害される可能性は低くなります。ただし、ユーザープールトークンの認証コードを交換するために、バックエ
ンドでカスタムアプリケーションが必要です。セキュリティ上の理由から、モバイルアプリケー
ションには認証コード付与フローをコード交換 (PKCE) の証明キーと一緒に使用することをお勧
めします。

6.

OAuth 2.0 付与タイプ で、暗黙的な付与 を選択して、Amazon Cognito からユーザープールのJSONウェブトークン (JWT) を返します。このフローは、トークンの認証コードを交換できる
バックエンドがない場合に使用でき、トークンのデバッグにも役立ちます。

7.

[Authorization code] (認証コード) と [Implicit code] (暗黙的コード) 付与の両方を有効にして、必要に応じて各権限を使用することができます。[Authorization code] (認証コード) または [Implicitcode] (暗黙コード) の付与も選択されておらず、アプリケーションクライアントにクライアント
シークレットがある場合は、クライアント認証情報の付与を有効にできます。アプリケーション
がユーザーの代わりではなく自身の代わりとしてアクセストークンをリクエストする必要がある
場合にのみ、[Client credentials] (クライアント認証情報) を選択します。

8.

このアプリケーションクライアントに対して認可する [OpenID Connect scopes] (OpenID
Connect スコープ) を選択します。

9.

[変更の保存] を選択します。

ドメインを設定する
1.

ユーザープール用の [App integration] (アプリケーションの統合) タブに移動します。

2.

[Domain] (ドメイン) の [Actions] (アクション) を選択し、[Create custom domain] (カスタムドメ
インの作成) または [Create Cognito domain] (Cognitoドメインの作成) を選択します。ユーザー
プールドメインを既に構成している場合は、新しいカスタムドメインを作成する前に、[Delete
Cognito domain] (Cognito ドメインの削除) または [Delete custom domain] (カスタムドメインの削除) を選択して削除します。

3.

Amazon Cognito ドメインで使用するための使用可能なドメインプレフィックスを入力します。[Custom domain] (カスタムドメイン) のセットアップに関する詳細については、「ホストされた UI で所有するドメインを使用する」を参照してください。

4.

[Create] (作成) を選択します。

Amazon Cognito コンソールでの ホストされた UI のセットアップ

460

Amazon Cognito

開発者ガイドサインインページの表示
Amazon Cognito コンソールで、[App integration] (アプリの統合) タブの [App clients and analytics](アプリクライアントと分析) の下にあるアプリクライアントの設定で、[View Hosted UI] (ホストされた UI を表示) ボタンを選択します。このボタンを選択すると、ホストされた UI のサインインページに移動し、次の基本パラメータが表示されます。
• アプリクライアント ID• 認証コード付与リクエスト• 現在のアプリクライアント用に有効にしたすべてのスコープのリクエスト• 現在のアプリケーションクライアントのリストURLの最初のコールバック[View hosted UI] (ホストされた UI を表示) ボタンは、ホストされた UI の基本機能をテストする場合に便利です。サインインは、追加および変更されたパラメータURLでカスタマイズできます。ほとん
どの場合、[View hosted UI] (ホストされた UI を表示) リンクの自動生成されたパラメータは、アプ
リのニーズに完全には一致しません。このような場合は、ユーザーのサインイン時にアプリURLが呼び出す をカスタマイズする必要があります。サインインパラメータのキーと値の詳細については、「ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス」を参照してください。
ホストされた UI サインインウェブページは、次のURL形式を使用します。この例では、response_type=code パラメーターを使って認証コードの付与をリクエストしています。
https://<your domain>/oauth2/authorize?response_type=code&client_id=<your app client
id>&redirect_uri=<your callback url>

ユーザープールのドメイン文字列は、[アプリケーションの統合] タブから取得できます。同じタブ
で、アプリクライアント IDs、そのコールバック URLs、許可されたスコープ、およびアプリクライ
アントと分析 のその他の設定を識別できます。
カスタムパラメータを使用して /oauth2/authorize エンドポイントに移動すると、Amazon
Cognito は /oauth2/login エンドポイントにリダイレクトするか、identity_provider または idp_identifier パラメータがある場合は、IdP サインインページにそのままリダイレクトします。ホストされた UI をバイパスURLする例については、「」を参照してくださいSAML Amazon
Cognito ユーザープールでの セッション開始。
暗黙的な付与に対するホストされた UI リクエストの例
サインインページの表示

461

Amazon Cognito

開発者ガイドホストされた UI サインインウェブページは、 の暗黙的なコード付与URLについて、以下を使用して表示できますresponse_type=token。サインインが正常に行われると、Amazon Cognito がユー
ザープールトークンをウェブブラウザのアドレスバーに返します。

https://mydomain.us-east-1.amazoncognito.com/authorize?
response_type=token&client_id=1example23456789&redirect_uri=https://
mydomain.example.com

ID トークンとアクセストークンは、リダイレクト に追加されたパラメータとして表示されます
URL。
ここでは、暗黙的な許可リクエストからのレスポンス例を示します。

https://mydomain.example.com/#id_token=eyJraaBcDeF1234567890&access_token=eyJraGhIjKlM1112131415&expires_in=3600&token_type=

Amazon Cognito ユーザープールでホストされた UI について知っておくべきことホストされた UI と管理者としてのユーザーの確認
ユーザープールのローカルユーザーの場合、ホストされた UI は、検証および確認用のメッセージの自動送信を Cognito に許可するようにユーザープールを設定するときに最も効果的です。この設定を有効にすると、Amazon Cognito は、サインアップしたユーザーに確認コードを含むメッセージを送信します。代わりにユーザーをユーザープール管理者として確認すると、ホストされた UI はサインアップ後にエラーメッセージを表示します。この状態で、Amazon Cognito は新しいユーザーを作成しましたが、検証メッセージを送信できませんでした。引き続きユーザーを管理者として確認する
ことはできますが、エラーが発生すると、ユーザーはサポートデスクに連絡する可能性があります。
管理者の確認の詳細については、「ユーザーにアプリケーションへのサインアップを許可するがユー
ザープール管理者として確認する」を参照してください。
ホストされた UI 設定の変更の表示
ホストされている UI ページに変更がすぐに反映されない場合は、数分間待ってから、ページを更新
してください。
Amazon Cognito ユーザープールでホストされた UI について知っておくべきこと

462

Amazon Cognito

開発者ガイドユーザープールトークンのデコード
Amazon Cognito ユーザープールトークンは、RS256アルゴリズムを使用して署名されます。を使用
してユーザープールトークンをデコードおよび検証できます。「 での Amazon Cognito JWTトーク
ンのデコードおよび検証 AWS Lambda」を参照してください GitHub。
ホストされた UI とTLSバージョン
ホストされた UI には転送中の暗号化が必要です。Amazon Cognito が提供するユーザープールド
メインには、1.2 の最小TLSバージョンが必要です。カスタムドメインは をサポートしています
が、TLSバージョン 1.2 は必要ありません。Amazon Cognito はホストされた UI と認証サーバーエ
ンドポイントの設定を管理するため、ユーザープールドメインTLSの要件を変更することはできません。
ホストされた UI とCORSポリシー
Amazon Cognito がホストする UI は、カスタムのクロスオリジンリソース共有 (CORS) オリジンポ
リシーをサポートしていません。ホストされた UI のCORSポリシーにより、ユーザーはリクエスト
で認証パラメータを渡すことができなくなります。代わりに、アプリケーションのウェブフロントエ
ンドにCORSポリシーを実装します。Amazon Cognito は、次のOAuthエンドポイントへのリクエス
トにAccess-Control-Allow-Origin: *レスポンスヘッダーを返します。
1. トークンエンドポイント
2. エンドポイントの取り消し
3. UserInfo エンドポイント
ホストされた UI と認証サーバーの Cookie
Amazon Cognito ユーザープールエンドポイントは、ユーザーのブラウザに Cookie を設定します。Cookie は、サイトがサードパーティー Cookie を設定しないブラウザの要件に準拠しています。これらはユーザープールエンドポイントのみを対象とし、以下が含まれます。
• 各リクエストの XSRF-TOKEN Cookie。
• ユーザーがリダイレクトされたときのセッション整合性のための csrf-stateCookie。
• 成功したサインイン試行を 1 時間保持するcognitoセッション Cookie。

Amazon Cognito ユーザープールでホストされた UI について知っておくべきこと

463

Amazon Cognito

開発者ガイドユーザープールのドメインを設定する
アプリクライアントを設定したら、サインアップおよびサインインのウェブページアドレスを設定できます。Amazon Cognito でホストされるドメインを使用して、利用可能なドメインプレフィックスを選択する、または独自のウェブアドレスをカスタムドメインとして使用することができます。
AWS Management Console を使用してアプリケーションクライアントと Amazon Cognito でホストされるドメインを追加するには、「ホストされたウェブ UI を有効にするためのアプリケーションの追加」を参照してください。
Note
ドメインプレフィックスで aws、amazon、または cognito テキストを使用することはでき
ません。

トピック
• ホストされた UI への Amazon Cognito ドメインの使用• ホストされた UI への独自のドメインの使用ホストされた UI への Amazon Cognito ドメインの使用
アプリケーションクライアントを設定したら、サインアップおよびサインインのウェブページアドレスを設定できます。ホストされた Amazon Cognito ドメインを独自のドメインプレフィックスと共に使用できます。
Note
Amazon Cognito アプリケーションのセキュリティを強化するために、ユーザープールエンドポイントの親ドメインはパブリックサフィックスリスト (PSL) に登録されます。PSL は、
ユーザーのウェブブラウザが、ユーザーが設定するユーザープールエンドポイントと Cookie
を一貫して把握するのに役立ちます。
ユーザープールエンドポイントの親ドメインには次の形式があります。

auth.Region.amazoncognito.com
auth-fips.Region.amazoncognito.com

ドメインの設定

464

Amazon Cognito

開発者ガイドでアプリケーションクライアントと Amazon Cognito がホストするドメインを追加するには AWSManagement Console、「」を参照してくださいアプリクライアントの作成。
トピック• 前提条件• ステップ 1: ホストされるユーザープールドメインを設定する• ステップ 2: サインインページを検証する
前提条件
開始するには、以下が必要です。
• アプリクライアントを持つユーザープール。詳細については、「ユーザープールの開始方法」を参照してください。
ステップ 1: ホストされるユーザープールドメインを設定する
ホストされたユーザープールドメインを設定する
ユーザープールドメインを設定するには、 AWS Management Console または AWS CLI または APIのいずれかを使用できます。
Amazon Cognito consoleドメインを設定する
1.

ユーザープール用の [App integration] (アプリケーションの統合) タブに移動します。

2.

[ドメイン] の横で、[アクション] を選択し、[カスタムドメインの作成] または [Amazon
Cognito ドメインの作成] のどちらかを選択します。ユーザープールドメインを既に設定している場合は、新しいカスタムドメインを作成する前に、[Amazon Cognitoドメインの削除] ま
たは [カスタムドメインの削除] を選択します。

3.

Amazon Cognito ドメインで使用するための使用可能なドメインプレフィックスを入力します。[Custom domain] (カスタムドメイン) のセットアップに関する詳細については、「ホストされた UI で所有するドメインを使用する」を参照してください。

4.

[Create] (作成) を選択します。

ドメインの設定

465

Amazon Cognito

開発者ガイドCLI/API
ドメインプレフィックスを作成してユーザープールに割り当てるには、次のコマンドを使用します。
ユーザープールのドメインを設定する• AWS CLI: aws cognito-idp create-user-pool-domain
例: aws cognito-idp create-user-pool-domain --user-pool-id<user_pool_id> --domain <domain_name>• AWS API: CreateUserPoolDomain
ドメインに関する情報を取得する• AWS CLI: aws cognito-idp describe-user-pool-domain
例: aws cognito-idp describe-user-pool-domain --domain <domain_name>• AWS API: DescribeUserPoolDomain
ドメインを削除する• AWS CLI: aws cognito-idp delete-user-pool-domain
例: aws cognito-idp delete-user-pool-domain --domain <domain_name>• AWS API: DeleteUserPoolDomain
ステップ 2: サインインページを検証する•

Amazon Cognito でホストされるドメインから、サインインページが利用可能であることを検証します。

https://<your_domain>/login?
response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>

ドメインは、Amazon Cognito コンソールの [ドメイン名] ページに表示されます。アプリクライアン
ト ID およびコールバック URL は [アプリクライアントの設定] ページに表示されています。
ドメインの設定

466

Amazon Cognito

開発者ガイドホストされた UI への独自のドメインの使用
アプリケーションクライアントを設定したら、Amazon Cognito がホストする UI エンドポイントと認証APIエンドポイントのカスタムドメインを使用してユーザープールを設定できます。カスタム
ドメインを使用すると、ユーザーは、独自のウェブアドレスを使用して、アプリケーションにサインインできるようになります。
トピック• ユーザープールへのカスタムドメインの追加• カスタムドメインのSSL証明書の変更
ユーザープールへのカスタムドメインの追加
ユーザープールにカスタムドメインを追加するには、Amazon Cognito コンソールでドメイン名を指定し、 AWS Certificate Manager () で管理する証明書を指定しますACM。ドメインを追加すると、Amazon Cognito はDNSエイリアスターゲットを提供し、設定に追加します。
前提条件
開始するには、以下が必要です。
• アプリクライアントを持つユーザープール。詳細については、「ユーザープールの開始方法」を参照してください。
• 所有するウェブドメイン。その親ドメインには、有効な DNS A レコード が必要です。このレコードには任意の値を割り当てることができます。親は、ドメインのルート、またはドメイン階層の
1 つ上の子ドメインです。例えば、カスタムドメインが auth.xyz.example.com の場合、Amazon
Cognito は xyz.example.com を IP アドレスに解決できる必要があります。お客様のインフラスト
ラクチャへの偶発的な影響を防ぐため、Amazon Cognito はカスタムドメインのトップレベルドメ
イン (TLDs) の使用をサポートしていません。詳細については、「ドメイン名」を参照してください。
• カスタムドメインのサブドメインを作成する機能。サブドメインとして [auth] を使用することをお勧めします。例: auth.example.com.
Note「ワイルドカード証明書」がない場合は、カスタムドメインのサブドメイン用に新しい証明書の取得が必要な場合があります。

ドメインの設定

467

Amazon Cognito

開発者ガイド• によって管理される Secure Sockets Layer (SSL) 証明書ACM。
Note
証明書をリクエストまたはインポートする前に、ACMコンソールで AWS リージョンを米国東部 (バージニア北部) に変更する必要があります。
• ユーザープール認証サーバーがユーザーセッションに Cookie を追加することを許可するアプリ
ケーション。Amazon Cognito は、ホストされた UI に必要ないくつかの Cookie を設定します。たとえばcognito、cognito-fl、およびXSRF-TOKENに適用されます。個々の Cookie はブラウザのサイズ制限に準拠していますが、ユーザープールの設定を変更すると、ホストされた UI Cookieのサイズが大きくなる可能性があります。カスタムドメインの前の Application Load Balancer(ALB) などの中間サービスでは、最大ヘッダーサイズまたは合計 Cookie サイズが適用される場合があります。アプリケーションが独自の Cookie も設定している場合、ユーザーのセッションがこれらの制限を超える可能性があります。サイズ制限の競合を避けるため、アプリケーションはホストされた UI サブドメインに Cookie を設定しないことをお勧めします。
• Amazon CloudFront ディストリビューションを更新するアクセス許可。これを行うには、次のIAM
ポリシーステートメントを のユーザーにアタッチします AWS アカウント。
{"Version": "2012-10-17","Statement": [{"Sid": "AllowCloudFrontUpdateDistribution","Effect": "Allow","Action": ["cloudfront:updateDistribution"],"Resource": [
"*"
]
}
]
}

でのアクションの承認の詳細については CloudFront、「 でのアイデンティティベースのポリシー(IAM ポリシー) の使用 CloudFront」を参照してください。

ドメインの設定

468

Amazon Cognito

開発者ガイドAmazon Cognito は、最初はアクセスIAM許可を使用してディストリビューションを設定します
CloudFrontが、ディストリビューションは によって管理されます AWS。Amazon Cognito がユー
ザープールに関連付けた CloudFront ディストリビューションの設定を変更することはできません。例えば、セキュリティポリシーでサポートされているTLSバージョンを更新することはできません。
ステップ 1: カスタムドメイン名を入力する
Amazon Cognito コンソールまたは を使用して、ドメインをユーザープールに追加できますAPI。
Amazon Cognito console
Amazon Cognito コンソールからユーザープールにドメインを追加する。
1.

Amazon Cognito コンソールにサインインします。プロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

3.

ドメインを追加するユーザープールを選択します。

4.

[App integration] (アプリケーションの統合) タブを選択します。

5.

[Domain] (ドメイン) の横にある[Actions] (アクション) を選択し、[Create custom domain] (カスタムドメインの作成) を選択します。
Note
ユーザープールドメインを既に構成している場合は、新しいカスタムドメインを作成する前に、[Delete Cognito domain] (Cognito ドメインの削除) または [Delete custom
domain] (カスタムドメインの削除) を選択して既存のドメインを削除します。

6.

カスタムドメイン には、Amazon Cognito で使用するドメインURLの を入力します。ドメイ
ン名で使用できるのは、小文字の英文字、数字、およびハイフンのみです。最初または最後の文字にハイフンを使用しないでください。サブドメイン名は、ピリオドで区切ります。

7.

ACM 証明書 で、ドメインに使用するSSL証明書を選択します。ユーザープールの に関係な
く、Amazon Cognito カスタムドメインで使用できるのは、米国東部 (バージニア北部) AWS
リージョン のACM証明書のみです。

ドメインの設定

469

Amazon Cognito

開発者ガイド利用可能な証明書がない場合は、 ACMを使用して米国東部 (バージニア北部) で証明書をプロビジョニングできます。詳細については、AWS Certificate Manager ユーザーガイドの「使用開始」を参照してください。
8.

[Create] (作成) を選択します。

9.

Amazon Cognito は、[App integration] (アプリケーションの統合) タブに戻ります。ドメインの にエイリアスレコードを作成するというDNSメッセージが表示されます。コンソールに表示される [Domain] (ドメイン) と [Alias target] (エイリアスターゲット) を書き留めます。これらは、次のステップでカスタムドメインにトラフィックを転送するために使用します。

API
Amazon Cognito を使用してユーザープールにドメインを追加するにはAPI：•

CreateUserPoolDomain アクションを使用します。

ステップ 2: エイリアスターゲットとサブドメインを追加する
このステップでは、ドメインネームサーバー (DNS) サービスプロバイダーを介して、前のステップのエイリアスターゲットを指すエイリアスを設定します。DNS アドレス解決に Amazon Route 53
を使用している場合は、「Route 53 を使用してエイリアスターゲットとサブドメインを追加するには」セクションを選択します。
エイリアスターゲットとサブドメインを現在のDNS設定に追加するには•

DNS アドレス解決に Route 53 を使用していない場合は、DNSサービスプロバイダーの設定ツールを使用して、前のステップのエイリアスターゲットをドメインのDNSレコードに追加する必要があります。また、DNSプロバイダーはカスタムドメインのサブドメインを設定する必要があります。

Route 53 を使用してエイリアスターゲットとサブドメインを追加する
1.

Route 53 コンソールにサインインします。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

Route 53 にパブリックホストゾーンがない場合は、カスタムドメインの親であるルートでホス
トゾーンを作成します。詳細については、「Amazon Route 53 デベロッパーガイド」の「パブリックホストゾーンの作成」を参照してください。

ドメインの設定470

Amazon Cognito

開発者ガイドa.

[ホストゾーンの作成] を選択します。

b.

例えば、親ドメインを入力します。auth.example.comたとえば、カスタムドメインの な
ど。myapp.auth.example.com、ドメイン名リストから。

c.

ホストゾーンの説明を入力します。

d.

パブリックホストゾーンのホストゾーン [Type] (タイプ) を選択して、パブリッククライア
ントがカスタムドメインを解決できるようにします。Private hosted zone (プライベートホ
ストゾーン) はサポートされていません。

e.

必要に応じてタグを適用します。

f.

[ホストゾーンの作成] を選択します。
Note
クエリをサブドメインホストゾーンに誘導する親ホストゾーンに委任セットを使用
して、カスタムドメインの新しいホストゾーンを作成することもできます。それ以外の場合は、A レコードを作成します。この方法により、ホストゾーンの柔軟性とセキュリティが向上します。詳細については、「Amazon Route 53 を通してホストされるドメインのサブドメインの作成」をご覧ください。

3.

[ホストゾーン] ページで、ホストゾーンの名前を選択します。

4.

カスタムドメインの親ドメインのDNSレコードがまだない場合は、追加します。次のプロパ
ティを使用して、親ドメインのDNSレコードを作成します。
• レコード名： 空白のままにします。
• レコードタイプ: A。
• エイリアス： 有効にしないでください。
• 値 : 選択したターゲットを入力します。このレコードは に解決する必要がありますが、レ
コードの値は Amazon Cognito にとって重要ではありません。
• TTL: 任意の に設定するTTLか、デフォルトのままにします。
• ルーティングポリシー : Simple routing を選択します。

5.

[レコードを作成] を選択します。ドメインのレコードの例を次に示します。example.com:
example.com. 60 IN A 198.51.100.1

ドメインの設定

471

Amazon Cognito

開発者ガイドNote
Amazon Cognito は、本番ドメインの偶発的な乗っ取りから保護するために、カスタムドメインの親ドメインのDNSレコードがあることを確認します。親ドメインのDNSレ
コードがない場合、カスタムドメインを設定しようとすると、Amazon Cognito はエラーを返します。Start of Authority (SOA) レコードは、親ドメインの検証では十分な
DNSレコードではありません。
6.

次のプロパティを使用して、カスタムドメインに別のDNSレコードを追加します。
• レコード名： のレコードを作成するなどauth、カスタムドメインプレフィック
スauth.example.com。
• レコードタイプ: A。
• エイリアス : 有効にします。
• へのトラフィックのルーティング: エイリアスを Cloudfront ディストリビュー
ション に選択します。前に記録したエイリアスターゲットを入力します。例:
123example.cloudfront.net。
• ルーティングポリシー : Simple routing を選択します。

7.

[レコードを作成] を選択します。
Note
新しいレコードがすべての Route 53 DNSサーバーに反映されるまでに約 60 秒かかることがあります。Route 53 GetChangeAPIメソッドを使用して、変更が反映されたことを確認できます。

ステップ 3: サインインページを検証する•

カスタムドメインでサインインページが表示できることを確認します。
このアドレスをブラウザに入力して、カスタムドメインとサブドメインでサインインします。これはカスタムドメインURLの例です。example.com サブドメインを持つ auth:ドメインの設定

472

Amazon Cognito

開発者ガイドhttps://myapp.auth.example.com/login?
response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>

カスタムドメインのSSL証明書の変更必要な場合は、Amazon Cognito を使用して、カスタムドメインに適用した証明書を変更することができます。
通常、これは で定期的に証明書を更新した後には必要ありませんACM。で既存の証明書を更新するとACM、証明書ARNの は変わりません。カスタムドメインは新しい証明書を自動的に使用します。
ただし、既存の証明書を新しい証明書に置き換えると、 は新しい証明書に新しい ACMを付与します
ARN。新しい証明書をカスタムドメインに適用するには、これを Amazon Cognito ARNに提供する必要があります。
新しい証明書の提供後、Amazon Cognito では、それがカスタムドメインに配布されるまで最大 1 時
間かかります。
開始する前にAmazon Cognito で証明書を変更する前に、証明書を に追加する必要がありますACM。詳細については、AWS Certificate Manager ユーザーガイドの「使用開始」を参照してください。
証明書を に追加するときはACM、 AWS リージョンとして米国東部 (バージニア北部) を選択する必要があります。

Amazon Cognito コンソールまたは を使用して証明書を変更できますAPI。
AWS Management Console
Amazon Cognito コンソールで証明書を更新する
1.

にサインイン AWS Management Console し、 で Amazon Cognito コンソールを開きますhttps://console.aws.amazon.com/cognito/home。

2.

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

3.

証明書を更新するユーザープールを選択します。

4.

[App integration] (アプリケーションの統合) タブを選択します。

ドメインの設定

473

Amazon Cognito

5.

アクション 、ACM証明書 の編集 を選択します。

6.

カスタムドメインに関連付ける新しい証明書を選択します。

7.

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

開発者ガイドAPI
証明書を更新するには (Amazon Cognito API）•

UpdateUserPoolDomain アクションを使用します。

組み込みのサインインおよびサインアップウェブページのカスタマイズ
AWS Management Console、または AWS CLI や API を使用して、組み込みアプリの UI エクスペリ
エンスのカスタマイズ設定を指定します。アプリに表示するカスタムのロゴイメージをアップロードできます。カスケードスタイルシート (CSS) を使用して UI をカスタマイズすることもできます。
単一のクライアント (clientId) またはすべてのクライアント (clientId を ALL に設定) にアプリ
UI のカスタマイズ設定を指定できます。ALL を指定した場合は、以前に UI のカスタマイズが設定されていないすべてのクライアントにデフォルトの設定が使用されます。特定のクライアントに UI のカスタマイズ設定が指定される場合、ALL 設定にフォールバックされなくなります。
UI のカスタマイズを設定するリクエストのサイズは 135 KB を超えてはなりません。まれに、リク
エストヘッダー、CSS ファイル、ロゴの合計が 135 KB を超えることがあります。Amazon Cognito
はイメージファイルを Base64 にエンコードします。これにより、100 KB のイメージのサイズが130 KB に増え、リクエストヘッダーと CSS 用に 5 KB が残ります。リクエストが大きすぎる場
合、AWS Management Console または SetUICustomization API request parameters toolarge リクエストはエラーを返します。ロゴイメージを 100 KB 以下、CSS ファイルを 3 KB 以下に調整します。CSS とロゴのカスタマイズを個別に設定することはできません。
Note
UI をカスタマイズするには、ユーザープールのドメインを設定する必要があります。

アプリケーションのカスタムロゴを指定する
Amazon Cognito は、ログインエンドポイント の入力フィールドの上の中央にカスタムロゴを配置します。
組み込みのウェブページのカスタマイズ

474

Amazon Cognito

開発者ガイドホストされているカスタムの UI ロゴには、350 x 178 ピクセルまで拡大できる PNG、JPG、または JPEG ファイルを選択します。ロゴファイルのサイズは 100 KB 以下で、Amazon Cognito
が Base64 にエンコードした後は 130 KB 以下にしてください。API で SetUICustomization に
ImageFile を設定するには、ファイルを Base64 でエンコードされたテキスト文字列に変換する
か、AWS CLI でファイルパスを指定して、Amazon Cognito にエンコードさせます。

アプリケーションの CSS カスタマイズを指定する
ホストされたアプリページの CSS をカスタマイズできます。ただし、以下の制限があります。
• 以下の CSS クラス名を使用できます。
• background-customizable• banner-customizable• errorMessage-customizable• idpButton-customizable• idpButton-customizable:hover• idpDescription-customizable• inputField-customizable• inputField-customizable:focus• label-customizable• legalText-customizable• logo-customizable• passwordCheck-valid-customizable• passwordCheck-notValid-customizable• redirect-customizable• socialButton-customizable• submitButton-customizable• submitButton-customizable:hover• textDescription-customizable• プロパティ値は HTML を含めることができます。ただし、@import,@supports,@page, または@mediaステートメント、または Javascript の値を除きます。
組み込みのウェブページのカスタマイズ

次の CSS プロパティをカスタマイズできます。

475

Amazon Cognito

開発者ガイドLabels• [font-weight] は 100 ～ 900 までの 100 の倍数です。
入力フィールド• [width] は含まれるブロックの幅に対してパーセンテージで表したものです。
• [height] は入力フィールドの高さ (ピクセル (px)) です。
• [color] はテキストの色です。任意の標準 CSS 色値を使用できます。
• [background-color] は、入力フィールドの背景色です。任意の標準 CSS 色値を使用できます。
• [border] は、アプリウィンドウの境界の幅、透明度、色を指定する標準 CSS 値です。幅は 1 px
から 100 px までの任意の値を使用できます。透明度は solid または none です。色は任意の標準色値を使用できます。
テキストの説明• [padding-top] は、説明欄の上のパディング量です。
• [padding-bottom] は、説明欄の下のパディング量です。
• [display] には block または inline のいずれかを設定できます。
• [font-size] はテキストの説明のフォントサイズです。
送信ボタン• [font-size] はボタンテキストのフォントサイズです。
• [font-weight] はボタンテキストのフォントウェイトです。bold、italic、または normal です。
• [margin] はボタンの上下左右のマージンサイズを示す 4 つの値の文字列です。
• [font-size] はテキストの説明のフォントサイズです。
• [width] はボタンテキストのブロックに対する幅 (パーセント) です。
• [height] はボタンの高さ (ピクセル (px)) です。
• [color] はボタンの色です。任意の標準 CSS 色値を使用できます。
• [background-color] は、ボタンの背景色です。任意の標準色値を使用できます。
バナー• [padding] はバナーの上下左右のパディングサイズを示す 4 つの値の文字列です。
• [background-color] は、バナーの背景色です。任意の標準 CSS 色値を使用できます。
送信ボタンのホバー• [color] は、ボタンにカーソルを合わせたときのボタンの前景色です。任意の標準 CSS 色値を使用できます。
組み込みのウェブページのカスタマイズ

476

Amazon Cognito

開発者ガイド• [background-color] は、ボタンにカーソルを合わせたときのボタンの背景色です。任意の標準
CSS 色値を使用できます。
ID プロバイダーボタンのホバー• [color] は、ボタンにカーソルを合わせたときのボタンの前景色です。任意の標準 CSS 色値を使用できます。
• [background-color] は、ボタンにカーソルを合わせたときのボタンの背景色です。任意の標準
CSS 色値を使用できます。
パスワードのチェックが有効ではありません• [color] は "Password check not valid" メッセージのテキスト色です。任意の標準 CSS
色値を使用できます。
背景• [background-color] は、アプリウィンドウの背景色です。任意の標準 CSS 色値を使用できます。
エラーメッセージ• [margin] は上下左右のマージンサイズを示す 4 つの値の文字列です。
• [padding] はパディングサイズです。
• [font-size] はフォントサイズです。
• [width] はエラーメッセージの幅を含まれるブロックに対するパーセンテージで表したものです。
• [background] は、エラーメッセージの背景色です。任意の標準 CSS 色値を使用できます。
• [border] は境界の幅、透明度、色を指定する 3 つの値の文字列です。
• [color] はエラーメッセージのテキスト色です。任意の標準 CSS 色値を使用できます。
• [box-sizing] は含める必要があるサイズのプロパティ (幅と高さ) をブラウザに指示するために使用されます。
ID プロバイダーボタン• [height] はボタンの高さ (ピクセル (px)) です。
• [width] はボタンテキストの幅を含まれるブロックに対するパーセンテージで示したものです。
• [text-align] はテキストの整列設定です。left、right または center のいずれかを設定できます。
• [margin-bottom] は下側マージンの設定です。
• [color] はボタンの色です。任意の標準 CSS 色値を使用できます。
• [background-color] は、ボタンの背景色です。任意の標準 CSS 色値を使用できます。
組み込みのウェブページのカスタマイズ

477

Amazon Cognito

開発者ガイド• [border-color] は、ボタンの境界の色です。任意の標準 CSS 色値を使用できます。
ID プロバイダーの説明• [padding-top] は、説明欄の上のパディング量です。
• [padding-bottom] は、説明欄の下のパディング量です。
• [display] には block または inline のいずれかを設定できます。
• [font-size] は説明のフォントサイズです。
法務関連のテキスト• [color] はテキストの色です。任意の標準 CSS 色値を使用できます。
• [font-size] はフォントサイズです。
Note
リーガルテキストをカスタマイズする際は、サインインページのソーシャル ID プロバ
イダーに表示されるメッセージ「We won't post to any of your accounts without asking
first」(最初に確認せずにアカウントに投稿することはありません) をカスタマイズします。

ロゴ• [max-width] は最大幅を含まれるブロックに対するパーセンテージで表したものです。
• [max-height] は最大高を含まれるブロックに対するパーセンテージで表したものです。
入力フィールドのフォーカス• [border-color] は、入力フィールドの色です。任意の標準 CSS 色値を使用できます。
• [outline] は入力フィールドの境界線の幅 (ピクセル) です。
ソーシャルボタン• [height] はボタンの高さ (ピクセル (px)) です。
• [text-align] はテキストの整列設定です。left、right または center のいずれかを設定できます。
• [width] はボタンテキストの幅を含まれるブロックに対するパーセンテージで示したものです。
• [margin-bottom] は下側マージンの設定です。
パスワードのチェックが有効です• [color] は "Password check valid" メッセージのテキスト色です。任意の標準 CSS 色値を使用できます。
組み込みのウェブページのカスタマイズ

478

Amazon Cognito

開発者ガイドユーザープールのアプリケーション UI カスタマイズ設定の指定 (AWS Management
Console)AWS Management Consoleを使用して、アプリの UI カスタマイズ設定を指定できます。
Note
以下の URL を、ユーザープールの指定を含めて作成し、ブラウザに入力することで、カスタマイズが反映されているホストされた UI を表示できます。 https://<your_domain>/login?

response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callbac
変更がコンソールに反映されるまで最大 1 分待ってからブラウザを最新表示にする必要があ
る場合があります。
ドメインは、[Domain] (ドメイン) の下の [App integration] (アプリケーション統合) タブに表示されます。アプリケーションクライアント ID およびコールバック URL は [App clients] (アプリケーションクライアント) に表示されています。

アプリ UI のカスタマイズ設定を指定する
1.

Amazon Cognito コンソールにサインインします。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[App integration] (アプリケーションの統合) タブを選択します。

4.

すべてのアプリケーションクライアントの UI 設定をカスタマイズするには、[Hosted UI
customization] (ホストされた UI のカスタマイズ) を探し、[Edit] (編集) を選択します。

5.

1 つのアプリケーションクライアントの UI 設定をカスタマイズするには、[App clients] (アプリ
ケーションクライアント) を探し、変更したいアプリケーションクライアントを選択します。[ホ
ストされた UI のカスタマイズ] を探し、[編集] を選択します。アプリケーションクライアントを
ユーザープールのデフォルトのカスタマイズからクライアント固有のカスタマイズに切り替えるには、[Use client-level settings] (クライアントレベルの設定を使用する) を選択します。

6.

独自のロゴイメージファイルをアップロードするには、[Choose file] (ファイルを選択) または[Replace current file] (現在のファイルを置き換える) を選択します。

7.

ホストされた UI CSS をカスタマイズするには、CSS template.css をダウンロードし、テンプ
レートをカスタマイズ値に変更します。ホストされた UI で使用できるのは、テンプレートに含まれるキーのみです。追加された CSS キーは UI に反映されません。CSS ファイルをカスタマ組み込みのウェブページのカスタマイズ

479

Amazon Cognito

開発者ガイド

イズしたら、[Choose file] (ファイルの選択) または [Replace current file] (現在のファイルを置き換える) を選択し、カスタム CSS ファイルをアップロードします。

ユーザープールのアプリケーション UI カスタマイズ設定の指定 (AWS CLI およびAWS API)
次のコマンドを使用して、ユーザープールのアプリ UI カスタマイズ設定を指定します。
ユーザープールの組み込みアプリ UI の UI カスタマイズ設定を取得するには、次の API オペレー
ションを使用します。
• AWS CLI: aws cognito-idp get-ui-customization• AWS API:GetUICustomization
ユーザープールの組み込みアプリ UI の UI カスタマイズ設定を設定するには、次の API オペレー
ションを使用します。
• イメージファイルからの AWS CLI: aws cognito-idp set-ui-customization --userpool-id <your-user-pool-id> --client-id <your-app-client-id> --image-file
fileb://"<path-to-logo-image-file>" --css ".label-customizable{ color:<color>;}"• Base64 バイナリテキストとしてエンコードされたイメージを含む AWS CLI: aws cognitoidp set-ui-customization --user-pool-id <your-user-pool-id> --clientid <your-app-client-id> --image-file <base64-encoded-image-file> --css".label-customizable{ color: <color>;}"• AWS API:SetUICustomization

ホストされた UI でのサインアップとサインイン
ユーザープールとアプリクライアント用に Amazon Cognito でホストされた UI を設定およびカスタ
マイズすると、アプリはそれをユーザーに提示できます。ホストされた UI は、以下の例を含む複数の Amazon Cognito 認証オペレーションをサポートしています。
• アプリの新しいユーザーとしてのサインアップ• E メールアドレスおよび電話番号の検証• 多要素認証 (MFA) のセットアップ
ホストされた UI の使用方法

480

Amazon Cognito

開発者ガイド• ローカルユーザー名とパスワードを使用してサインインします。
• サードパーティーの ID プロバイダー (IdP) でのサインイン• パスワードのリセット
Amazon Cognito でホストされた UI は、ログインエンドポイント で始まります。サインインページの URL は、ユーザープール用に選択したドメインと、発行したい OAuth 2.0 付与、アプリクライア
ント、アプリへのパス、リクエストしたい OpenID Connect (OIDC) スコープを反映したパラメータの組み合わせになります。
https://<your user pool domain>/authorize?client_id=<your app client
ID>&response_type=<code/token>&scope=<scopes to request>&redirect_uri=<your callback
URL>

次の URL は、上記のプレースホルダーフィールドをサンプル値に置き換えます。
https://auth.example.com/authorize? /client_id=1example23456789 /&response_type=code /&scope=aws.cognito.signin.user.admin+email+openid+profile /&redirect_uri=https%3A%2F%2Faws.amazon.com

Amazon Cognito でホストされた UI のサインインページには、ユーザープールまたはユーザーがリクエストしているアプリクライアントに割り当てた任意の ID プロバイダー (IdP) を通してサインイ
ンするオプションがあります。また、ユーザープールに新しいユーザーアカウントをサインアップしたり、忘れたパスワードをリセットしたりするためのリンクも含まれています。

ホストされた UI の使用方法

481

Amazon Cognito

開発者ガイドトピック• Amazon Cognito でホストされた UI での新規アカウントのサインアップの方法• Amazon Cognito でホストされた UI でサインインする方法• Amazon Cognito でホストされた UI を使用してパスワードをリセットする方法

Amazon Cognito でホストされた UI での新規アカウントのサインアップの方法
このガイドでは、Amazon Cognito を使用するアプリでユーザーアカウントにサインアップする方法を示します。

ホストされた UI の使用方法

482

Amazon Cognito

開発者ガイドNote
Amazon Cognito でホストされるユーザーインターフェイス (UI) を使用するアプリにサインインすると、このガイドに示されている基本設定以外に、アプリ所有者がカスタマイズしたページが表示される場合があります。

1.

アプリの所有者がリストしたサードパーティーのサインインプロバイダーではなく、Amazon
Cognito からユーザー名とパスワードを使用してサインインする場合は、サインインページから[Sign up] (サインアップ) を選択してください。
サインインプロバイダーが Amazon Cognito 以外の場合は、サードパーティープロバイダーのボ
タンを選択するとサインアップが完了します。アプリの所有者が選択したオプションによっては、サインインに使用するプロバイダーを選択できる場合もあれば、ユーザー名とパスワードの入力を求めるメッセージのみが表示される場合もあります。

ホストされた UI の使用方法

483

Amazon Cognito

開発者ガイドWith multiple sign-in providers

ホストされた UI の使用方法

484

Amazon Cognito

開発者ガイドWith only Amazon Cognito as a sign-in provider

2.

[Sign up with a new account] (新しいアカウントでサインアップ) ページで、アプリの所有者がサインアップに必要な情報を求めます。ユーザー名、E メールアドレス、または電話番号を尋ねる
場合があります。必要な情報を入力し、パスワードを選択します。

ホストされた UI の使用方法

485

Amazon Cognito

3.

開発者ガイド[Confirm your account] (アカウントを確認する) ページでは、アプリの所有者が、指定した E
メールアドレスや電話番号でメッセージを受信できることを確認するために、アカウントの確認を要求する場合があります。
E メールまたは SMS テキストメッセージでコードを受信します。フォームにコードを入力して、正しい連絡先情報を入力したことを確認します。

ホストされた UI の使用方法

486

Amazon Cognito

4.

開発者ガイドアプリの所有者は、多要素認証 (MFA) のセットアップを要求する場合があります。MFA メソッ
ドを選択するように求めるプロンプトが表示される場合や、アプリが次のステップにスキップする場合があります。
[Choose a multi-factor authentication (MFA) method] (多要素認証 (MFA) の方法を選択する) ペー
ジで、MFA メソッドを選択します。[SMS] を選択した場合、MFA パスコードは SMS テキスト
メッセージで受信されます。[Authenticator app] (認証機能付きアプリケーション) 選択した場
合、時間ベースの MFA パスコードを生成するためのアプリをデバイスにインストールする必要があります。3 分以内に選択する必要があります。

ホストされた UI の使用方法

487

Amazon Cognito

5.

開発者ガイドAmazon Cognito は、認証機能付きアプリケーションまたは SMS テキストメッセージからのコードの入力を求めます。3 分以内に受け取ったコードを入力します。
Authenticator app
1. ダウンロードした認証機能付きアプリケーションを開きます。
2. ページ上の QR コードをカメラでスキャンします。カメラを使用するにはアプリの承認が必要な場合があります。

ホストされた UI の使用方法

488

Amazon Cognito

開発者ガイドQR コードをスキャンできない場合は、[Show secret key] (シークレットキーを表示) を選択すると、認証機能付きアプリケーションに手動で入力できるコードが表示されます。
3. 認証機能付きアプリケーションは、数秒ごとに変化するコードの表示を開始します。アプ
リから現在のコードを入力します。
4. (オプション) [Set up authenticator app MFA] (認証機能付きアプリケーション MFA をセッ
トアップ) ページで、デバイスの名前を選択します。サインインすると、Amazon Cognito
は、ここで指定した名前のデバイスからのコードをリクエストします。

ホストされた UI の使用方法

489

Amazon Cognito

ホストされた UI の使用方法

開発者ガイド490

Amazon Cognito

開発者ガイドSMS text message
1. アプリ所有者が電話番号をまだ収集していない場合、Amazon Cognito は電話番号をリク
エストします。
[Set up SMS MFA] (SMS MFA のセットアップ) ページで、+ 記号と国コード (例:+12125551234) を含む電話番号を入力します。

2. コードが記載された SMS メッセージを受信します。[Set up SMS MFA] (SMS MFA のセットアップ) ページで、コードを入力します。コードが届かず、もう一度やり直したい
場合は、[Send a new code] (新しいコードを送信) を選択します。[Back] (戻る) をクリッ
クして、新しい電話番号を入力します。

ホストされた UI の使用方法

491

Amazon Cognito

6.

開発者ガイド初回にサインアップして詳細を確認すると、このプロセスの完了後に Amazon Cognito がアプリへのアクセスを許可します。

Amazon Cognito でホストされた UI でサインインする方法
このガイドでは、Amazon Cognito を使用するアプリにサインインする方法について説明します。
Note
Amazon Cognito でホストされるユーザーインターフェイス (UI) を使用するアプリにサインインすると、このガイドに示されている基本設定以外に、アプリ所有者がカスタマイズしたページが表示される場合があります。

1.

アプリの所有者が選択したオプションによっては、サインインに使用するプロバイダーを選択できる場合もあれば、ユーザー名とパスワードの入力を求めるメッセージのみが表示される場
合もあります。このページからユーザー名とパスワードを使用してサインインすると、Amazon

ホストされた UI の使用方法

492

Amazon Cognito

開発者ガイドCognito がサインインプロバイダーになります。それ以外の場合は、選択したボタンがサインイ
ンプロバイダーとして表されます。
ここでプロバイダーを選択するか、ユーザー名とパスワードを入力すると、すぐにアプリにアクセスできます。Amazon Cognito がサインインプロバイダーの場合、アプリの所有者も多要素認証を要求する可能性があります。
With multiple sign-in providers

ホストされた UI の使用方法

493

Amazon Cognito

開発者ガイドWith only Amazon Cognito as a sign-in provider

2.

アプリでサインアップしたときに MFA をセットアップした可能性があります。SMS メッセー
ジで受信した、または認証機能付きアプリケーションに表示された MFA コードを入力します。
このコードは 3 分以内に入力する必要があります。
With an authenticator app

ホストされた UI の使用方法

494

Amazon Cognito

開発者ガイドWith an SMS code3.

サインインして MFA を完了すると、Amazon Cognito はアプリへのアクセスを許可します。

Amazon Cognito でホストされた UI を使用してパスワードをリセットする方法
このガイドでは、Amazon Cognito を使用するアプリでパスワードをリセットする方法について説明
します。
Note
Amazon Cognito でホストされたユーザーインターフェイス (UI) を使用するアプリにサインインすると、このガイドに示されている基本設定以外に、アプリ所有者がカスタマイズしたページが表示される場合があります。

1.

アプリの所有者が選択したオプションによっては、サインインに使用するプロバイダーを選択できる場合もあれば、ユーザー名とパスワードの入力を求めるメッセージのみが表示される場
合もあります。このページからユーザー名とパスワードを使用してサインインすると、Amazon
Cognito がサインインプロバイダーになります。それ以外の場合は、選択したボタンがサインイ
ンプロバイダーとして表されます。
通常、サインインページからプロバイダーを選択し、パスワードが機能しない場合は、手順に従ってプロバイダーのパスワードをリセットします。Amazon Cognito がサインインプロバイ
ダーの場合は、[Forgot your password?] (パスワードをお忘れですか。) を選択します。

ホストされた UI の使用方法

495

Amazon Cognito

開発者ガイドWith multiple sign-in providers

ホストされた UI の使用方法

496

Amazon Cognito

開発者ガイドWith only Amazon Cognito as a sign-in provider

2.

Amazon Cognito では、[Forgot your password?] (パスワードをお忘れですか。) ページでサインインに使用する情報の入力が求められます。ユーザー名、E メールアドレス、電話番号です。

ホストされた UI の使用方法

497

Amazon Cognito

3.

開発者ガイドAmazon Cognito は、コードを E メールメッセージまたは SMS テキストメッセージとして送信します。
受け取ったコードを入力し、表示されたフィールドに新しいパスワードを 2 回入力します。リ
セットコードは 88 分以内に入力する必要があります。

ホストされた UI の使用方法

498

Amazon Cognito

4.

開発者ガイドパスワードを変更したら、サインインページに戻り、新しいパスワードでサインインします。

スコープ、M2M 、リソースサーバーによるAPI認可
ユーザープールのドメインを設定すると、Amazon Cognito は 2.0 OAuth 認証サーバーとホストされたウェブ UI を自動的にプロビジョニングし、アプリがユーザーに提示できるサインアップページとサインインページを提供します。詳細については、ホストされた UI でアプリケーションクライアン
トを追加するを参照してください。認証サーバーによってアクセストークンに追加するスコープを選択できます。スコープはリソースサーバーとユーザーデータへのアクセスを許可します。
リソースサーバーは 2.0 OAuth APIサーバーです。アクセスで保護されたリソースを保護するために、ユーザープールからのアクセストークンに、API保護する でリクエストされたメソッドとパスを許可するスコープが含まれていることを検証します。トークンの署名に基づく発行者の検証、トークンの有効期限に基づく有効性の検証、トークンクレームのスコープに基づくアクセスレベルの検証を行います。ユーザープールスコープはアクセストークンscopeクレームにあります。Amazon
Cognito アクセストークンのクレームの詳細については、「アクセストークンの使用」を参照してください。
スコープとリソースサーバー

499

Amazon Cognito

開発者ガイドAmazon Cognito では、アクセストークンのスコープが外部APIsまたはユーザー属性へのアクセスを許可できます。ローカルユーザー、フェデレーティッドユーザー、またはマシン ID にアクセストー
クンを発行できます。
トピック• API 認証
• M achine-to-machine (M2M) 認証• スコープについて• リソースサーバーについて

API 認証以下は、Amazon Cognito トークンAPIsを使用して へのリクエストを許可する方法の一部です。
アクセストークン
Amazon Cognito オーソライザーをRESTAPIメソッドリクエスト設定に追加するときは、オーソ
ライザー設定に認証スコープを追加します。この設定では、 は AuthorizationヘッダーでアクセストークンAPIを受け入れ、受け入れられたスコープを確認します。
ID トークンで Amazon Cognito オーソライザーに有効な ID トークンを渡すとAPI、APIゲートウェイはリク
エストを受け入れ、ID REST トークンの内容をAPIバックエンドに渡します。
Amazon Verified Permissions
Verified Permissions には、 APIにリンクされたポリシーストア を作成するオプションがあります。Verified Permissions は、リクエストAuthorizationヘッダーから ID またはアクセストー
クンを処理する Lambda オーソライザーを作成して割り当てます。この Lambda オーソライザー
はトークンをポリシーストアに渡します。このポリシーストアでは、Verified Permissions がトー
クンをポリシーと比較し、オーソライザーに許可または拒否の決定を返します。
その他のリソース• API Gateway RESTAPIでの へのアクセスの制御と管理• Amazon Verified Permissions による承認
API 認証500

Amazon Cognito

開発者ガイドM achine-to-machine (M2M) 認証
Amazon Cognito は、マシン ID を持つAPIデータにアクセスするアプリケーションをサポートしま
す。ユーザープール内のマシン ID は、アプリケーションサーバー上で実行され、リモート に接続する機密クライアントですAPIs。オペレーションは、スケジュールされたタスク、データストリー
ム、アセットの更新など、ユーザーとのやり取りなしに行われます。これらのクライアントは、
アクセストークンを使用してリクエストを承認すると、マシン間 、または M2M 認証を実行します。M2M 認証では、共有シークレットがアクセスコントロールのユーザー認証情報を置き換えます。
M2M 認証APIで にアクセスするアプリケーションには、クライアント ID とクライアントシークレットが必要です。ユーザープールでは、クライアント認証情報の付与をサポートするアプリケーション
クライアントを構築する必要があります。クライアント認証情報をサポートするには、アプリケー
ションクライアントにクライアントシークレットが必要であり、ユーザープールドメインが必要です。このフローでは、マシン ID は から直接アクセストークンをリクエストしますトークンエンドポ
イント。クライアント認証情報の付与には、アクセストークン内のリソースサーバーからのカスタム
スコープのみを許可できます。アプリケーションクライアントの設定の詳細については、「」を参照
してくださいユーザープールアプリクライアント。
クライアント認証情報付与からのアクセストークンは、マシン ID が からリクエストすることを許可するオペレーションの検証可能なステートメントですAPI。アクセストークンがAPIリクエス
トを承認する方法の詳細については、「」を参照してください。アプリケーションの例については、Amazon Cognito および API Gateway ベースのマシンからマシンへの認証 AWS CDK」を参照してください。
M2M 認証には、毎月のアクティブユーザー (MAUs) の請求方法とは異なる請求モデルがあります。
ユーザー認証にアクティブなユーザーあたりのコストがかかる場合、M2M 請求にはアクティブなク
ライアント認証情報アプリケーションクライアントとトークンリクエストの合計ボリュームが反映されます。詳細については、「Amazon Cognito の料金」を参照してください。M2M 認証のコストを制御するには、アクセストークンの期間とアプリケーションが行うトークンリクエストの数を最適化します。API ゲートウェイキャッシュを使用して M2M 認証の新しいトークンのリクエストを減らす
方法については、キャッシュトークン「」を参照してください。
AWS 請求書にコストを追加する Amazon Cognito オペレーションの最適化については、「」を参照
してください のコスト管理。

M achine-to-machine (M2M) 認証

501

Amazon Cognito

開発者ガイドスコープについてスコープはアプリがリソースにリクエストできるアクセスのレベルです。Amazon Cognito アクセス
トークンのスコープは、ユーザープールで設定した信頼 (既知のデジタル署名を持つアクセストーク
ンの信頼できる発行者) によってバックアップされます。ユーザープールは、顧客が自分のユーザー
プロファイルの一部または全部を管理できること、またはバックエンド からデータを取得できることを証明するスコープを持つアクセストークンを生成できますAPI。Amazon Cognito ユーザープー
ルは、ユーザープールの予約APIスコープ 、カスタムスコープ 、および標準スコープ を使用してア
クセストークンを発行します。
ユーザープールの予約APIスコープ
aws.cognito.signin.user.admin スコープは Amazon Cognito ユーザープール を承認します
API。これにより、アクセストークンのベアラーが、 および UpdateUserAttributesAPIオペレーションなどを使用して、ユーザープールユーザーに関するすべての情報をクエリGetUserおよび更新することを許可されます。Amazon Cognito ユーザープール でユーザーを認証する場合API、アクセス
トークンで受け取るスコープはこれだけです。また、アプリケーションクライアントにユーザー属性の読み取りと書き込みを許可している場合、このユーザー属性の読み取りと書き込みに必要な唯一のスコープでもあります。このスコープは、認可エンドポイント へのリクエストでリクエストすることもできます。このスコープだけでは、UserInfo エンドポイント にユーザー属性をリクエストするには不十分です。ユーザープールAPIとユーザーのuserInfoリクエストの両方を許可するアクセス
トークンについては、 リクエストaws.cognito.signin.user.adminでスコープopenidと の両方を/oauth2/authorizeリクエストする必要があります。
カスタムスコープ
カスタムスコープは、リソースサーバーが保護APIsする外部へのリクエストを承認します。カスタ
ムスコープを他の種類のスコープと一緒にリクエストできます。カスタムスコープの詳細については、このページ全体を通じて説明しています。
標準スコープ
ホストされた UI を含むユーザープール OAuth 2.0 認証サーバーでユーザーを認証する場合は、ス
コープをリクエストする必要があります。ユーザープールのローカルユーザーとサードパーティのフェデレーションユーザーは、Amazon Cognito 認証サーバーで認証できます。標準 OAuth 2.0 ス
コープは、アプリケーションがユーザープールUserInfo エンドポイントの からユーザー情報を読み取ることを承認します。userInfo エンドポイントからユーザー属性をクエリするOAuthモデルは、
ユーザー属性に対する大量のリクエストに対してアプリケーションを最適化できます。userInfo
エンドポイントは、アクセストークンのスコープによって決まるアクセス許可レベルで属性を返しまスコープについて502

Amazon Cognito

開発者ガイドす。アプリケーションクライアントが、次の標準 2.0 OAuth スコープでアクセストークンを発行することを許可できます。
openidOpenID Connect (OIDC) クエリの最小スコープ。ID トークン、一意の識別子のクレーム sub、および他のスコープをリクエストする機能を承認します。
Noteopenid スコープをリクエストし、それ以外をリクエストしない場合、ユーザープール
ID トークンと userInfo レスポンスには、アプリケーションクライアントが読み取ることができるすべてのユーザー属性のクレームが含まれます。openid リクエストおよび
profile、、 などの他の標準スコープの場合phone、ID emailトークンとuserInfoレス
ポンスの内容は、追加のスコープの制約に限定されます。
例えば、認可エンドポイント へのリクエストでパラメータ scope=openid+email を使用すると、sub、email、email_verified を含む ID トークンが返されます。このリクエストのアクセストークンは、UserInfo エンドポイント から同じ属性を返します。リ
クエストでパラメータ scope=openid を使用すると、ID トークンと userInfo 内のク
ライアントが読み取り可能なすべての属性が返されます。

profileアプリクライアントが読み取ることができるすべてのユーザー属性を承認します。
email
ユーザー属性 email および email_verified を承認します。Amazon Cognito は、値が明示的に設定されている場合、email_verified を返します。
phone
ユーザー属性 phone_number および phone_number_verified を承認します。

リソースサーバーについて
リソースサーバーAPIは、データベース内の情報へのアクセスを許可したり、IT リソースを制御したりできます。Amazon Cognito アクセストークンは、2.0 APIsをサポートする OAuth へのアクセスを許可できます。Amazon API Gateway RESTAPIsには、Amazon Cognito アクセストークンによる認証のサポートが組み込まれています。 Amazon Cognito アプリケーションは、 API呼び出しでアクセ
リソースサーバーについて503

Amazon Cognito

開発者ガイドストークンをリソースサーバーに渡します。リソースサーバーはアクセストークンを検査し、アクセスを付与するかどうかを決定します。
Amazon Cognito は、ユーザープールのアクセストークンのスキーマを将来更新する可能性があります。アプリケーションがアクセストークンを に渡す前にその内容を分析する場合はAPI、スキーマの更新を受け入れるようにコードを設計する必要があります。
カスタムスコープはユーザーが定義するスコープであり、ユーザープールの承認機能を拡張して、ユーザーとユーザー属性のクエリや変更とは関係のない目的にも対応できるようにします。例えば、写真用のサーバーリソースがある場合、2 つのスコープを定義することが考えられます。写真への読み取りアクセス用の photos.read と、書き込み/削除アクセス用の photos.write です。認証用のアクセストークンを受け入れ、 scopeクレームの でアクセストークンへのHTTP GETリク
エスト、 photos.readでトークンへのHTTP POSTリクエストを付与APIするように を設定できますphotos.write。これらはカスタムスコープです。
Note
リソースサーバーはトークン内のクレームを処理する前に、アクセストークンの署名と有効期限を検証する必要があります。トークンの検証の詳細については、「JSON ウェブトーク
ンの検証」を参照してください。Amazon API Gateway でのユーザープールトークンの検証と使用の詳細については、ブログAmazon Cognito ユーザープールとAPIゲートウェイの統合」を参照してください。API ゲートウェイは、アクセストークンを検査し、リソースを保護するのに適したオプションです。API Gateway Lambda オーソライザーの詳細について
は、API「ゲートウェイ Lambda オーソライザーを使用する」を参照してください。

概要
Amazon Cognito を使用すると、2.0 OAuth リソースサーバーを作成し、カスタムスコープをそれらに関連付けることができます。アクセストークンのカスタムスコープは、 の特定のアクションを承認しますAPI。ユーザープール内のどのアプリケーションクライアントに対しても、任意のリソースサーバーからカスタムスコープを発行することを許可できます。カスタムスコープをアプリケーショ
ンクライアントに関連付けて、2.0 OAuth 認証コード付与、暗黙的な付与、およびクライアント認
証情報付与でそれらのスコープをリクエストしますトークンエンドポイント。Amazon Cognito は、
アクセストークンの scope クレームにカスタムスコープを追加します。クライアントはサーバーリ
ソースに対してアクセストークンを使用して、トークンに存在するスコープに基づいて承認を判断できます。アクセストークンスコープの詳細については、「ユーザープールのトークンの使用」を参照
してください。
リソースサーバーについて504

Amazon Cognito

開発者ガイドカスタムスコープでアクセストークンを取得するには、アプリは認証コードを引き換えるか、クライ
アント認証情報の付与をリクエストするために、トークンエンドポイント にリクエストを行う必要があります。ホストされた UI では、暗黙的付与からアクセストークンのカスタムスコープをリクエ
ストすることもできます。
Note
これらは IdP としてユーザープールとのヒューマンインタラクティブ認証用に設計されているため、 InitiateAuthAdminInitiateAuthリクエストは単一の値 を持つアクセストークンにのみscopeクレームを生成しますaws.cognito.signin.user.admin。

リソースサーバーおよびカスタムスコープの管理
リソースを作成するときに、リソースサーバー名とリソースサーバー識別子を指定する必要があります。リソースサーバーに作成したスコープごとに、スコープ名と説明を指定する必要があります。
• リソースサーバー名: リソースサーバーのわかりやすい名前 (Solar system object
tracker や Photo API など)。
リソースサーバーについて505

Amazon Cognito

開発者ガイド• リソースサーバーの識別子: リソースサーバーの一意の識別子。識別子は、 などAPI、 に関連付け
る任意の名前ですsolar-system-data。API URI パスへのより直接的な参照https://solarsystem-data-api.example.comとして のような長い識別子を設定できますが、文字列が長いほどアクセストークンのサイズが大きくなります。
• スコープ名: scope クレームに必要な値。例えば sunproximity.read です。
• 説明: スコープのわかりやすい説明。例えば Check current proximity to sun です。
Amazon Cognito では、ユーザープールのローカルユーザーであるか、サードパーティ ID プロバイ
ダーのフェデレーションユーザーであるかに関係なく、すべてのユーザーのアクセストークンにカ
スタムスコープを含めることができます。ホストされた UI を含む 2.0 OAuth 認証サーバーを使用して、認証フロー中にユーザーのアクセストークンの範囲を選択できます。ユーザーの認証は、リクエ
ストパラメータの 1 つとして scope を使用して 認可エンドポイント で開始する必要があります。
リソースサーバーには次の形式が推奨されます。識別子には、APIわかりやすい名前を使用します。
カスタムスコープには、リソースサーバーが許可するアクションを使用します。
resourceServerIdentifier/scopeName

例えば、カイパーベルトで新しい小惑星を発見し、 solar-system-data を通じて登録したいとしますAPI。小惑星のデータベースへの書き込み操作を許可するスコープは asteroids.add です。検出の登録を許可するアクセストークンをリクエストするときは、scopeHTTPSリクエストパラメー
タを としてフォーマットしますscope=solar-system-data/asteroids.add。
スコープをリソースサーバーから削除しても、すべのクライアントとの関連付けは削除されません。
代わりに、スコープが inactive とマークされます。Amazon Cognito はアクセストークンに非アクティブなスコープを追加しませんが、それ以外はアプリからのスコープのリクエストを通常どおりに処理します。後でスコープをリソースサーバーに再度追加すると、Amazon Cognito はそのスコープを再度アクセストークンに書き込みます。アプリケーションクライアントに関連付けていないスコー
プをリクエストすると、ユーザープールのリソースサーバーからスコープを削除したかどうかに関係なく、認証は失敗します。
AWS Management Console、、または を使用してAPI、ユーザープールのリソースサーバーとス
コープCLIを定義できます。

ユーザープールのリソースサーバーを定義する (AWS Management Console)を使用して AWS Management Console 、ユーザープールのリソースサーバーを定義できます。
リソースサーバーについて506

Amazon Cognito

開発者ガイドリソースサーバーを定義する
1.

Amazon Cognito コンソールにサインインします。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[App integration] (アプリケーションの統合) タブを開き、検索する [Resource servers] (リソースサーバー) を検索します。

4.

[Create a resource server] (リソースサーバーの作成) を選択します。

5.

[Resource server name] (リソースサーバー名) を入力します。例えば Photo Server です。

6.

[Resource server identifier] (リソースサーバー識別子) を入力します。例えば
com.example.photos です。

7.

リソースの [Custom scopes] (カスタムスコープ) (例: read および write ) を入力します。

8.

[Scope name] (スコープ名) ごとに [Description] (説明) (例: view your photos およびupdate your photos) を入力します。

9.

[作成] を選択します。

カスタムスコープは、[Custom scopes] (カスタムスコープ) 列にある、[Resource servers] (リソー
スサーバー) の [App integration] (アプリケーションの統合) タブで確認できます。カスタムスコープ
は、アプリケーションクライアントに対して [App integration] (アプリケーションクライアント) タブの下にある [App integration] (アプリケーションの統合) で有効にできます。アプリケーションクライ
アントを選択し、[Hosted UI settings] (ホストされた UI の設定) を検索して [Edit] (編集) を選択します。[Custom scopes] (カスタムスコープ) を追加し、[Save changes] (変更の保存) を選択します。

ユーザープールのリソースサーバーの定義 (AWS CLI および AWS API）
次のコマンドを使用して、ユーザープールのリソースサーバー設定を指定します。
リソースサーバーを作成する• AWS CLI: aws cognito-idp create-resource-server• AWS API: CreateResourceServer
リソースサーバーの設定に関する情報を取得する• AWS CLI: aws cognito-idp describe-resource-server• AWS API: DescribeResourceServer
リソースサーバーについて507

Amazon Cognito

開発者ガイドユーザープールのすべてのリソースサーバーに関する情報を一覧表示する• AWS CLI: aws cognito-idp list-resource-servers• AWS API: ListResourceServers
リソースサーバーを削除する• AWS CLI: aws cognito-idp delete-resource-server• AWS API: DeleteResourceServer
リソースサーバーの設定を更新する• AWS CLI: aws cognito-idp update-resource-server• AWS API: UpdateResourceServer

サードパーティー経由のユーザープールへのサインインの追加
アプリユーザーは、ユーザープールから直接サインインすることも、サードパーティー
ID プロバイダー (IdP) を介してフェデレーションすることもできます。ユーザープール
は、Facebook、Google、Amazon、Apple を介したソーシャルサインイン、および OpenID Connect(OIDC) と から返されるトークンの処理のオーバーヘッドを管理しますSAML IdPs。組み込みのホス
トウェブ UI により、Amazon Cognito はすべての の認証済みユーザーのトークン処理と管理を提供
します IdPs。このように、バックエンドシステムは 1 セットのユーザープールトークンで標準化できます。

Amazon Cognito ユーザープールでのフェデレーションサインインの仕組み
サードパーティー (フェデレーション) 経由のサインインは、Amazon Cognito のユーザープールで使用できます。この機能は、Amazon Cognito ID プール (フェデレーティッド ID) 経由のフェデレー
ションとは無関係です。

サードパーティー経由のサインインの追加

508

Amazon Cognito

開発者ガイドAmazon Cognito はユーザーディレクトリであり、2.0 ID OAuth プロバイダー (IdP) です。Amazon
Cognito ディレクトリにローカルユーザーをサインインさせると、ユーザープールがアプリの IdP になります。ローカルユーザーは、外部 IdP を介したフェデレーションなしに、ユーザープールディ
レクトリにのみ存在します。
Amazon Cognito をソーシャル、SAML、または OpenID Connect (OIDC) に接続すると IdPs、ユー
ザープールは複数のサービスプロバイダーとアプリ間のブリッジとして機能します。IdP にとって、Amazon Cognito はサービスプロバイダー (SP) です。 IdPs OIDC ID トークンまたはSAMLアサーションを Amazon Cognito に渡します。Amazon Cognito は、トークンまたはアサーション内のユーザーに関するクレームを読み取り、それらのクレームをユーザープールディレクトリ内の新しい
ユーザープロファイルにマッピングします。
Amazon Cognito は、フェデレーションユーザーのユーザープロファイルを独自のディレクトリに作成します。Amazon Cognito は、IdP からのクレーム、および OIDCおよびソーシャル ID プロバイ
ダーの場合は IdP が運営するパブリックuserinfoエンドポイントに基づいて、ユーザーに属性を追加します。マッピングされた IdP 属性が変更されると、ユーザーの属性はユーザープール内で変化します。さらに、IdP の属性から独立した属性を追加することもできます。
Amazon Cognito がフェデレーションユーザーのプロファイルを作成すると、その機能が変更され、SP となったアプリに IdP として表示されます。Amazon Cognito は、 OIDCと OAuth 2.0 IdPの組み合わせです。アクセストークン、ID トークン、およびリフレッシュトークンを生成します。
トークンの詳細については、ユーザープールでのトークンの使用 を参照してください。
フェデレーションまたはローカルを問わず、ユーザーを認証して承認するために、Amazon Cognitoと統合するアプリを設計する必要があります。

Amazon Cognito ユーザープールでのフェデレーションサインインの仕組み

509

Amazon Cognito

開発者ガイドAmazon Cognito のサービスプロバイダーとしてのアプリの責任
トークンの情報を検証して処理する
ほとんどのシナリオでは、Amazon Cognito は認証されたユーザーをアプリケーションにリダイレクトしURL、認証コードを追加します。アプリは、アクセス、ID、およびリフレッシュの各
トークンとこのコードを交換します。そして、トークンの有効性を確認し、トークン内のクレームに基づいて、ユーザーに情報を提供する必要があります。
Amazon Cognito APIリクエストによる認証イベントへの応答
アプリは、Amazon Cognito ユーザープールAPIおよび認証APIエンドポイント と統合する必要があります。認証はユーザーをサインインおよびAPIサインアウトし、トークンを管理します。
ユーザープールAPIには、ユーザープール、ユーザー、認証環境のセキュリティを管理するさま
ざまなオペレーションがあります。アプリは。Amazon Cognito からの応答を受信したときに次に何をすべきかを知っている必要があります。

Amazon Cognito ユーザープールサードパーティーサインインについて知っておくべきこと• フェデレーションプロバイダーでユーザーにサインインさせたい場合は、ドメインを選択する必要があります。これにより、Amazon Cognito がホストする UI とホストする UI とOIDCエンドポイ
ント が設定されます。詳細については、「ホストされた UI への独自のドメインの使用」を参照してください。
• InitiateAuth や などのAPIオペレーションでは、フェデレーティッドユーザーにサインインすることはできませんAdminInitiateAuth。フェデレーションユーザーは、ログインエンドポイント または 認可エンドポイント でのみサインインできます。
• 認可エンドポイント はリダイレクションエンドポイントです。リクエストに idp_identifier
または identity_provider パラメータを指定すると、ホストされている UI をバイパスして、表示なしで IdP にリダイレクトされます。それ以外の場合は、ホストされている UI ログインエン
ドポイント にリダイレクトされます。例については、シナリオ例: エンタープライズダッシュボー
ドで Amazon Cognito アプリケーションをブックマークするを参照してください。
• ホストされた UI がセッションをフェデレーション IdP にリダイレクトすると、Amazon Cognito
は、リクエストに user-agentヘッダーAmazon/Cognito を含めます。
• Amazon Cognito は、フェデレーションユーザープロファイルの username 属性を、固定識別子と IdP の名前の組み合わせから派生します。カスタム要件に一致するユーザー名を生成するにAmazon Cognito のサービスプロバイダーとしてのアプリの責任510

Amazon Cognito

開発者ガイドは、preferred_username 属性へのマッピングを作成します。詳細については、「マッピングについて知っておくべきこと」を参照してください。
例: MyIDP_bob@example.com• Amazon Cognito は、フェデレーションユーザーの ID に関する情報を属性および identities と呼ばれる ID トークン内のクレームに記録します。このクレームには、ユーザーのプロバイダーと、プロバイダーからの一意の ID が含まれます。ユーザープロファイル内の identities 属性を直接変更することはできません。フェデレーションユーザーをリンクする方法の詳細について
は、「フェデレーションユーザーを既存のユーザープロファイルにリンクする」を参照してください。
• UpdateIdentityProvider API リクエストで IdP を更新すると、ホストされた UI に変更が表示されるまでに最大 1 分かかる場合があります。
• Amazon Cognito は、それ自体と IdP の間で最大 20 のHTTPリダイレクトをサポートします。
• ユーザーがホストされた UI でサインインすると、ブラウザは暗号化されたログインセッション
Cookie を保存し、サインインに使用したクライアントとプロバイダーを記録します。同じパラメータを使用して再度サインインしようとすると、ホストされた UI は有効期限が切れていない既存のセッションをすべて再利用し、ユーザーが認証情報を再入力せずに認証を行います。ローカル
ユーザープールログインへの切り替えやローカルユーザープールログインからの切り替えなど、ユーザーが別の IdP で再度ログインする場合は、認証情報を入力して新しいログインセッションを生成する必要があります。
任意のユーザープール IdPs を任意のアプリクライアントに割り当てることができ、ユーザーはア
プリクライアントに割り当てた IdP でのみサインインできます。
トピック• ユーザープールの ID プロバイダーの設定• ユーザープールでのソーシャル ID プロバイダーの使用• ユーザープールでの SAML ID プロバイダーの使用• ユーザープールでの OIDC ID プロバイダーの使用• ユーザープールの ID プロバイダー属性マッピングを指定する• フェデレーションユーザーを既存のユーザープロファイルにリンクする

Amazon Cognito ユーザープールサードパーティーサインインについて知っておくべきこと

511

Amazon Cognito

開発者ガイドユーザープールの ID プロバイダーの設定
フェデレーティッド ID プロバイダーのサインインの下のサインインエクスペリエンスタブで、ユーザープールに ID プロバイダー (IdPs) を追加できます。 詳細については、「サードパーティー経由のユーザープールへのサインインの追加」を参照してください。
トピック• ソーシャル IdP でユーザーサインインを設定する• OIDC IdP でユーザーサインインを設定する• SAML IdP でユーザーサインインを設定する

ソーシャル IdP でユーザーサインインを設定する
フェデレーションを使用して、Amazon Cognito のユーザープールを Facebook、Google、Loginwith Amazon などのソーシャル ID プロバイダーと統合することができます。
ソーシャル ID プロバイダーを追加するには、最初に ID プロバイダーでデベロッパーアカウントを作成します。デベロッパーアカウントが作成されたら、アプリを ID プロバイダーに登録します。ID
プロバイダーがアプリ用のアプリ ID とアプリシークレットを作成するので、これらの値を Amazon
Cognito ユーザープールで設定します。
• Google Identity Platform• Facebook for Developers• Login with Amazon• Apple でサインイン
ユーザーサインインとソーシャル IdP を統合するには
1.

Amazon Cognito コンソールにサインインします。プロンプトが表示されたら、AWS 認証情報を入力します。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[Sign-in experience] (サインインエクスペリエンス) タブを選択し、[Federated sign-in] (フェデレーションサインイン) を検索します。

4.

[Add an identity provider] (ID プロバイダーを追加する) を選択、または、設定した[Facebook]、[Google]、[Amazon]、または [Apple] などを選択し、[Identity provider information]

ID プロバイダ

512

Amazon Cognito

開発者ガイド(ID プロバイダー情報) を検索し、[Edit] (編集) をクリックします。ソーシャル ID プロバイダーの追加の詳細については、「ユーザープールでのソーシャル ID プロバイダーの使用」を参照してください。
5.

選択した IdP に基づいて、次のいずれかの手順を実行して、ソーシャル ID プロバイダーの情報を入力します。
Facebook、Google、および Login with Amazon
クライアントアプリを作成したときに受け取ったアプリ ID とアプリシークレットを入力します。
Apple でサインイン
Apple に提供したサービス ID、およびアプリケーションクライアントを作成したときに受け取ったチーム ID、キー ID、プライベートキーを入力します。

6.

[Authorize scopes] (承認スコープ) に、ユーザープール属性にマップするソーシャル ID プロバイダースコープの名前を入力します。スコープは、アプリケーションでアクセスするユーザー属性(名前や E メールなど) を定義します。スコープを入力するときは、選択した IdP に基づいて、次のガイドラインに従ってください。
• Facebook — スコープはカンマで区切ります。例:
public_profile, email• Google、Login with Amazon、Sign in with Apple — スコープをスペースで区切ります。例:• Google: profile email openid• Login with Amazon: profile postal_code• Sign In with Apple: name email
Note
Sign in with Apple (コンソール) の場合は、チェックボックスを使用してスコープを選択します。

7.

[変更の保存] をクリックします。

8.

[App client integration] (アプリケーションクライアント統合) タブで、リストにある [App clients](アプリケーションクライアント) の 1 つを選択して、[Edit hosted UI settings] (ホストされた UI
設定の編集) をクリックします。[Identity providers] (ID プロバイダー) で、新しいソーシャル ID
プロバイダーをアプリケーションクライアントに追加します。

ID プロバイダ

513

Amazon Cognito

9.

開発者ガイド[変更の保存] をクリックします。

ソーシャル の詳細については IdPs、「」を参照してくださいユーザープールでのソーシャル ID プ
ロバイダーの使用。

OIDC IdP でユーザーサインインを設定する
Salesforce や Ping Identity などの OpenID Connect (OIDC) ID プロバイダーとユーザーサインインを統合することができます。
OIDC プロバイダーをユーザープールに追加するには
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力
します。

2.

ナビゲーションメニューから [User Pools] (ユーザープール) を選択します。

3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を検索し、[Add an identity provider] (ID プロバイダーの追加) を選択
します。

5.

[OpenID Connect] (OpenID 接続) ID プロバイダーを選択します。

6.

[Provider name] (プロバイダー名) に一意の名前を入力します。

7.

プロバイダーから受け取ったクライアント ID を、[Client ID] (クライアント ID) へ入力します。

8.

プロバイダーから受け取ったクライアントシークレットを、[Client secret] (クライアントシーク
レット) に入力します。

9.

このプロバイダーの [Authorized scopes] (承認済みスコープ) を入力します。スコープは、アプ
リケーションがプロバイダーにリクエストするユーザー属性のグループ (name および email など) を定義します。OAuth 2.0 仕様に従い、スコープはスペースで区切る必要があります。
ユーザーはこれらの属性をアプリケーションに提供することに同意する必要があります。

10. [Attribute request method] (属性リクエストメソッド) を選択して、プロバイダーが操作する[userInfo] エンドポイントからユーザーの詳細をフェッチするために必要な HTTP メソッド
（GET または POST）を Amazon Cognito に提供します。
11. [Setup method] (セットアップ方法) を選択して、OpenID Connect エンドポイントを、[Autofill through issuer URL] (発行者 URL による自動入力) または [Manual input] (手動入力) で取得します。[Auto fill through issuer URL] (発行者 URL による自動入力) は、Amazon Cognito が
ID プロバイダ

514

Amazon Cognito

開発者ガイドauthorization、token、userInfo、および jwks_uri エンドポイントの URL を取得できるパブリック .well-known/openid-configuration エンドポイントを、プロバイダーが持っている場合に使用します。
12. 発行者の URL、または IdP からの authorization、token、userInfo、および jwks_uri
エンドポイントの URL を入力します。
Note
検出、自動入力、および手動で入力された URL には、ポート番号 443 と 80 のみを使用できます。OIDC プロバイダーが標準外の TCP ポートを使用している場合、ユーザーロ
グインは失敗します。
発行者の URL は https:// で始まる必要があり、/ 文字で終わらせることはできません。例えば、Salesforce では次の URL を使用します。
https://login.salesforce.com
発行者 URL に関連付けられている openid-configuration ド
キュメントには、次の値の HTTPS URL を指定する必要があります:
authorization_endpoint、token_endpoint、userinfo_endpoint、および
jwks_uri。同様に、[Manual input] (手動入力) を選択する場合は、HTTPS URL のみを入力できます。
13. デフォルトで、OIDC クレームの [sub] (サブ) はユーザープール属性の [Username] (ユーザーネーム) にマッピングされます。他の OIDC クレームをユーザープール属性にマッピングできます。OIDC クレームを入力し、対応するユーザープール属性をドロップダウンリストから選択します。例えば、通常、クレームの [email] はユーザープール属性の [E メール] にマッピングされます。
14. ID プロバイダーからユーザープールに追加の属性をマッピングします。詳細は、「ユーザー
プール用 ID プロバイダー属性マッピングの特定」を参照してください。
15. [作成] を選択します。
16. [App client integration] (アプリケーションクライアント統合) タブから、リストにある [Appclients] の 1 つを選択して、[Edit hosted UI settings] (ホストされた UI 設定の編集) をクリックします。[Identity providers] (ID プロバイダー) で、新しい OIDC ID プロバイダーをアプリケーショ
ンクライアントに追加します。
17. [変更の保存] をクリックします。
OIDC の詳細については IdPs、「」を参照してくださいユーザープールでの OIDC ID プロバイダーの使用。
ID プロバイダ

515

Amazon Cognito

開発者ガイドSAML IdP でユーザーサインインを設定する
Amazon Cognito ユーザープールのフェデレーションを使用して、SAML ID プロバイダー (IdP) と統合することができます。メタデータドキュメントを指定します。ファイルをアップロードするか、メ
タデータドキュメントのエンドポイント URL を入力します。サードパーティー SAML のメタデータ
ドキュメントの取得については IdPs、「」を参照してくださいサードパーティー SAML ID プロバイ
ダーの設定。
ユーザープールに SAML 2.0 ID プロバイダーを設定する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力
します。

2.

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

3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を検索し、[Add an identity provider] (ID プロバイダーの追加) を選択
します。

5.

[SAML] ID プロバイダーを選択します。

6.

カンマで区切られた [Identifiers] (識別子) を入力します。識別子は Amazon Cognito に、ユー
ザーのサインイン E メールアドレスを確認し、ドメインに対応するプロバイダーに誘導する必要があることを伝えます。

7.

ユーザーがログアウトしたときに、Amazon Cognito が署名されたサインアウト要求をプ
ロバイダーに送信するためには、[Add sign-out flow] (サインアウトフローの追加) を選択します。SAML 2.0 ID プロバイダーを設定して、ホストされた UI を構成するときに Amazon
Cognito が作成する https://mydomain.us-east-1.amazoncognito.com/saml2/
logout エンドポイントにサインアウト応答を送信します。saml2/logout エンドポイントでは、ポストバインディングを使用します。
Note
このオプションを選択し、SAML ID プロバイダーが署名付きログアウトリクエストを期待する場合は、SAML IdP で Amazon Cognito が提供する署名証明書を設定する必要もあります。
SAML IdP は署名されたログアウトリクエストを処理し、Amazon Cognito セッションからユーザーをログアウトさせます。

ID プロバイダ

516

Amazon Cognito

8.

開発者ガイド[Metadata document source] (メタデータドキュメントソース) を選択します。ID プロバイダー
がパブリック URL で SAML メタデータを提供する場合は、[Metadata document URL] (メタデータドキュメント URL) を選択してそのパブリック URL を入力できます。それ以外の場合
は、[Upload metadata document] (メタデータドキュメントをアップロード) を選択し、プロバイダーから以前ダウンロードしたメタデータファイルを選択します。
Note
プロバイダーにパブリックエンドポイントがある場合は、ファイルをアップロードするのではなく、メタデータドキュメントの URL を入力することをお勧めします。URL を使用する場合、Amazon Cognito はメタデータを自動的に更新します。通常、メタデー
タの更新は 6 時間ごとまたはメタデータの有効期限が切れる前のいずれか早いタイミングで発生します。

9.

[Map attributes between your SAML provider and your app] (SAML プロバイダーとアプリ間で属性をマッピング) をクリックして、SAML プロバイダーの属性をユーザープールのユーザープロ
ファイルにマッピングします。ユーザープールの必須属性を属性マップに含めます。
たとえば、[User pool attribute] (ユーザープール属性) email を選択する場合、ID プロバイダー
からの SAML アサーションに表示される SAML 属性名を入力します。ID プロバイダーは、参考として SAML アサーションのサンプルを提供する場合があります。ID プロバイダーの中には、email などの単純な名前を使用するものもあれば、次のような URL 形式の属性名を使用するものもあります。
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

10. [作成] を選択します。

Note
HTTPS メタデータエンドポイント URL を使用して SAML IdP を作成中にInvalidParameterException が表示される場合、メタデータエンドポイントの SSL
が正しくセットアップされていること、および有効な SSL 証明書が関連付けられていることを確認してください。このような例外の例として、「Error retrieving metadata from<metadata endpoint>」が挙げられます。

ID プロバイダ

517

Amazon Cognito

開発者ガイド

署名証明書を追加するために SAML IdP をセットアップする• 署名付きログアウトリクエストを検証するために IdP が使用するパブリックキーを含む証明書を取得するには、[フェデレーション] コンソールページの [ID プロバイダー] にある [SAML] ダイア
ログで [アクティブな SAML プロバイダー] の [デジタル署名用証明書の表示] を選択します。
SAML の詳細については、 IdPs 「」を参照してくださいユーザープールでの SAML ID プロバイダーの使用。

ユーザープールでのソーシャル ID プロバイダーの使用
ウェブおよびモバイルアプリのユーザーは、Facebook、Google、Amazon、Apple などのソーシャ
ル ID プロバイダー (IdP) 経由でサインインできます。組み込みの Hosted Web UI では、Amazon
Cognito がすべての認証済みユーザーに関するトークンの処理と管理を提供します。このように、バックエンドシステムは 1 セットのユーザープールトークンで標準化できます。サポートされているソーシャル ID プロバイダーと統合するには、ホストされた UI を有効にする必要があります。Amazon Cognito がホストされた UI を構築すると、Amazon Cognito OAuth と OIDCおよびソーシャルが情報の交換 IdPs に使用する 2.0 エンドポイントが作成されます。詳細について
は、Amazon Cognito ユーザープール認証APIリファレンス」を参照してください。
ソーシャル IdP を に追加するか AWS Management Console、 または Amazon Cognito を使用でき
ます AWS CLIAPI。

Note
サードパーティー (フェデレーション) 経由のサインインは、Amazon Cognito のユーザー
プールで使用できます。この機能は、Amazon Cognito ID プール (フェデレーティッド ID) 経
由のフェデレーションとは無関係です。

トピック• 前提条件• ステップ 1: ソーシャル IdP に登録する
ソーシャル ID プロバイダー

518

Amazon Cognito

開発者ガイド• ステップ 2: ユーザープールにソーシャル IdP を追加する• ステップ 3: ソーシャル IdP の設定をテストする

前提条件
開始するには、以下が必要です。
• アプリケーションクライアントとユーザープールドメインを使用するユーザープール。詳細については、「ユーザープールの作成」を参照してください。
• ソーシャル IdP。

ステップ 1: ソーシャル IdP に登録する
Amazon Cognito でソーシャル IdP を作成する前に、アプリケーションをソーシャル IdP に登録して、クライアント ID とクライアントシークレットを取得する必要があります。
アプリケーションを Facebook に登録する
1.

Facebook の開発者アカウントを作成します。

2.

Facebook 認証情報を使用してサインインします。

3.

[My Apps] (マイアプリ) メニューから、[新しいアプリを作成] (新しいアプリを作成) を選択します。

4.

Facebook アプリケーションの名前を入力し、[Create App ID] (アプリケーション ID の作成) を選択します。

5.

左のナビゲーションバーで、[設定]、[ベーシック] の順に選択します。

6.

[App ID] (アプリ ID)] と [App Secret (アプリシークレット) を書き留めます。これらは次のセクションで使用します。

7.

ページの下部で、[+ プラットフォームを追加] を選択します。

8.

[Website] (ウェブサイト) を選択します。

9.

ウェブサイト で、アプリのサインインページへのパスをサイト URLに入力します。

https://mydomain.us-east-1.amazoncognito.com/login?
response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com

10. [Save changes] (変更の保存) をクリックします。
ソーシャル ID プロバイダー

519

Amazon Cognito

開発者ガイド11. ユーザープールドメインのルートへのパスを [App Domains] (アプリケーションドメイン) に入力します。
https://mydomain.us-east-1.amazoncognito.com

12. [Save changes] (変更の保存) をクリックします。
13. ナビゲーションバーで [Add Product] (プロダクトの追加) を選択し、[Facebook Login](Facebook ログイン) の [Set up] (設定) を選択します。
14. ナビゲーションバーで [Facebook ログイン]、[設定] の順に選択します。
ユーザープールドメインの/oauth2/idpresponseエンドポイントへのパスを有効なOAuthリ
ダイレクト URIsに入力します。

https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse

15. [Save changes] (変更の保存) をクリックします。
アプリケーションを Amazon に登録する
1.

Amazon の開発者アカウントを作成します。

2.

Amazon 認証情報を使用してサインインします。

3.

Amazon クライアント ID およびクライアントシークレットを受け取るには、Amazon セキュリ
ティプロファイルを作成する必要があります。
ページの上部にあるナビゲーションバーで [Apps and Services (アプリとサービス)] を選択し、[Login with Amazon] を選択します。

4.

[Create a New Security Profile (新しいセキュリティプロファイルの作成)] を選択します。

5.

セキュリティプロファイル名 、セキュリティプロファイルの説明 、およびプライバシー通知
URLを入力します。

6.

[Save] を選択します。

7.

[クライアント ID] および [クライアントシークレット] を選択して、クライアント ID およびシー
クレットを表示します。これらは次のセクションで使用します。

8.

歯車アイコンにマウスカーソルを合わせ、[Web Settings] (ウェブ設定)、[Edit] (編集) の順に選択
します。

9.

[Allowed Origins] (許可されたオリジン) にユーザープールのドメインを入力します。

ソーシャル ID プロバイダー

520

Amazon Cognito

開発者ガイドhttps://mydomain.us-east-1.amazoncognito.com

10. /oauth2/idpresponse エンドポイントを持つユーザープールドメインを「許可されたリター
ンURLs」に入力します。
https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse

11. [Save] を選択します。
アプリケーションを Google に登録する
Google クラウドプラットフォームOAuthの 2.0 の詳細については、Google Workspace forDevelopers ドキュメントの「認証と認可について」を参照してください。
1.

Google の開発者アカウントを作成します。

2.

Google Cloud Platform コンソールにサインインします。

3.

上部のナビゲーションバーから、[Select a project] (プロジェクトの選択) を選択します。Google
プラットフォームにプロジェクトが既にある場合は、このメニューには代わりにデフォルトのプ
ロジェクトが表示されます。

4.

を選択しますNEWPROJECT。

5.

製品の名前を入力し、 を選択しますCREATE。

6.

左側のナビゲーションバーで、APIs「サービス」、「認証同意画面」を選択します。

7.

アプリ情報、[App domain] (アプリドメイン)、[Authorized domains] (承認済みドメイン)、[Developer contact information] (開発者の連絡先情報) を入力します。[Authorizeddomains] (承認済みドメイン) には、amazoncognito.com とカスタムドメインのルート (例:example.com) を含める必要があります。SAVE AND を選択しますCONTINUE。

8.

1. 「スコープ」で「スコープを追加または削除」を選択し、少なくとも次のOAuthスコープを選択します。
1. .../auth/userinfo.email
2. .../auth/userinfo.profile
3. openid

9.

[Test users] (テストユーザー) で、[Add users] (ユーザーの追加) を選択します。E メールアドレ
スと他の認証されたテストユーザーを入力し、 SAVE AND CONTINUEを選択します。

10. 左のナビゲーションバーを再度展開し、APIs「サービス」、「認証情報」を選択します。
ソーシャル ID プロバイダー

521

Amazon Cognito

開発者ガイド11. を選択しCREATECREDENTIALS、次にOAuthクライアント ID を選択します。
12. [Application type] (アプリケーションタイプ) を選択し、クライアントに [Name] (名前) を入力します。
13. 「許可された JavaScript オリジン」で、ADDURI「」を選択します。ユーザープールのドメインを入力します。
https://mydomain.us-east-1.amazoncognito.com

14. 「許可されたリダイレクトURIs」で、ADDURI「」を選択します。ユーザープールのドメインの /oauth2/idpresponse エンドポイントへのパスを入力します。
https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse

15. を選択しますCREATE。
16. [Your client ID] (クライアント ID) と [Your client secret] (クライアントシークレット) の下に
Google が表示する値を安全に保存します。Google IdP を追加するときに、Amazon Cognito に
これらの値を指定します。
アプリケーションを Apple に登録する「Apple でサインイン」の設定 up-to-date の詳細については、Apple デベロッパードキュメントの「Apple でサインインするための環境の設定」を参照してください。 https://developer.apple.com/
documentation/sign_in_with_apple/configuring_your_environment_for_sign_in_with_apple
1.

Apple の開発者アカウントを作成します。

2.

Apple 認証情報を使用してサインインします。

3.

左のナビゲーションバーで、[Certificates, Identifiers & Profiles] (証明書、ID & プロファイル) を選択します。

4.

左のナビゲーションペインで、[Identifiers] (識別子) を選択します。

5.

[Identifiers] (識別子) ページで、[+] アイコンを選択します。

6.

「新しい識別子の登録」ページで「アプリIDs」を選択し、「続行」を選択します。

7.

[Select a type] (種類の選択) ページで、[App] (アプリ) を選択し、[Continue] (続行) を選択します。

8.

[Register an App ID] ページで、次の操作を行います。
1. [Description] (説明) で、説明を入力します。

ソーシャル ID プロバイダー

522

Amazon Cognito

開発者ガイド2. [App ID Prefix] (アプリ ID プレフィックス) に、[Bundle ID] (バンドル ID) を入力します。[AppID Prefix] (アプリケーション ID プレフィックス) にある値を書き留めておきます。この値
は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択した後で使用します。
3. [Capabilities] (機能) で、[Sign In with Apple] (Apple でサインイン) を選択してから [Edit] (編集) を選択します。
4. 「Apple でサインイン: アプリ ID 設定」ページで、アプリをプライマリとして設定するか、他のアプリ とグループ化して設定するかを選択しIDs、「保存」を選択します。
5. [Continue]（続行） を選択します。
9.

[Confirm your App ID] ページで、[登録] を選択します。

10. [Identifiers] (識別子) ページで、[+] アイコンを選択します。
11. 「新しい識別子の登録」ページで「サービスIDs」を選択し、「続行」を選択します。
12. [Register a Services ID] ページで、次の操作を行います。
1. [説明] に、説明を入力します。
2. [Identifier] に、識別子を入力します。このサービス ID をメモしておきます。この値は、ス
テップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダーとして選択した後で必要になります。
3. [Continue] (続行) を選択し、[Register] (登録) を選択します。
13. [Identifiers] (識別子) ページから、先ほど作成した [Services ID] (サービス ID) を選択します。
1. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。
2. [Web Authentication Configuration] (ウェブ認証の設定) ページで、[Primary App ID] (プライマ
リアプリ ID) として前に作成したアプリ ID を選択します。
3. ウェブサイト URLsの横にある ＋ アイコンを選択します。
4. [Domains and subdomains] (ドメインとサブドメイン) で、https:// プレフィックスなしでユーザープールのドメインを入力します。
mydomain.us-east-1.amazoncognito.com

5. を返す URLsに、ユーザープールドメインの/oauth2/idpresponseエンドポイントへのパスを入力します。
https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse
ソーシャル ID プロバイダー

523

Amazon Cognito

開発者ガイド6. [Next] (次へ) を選択し、[Done] (完了) を選択します。ドメインを検証する必要はありません。
7. [Continue] (続行) を選択し、次に [Save] (保存) を選択します。
14. 左のナビゲーションペインで [Keys] (キー) を選択します。
15. [Keys (キー)] ページで、[+] アイコンを選択します。
16. [Register a New Key] ページで、次の操作を行います。
1. [Key Name] (キー名) に、キー名を入力します。
2. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。
3. [Configure Key] (キーの設定) ページで、プライマリアプリ ID として前に作成したアプリ ID
を選択します。[Save] を選択します。
4. [Continue] (続行) を選択し、[Register] (登録) を選択します。
17. [Download Your Key] (鍵のダウンロード) ページで、[Download] (ダウンロード) をクリックしてプライベートキーをダウンロードしてから、表示される [Key ID] (キー ID) を書き留め、[Done](完了) を選択します。このプライベートキーと、このページに表示されている [Key ID] (キー ID)の値は、ステップ 2: ユーザープールにソーシャル IdP を追加する で Apple を ID プロバイダー
として選択した後で必要になります。

ステップ 2: ユーザープールにソーシャル IdP を追加するを使用してユーザープールのソーシャル IdP を設定するには AWS Management Console
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を探し、[Add an identity provider] (ID プロバイダーを追加する) を選
択します。

5.

ソーシャル IdP ([Facebook]、[Google]、[Login with Amazon]、[Sign in with Apple]) を選択します。

6.

ソーシャル IdP の選択に基づいて、次のステップから選択します。

ソーシャル ID プロバイダー

524

Amazon Cognito

開発者ガイド• Google と Login with Amazon (Amazon でのログイン) — 前のセクションで生成された [appclient ID] (アプリケーションクライアント ID) と [app client secret] (アプリケーションクライ
アントシークレット) を入力します。
• Facebook — 前のセクションで生成されたアプリクライアント ID とアプリクライアントシー
クレットを入力し、APIバージョン (バージョン 2.12 など) を選択します。各 Facebook には
ライフサイクルと廃止日APIがあるため、可能な最新バージョンを選択することをお勧めします。Facebook のスコープと属性はAPIバージョンによって異なる場合があります。Facebook
でソーシャル ID ログインをテストして、フェデレーションが意図したとおりに機能することを確認することをお勧めします。
• Sign In with Apple (Apple でのサインイン) — 以前のセクションで作成された [Services ID](サービス ID)、[Team ID] (チーム ID)、[Key ID] (キー ID) および [private key] プライベート
キーを入力します。
7.

使用したい [Authorized scopes] (承認するスコープ) の名前を入力します。スコープは、アプリ
でアクセスするユーザー属性 (name や email など) を定義します。Facebook の場合は、コン
マで区切る必要があります。Google および Login with Amazon の場合は、スペースで区切って指定します。Sign in with Apple の場合は、アクセスするスコープのチェックボックスをオンにします。
ソーシャル ID プロバイダー

スコープ例

Facebook

public_profile, email

Googleprofile email openid

Login with Amazon

profile postal_code

Apple でのサインイン

email nameアプリケーションユーザーは、これらの属性をアプリケーションに提供することに同意するよう求められます。ソーシャルプロバイダーのスコープの詳細について
は、Google、Facebook、Login with Amazon、および Sign in with Apple のドキュメントを参照
してください。
以下は、Sign in with Apple の場合にスコープが返らない可能性があるユーザーシナリオです。

ソーシャル ID プロバイダー

525

Amazon Cognito

開発者ガイド• エンドユーザーが Apple のサインインページを離れるとエラーが発生する (Amazon Cognitoの内部障害またはデベロッパーが記述したプログラムが原因である可能性があります)• サービス ID 識別子がユーザープールや他の認証サービス全体で使用されている• エンドユーザーが以前にサインインしてから、デベロッパーによってさらにスコープが追加されている (新しい情報は取得されません)• デベロッパーによって削除されたユーザーが Apple ID プロファイルからアプリを削除せずに再度サインインしている
8.

IdP からユーザープールに属性をマッピングします。詳細は、「ユーザープール用 ID プロバイ
ダー属性マッピングの特定」を参照してください。

9.

[Create] (作成) を選択します。

10. [App client integration] (アプリケーションクライアント統合) タブから、[App clients] (アプリ
ケーションクライアント) のリストより 1 つ選択して、[Edit hosted UI settings] (ホストされた
UI 設定の編集) をクリックします。[Identity providers] (ID プロバイダー) で、新しいソーシャル
IdP をアプリクライアントに追加します。
11. [Save changes] (変更の保存) をクリックします。

ステップ 3: ソーシャル IdP の設定をテストする
前の 2 つのセクションの要素URLを使用してログインを作成できます。この URL を使用してソー
シャル IdP の設定をテストします。

https://mydomain.us-east-1.amazoncognito.com/login?
response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com

ドメインは、コンソールにあるユーザープールの [ドメイン名] ページで確認できます。クライアン
ト ID は [アプリクライアントの設定] ページにあります。redirect_uri パラメータURLにコールバックを使用します。これは、認証URLが成功した後にユーザーがリダイレクトされるページの です。
Note
Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ホストされた UIにユーザーをリダイレクトします。ページには、Something went wrong というエラー
メッセージが表示されます。

ソーシャル ID プロバイダー

526

Amazon Cognito

開発者ガイドユーザープールでの SAML ID プロバイダーの使用
Microsoft Active Directory フェデレーションサービス () や Shibboleth などの SAML ID プロバイダー (IdP) を介してウェブおよびモバイルアプリのユーザーにサインインさせることができます。
ADFS2SAML.0 標準 をサポートする IdP を選択する必要があります。 SAML
ホストされた UI とフェデレーションエンドポイントを使用すると、Amazon Cognito はローカルおよびサードパーティーの IdP ユーザーを認証し、JSONウェブトークン () を発行します
JWTs。Amazon Cognito が発行するトークンを使用すると、複数の ID ソースをすべてのアプリで共通の OpenID Connect (OIDC) 標準に統合できます。Amazon Cognito は、サードパーティープロバ
イダーからのSAMLアサーションをそのSSO標準に処理できます。SAML IdP は AWS Management
Console、、、 AWS CLIまたは Amazon Cognito ユーザープール で作成および管理できますAPI。
で最初の SAMLIdP を作成するには AWS Management Console、「」を参照してくださいユーザー
プールでの SAML ID プロバイダーの追加と管理。

SAML プロバイダー

527

Amazon Cognito

開発者ガイドNote
サードパーティーの IdP を介したサインインによるフェデレーションは、Amazon Cognito
ユーザープールの機能です。Amazon Cognito フェデレーティッド ID と呼ばれる Amazon
Cognito ID プールは、フェデレーションの実装であり、各 ID プールで個別に設定する必要

SAML プロバイダー

528

Amazon Cognito

開発者ガイドがあります。ユーザープールは、ID プールへのサードパーティー IdP にすることができます。詳細については、「Amazon Cognito アイデンティティプール」を参照してください。

IdP 設定のクイックリファレンス
リクエストを受け入れ、ユーザープールにレスポンスを送信するように SAML IdP を設定する必要があります。IdP のドキュメントには、ユーザープールを 2SAML.0 IdP SAML の証明書利用者またはアプリケーションとして追加する方法に関する情報が含まれています。以下のドキュメントでは、SP エンティティ ID とアサーションコンシューマーサービス (ACS) に指定する必要がある値を示しますURL。
ユーザープールSAML値のクイックリファレンス
SP エンティティ ID
urn:amazon:cognito:sp:us-east-1_EXAMPLEACS URL
https://Your user pool domain/saml2/idpresponse

ID プロバイダーをサポートするようにユーザープールを設定する必要があります。外部 IdP SAMLを追加する大まかな手順は次のとおりです。
1. IdP からSAMLメタデータをダウンロードするか、メタデータエンドポイントURLに を取得します。 IdP 「サードパーティー SAML ID プロバイダーの設定」を参照してください。
2. ユーザープールに新しい IdP を追加します。SAML メタデータをアップロードするか、メタデー
タ を指定しますURL。「ユーザープールでの SAML ID プロバイダーの追加と管理」を参照してください。
3. アプリクライアントに IdP を割り当てます。「ユーザープールアプリクライアント」を参照して
ください。
トピック
• Amazon Cognito ユーザープールSAML IdPs の について知っておくべきこと• SAML ユーザー名の大文字と小文字の区別
SAML プロバイダー

529

Amazon Cognito

開発者ガイド• ユーザープールでの SAML ID プロバイダーの追加と管理• SAML Amazon Cognito ユーザープールでの セッション開始• SP 開始SAMLサインインの使用• IdP によるSAMLサインインの使用• SAML サインアウトフロー• SAML 署名と暗号化• SAML ID プロバイダー名と識別子• サードパーティー SAML ID プロバイダーの設定

Amazon Cognito ユーザープールSAML IdPs の について知っておくべきこと
Amazon Cognito がSAMLアサーションを処理する
Amazon Cognito ユーザープールはSAML、 POSTバインディングエンドポイントによる 2.0 フェ
デレーションをサポートしています。これにより、ユーザープールはユーザーエージェントを介して IdP から直接レスポンスを受け取るため、アプリがSAMLアサーションSAMLレスポンスを取得または解析する必要がなくなります。ユーザープールはアプリケーションのためのサービ
スプロバイダー (SP) として機能します。Amazon Cognito は、SAMLV2.0 技術概要 のセクショ
ン 5.1.2 および 5.1.4 で説明されているように、SP 開始および IdP 開始のシングルサインオン(SSO) をサポートしています。
有効な IdP 署名証明書を提供する
ユーザープールで IdP SAML を設定するときに、SAMLプロバイダーメタデータの署名証明書の有効期限が切れないようにしてください。
ユーザープールが複数の署名証明書をサポート
SAML IdP にSAMLメタデータに複数の署名証明書が含まれている場合、サインイン時にユーザー
プールは、SAMLアサーションがSAMLメタデータ内の証明書と一致する場合に有効であると判断します。各署名証明書の長さは 4,096 文字以下にする必要があります。
リレーステートパラメータを維持する
Amazon Cognito と IdP SAML は、 relayStateパラメータを使用してセッション情報を維持します。
1. Amazon Cognito は、80 バイトを超える relayState 値をサポートします。SAML 仕様では、relayState値が「長さが 80 バイトを超えないようにする必要があります」と記載されSAML プロバイダー

530

Amazon Cognito

開発者ガイドていますが、現在の業界慣行では、この動作から逸脱することがよくあります。その結果、80バイトを超えるrelayState値を拒否すると、多くの標準SAMLプロバイダー統合が中断されます。
2. relayState トークンは、Amazon Cognito によって維持される状態情報への不透明な参照です。Amazon Cognito は relayState パラメータの内容を保証しません。その内容を解析してアプリケーションでその結果に依存することは避けてください。詳細について
は、SAML「 2.0 仕様」を参照してください。
ACS エンドポイントを特定する
SAML ID プロバイダーでは、アサーションコンシューマーエンドポイントを設定する必要があります。IdP は、アSAMLサーションを使用してユーザーをこのエンドポイントにリダイレクトしま
す。SAML ID プロバイダーの 2.0 SAML POSTバインディング用に、ユーザープールドメインで次のエンドポイントを設定します。
https://Your user pool domain/saml2/idpresponse
With an Amazon Cognito domain:
https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponse
With a custom domain:
https://auth.example.com/saml2/idpresponse

ユーザープールドメインの詳細については、「ユーザープールのドメインを設定する」を参照してください。
アサーションが再生されない
Amazon Cognito saml2/idpresponseエンドポイントへのSAMLアサーションを繰り返したり、再生したりすることはできません。リプレイされたSAMLアサーションには、以前の IdP レ
スポンスの ID を複製するアサーション ID があります。
ユーザープール ID は SP エンティティ ID です
オーディエンスURIまたは SP エンティティ ID とも呼ばれるサービスプロバイダー (SP) のユー
ザープール ID を urnIdP に提供する必要があります。 ユーザープールURIの対象者の形式は次のとおりです。
urn:amazon:cognito:sp:us-east-1_EXAMPLE

ユーザープール ID は、Amazon Cognito コンソールのユーザープールの概要にあります。
SAML プロバイダー

531

Amazon Cognito

開発者ガイド必要な属性をすべてマッピングする
ユーザープールで必要に応じて設定した属性の値を指定するように SAMLIdP を設定します。例
えば、email はユーザープールの一般的な必須属性です。ユーザーがサインインする前に、IdP
SAML アサーションにユーザープール属性 にマッピングするクレームが含まれている必要があ
りますemail。属性のマッピングの詳細については、「ユーザープールの ID プロバイダー属性
マッピングを指定する」を参照してください。
アサーション形式には特定の要件があります
IdP SAML は、SAMLアサーションに次のクレームを含める必要があります。
• NameID クレーム。Amazon Cognito は、 SAML によってアサーションを送信先ユーザーに関連付けますNameID。NameID 変更した場合、Amazon Cognito はアサーションを新しいユーザー用と見なします。IdP 設定NameIDで に設定する属性には、永続的な値が必要です。SAML
ユーザープール内の一貫したユーザープロファイルにユーザーを割り当てるには、変更されない値を持つ属性からNameIDクレームを割り当てます。
<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:persistent">
carlos</saml2:NameID>

Format の IdP NameIDクレームの は、IdP が変更されない値を渡しているurn:oasis:names:tc:SAML:1.1:nameid-format:persistentことを示します。Amazon Cognito はこの形式の宣言を必要とせず、IdP がNameIDクレームの形式を指定urn:oasis:names:tc:SAML:1.1:nameid-format:unspecifiedしない場合、 の形式を割り当てます。この動作は、2.0 仕様 のセクション 2.2.2 複合タイプ NameIDType に準拠しています。 SAML
• ユーザープールの SP エンティティ ID をレスポンスのターゲットとして設定する値
Audience を含む AudienceRestriction クレーム。
<saml:AudienceRestriction><saml:Audience> urn:amazon:cognito:sp:us-east-1_EXAMPLE</saml:AudienceRestriction>• SP 開始のシングルサインオンの場合、元のSAMLリクエスト ID InResponseToの値を持つ
Response要素。
<saml2p:Response Destination="https://mydomain.us-east-1.amazoncognito.com/
saml2/idpresponse" ID="id123" InResponseTo="_dd0a3436-bc64-4679SAML プロバイダー

532

Amazon Cognito

開発者ガイドa0c2-cb4454f04184" IssueInstant="Date-time stamp" Version="2.0"
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://
www.w3.org/2001/XMLSchema">

Note
IdP が開始するSAMLアサーションにInResponseTo値を含めることはできません。
• ユーザープールsaml2/idpresponseエンドポイントRecipientの値を持
つSubjectConfirmationData要素、および SP 開始の の場合はSAML、元のSAMLリクエス
ト ID に一致するInResponseTo値。
<saml2:SubjectConfirmationData InResponseTo="_dd0a3436-bc64-4679-a0c2cb4454f04184" NotOnOrAfter="Date-time stamp" Recipient="https://mydomain.useast-1.amazoncognito.com/saml2/idpresponse"/>

SP が開始するサインインリクエストがユーザーを IdP サインインページに認可エンドポイントリダイレクトすると、Amazon Cognito
はSAMLリクエストの URLパラメータにHTTP GETリクエストを含めます。SAML リクエストには、ACSエンドポイントを含むユーザープールに関する情報が含まれます。オプションで、これらのリクエストに暗号化署名を適用できます。
リクエストに署名してレスポンスを暗号化する
SAML プロバイダーを持つすべてのユーザープールは、Amazon Cognito がSAMLリクエストに割り当てるデジタル署名の非対称キーペアと署名証明書を生成します。暗号化されたSAMLレス
ポンスをサポートするように設定したすべての外部 SAML IdP により、Amazon Cognito はそのプロバイダーの新しいキーペアと暗号化証明書を生成します。パブリックキーを使用して証明書を表示およびダウンロードするには、Amazon Cognito コンソールのサインインエクスペリエン
スタブで IdP を選択します。
ユーザープールからのSAMLリクエストとの信頼を確立するには、ユーザープール 2.0 署名証明書のコピーを IdP SAML に提供します。署名付きSAMLリクエストを受け入れるように IdP を設定しない場合、IdP はユーザープールが署名したリクエストを無視することがあります。
1. Amazon Cognito は、ユーザーが IdP に渡すSAMLリクエストにデジタル署名を適用します。
ユーザープールはすべての単一のログアウト (SLO) リクエストに署名し、SAML外部 IdP のシングルサインオン (SSO) リクエストに署名するようにユーザープールを設定できます。証明書のコピーを提供すると、IdP はユーザーのSAMLリクエストの整合性を検証できます。
SAML プロバイダー

533

Amazon Cognito

開発者ガイド2. IdP SAML は、暗号化証明書を使用してSAMLレスポンスを暗号化できます。SAML 暗号化を使用して IdP を設定する場合、IdP は暗号化されたレスポンスのみを送信する必要があります。
英数字以外の文字をエンコードする
Amazon Cognito は、IdP #が属性値として渡す #や などの 4 バイト UTF-8 文字を受け入れません。文字を Base 64 にエンコードしてテキストとして渡し、アプリでデコードできます。
次の例では、属性のクレームは受け付けられません。
<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrnameformat:unspecified"><saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:string">#</saml2:AttributeValue></saml2:Attribute>

上記の例とは対照的に、次の属性のクレームは受け付けられます。
<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrnameformat:unspecified"><saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:string">8J+YkA==</saml2:AttributeValue></saml2:Attribute>

メタデータエンドポイントには有効なトランスポートレイヤーセキュリティが必要です
HTTPS メタデータエンドポイント を使用して SAML IdP を作成す
るInvalidParameterExceptionときにURL「 からのメタデータの取得エラー」と表示される場合 <metadata endpoint>、「 メタデータエンドポイントSSLが正しく設定され、有効なSSL証明書が関連付けられていることを確認してください。証明書の検証の詳細については、「SSL/TLS Certificate とは」を参照してください。
IdP が開始するアプリクライアントは、 でのみサインインSAMLできます SAML
アプリクライアントで IdP SAML 開始サインインをサポートする 2.0 IdP のサポートをアクティ
ブ化する場合、そのアプリクライアント IdPs に追加できるのは他の SAML 2.0 のみです。この方法で設定されたアプリケーションクライアントにユーザープールとすべての外部SAML ID プロバ
イダーにユーザーディレクトリを追加することはできません。

SAML プロバイダー

534

Amazon Cognito

開発者ガイドログアウトレスポンスにはPOSTバインディングを使用する必要があります/saml2/logout エンドポイントは をHTTP POSTリクエストLogoutResponseとして受け入れます。ユーザープールは、バHTTP GETインディングによるログアウトレスポンスを受け入れません。

SAML ユーザー名の大文字と小文字の区別
フェデレーティッドユーザーがサインインしようとすると、SAMLID プロバイダー (IdP) はユー
ザーのSAMLアサーションで Amazon Cognito NameIdに一意の を渡します。Amazon Cognito は、
SAMLフェデレーティッドユーザーを NameId クレームで識別します。ユーザープールの大文字と小文字を区別する設定に関係なく、Amazon Cognito は、一意の大文字と小文字を区別するNameIdク
レームを渡すと、IdP SAML から返されるフェデレーティッドユーザーを認識します。email のような属性を NameId にマッピングし、ユーザーが E メールアドレスを変更すると、アプリケーショ
ンにサインインできません。
変更されない値を持つ IdP 属性からSAMLアサーションをマッピングNameIdします。
例えば、Carlos には、 NameIdの値に渡された Active Directory フェデレーションサービス (ADFS)
SAMLアサーションからの大文字と小文字を区別しないユーザープールにユーザープロファイルがありますCarlos@example.com。Carlos が次回サインインを試みると、IdP ADFS は のNameId値を渡しますcarlos@example.com。NameId は大文字と小文字が完全に一致する必要があるため、サ
インインは成功しません。
NameID を変更した後、ユーザーがログインできない場合は、ユーザープールからそのユーザーのプ
ロファイルを削除してください。Amazon Cognito は、次回サインインしたときに新しいユーザープ
ロファイルを作成します。
トピック• ユーザープールでの SAML ID プロバイダーの追加と管理• SAML Amazon Cognito ユーザープールでの セッション開始• SP 開始SAMLサインインの使用• IdP によるSAMLサインインの使用• SAML サインアウトフロー• SAML 署名と暗号化• SAML ID プロバイダー名と識別子
SAML プロバイダー

535

Amazon Cognito

開発者ガイド• サードパーティー SAML ID プロバイダーの設定

ユーザープールでの SAML ID プロバイダーの追加と管理
次の手順は、Amazon Cognito ユーザープールでSAMLプロバイダーを作成、変更、削除する方法を示しています。
AWS Management Consoleを使用して AWS Management Console 、SAMLID プロバイダー () を作成および削除できます
IdPs。
IdP を作成する前に、サードパーティーSAMLの IdP から取得したSAMLメタデータドキュメントが必要です。必要なSAMLメタデータドキュメントを取得または生成する方法については、「」
を参照してくださいサードパーティー SAML ID プロバイダーの設定。
ユーザープールで SAML 2.0 IdP を設定するには
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入
力します。

2.

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

3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in](フェデレーションサインイン) を探し、[Add an identity provider] (ID プロバイダーの追加) を選択します。

5.

SAML IdP を選択します。

6.

プロバイダー名 を入力します。このフレンドリ名は、 identity_providerリクエストパ
ラメータで に渡すことができます認可エンドポイント。

7.

カンマで区切られた [Identifiers] (識別子) を入力します。識別子は Amazon Cognito に、ユーザーがサインインしたときに入力したメールアドレスを確認し、ドメインに対応するプロバ
イダーに誘導する必要があることを伝えます。

8.

ユーザーがログアウトしたときに、Amazon Cognito が署名されたサインアウト要求をプ
ロバイダーに送信するためには、[Add sign-out flow] (サインアウトフローの追加) を選択します。ホストされた UI SAML を設定するときに作成されるhttps://mydomain.useast-1.amazoncognito.com/saml2/logoutエンドポイントにサインアウトレスポン
スを送信するように 2.0 IdP を設定する必要があります。saml2/logout エンドポイントは
POSTバインディングを使用します。

SAML プロバイダー

536

Amazon Cognito

開発者ガイド

Note
このオプションが選択されていて、IdP SAML が署名付きログアウトリクエストを想定している場合は、ユーザープールの署名証明書も IdP SAML に提供する必要があります。
SAML IdP は署名付きログアウトリクエストを処理し、Amazon Cognito セッションからユーザーをサインアウトします。
9.

IdP が開始するSAMLサインイン設定を選択します。セキュリティのベストプラクティスとして、SP 開始SAMLアサーションのみを受け入れるを選択します。未承諾のSAMLサイン
インセッションを安全に受け入れるように環境を準備している場合は、SP 開始および IdP
開始SAMLのアサーションを受け入れる を選択します。詳細については、「SAML Amazon
Cognito ユーザープールでの セッション開始」を参照してください。

10. [Metadata document source] (メタデータドキュメントソース) を選択します。IdP がパブリック でSAMLメタデータを提供する場合はURL、メタデータドキュメントURLを選択し、そのパブリック を入力できますURL。それ以外の場合は、[Upload metadata document] (メタデータドキュメントをアップロード) を選択し、プロバイダーから以前ダウンロードした
メタデータファイルを選択します。
Note
ファイルをアップロードするのではなく、プロバイダーにパブリックエンドポ
イントURLがある場合は、メタデータドキュメントを入力することをお勧めします。Amazon Cognito は、メタデータ からメタデータを自動的に更新しますURL。通常、メタデータの更新は 6 時間ごとまたはメタデータの有効期限が切れる前のいず
れか早いタイミングで発生します。
11. SAML プロバイダーとユーザープールの間で属性をマッピングして、SAMLプロバイダー属
性をユーザープールのユーザープロファイルにマッピングします。ユーザープールの必須属
性を属性マップに含めます。
例えば、ユーザープール属性 を選択した場合はemail、IdP からのSAMLアサーションに表示されるSAML属性名を入力します。IdP がサンプルSAMLアサーションを提供している場合
は、これらのサンプルアサーションを使用して名前を見つけることができます。などの単純な名前 IdPs を使用するものもあればemail、次のような名前を使用するものもあります。

SAML プロバイダー

537

Amazon Cognito

開発者ガイドhttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

12. [Create] (作成) を選択します。
API/CLIID SAMLプロバイダー (IdP) を作成および管理するには、次のコマンドを使用します。
IdP を作成し、メタデータドキュメントをアップロードする• AWS CLI: aws cognito-idp create-identity-provider
メタデータファイルの例: aws cognito-idp create-identity-provider --userpool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --providertype SAML --provider-details file:///details.json --attributemapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/
emailaddress
ここでは details.json に以下が含まれます。
"ProviderDetails": {"MetadataFile": "<SAML metadata XML>","IDPSignout" : "true","RequestSigningAlgorithm" : "rsa-sha256","EncryptedResponses" : "true","IDPInit" : "true"}

Note
そのファイルに <SAML metadata XML> には文字 のインスタンスが含まれています。エスケープ文字\として を追加"する必要があります\"。

メタデータ の例URL: aws cognito-idp create-identity-provider --user-poolid us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type
SAML --provider-details MetadataURL=https://myidp.example.com/sso/

SAML プロバイダー

538

Amazon Cognito

開発者ガイドsaml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/
ws/2005/05/identity/claims/emailaddress• AWS API: CreateIdentityProvider
IdP の新規メタデータドキュメントをアップロードする• AWS CLI: aws cognito-idp update-identity-provider
メタデータファイルの例: aws cognito-idp update-identity-provider --userpool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --providerdetails file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
ここでは details.json に以下が含まれます。
"ProviderDetails": {"MetadataFile": "<SAML metadata XML>","IDPSignout" : "true","RequestSigningAlgorithm" : "rsa-sha256","EncryptedResponses" : "true","IDPInit" : "true"}

Note
そのファイルに <SAML metadata XML> には文字 のインスタンスが含まれています。エスケープ文字\として を追加"する必要があります\"。

メタデータ の例URL: aws cognito-idp update-identity-provider --userpool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --providerdetails MetadataURL=https://myidp.example.com/sso/saml/metadata--attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/
identity/claims/emailaddress• AWS API: UpdateIdentityProvider

SAML プロバイダー

539

Amazon Cognito

開発者ガイド固有の IdP に関する情報を取得するには• AWS CLI: aws cognito-idp describe-identity-provider
aws cognito-idp describe-identity-provider --user-pool-id useast-1_EXAMPLE --provider-name=SAML_provider_1• AWS API: DescribeIdentityProvider
すべての に関する情報を一覧表示するには IdPs
• AWS CLI: aws cognito-idp list-identity-providers
例: aws cognito-idp list-identity-providers --user-pool-id useast-1_EXAMPLE --max-results 3• AWS API: ListIdentityProviders
IdP を削除する• AWS CLI: aws cognito-idp delete-identity-provider
aws cognito-idp delete-identity-provider --user-pool-id useast-1_EXAMPLE --provider-name=SAML_provider_1• AWS API: DeleteIdentityProvider
ユーザープールを証明書利用者として追加するように SAML IdP を設定するには• ユーザープールサービスプロバイダーは URNですurn:amazon:cognito:sp:useast-1_EXAMPLE。Amazon Cognito には、SAMLレスポンスURNでこれに一致するオーディエン
ス制限値が必要です。IdP から SP への応答メッセージに次のPOSTバインディングエンドポイン
トを使用するように IdP を設定します。
https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponse• SAML IdP は、SAMLアサーションでユーザープールに必要な属性NameIDを入力する必要があります。 NameIDは、ユーザープール内のSAMLフェデレーティッドユーザーを一意に識別するために使用されます。IdP は、各ユーザーSAMLの名前 ID を一貫した大文字と小文字を区別する形式で渡す必要があります。ユーザー名 ID の値にバリエーションがあると、新しいユーザープロファ
イルが作成されます。
SAML プロバイダー

540

Amazon Cognito

開発者ガイド

2.0 SAML に署名証明書を提供するには IDP• IdP がSAMLログアウトリクエストの検証に使用できるパブリックキーのコピーを Amazon
Cognito からダウンロードするには、ユーザープールのサインインエクスペリエンスタブを選択
し、IdP を選択し、署名証明書を表示 で、.crt としてダウンロード を選択します。
Amazon Cognito コンソールを使用して、ユーザープールで設定したSAMLプロバイダーを削除できます。
SAML プロバイダーを削除するには
1.

Amazon Cognito コンソールにサインインします。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

サインインエクスペリエンスタブを選択し、フェデレーティッド ID プロバイダーのサインイン
を見つけます。

4.

SAML IdPs 削除する の横にあるラジオボタンを選択します。

5.

ID プロバイダー を削除するように求められたら、SAMLプロバイダーの名前を入力して削除を確定し、「削除」を選択します。

SAML Amazon Cognito ユーザープールでの セッション開始
Amazon Cognito は、サービスプロバイダーが開始する (SP が開始する) シングルサインオン (SSO)と IdP が開始する をサポートしていますSSO。セキュリティのベストプラクティスとして、ユーザープールSSOに SP 開始を実装します。 SAML V2.0 技術概要のセクション 5.1.2 では、SP 開始のについて説明していますSSO。Amazon Cognito は、アプリケーションの ID プロバイダー (IdP) です。アプリケーションは、認証されたユーザーのトークンを取得するサービスプロバイダー (SP) です。ただし、サードパーティー IdP を使用してユーザーを認証する場合、Amazon Cognito は SP です。SAML 2.0 ユーザーが SP 開始フローで認証するときは、まず Amazon Cognito にリクエストを行い、認証のために IdP にリダイレクトする必要があります。
一部のエンタープライズユースケースでは、内部アプリケーションへのアクセスは Enterprise IdPがホストするダッシュボードのブックマークから始まります。ユーザーがブックマークを選択すると、IdP はSAMLレスポンスを生成し、SP に送信してアプリケーションでユーザーを認証します。
SAML IdP が開始する をサポートするように、ユーザープールで IdP を設定できますSSO。IdP
開始認証をサポートしている場合、Amazon Cognito はSAMLリクエストで認証を開始しないたSAML プロバイダー

541

Amazon Cognito

開発者ガイドめ、Amazon Cognito は受信したSAMLレスポンスを要求したことを検証できません。SP 開始の ではSSO、Amazon Cognito は元のリクエストに対してSAMLレスポンスを検証する状態パラメータを設定します。SP 開始のサインインを使用すると、クロスサイトリクエストの偽造 () を防ぐこともできますCSRF。
ユーザーがユーザープールSAMLでホストされた UI とやり取りしたくない環境で SP 開始を構築する方法の例については、「」を参照してくださいシナリオ例: エンタープライズダッシュボードでAmazon Cognito アプリケーションをブックマークする。
トピック• シナリオ例: エンタープライズダッシュボードで Amazon Cognito アプリケーションをブックマー
クする
シナリオ例: エンタープライズダッシュボードで Amazon Cognito アプリケーションをブックマーク
する
Amazon Cognito ユーザープールにウェブアプリケーションSSOへのアクセスを提供するブックマー
クを SAMLまたは OIDCIdP ダッシュボードに作成できます。Amazon Cognito には、ユーザーがホストされた UI でサインインする必要のない方法でリンクできます。これを行うには、次の形式でAmazon Cognito ユーザープール認可エンドポイントの にリダイレクトするサインインブックマーク
をポータルに追加します。
https://mydomain.us-east-1.amazoncognito.com/authorize?

response_type=code&identity_provider=MySAMLIdP&client_id=1example23456789&redirec
www.example.com
Note
認証エンドポイントへのリクエストで、identity_provider パラメータの代わりに
idp_identifier パラメータを使用することもできます。IdP 識別子は、ユーザープールに
ID プロバイダーを作成するときに設定できる代替名または E メールドメインです。「SAML
ID プロバイダー名と識別子」を参照してください。

リクエストで適切なパラメータを使用すると、/authorize では、Amazon Cognito は SP が開始したサインインフローをサイレントに開始し、IdP でサインインするようにユーザーをリダイレクトします。
SAML プロバイダー

542

Amazon Cognito

開発者ガイド開始するには、ユーザープールに SAML IdP を追加します。サインインに IdP SAML を使用し、承認されたコールバックとしてアプリURLの を持つアプリクライアントを作成しますURL。アプリク
ライアントの詳細については、「ユーザープールアプリクライアント」を参照してください。
この認証されたアクセスをポータルにデプロイする前に、ホストされた UI からアプリケーションへの SP 開始サインインをテストします。Amazon Cognito で SAML IdP を設定する方法の詳細については、「」を参照してくださいサードパーティー SAML ID プロバイダーの設定。 Amazon Cognito
次の図は、IdP 開始 をエミュレートする認証フローを示していますSSO。ユーザーは、会社ポータルのリンクから Amazon Cognito で認証できます。
要件を満たしたら、 identity_providerまたは idp_identifierパラメータ認可エンドポイン
トを含むブックマークを に作成します。ユーザー認証は次のように進行します。
1.

ユーザーは SSOIdP ダッシュボードにサインインします。ユーザーがアクセスを許可されているエンタープライズアプリケーションには、このダッシュボードが表示されます。

2.

ユーザーが Amazon Cognito で認証するアプリケーションへのリンクを選択します。多くの
SSOポータルでは、カスタムアプリリンクを追加できます。SSO ポータルURLでパブリックへのリンクを作成するために使用できる機能はすべて機能します。

3.

SSO ポータルのカスタムアプリリンクは、ユーザーをユーザープール に誘導します認可
エンドポイント。リンクには、response_type、client_id、redirect_uri および
identity_provider のパラメータが含まれます。identity_provider パラメータは、
ユーザープールで IdP に付けた名前です。identity_provider パラメータの代わりに
idp_identifier パラメータを使用することもできます。ユーザーは、 idp_identifierま
たは identity_providerパラメータを含むリンクからフェデレーションエンドポイントにア
クセスします。このユーザーはサインインページをバイパスし、IdP で認証するために直接ナビ
ゲートします。の名前の詳細についてはSAML IdPs、「」を参照してくださいSAML ID プロバ
イダー名と識別子。
例 URL
https://mydomain.us-east-1.amazoncognito.com/authorize?
response_type=code&
identity_provider=MySAMLIdP&
client_id=1example23456789&
redirect_uri=https://www.example.com

4.

Amazon Cognito は、SAMLリクエストを使用してユーザーセッションを IdP にリダイレクトします。

SAML プロバイダー

543

Amazon Cognito

5.

開発者ガイドユーザーがダッシュボードにサインインしたときに、IdP からセッション Cookie を受信した可能性があります。IdP はこの Cookie を使用してユーザーをサイレントに検証し、SAMLレスポ
ンスを使用して Amazon Cognito idpresponseエンドポイントにリダイレクトします。アク
ティブなセッションが存在しない場合、IdP はSAMLレスポンスを投稿する前にユーザーを再認
証します。

6.

Amazon Cognito はSAMLレスポンスを検証し、SAMLアサーションに基づいてユーザープロ
ファイルを作成または更新します。

7.

Amazon Cognito は、認証コードを使用してユーザーを内部アプリケーションにリダイレクトします。内部アプリをアプリクライアントの承認されたリダイレクトURLとして設定URLしました。

8.

アプリは認証コードを Amazon Cognito トークンと交換します。詳細については、「トークンエ
ンドポイント」を参照してください。

SP 開始SAMLサインインの使用
ベストプラクティスとして、ユーザープールに service-provider-initiated (SP 開始) サインインを実装します。Amazon Cognito はユーザーのセッションを開始し、IdP にリダイレクトします。この方法では、サインインリクエストを提示するユーザーを最も細かく制御できます。特定の条件下で IdP
開始サインインを許可することもできます。詳細については、「SAML Amazon Cognito ユーザー
プールでの セッション開始」を参照してください。
以下のプロセスは、ユーザーがSAMLプロバイダーを通じてユーザープールにサインインする方法を示しています。

SAML プロバイダー

544

Amazon Cognito

開発者ガイド1.

ユーザーはサインインページで E メールアドレスを入力します。ユーザーの IdP へのリダイ
レクトを確認するには、カスタムアプリケーションで E メールアドレスを収集するか、ウェブ
ビューでホストされた UI を呼び出します。ホストされた UI を設定して、 のリストを表示する
IdPs か、E メールアドレスのみの入力を求めることができます。

2.

アプリはユーザープールリダイレクトエンドポイントを呼び出し、アプリに対応するクライアン
ト ID とユーザーに対応する IdP ID を持つセッションをリクエストします。

SAML プロバイダー

545

Amazon Cognito

開発者ガイド3.

Amazon Cognito は、 AuthnRequest要素でオプションで署名された SAML リクエストを使用
して、ユーザーを IdP にリダイレクトします。 ???

4.

IdP は、インタラクティブにユーザーを認証するか、ブラウザ Cookie で記憶されたセッションを使用してユーザーを認証します。

5.

IdP は、POSTペイロード内のオプションで暗号化されたSAMLアサーションを使用して、ユー
ザーをユーザープールSAMLレスポンスエンドポイントにリダイレクトします。
Note
Amazon Cognito は 5 分以内にレスポンスを受信しないセッションをキャンセルし、ユーザーをホストされた UI にリダイレクトします。ユーザーがこの結果を経験すると、Something went wrongエラーメッセージを受け取ります。

6.

SAML アサーションを検証し、レスポンスのクレームからユーザー属性をマッピングすると、Amazon Cognito はユーザープールでユーザープロファイルを内部的に作成または更新します。通常、ユーザープールはユーザーのブラウザセッションに認証コードを返します。

7.

ユーザーは認証コードをアプリケーションに提示し、アプリケーションはコードをJSONウェブ
トークン () と交換しますJWTs。

8.

アプリはユーザーの ID トークンを認証として受け入れて処理し、アクセストークンを使用して承認されたリクエストをリソースに生成し、更新トークンを保存します。

ユーザーが認証され、認証コードの付与を受け取ると、ユーザープールは ID、アクセス、および更新トークンを返します。ID トークンは、 OIDCベースの ID 管理用の認証オブジェクトです。アクセ
ストークンは、スコープが OAuth2.0 の認証オブジェクトです。更新トークンは、ユーザーの現在のトークンの有効期限が切れたときに新しい ID トークンとアクセストークンを生成するオブジェクトです。ユーザープールアプリクライアントでユーザーのトークンの期間を設定できます。
更新トークンの期間を選択することもできます。ユーザーの更新トークンの有効期限が切れたら、再度サインインする必要があります。SAML IdP を介して認証された場合、ユーザーのセッション期
間は、IdP とのセッションの有効期限ではなく、トークンの有効期限によって設定されます。アプリ
は、各ユーザーの更新トークンを保存し、有効期限が切れたらセッションを更新する必要があります。ホストされた UI は、1 時間有効なブラウザ Cookie でユーザーセッションを維持します。

IdP によるSAMLサインインの使用
IdP 開始 2.0 SAML サインイン用に ID プロバイダーを設定すると、 でセッションを開始することな
く、ユーザープールドメインのsaml2/idpresponseエンドポイントにSAMLアサーションを提示でSAML プロバイダー

546

Amazon Cognito

開発者ガイドきます認可エンドポイント。この設定を持つユーザープールは、リクエストされたアプリケーショ
ンクライアントがサポートするユーザープールの外部 ID プロバイダーからの IdP 開始SAMLアサー
ションを受け入れます。次の手順では、IdP 開始 SAML2.0 プロバイダーを使用して設定およびサインインする全体的なプロセスについて説明します。
1. ユーザープールとアプリケーションクライアントを作成または指定します。
2. ユーザープールに SAML 2.0 IdP を作成します。
3. IdP の開始をサポートするように IdP を設定します。IdP 主導型では、他のSSOプロバイダーには適用されないセキュリティ上の考慮事項SAMLが導入されています。このため、IdP で開始された
サインインでSAMLプロバイダーを使用するアプリクライアントにSAML IdPs、ユーザープール自体を含む 以外の を追加することはできません。
4. IdP 開始SAMLプロバイダーをユーザープール内のアプリクライアントに関連付けます。
5. SAML IdP のサインインページにユーザーを誘導し、SAMLアサーションを取得します。
6. SAML アサーションを使用してユーザープールsaml2/idpresponseエンドポイントにユーザーを誘導します。
7. JSON ウェブトークン () を受信しますJWTs。
ユーザープールで未承諾SAMLのアサーションを受け入れるには、アプリのセキュリティへの影響を考慮する必要があります。リクエストのスプーフィングとCSRF試行は、IdP によって開始されたリクエストを受け入れるときに行われる可能性があります。ユーザープールは IdP 開始のサインイン
セッションを検証できませんが、Amazon Cognito はリクエストパラメータとSAMLアサーションを検証します。
さらに、SAMLアサーションにInResponseToクレームが含まれておらず、過去 6 分以内に発行された必要があります。
IdP で開始されたリクエストSAMLを に送信する必要があります/saml2/idpresponse。SP が開始しホストされた UI 認証リクエストの場合、リクエストされたアプリケーションクライアント、ス
コープ、リダイレクト、URIおよびその他の詳細をHTTP GETリクエストのクエリ文字列パラメータとして識別するパラメータを指定する必要があります。ただし、IdP が開始するSAMLアサーションの場合、リクエストの詳細はHTTP POSTリクエストの本文でRelayStateパラメータとしてフォーマットする必要があります。リクエスト本文には、SAMLアサーションをSAMLResponseパラメータとして含める必要があります。
以下は、IdP が開始するSAMLプロバイダーに対するリクエストの例です。
POST /saml2/idpresponse HTTP/1.1
SAML プロバイダー

547

Amazon Cognito

開発者ガイドUser-Agent: USER_AGENT
Accept: */*Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded
SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone
HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]

AWS Management Console
IdP が開始する IdP を設定するには SAML
1.

ユーザープール 、アプリケーションクライアント 、および ID プロバイダーを作成します。
SAML

2.

関連付けられている場合、アプリクライアントからすべてのソーシャルプロバイダーと
OIDC ID プロバイダーの関連付けを解除します。

3.

ユーザープールのサインインエクスペリエンスタブに移動します。

4.

フェデレーティッド ID プロバイダーのサインイン で、SAMLプロバイダーを編集または追
加します。

5.

IdP で開始されたSAMLサインイン で、SP で開始されたアサーション と IdP で開始された
SAMLアサーション を受け入れる を選択します。

6.

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

API/CLI
IdP が開始する IdP を設定するには SAML
CreateIdentityProvider または UpdateIdentityProviderAPIリクエストの IDPInitパラメータ
SAMLを使用して IdP -initiated を設定します。以下は、IdP が開始する をサポートする IdPProviderDetailsの例ですSAML。
"ProviderDetails": {SAML プロバイダー

548

Amazon Cognito

開発者ガイド"MetadataURL" : "https://myidp.example.com/saml/metadata","IDPSignout" : "true","RequestSigningAlgorithm" : "rsa-sha256","EncryptedResponses" : "true","IDPInit" : "true"}

SAML サインアウトフロー
Amazon Cognito は SAML 2.0 シングルログアウト をサポートしています。サインアウトフ
ロー をサポートするように SAMLIdP を設定すると、Amazon Cognito は署名付きSAMLログア
ウトリクエストでユーザーを IdP にリダイレクトします。Amazon Cognito は、IdP メタデー
タSingleLogoutServiceURLの からリダイレクト場所を決定します。Amazon Cognito は、ユーザープール署名証明書を使用してサインアウトリクエストに署名します。

SAML プロバイダー

549

Amazon Cognito

開発者ガイドSAML セッションを持つユーザーをユーザープール/logoutエンドポイントに誘導すると、Amazon
Cognito は次のリクエストでSAMLユーザーを IdP メタデータで指定されたSLOエンドポイントにリダイレクトします。
https://[SingleLogoutService endpoint]?
SAMLRequest=[encoded SAML request]&
RelayState=[RelayState]&
SigAlg=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&
Signature=[User pool RSA signature]

SAML プロバイダー

550

Amazon Cognito

開発者ガイド

その後、ユーザーは IdP LogoutResponseから を使用してsaml2/logoutエンドポイントに戻ります。IdP は HTTP POSTリクエストLogoutResponseで を送信する必要があります。Amazon
Cognito は、最初のサインアウトリクエストからリダイレクト先にリダイレクトします。
SAML プロバイダーが複数の LogoutResponse を含む を送信する場合がありま
すAuthnStatement。このタイプのレスポンスsessionIndexAuthnStatementの最初の のは、最初にユーザーsessionIndexを認証したSAMLレスポンスの と一致する必要があります。sessionIndex が他の にある場合AuthnStatement、Amazon Cognito はセッションを認識しず、ユーザーはサインアウトされません。
AWS Management Console
SAML サインアウトを設定するには
1.

ユーザープール 、アプリクライアント 、IdP SAML を作成します。

2.

SAML ID プロバイダーを作成または編集するとき、ID プロバイダー情報 で、「サインアウ
トフローを追加」というタイトルのチェックボックスをオンにします。

3.

ユーザープールのサインインエクスペリエンスタブから、フェデレーティッド ID プロバイ
ダーのサインイン で IdP を選択し、署名証明書 を見つけます。

4.

.crt としてダウンロード を選択します。

5.

シングルSAMLログアウトとリクエスト署名をサポートするようにSAMLプロバイダーを設定し、ユーザープール署名証明書をアップロードします。IdP はユーザープールドメイン/
saml2/logoutの にリダイレクトする必要があります。

API/CLISAMLサインアウトを設定するにはCreateIdentityProvider または UpdateIdentityProviderAPIリクエストの IDPSignoutパラメータを使用してシングルログアウトを設定します。以下は、SAML単一ログアウトをサポートする IdPProviderDetailsの例です。
"ProviderDetails": {"MetadataURL" : "https://myidp.example.com/saml/metadata","IDPSignout" : "true",,"RequestSigningAlgorithm" : "rsa-sha256","EncryptedResponses" : "true","IDPInit" : "true"
SAML プロバイダー

551

Amazon Cognito

開発者ガイド}SAML 署名と暗号化
Amazon Cognito は、サインインとサインアウトの署名付きSAMLリクエストと暗号化されたSAML
レスポンスをサポートしています。ユーザープールオペレーション中のすべての暗号化SAMLオペ
レーションは、Amazon Cognito が生成する user-pool-provided キーを使用して署名と暗号文を生成する必要があります。現在、外部キーを使用してリクエストに署名したり、暗号化されたアサーショ
ンを受け入れるようにユーザープールを設定することはできません。
Note
ユーザープール証明書は 10 年間有効です。Amazon Cognito は 1 年に 1 回、ユーザープー
ルの新しい署名証明書と暗号化証明書を生成します。Amazon Cognito は、署名証明書をリクエストするときに最新の証明書を返し、最新の署名証明書を使用してリクエストに署名します。IdP は、有効期限が切れていないユーザープール暗号化証明書を使用してSAMLアサー
ションを暗号化できます。以前の証明書は、その有効期間全体にわたって引き続き有効であり、パブリックキーは証明書間で変更されません。ベストプラクティスとして、プロバイ
ダー設定の証明書を毎年更新します。

トピック• IdP からの暗号化されたSAMLレスポンスの受け入れ• SAML リクエストへの署名
IdP からの暗号化されたSAMLレスポンスの受け入れ
Amazon Cognito と IdP は、ユーザーがサインインおよびサインアウトするときにSAML、レスポン
スの機密性を確立できます。Amazon Cognito は、ユーザープールで設定する各外部SAMLプロバイ
ダーにパブリック/プライベートRSAキーペアと証明書を割り当てます。ユーザープールSAMLプロ
バイダーのレスポンス暗号化を有効にする場合は、暗号化されたSAMLレスポンスをサポートする
IdP に証明書をアップロードする必要があります。SAML IdP が指定されたキーですべてのSAMLアサーションの暗号化を開始する前に、IdP へのユーザープール接続が機能しません。
以下は、暗号化されたSAMLサインインのフローの概要です。
1. ユーザーがサインインを開始し、SAMLIdP を選択します。
SAML プロバイダー

552

Amazon Cognito

開発者ガイド2. ユーザープールは、SAMLサインインリクエストを使用してユーザーを SAML IdP に認可エンドポ
イントリダイレクトします。ユーザープールは、必要に応じて、IdP による整合性の検証を可能にする署名でこのリクエストに付随できます。SAML リクエストに署名する場合は、署名証明書のパブリックキーを使用してユーザープールが署名したリクエストを受け入れるように IdP を設定する必要があります。
3. SAML IdP はユーザーにサインインし、SAMLレスポンスを生成します。IdP はパブリックキーを使用してレスポンスを暗号化し、ユーザーをユーザープール/saml2/idpresponseエンドポイ
ントにリダイレクトします。IdP は 2.0 SAML 仕様で定義されているようにレスポンスを暗号化する必要があります。詳細については、「Element <EncryptedAssertion>Security Assertion
Markup Language () V2.0 のアサーションとプロトコル」の「」を参照してください。 OASISSAML V2
4. ユーザープールは、プライベートキーを使用してSAMLレスポンスの暗号文を復号し、ユーザーにサインインします。

Important
ユーザープールで IdP SAML のレスポンス暗号化を有効にする場合、IdP はプロバイ
ダーに固有のパブリックキーを使用してすべてのレスポンスを暗号化する必要があります。Amazon Cognito は、暗号化をサポートするために設定したSAML外部 IdP からの暗号化されていないSAMLレスポンスを受け入れません。

ユーザープール内の外部 IdP SAML はレスポンスの暗号化をサポートでき、各 IdP は独自のキーペアを受け取ります。
AWS Management Console
SAML レスポンスの暗号化を設定するには
1.

ユーザープール 、アプリケーションクライアント 、および SAML IdP を作成します。

2.

SAML ID プロバイダーを作成または編集するとき、リクエストに署名してレスポンスを暗号化する で、このプロバイダーからの暗号化SAMLされたアサーションを要求する というタイ
トルのチェックボックスをオンにします。

3.

ユーザープールの「サインインエクスペリエンス」タブの「フェデレーティッド ID プロバ
イダーのサインイン」で、IdP SAML を選択し、「暗号化証明書の表示」を選択します。

SAML プロバイダー

553

Amazon Cognito

4.

開発者ガイド.crt としてダウンロードを選択し、ダウンロードしたファイルを SAML IdP に提供します。
証明書SAMLの キーを使用してSAMLレスポンスを暗号化するように IdP を設定します。

API/CLI
SAMLレスポンスの暗号化を設定するにはCreateIdentityProvider または UpdateIdentityProviderAPIリクエストの EncryptedResponsesパ
ラメータを使用してレスポンス暗号化を設定します。以下は、リクエスト署名をサポートする
IdP ProviderDetailsの例です。
"ProviderDetails": {"MetadataURL" : "https://myidp.example.com/saml/metadata","IDPSignout" : "true","RequestSigningAlgorithm" : "rsa-sha256","EncryptedResponses" : "true","IDPInit" : "true"}

SAML リクエストへの署名
IdP への 2.0 SAML リクエストの整合性を証明できることは、Amazon Cognito SP 開始SAMLサイン
インのセキュリティ上の利点です。ドメインを持つ各ユーザープールは、ユーザープール X.509 署
名証明書を受け取ります。この証明書のパブリックキーを使用すると、ユーザープールは、ユーザー
が SAMLIdP を選択したときにユーザープールが生成するサインアウトリクエストに暗号化署名を適用します。オプションで、SAMLサインインリクエスト にサインインするようにアプリケーションク
ライアントを設定できます。SAML リクエストに署名すると、IdP はリクエストのXMLメタデータの署名が、指定したユーザープール証明書のパブリックキーと一致することを確認できます。
AWS Management Console
SAML リクエスト署名を設定するには
1.

ユーザープール 、アプリケーションクライアント 、および SAML IdP を作成します。

2.

SAML ID プロバイダーを作成または編集するときは、リクエストの署名とレスポンスの暗号化 で、このプロバイダーへのSAMLリクエストの署名 というタイトルのチェックボックスをオンにします。

3.

ユーザープールのサインインエクスペリエンスタブから、フェデレーティッド ID プロバイ
ダーのサインイン で、署名証明書の表示 を選択します。

SAML プロバイダー

554

Amazon Cognito

4.

開発者ガイド.crt としてダウンロードを選択し、ダウンロードしたファイルを SAML IdP に提供します。
受信SAMLリクエストの署名を検証するように SAML IdP を設定します。

API/CLI
SAMLリクエスト署名を設定するにはCreateIdentityProvider または リクエストの RequestSigningAlgorithmパラメータを使用してUpdateIdentityProviderAPIリクエスト署名を設定します。以下は、リクエスト署名をサポートする IdP ProviderDetailsの例です。
"ProviderDetails": {"MetadataURL" : "https://myidp.example.com/saml/metadata","IDPSignout" : "true","RequestSigningAlgorithm" : "rsa-sha256","EncryptedResponses" : "true","IDPInit" : "true"}

SAML プロバイダー

555

Amazon Cognito

開発者ガイドSAML ID プロバイダー名と識別子

SAML ID プロバイダー (IdPs) に名前を付け、IdP 識別子を割り当てると、そのプロバイダーへのSP 開始のサインインおよびサインアウトリクエストのフローを自動化できます。プロバイダー
名に対する文字列制約の詳細については、「」の ProviderNameプロパティを参照してくださいCreateIdentityProvider。
SAML プロバイダーには最大 50 個の識別子を選択することもできます。識別子は、ユーザープール
内の IdP のわかりやすい名前であり、ユーザープール内で一意である必要があります。SAML 識別
子がユーザーの E メールドメインと一致する場合、Amazon Cognito がホストする UI は各ユーザーの E メールアドレスをリクエストし、E メールアドレス内のドメインを評価し、ドメインに対応する IdP にリダイレクトします。同じ組織が複数のドメインを所有できるため、1 つの IdP に複数の識別子を含めることができます。
E メールドメイン識別子を使用するか使用しないかにかかわらず、マルチテナントアプリ
ケーションの識別子を使用してユーザーを正しい IdP にリダイレクトできます。ホストされた UI を完全にバイパスする場合は、ユーザーに提示するリンクをカスタマイズして、ユー
SAML プロバイダー

556

Amazon Cognito

開発者ガイドザーが を介して IdP 認可エンドポイントに直接リダイレクトするようにできます。識別子
を使用してユーザーにサインインし、IdP にリダイレクトするには、最初の認証リクエストのidp_identifier=myidp.example.comリクエストパラメータに 形式の識別子を含めます。
ユーザーを IdP に渡すもう 1 つの方法は、パラメータに IdP の名前identity_providerを次のURL形式で入力することです。
https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
identity_provider=MySAMLIdP&
client_id=1example23456789&
redirect_uri=https://www.example.com

ユーザーが IdP SAML でサインインすると、IdP はHTTP POST本文内のSAMLレスポンスを使用して/saml2/idpresponseエンドポイントにリダイレクトします。Amazon Cognito はSAMLアサー
ションを処理し、レスポンスのクレームが期待を満たしている場合は、アプリクライアントのコール
バック にリダイレクトしますURL。ユーザーがこの方法で認証を完了すると、IdP とアプリのみの
ウェブページを操作します。
ドメイン形式の IdP 識別子を使用すると、Amazon Cognito がホストする UI はサインイン時にE メールアドレスをリクエストし、E メールドメインが IdP 識別子と一致すると、ユーザーは
IdP のサインインページにリダイレクトされます。例えば、2 つの異なる会社の従業員によるサインインを必要とするアプリケーションを構築します。最初の会社 AnyCompany である A は、
exampleA.comと を所有していますexampleA.co.uk。2 番目の会社である AnyCompany B が を所有していますexampleB.com。この例では、次のように、会社ごとに IdPs1 つずつ、2 つの をセットアップしています。
• IdP A では、識別子 exampleA.com および exampleA.co.uk を定義します。
• IdP B では、識別子 exampleB.com を定義します。
アプリで、アプリクライアントのホストされた UI を呼び出して、各ユーザーに E メールアドレスの入力を求めます。Amazon Cognito は、E メールアドレスからドメインを取得し、ドメインをドメ
イン識別子と IdP に関連付け、リクエストidp_identifierパラメータ認可エンドポイントを含むへのリクエストを使用してユーザーを正しい IdP にリダイレクトします。例えば、ユーザーが と入力した場合bob@exampleA.co.uk、ユーザーが操作する次のページは の IdP サインインページですhttps://auth.exampleA.co.uk/sso/saml。
同じロジックを個別に実装することもできます。アプリでは、ユーザー入力を収集し、独自のロジックに従って正しい IdP に関連付けるカスタムフォームを構築できます。アプリケーションテナント
SAML プロバイダー

557

Amazon Cognito

開発者ガイドごとにカスタムアプリケーションポータルを生成できます。各アプリケーションポータルは、リクエ
ストパラメータでテナントの識別子を使用して認証エンドポイントにリンクします。
E メールアドレスを収集し、ホストされた UI でドメインを解析するには、アプリクライアントに割り当てた各 IdP に少なくとも 1 SAML つの識別子を割り当てます。デフォルトでは、ホストされた
UI サインイン画面には、アプリクライアントに割り当て IdPs た各 のボタンが表示されます。ただし、識別子を正常に割り当てた場合、ホストされた UI サインインページは次のイメージのようになります。
ホストされた UI でドメインを解析するには、IdP 識別子としてドメインを使用する必要があります。アプリクライアントの各 に任意のタイプの識別子を割り当てるSAML IdPs と、そのアプリのホストされた UI には IdP の選択ボタンが表示されなくなります。E メール解析またはカスタムロ
ジックを使用してリダイレクトを生成するSAML場合は、 の IdP 識別子を追加します。サイレント
リダイレクトを生成し、ホストされた UI に のリストを表示させたい場合は IdPs、識別子を割り当てず、 identity_provider リクエストパラメータを認証リクエストで使用します。
• アプリクライアントに IdP SAML を 1 つだけ割り当てると、ホストされた UI サインインページに、その IdP でサインインするためのボタンが表示されます。
• アプリクライアントに対してアクティブ化したすべての IdP SAML に識別子を割り当てると、ホストされた UI サインインページに E メールアドレスの入力プロンプトが表示されます。
• 複数の があり IdPs 、それらすべてに識別子を割り当てない場合、ホストされた UI サインイン
ページには、割り当てられた各 IdP でサインインするためのボタンが表示されます。
• に識別子を割り当て IdPs 、ホストされた UI に IdP ボタンの選択を表示する場合は、識別子のな
い新しい IdP をアプリケーションクライアントに追加するか、新しいアプリケーションクライア
ントを作成します。既存の IdP を削除して、識別子なしで再度追加することもできます。新しいIdP を作成すると、SAMLユーザーは新しいユーザープロファイルを作成します。このアクティブなユーザーの重複は、IdP 設定を変更した月に請求に影響する可能性があります。
IdP セットアップの詳細については、「ユーザープールの ID プロバイダーの設定」を参照してください。

サードパーティー SAML ID プロバイダーの設定
Amazon Cognito ユーザープールのフェデレーションで動作するようにサードパーティー
SAML 2.0 ID プロバイダー (IdP) ソリューションを設定するには、次のアサーションコンシューマーサービス (ACS) にリダイレクトするように SAMLIdP を設定する必要がありますURL。
https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponseユーザープー
SAML プロバイダー

558

Amazon Cognito

開発者ガイドルに Amazon Cognito ドメインがある場合、Amazon Cognito コンソールのユーザープールの [Appintegration] (アプリの統合) タブでユーザープールドメインのパスを見つけることができます。
一部の SAML IdPs ではurn、オーディエンスURIまたは SP エンティティ ID とも呼ばれる を 形式で指定する必要がありますurn:amazon:cognito:sp:us-east-1_EXAMPLE。ユーザープール ID
は、Amazon Cognito コンソールのユーザープールの概要にあります。
また、ユーザープールで必須属性として指定した属性の値を指定するように SAMLIdP を設定する必要があります。通常、 emailはユーザープールに必要な属性です。この場合、IdP SAML はSAMLアサーションに何らかの形式のemailクレームを提供する必要があり、クレームをそのプロバイダーの属性にマッピングする必要があります。
サードパーティーの 2.0 SAML IdP ソリューションに関する次の設定情報は、Amazon Cognito ユー
ザープールとのフェデレーションの設定を開始するのに適しています。最新情報については、プロバ
イダーのドキュメントを直接参照してください。
SAML リクエストに署名するには、ユーザープール署名証明書によって署名されたリクエストを信頼するように IdP を設定する必要があります。暗号化されたSAMLレスポンスを受け入れるには、
ユーザープールへのすべてのSAMLレスポンスを暗号化するように IdP を設定する必要があります。
プロバイダーには、これらの機能の設定に関するドキュメントがあります。Microsoft の例について
は、「Microsoft Entra SAMLトークン暗号化の設定」を参照してください。
Note
Amazon Cognito では、ID プロバイダーメタデータドキュメントのみが必要です。プロバイダーが 2.0 SAML との AWS アカウント フェデレーションの設定情報を提供している場合があります。この情報は Amazon Cognito の統合には関係ありません。

ソリューション

詳細情報

Microsoft Active Directory フェデレーションサ
ービス (AD FS)

フェデレーションメタデータエクスプローラー

Okta

SAMLアプリ統合用の IdP メタデータとSAML
署名証明書をダウンロードする方法

Auth0

Auth0 を SAML ID プロバイダーとして設定する

SAML プロバイダー

559

Amazon Cognito

開発者ガイドソリューション

詳細情報

Ping アイデンティティ (PingFederate）

からのSAMLメタデータのエクスポート
PingFederate

JumpCloud

SAML 設定ノート

SecureAuth

SAML アプリケーション統合

ユーザープールでの OIDC ID プロバイダーの使用
OpenID Connect (OIDC） ID プロバイダー () のアカウントを既に持っているユーザーがサインアッ
プステップIdPsをスキップし、既存のアカウントを使用してアプリケーションにサインインできるよ
うにします。組み込みの Hosted Web UI では、Amazon Cognito がすべての認証済みユーザーに関するトークンの処理と管理を提供します。このように、バックエンドシステムは 1 セットのユーザー
プールトークンで標準化できます。

Note
サードパーティー (フェデレーション) 経由のサインインは、Amazon Cognito のユーザー
プールで使用できます。この機能は、Amazon Cognito ID プール (フェデレーティッド ID) 経
由のフェデレーションとは無関係です。

IdP は、OIDC、、またはユーザープールAPIメソッド AWS Management Consoleを使用して AWS
CLIユーザープールに追加できますCreateIdentityProvider。
トピック• 前提条件• ステップ 1: IdP OIDC に登録する• ステップ 2: ユーザープールに OIDC IdP を追加する• ステップ 3: IdP OIDC 設定をテストする
OIDC プロバイダー

560

Amazon Cognito

開発者ガイド• OIDC ユーザープール IdP 認証フロー

前提条件
開始するには、以下が必要です。
• アプリケーションクライアントとユーザープールドメインを使用するユーザープール。詳細については、「ユーザープールの作成」を参照してください。
• 次の設定の OIDC IdP。
• client_secret_post クライアント認証をサポートします。Amazon Cognito は、IdP OIDCの検出エンドポイントで token_endpoint_auth_methods_supportedクレームをチェックしません。Amazon Cognito は、client_secret_basic クライアント認証をサポートしていません。クライアント認証の詳細については、OpenID Connect ドキュメントの「クライアント
認証」を参照してください。
• HTTPS は、openid_configuration、、 などのOIDCエンドポイントにのみ使用しますuserInfojwks_uri。
• OIDC エンドポイントにはTCPポート 80 と 443 のみを使用します。
• HMAC-、SHA、ECDSAまたは RSAアルゴリズムで ID トークンにのみ署名します。
• キー ID kid クレームを jwks_uri で発行し、そのトークンに kid クレームをフックみます。
• 有効なルート CA 信頼チェーンを持つ有効期限が切れていないパブリックキーを表示します。

ステップ 1: IdP OIDC に登録する
Amazon Cognito で OIDC IdP を作成する前に、クライアント ID とクライアントシークレットを受信するには、アプリケーションを OIDC IdP に登録する必要があります。
IdP OIDC に登録するには
1.

IdP OIDC を使用してデベロッパーアカウントを作成します。
へのリンク OIDC IdPs
OIDC IdP

インストール方法

OIDC 検出 URL

Salesforce

Salesforce ID プロバイ
ダーのインストール

https://login.salesforce.com

OIDC プロバイダー

561

Amazon Cognito

開発者ガイドOIDC IdP

インストール方法

OIDC 検出 URL

Ping Identity

Ping Identity ID プロバイ
ダーのインストール

https://Your Ping domain
address:9031/idp/userinfo.openid
例: https://pf.company.com:9031/idp/user
info.openid

Okta

Okta ID プロバイダーのイ
ンストール

https://Your Okta subdomain.oktapreview.com
または https://Your Okta
subdomain .okta.com

Microsoft Azure Active
Directory (Azure AD)

Microsoft Azure AD ID プロ
バイダーのインストール

https://login.micr
osoftonline.com/ {tenant}/v2.0

GoogleGoogle ID プロバイダーのインストールhttps://accounts.google.com
Note
Amazon Cognito では、Google を統合されたソーシャルサインイン
IdP として提供します。
統合された IdP を使用することをお勧めします。
「ユーザープールでのソーシャル ID プロバイダーの使用」を参照して
ください。

2.

ユーザープールドメインURLを IdP OIDC の/oauth2/idpresponseエンドポイントに登録します。これにより、IdP OIDC は後でユーザーを認証するときに Amazon Cognito からそれを受け入れるようになります。

OIDC プロバイダー

562

Amazon Cognito

開発者ガイドhttps://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse3.

コールバックを Amazon Cognito ユーザープールに登録URLします。これは、Amazon Cognitoが認証URLに成功した後にユーザーをリダイレクトするページの です。
https://www.example.com

4.

スコープを選択します。スコープ openid が必要です。email および email_verified クレームにアクセスを付与するには、email スコープが必要です。

5.

OIDC IdP は、クライアント ID とクライアントシークレットを提供します。ユーザープールで
IdP OIDC を設定するときに使用します。

例: Salesforce をユーザープールで OIDC IdP として使用する
IdP は、Salesforce OIDC などの OIDC互換 IdP とユーザープール間の信頼を確立するときに使用します。
1.

Salesforce 開発者ウェブサイトでアカウントを作成します。

2.

前のステップで設定した開発者アカウントを使用してサインインします。

3.

Salesforce ページで、次のいずれかの操作を行います。
• Lightning Experience を使用している場合は、歯車アイコンを選択してから、[Setup Home](ホームの設定) を選択します。
• Salesforce Classic を使用しており、ユーザーインターフェイスのヘッダーに [Setup (設定)]が表示されている場合は、選択します。
• Salesforce Classic を使用しており、ヘッダーに [Setup (設定)] が表示されていない場合は、上部のナビゲーションバーで名前を選択し、ドロップダウンリストより [Setup (設定)] を選択
します。

4.

左のナビゲーションバーで、[Company Settings (組織の設定)] を選択します。

5.

ナビゲーションバーで、[Domain] (ドメイン) を選択してドメインを入力し、[Create] (作成) を入
力します。

6.

左のナビゲーションバーで、[Platform Tools] (プラットフォームツール) に移動し、[Apps] (アプリケーション) を選択します。

7.

[アプリケーションマネージャ] を選択します。

8.

a.

[New connected app] (新規接続アプリケーション) を選択します。

OIDC プロバイダー

563

Amazon Cognitob.

開発者ガイド必須フィールドに入力します。
開始 でURL、Salesforce IdP でサインインするユーザープールドメインの/authorizeエ
ンドポイントに を入力します。 URLユーザーが接続されたアプリケーションにアクセスすると、Salesforce はサインインを完了するURLようにユーザーに指示します。次に、Salesforce は、アプリケーションクライアントに関連付けURLたコールバックにユー
ザーをリダイレクトします。
https://mydomain.us-east-1.amazoncognito.com/authorize?
response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com&identity_provider=CorpSalesforcec.

OAuth 設定を有効にし、コールバック にユーザープールドメインURLの/oauth2/
idpresponseエンドポイントの を入力します。 URLこれは、Salesforce URLが Amazon
Cognito がOAuthトークンと交換する認証コードを発行する です。
https://mydomain.us-east-1.amazoncognito.com/oauth2/idpresponse

9.

スコープを選択します。スコープ openid を含める必要があります。email および email_verified
クレーム にアクセスを付与するには、email スコープが必要です。スコープはスペースで区切ります。

10. [Create] (作成) を選択します。
Salesforce では、クライアント ID は [コンシューマーキー]、クライアントシークレットは [コンシューマーシークレット] と呼ばれます。クライアント ID とクライアントシークレットを書き留めます。これらは次のセクションで使用します。

ステップ 2: ユーザープールに OIDC IdP を追加する
このセクションでは、OIDCIdP からの OIDCベースの認証リクエストを処理するようにユーザープールを設定します。
OIDC IdP を追加するには (Amazon Cognito コンソール）
IdP OIDC を追加する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

ナビゲーションメニューから [User Pools] (ユーザープール) を選択します。

OIDC プロバイダー

564

Amazon Cognito

開発者ガイド3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Federated sign-in] (フェデレーションサインイン) を検索し、[Add an identity provider] (ID プロバイダーの追加) を選択
します。

5.

[OpenID Connect] IdP を選択します。

6.

[Provider name] (プロバイダー名) に一意の名前を入力します。

7.

プロバイダーから受け取ったクライアント ID を、[Client ID] (クライアント ID) へ入力します。

8.

プロバイダーから受け取ったクライアントシークレットを、[Client secret] (クライアントシーク
レット) に入力します。

9.

このプロバイダーの [Authorized scopes] (承認済みスコープ) を入力します。スコープは、アプ
リケーションがプロバイダーにリクエストするユーザー属性のグループ (name および email など) を定義します。スコープは OAuth2.0 仕様に従ってスペースで区切る必要があります。
ユーザーはこれらの属性をアプリケーションに提供することに同意を求められます。

10. 属性リクエストメソッドを選択して、プロバイダーが運用するuserInfoエンドポイントからユーザーの詳細を取得するために使用する必要があるHTTPメソッド ( GETまたは POST) を
Amazon Cognito に提供します。
11. セットアップ方法を選択して、発行者による自動入力URLまたは手動入力 のいず
れかで OpenID Connect エンドポイントを取得します。プロバイダーにパブリッ
ク.well-known/openid-configurationエンドポイントがあり、Amazon Cognito
が 、authorization、userInfo、および jwks_uriエンドポイントURLsの を取得できる場
合はtoken、発行者による自動フィルURLスルーを使用します。
12. IdP URLsから発行者URLまたは authorizationtoken、userInfo、、jwks_uriエンドポイ
ントを入力します。
Note
URL は で始まりhttps://、スラッシュ で終わることはできません/。この で使用できるのは、ポート番号 443 と 80 のみですURL。例えば、Salesforce は次の を使用しますURL。
https://login.salesforce.com
自動入力を選択した場合、検出ドキュメントはauthorization_endpoint、、token_endpoint、userinfo_endpointおよび の
値HTTPSに を使用する必要がありますjwks_uri。そうしない場合は、ログインが失敗します。

OIDC プロバイダー

565

Amazon Cognito

開発者ガイド13. OIDC クレームサブは、デフォルトでユーザープール属性 Username にマッピングされます。
他のOIDCクレームをユーザープール属性にマッピングできます。OIDC クレームを入力し、ドロップダウンリストから対応するユーザープール属性を選択します。例えば、通常、クレームの[email] はユーザープール属性の [E メール] にマッピングされます。
14. IdP からユーザープールに属性をマッピングします。詳細は、「ユーザープール用 ID プロバイ
ダー属性マッピングの特定」を参照してください。
15. [Create] (作成) を選択します。
16. [App client integration] (アプリケーションクライアント統合) タブから、[App clients] (アプリ
ケーションクライアント) のリストより 1 つ選択して、[Edit hosted UI settings] (ホストされた
UI 設定の編集) をクリックします。新しい IdP OIDC を ID プロバイダー のアプリクライアントに追加します。
17. [Save changes] (変更の保存) をクリックします。
IdP OIDC を追加するには (AWS CLI）•

CreateIdentityProvider API メソッドのパラメータの説明を参照してください。

aws cognito-idp create-identity-provider--user-pool-id string--provider-name string--provider-type OIDC--provider-details map--attribute-mapping string--idp-identifiers (list)--cli-input-json string--generate-cli-skeleton string

このプロバイダー詳細のマップを使用します。

{"client_id": "string","client_secret": "string",
OIDC プロバイダー

566

Amazon Cognito

開発者ガイド"authorize_scopes": "string","attributes_request_method": "string","oidc_issuer": "string","authorize_url": "string","token_url": "string","attributes_url": "string","jwks_uri": "string"}

ステップ 3: IdP OIDC 設定をテストする
認証を作成するには、前の 2 つのセクションの要素URLを使用し、それらを使用して IdP OIDC 設定をテストします。
https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com

ドメインは、コンソールにあるユーザープールの [ドメイン名] ページで確認できます。client_id は[全般設定] ページにあります。redirect_uri パラメータURLにコールバックを使用します。これは、認証URLが成功した後にユーザーがリダイレクトされるページの です。

OIDC ユーザープール IdP 認証フロー
ユーザーが IdP OIDC を使用してアプリケーションにサインインすると、次の認証フローが通過します。
1. ユーザーは Amazon Cognito の組み込みサインインページにアクセスし、Salesforce などの IdP
OIDC を介してサインインするオプションが提供されます。
2. ユーザーは IdP OIDC のauthorizationエンドポイントにリダイレクトされます。
3. ユーザーが認証されると、IdP OIDC は認証コードを使用して Amazon Cognito にリダイレクトします。
4. Amazon Cognito は、認証コードを IdP OIDC とアクセストークンと交換します。
5. Amazon Cognito がユーザープールのユーザーアカウントを作成または更新します。
6. Amazon Cognito がアプリケーションのベアラートークンを発行します。これには ID トークン、
アクセストークン、および更新トークンが含まれる場合があります。
OIDC プロバイダー

567

Amazon Cognito

開発者ガイドNote
Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ホストされた UIにユーザーをリダイレクトします。ページには、Something went wrong というエラー
メッセージが表示されます。

OIDC は 2.0 OAuth 上の ID レイヤーで、 がOIDCクライアントアプリケーション (依存関係JWT)
IdPs に発行する JSON形式の () ID トークンを指定します。Amazon Cognito OIDC をOIDC証明書利
用者として追加する方法については、IdP のドキュメントを参照してください。
ユーザーが認証コード付与を使用して認証すると、ユーザープールは ID、アクセス、更新トーク
ンを返します。ID トークンは ID 管理用の標準OIDCトークンであり、アクセストークンは標準
OAuth2.0 トークンです。ユーザープールのアプリケーションクライアントがサポートできる付与タ
イプの詳細については、「認可エンドポイント」を参照してください。
ユーザープールがOIDCプロバイダーからのクレームを処理する方法
ユーザーがサードパーティーOIDCプロバイダーでサインインを完了すると、Amazon Cognito がホストする UI は IdP から認証コードを取得します。ユーザープールは、アクセストークンと ID トー
OIDC プロバイダー

568

Amazon Cognito

開発者ガイドクンの認証コードを IdP の token エンドポイントと交換します。ユーザープールはこれらのトークンをユーザーやアプリに渡すのではなく、これらを使って独自のトークンのクレームで提示するデー
タを使用してユーザープロファイルを構築します。
Amazon Cognito はアクセストークンを個別に検証しません。代わりに、userInfoプロバイダーのエンドポイントにユーザー属性情報をリクエストし、トークンが有効でない場合はリクエストが拒否されることを想定しています。
Amazon Cognito は、以下のチェックを行ってプロバイダー ID トークンを検証します。
1.

プロバイダーが、、RSA、HMAC楕円曲線のセットのアルゴリズムを使用してトークンに署名したことを確認します。

2.

プロバイダーが非対称署名アルゴリズムを使用してトークンに署名した場合は、トークンのkid クレームの署名キー ID がプロバイダーの jwks_uri エンドポイントに表示されていることを確認します。

3.

ID トークンの署名を、プロバイダーのメタデータに基づいて想定される署名と比較します。

4.

iss クレームを IdP に設定されているOIDC発行者と比較します。

5.

aud クレームが IdP で設定されているクライアント ID と一致するか、または aud クレームに複数の値がある場合は設定されたクライアント ID が含まれているかを比較します。

6.

exp クレームのタイムスタンプが現在の時刻より前でないことをチェックします。

ユーザープールは ID トークンを検証し、プロバイダーアクセストークンを使用してプロバイダーのuserInfo エンドポイントへのリクエストを試みます。アクセストークンのスコープによって読み取りが許可されたユーザープロファイル情報がすべて取得されます。次にユーザープールはユーザープールの要求に従って設定したユーザー属性を検索します。プロバイダー設定で、必要な属性の属性マッピングを作成する必要があります。ユーザープールはプロバイダー ID トークンと userInfo レ
スポンスをチェックします。ユーザープールは、マッピングルールに一致するすべてのクレームを
ユーザープールのユーザープロファイルのユーザー属性に書き込みます。ユーザープールは、マッピ
ングルールに一致するが必須ではなく、プロバイダーのクレームにも含まれていない属性を無視します。

ユーザープールの ID プロバイダー属性マッピングを指定する
AWS Management Console、、または を使用してAPI、ユーザープールの ID AWS CLI プロバイダー (IdP) の属性マッピングを指定できます。

属性マッピングを指定する

569

Amazon Cognito

開発者ガイドマッピングについて知っておくべきこと
ユーザー属性マッピングの設定を開始する前に、以下の重要な詳細を確認してください。
• フェデレーションユーザーがアプリケーションにサインインする際、マッピングは、ユーザープー
ルが必要とする各ユーザープール属性に存在している必要があります。例えば、サインアップする
ためにユーザープールで email 属性が必要となる場合には、この属性を IdP から該当するものにマッピングします。
• デフォルトで、マップされた E メールアドレスは未検証です。ワンタイムコードを使用してマップされた E メールアドレスを検証することはできません。その代わりに IdP からの属性をマップして、検証ステータスを取得します。例えば、Google とほとんどのOIDCプロバイダーには
email_verified 属性が含まれています。
• ID プロバイダー (IdP) のトークンをユーザープールのカスタム属性にマッピングできます。ソー
シャルプロバイダーはアクセストークンを提示し、OIDCプロバイダーはアクセストークンとID トークンを提示します。トークンをマッピングするには、最大長さ 2,048 文字のカスタム属性を追加し、アプリクライアントにその属性への書き込みアクセス許可を付与し、IdP からのaccess_token または id_token をカスタム属性にマッピングします。
• マッピングされた各ユーザープールの属性では、値の最大長 さである 2048 文字が、Amazon
Cognito が IdP から取得する値に対して十分な長さである必要があります。そうではない場合
は、ユーザーがアプリケーションにサインインするときに Amazon Cognito がエラーを報告します。Amazon Cognito は、トークンの長さが 2,048 文字を超える場合、IdP トークンのカスタム属
性へのマッピングをサポートしていません。
• Amazon Cognito は、次の表に示すように、フェデレーティッド IdP が渡す特定のクレームからフェデレーティッドユーザーのプロファイルの username 属性を取得します。Amazon Cognito
は、この属性値の前に IdP の名前、例えば を付加しますMyOIDCIdP_[sub]。フェデレーティッ
ドユーザーに外部ユーザーディレクトリの属性と完全に一致する属性を持たせたい場合は、その属性を などの Amazon Cognito サインイン属性にマッピングしますpreferred_username。
ID プロバイダー

username ソース属性

Facebook

id

Googlesub

Login with Amazon

user_idApple でのサインイン

sub

属性マッピングを指定する

570

Amazon Cognito

開発者ガイドID プロバイダー

username ソース属性

SAML プロバイダー

NameID

OpenID Connect (OIDC) プロバイダー

sub• Amazon Cognito は、ユーザーがアプリケーションにサインインするときにマップされたユーザー
プール属性を更新できる必要があります。ユーザーが IdP 経由でサインインすると、Amazon
Cognito は IdP からの最新情報でマップされた属性を更新します。Amazon Cognito は、マップされた属性の現行の値が最新情報とすでに一致している場合でも、各属性を更新します。Amazon
Cognito が属性を更新できることを確実にするため、以下の要件をチェックしてください。
• IdP からマッピングするすべてのユーザープールのカスタム属性は、変更可能である必要があります。変更可能なカスタム属性はいつでも更新できます。対照的に、ユーザーの変更
不可なカスタム属性の値を設定できるのは、ユーザープロファイルを最初に作成するときのみです。Amazon Cognito コンソールで変更可能なカスタム属性を作成するには、[Sign-up
experience] (サインアップエクスペリエンス) タブの [Add custom attributes] (カスタム属性の追加) を選択時に、追加する属性の [Mutable] (変更可能) チェックボックスを有効にします。または、 CreateUserPoolAPIオペレーションを使用してユーザープールを作成する場合は、これらの各属性の Mutableパラメータを に設定することもできますtrue。IdP がマッピングされたイ
ミュータブル属性の値を送信すると、Amazon Cognito はエラーを返し、サインインは失敗します。
• アプリケーションのアプリクライアントの設定では、マッピングされた属性を書き込み可能にする必要があります。書き込み可能な属性は、Amazon Cognito コンソールの [App clients](アプリクライアント) ページで設定できます。または、 CreateUserPoolClientAPIオ
ペレーションを使用してアプリケーションクライアントを作成する場合は、これらの属性
をWriteAttributes配列に追加できます。IdP がマッピングされた書き込み不可能な属性の値を送信する場合、Amazon Cognito は属性値を設定せず、認証に進みます。
• IdP 属性に複数の値が含まれている場合、Amazon Cognito はすべての値をカンマで区切られた単一の文字列にフラット化し、英数字以外の文字 (.「」、「」、-*「」、_「」文字を除く) を含む
値をURLフォームエンコードします。値は、アプリでの使用前にデコードおよび解析しておく必要があります。

ユーザープールの ID プロバイダー属性マッピングを指定する (AWS Management
Console)を使用して AWS Management Console 、ユーザープールの IdP の属性マッピングを指定できます。
属性マッピングを指定する

571

Amazon Cognito

開発者ガイドNote
Amazon Cognito は、着信トークンに着信クレームが存在する場合に限り、そのクレームを
ユーザープール属性にマップします。以前にマッピングされたクレームが着信トークンに存在しなくなった場合、そのクレームは削除または変更されません。削除されたクレームのマッピングがアプリケーションで必要な場合は、事前認証 Lambda トリガーを使用して認証中にカスタム属性を削除し、それらの属性を着信トークンから再入力できます。

ソーシャル IdP 属性マッピングを指定するには
1.

Amazon Cognito コンソールにサインインします。プロンプトが表示されたら、 AWS 認証情報を入力します。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[Sign-in experience] (サインインエクスペリエンス) タブを選択し、[Federated sign-in] (フェデレーションサインイン) を検索します。

4.

[Add an identity provider] (ID プロバイダーの追加) を選択するか、設定した[Facebook]、[Google]、[Amazon]、もしくは [Apple] の IdP を選択します。[Attribute mapping](属性マッピング) を検索し、 [Edit] (編集) を選択します。
ソーシャル IdP の追加の詳細については、「ユーザープールでのソーシャル ID プロバイダーの使用」を参照してください。

5.

6.

マッピングする必要のある各属性について、以下のステップを完了してください。
a.

[User pool attribute] (ユーザープール属性) 列から属性を選択します。これは、ユーザープー
ル内のユーザープロファイルに割り当てられる属性です。カスタム属性は、標準属性の後にリストされます。

b.

から属性を選択する <provider> 属性列。これは、プロバイダーディレクトリから渡される属性になります。ソーシャルプロバイダーの既知の属性は、ドロップダウンリストに表示
されます。

c.

IdP と Amazon Cognito の間に追加の属性をマッピングするには、[Add another attribute](その他の属性を追加) を選択します。

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

属性マッピングを指定する

572

Amazon Cognito

開発者ガイドSAML プロバイダー属性マッピングを指定するには
1.

Amazon Cognito コンソールにサインインします。プロンプトが表示されたら、 AWS 認証情報を入力します。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[Sign-in experience] (サインインエクスペリエンス) タブを選択し、[Federated sign-in] (フェデレーションサインイン) を検索します。

4.

ID プロバイダーの追加 を選択するか、設定した SAML IdP を選択します。[Attribute mapping](属性マッピング) を探し、[Edit] (編集) を選択します。SAML IdP の追加の詳細については、「」を参照してくださいユーザープールでの SAML ID プロバイダーの使用。

5.

マッピングする必要のある各属性について、以下のステップを完了してください。
a.

[User pool attribute] (ユーザープール属性) 列から属性を選択します。これは、ユーザープー
ル内のユーザープロファイルに割り当てられる属性です。カスタム属性は、標準属性の後にリストされます。

b.

属性列からSAML属性を選択します。これは、プロバイダーディレクトリから渡される属性になります。
IdP は、参照用のサンプルSAMLアサーションを提供する場合があります。などの単純な名
前 IdPs を使用するものもあればemail、次のような URL形式の属性名を使用するものもあります。
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressc.
6.

IdP と Amazon Cognito の間に追加の属性をマッピングするには、[Add another attribute](その他の属性を追加) を選択します。

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

ユーザープールの ID プロバイダー属性マッピングの指定 (AWS CLI および AWS
API）
以下のコマンドを使用して、ユーザープールの IdP 属性マッピングを指定します。
プロバイダーの作成時に属性マッピングを指定する• AWS CLI: aws cognito-idp create-identity-provider
属性マッピングを指定する

573

Amazon Cognito

開発者ガイドメタデータファイルの例: aws cognito-idp create-identity-provider --user-poolid <user_pool_id> --provider-name=SAML_provider_1 --provider-type SAML -provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
ここでは details.json に以下が含まれます。
{"MetadataFile": "<SAML metadata XML>"}

Note
そのファイルに <SAML metadata XML> には引用符 (") が含まれており、エスケープする必要があります (\"）。

メタデータ の例URL：
aws cognito-idp create-identity-provider \--user-pool-id us-east-1_EXAMPLE \--provider-name=SAML_provider_1 \--provider-type SAML \--provider-details MetadataURL=https://myidp.example.com/saml/metadata \--attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/
emailaddress• AWS API: CreateIdentityProvider
既存の IdP の属性マッピングを指定するには• AWS CLI: aws cognito-idp update-identity-provider
例: aws cognito-idp update-identity-provider --user-pool-id <user_pool_id>--provider-name <provider_name> --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress• AWS API: UpdateIdentityProvider

属性マッピングを指定する

574

Amazon Cognito

開発者ガイド特定の IdP の属性マッピングに関する情報を取得するには• AWS CLI: aws cognito-idp describe-identity-provider
例: aws cognito-idp describe-identity-provider --user-pool-id<user_pool_id> --provider-name <provider_name>• AWS API: DescribeIdentityProvider

フェデレーションユーザーを既存のユーザープロファイルにリンクする
多くの場合、同じユーザーには、ユーザープールに接続した複数の ID プロバイダー (IdPs) を持つ
プロファイルがあります。Amazon Cognito では、ユーザーが出現するたびにディレクトリ内の同じ
ユーザープロファイルにリンクできます。このようにして、複数の IdP ユーザーを持つ 1 人のユー
ザーが、アプリで一貫したエクスペリエンスを持つことができます。AdminLinkProviderForUser はAmazon Cognito に、フェデレーションディレクトリ内のユーザーの一意の ID をユーザープール内のユーザーとして認識するように指示します。ユーザープール内のユーザーは、ユーザープロファイ
ルに関連付けられたフェデレーティッド ID が 0 個以上ある場合、請求の目的で 1 か月のアクティブ
ユーザー (MAU) としてカウントされます。
フェデレーションユーザーが初めてユーザープールにサインインすると、Amazon Cognito はその IDにリンクされたローカルプロファイルを探します。リンクされたプロファイルが存在しない場合、
ユーザープールは新しいプロファイルを作成します。ローカルプロファイルを作成し、計画された
事前ステージングタスクまたは で、AdminLinkProviderForUserAPIリクエストで最初のサイン
インの前にいつでもフェデレーティッドユーザーにリンクできますサインアップ前の Lambda トリ
ガー。ユーザーがサインインし、Amazon Cognito がリンクされたローカルプロファイルを検出すると、ユーザープールはユーザーのクレームを読み取り、IdP のマッピングルールと比較します。次に、ユーザープールは、ログイン時にマッピングされたクレームを反映して、リンクされたローカル
プロファイルを更新します。このようにして、アクセスクレームでローカルプロファイルを設定し、その ID クレームをプロバイダー up-to-date に保持できます。Amazon Cognito により、フェデレー
ションユーザーとリンクされたプロファイルがマッチングされると、フェデレーションユーザーは常にそのプロファイルにサインインします。次に、ユーザーの他のプロバイダー ID を同じプロファ
イルにリンクして、ユーザーのアプリエクスペリエンスを一貫させることができます。以前にサインインしたフェデレーションユーザーをリンクするには、まず既存のプロファイルを削除する必要があります。既存のプロファイルは、[Provider name]_identifier という形式で識別できます。
例えば、LoginWithAmazon_amzn1.account.AFAEXAMPLE と指定します。作成してサードパー
ティーのユーザー ID にリンクしたユーザーには、作成したユーザー名と、リンクされた ID の詳細を含むidentities属性があります。
フェデレーションユーザーを既存のユーザープロファイルにリンクする

575

Amazon Cognito

開発者ガイドImportantAdminLinkProviderForUser は、外部フェデレーティッド ID を持つユーザーがユーザープール内の既存のユーザーとしてサインインできるようにするため、アプリケーション所有者によって信頼されている外部属性 IdPs とプロバイダー属性でのみ使用することが重要です。

例えば、複数の顧客と共有しているアプリを持つマネージドサービスプロバイダー (MSP) の場合です。各お客様は、Active Directory フェデレーションサービス () を通じてアプリにサインインしますADFS。IT 管理者 Carlos は、各お客様のドメインにアカウントを持っています。IdP に関係な
く、Carlos がサインインするたびにアプリ管理者として認識されるようにします。
Amazon Cognito に対する Carlos のSAMLアサーションのemailクレームmsp_carlos@example.comにあるADFS IdPs 現在の Carlos の E メールアドレス。ユーザー名
Carlos を使用してユーザープールにユーザーを作成します。次の AWS Command Line Interface(AWS CLI) コマンドは、、 IdPs ADFS1、ADFS2および から Carlos の ID をリンクしますADFS3。
Note
特定の属性クレームに基づいてユーザーをリンクできます。この機能は OIDCと に固有ですSAML IdPs。他のプロバイダータイプでは、固定ソース属性に基づいてリンクする必要があります。詳細については、「」を参照してくださいAdminLinkProviderForUser。ソー
シャル IdP をユーザープロファイルにリンクするとき、ProviderAttributeName にCognito_Subject を設定する必要があります。ProviderAttributeValue は、IdP のユーザーの一意の識別子でなければなりません。

aws cognito-idp admin-link-provider-for-user \--user-pool-id us-east-1_EXAMPLE \--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \--source-user
ProviderName=ADFS1,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com
aws cognito-idp admin-link-provider-for-user \--user-pool-id us-east-1_EXAMPLE \--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \--source-user
ProviderName=ADFS2,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com
フェデレーションユーザーを既存のユーザープロファイルにリンクする

576

Amazon Cognito

開発者ガイドaws cognito-idp admin-link-provider-for-user \--user-pool-id us-east-1_EXAMPLE \--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \--source-user
ProviderName=ADFS3,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com

ユーザープールのユーザープロファイル Carlos は、次の identities 属性を持つようになりました。
[{"userId": "msp_carlos@example.com","providerName": "ADFS1","providerType": "SAML","issuer": "http://auth.example.com","primary": false,"dateCreated": 111111111111111}, {"userId": "msp_carlos@example.com","providerName": "ADFS2","providerType": "SAML","issuer": "http://auth2.example.com","primary": false,"dateCreated": 111111111111111}, {"userId": "msp_carlos@example.com","providerName": "ADFS3","providerType": "SAML","issuer": "http://auth3.example.com","primary": false,"dateCreated": 111111111111111}]

フェデレーションユーザーのリンクについて知っておくべきこと• 各ユーザープロファイルに最大 5 人のフェデレーションユーザーをリンクできます。
• AdminLinkProviderForUser API リクエストの の ProviderAttributeNameパラメータで定義されているように、最大 5 つの IdP 属性クレームから各 IdP SourceUserにユーザーをリンクできます。例えば、ソース属性 、、email、、given_nameおよび に少なくとも 1 人のユーザーをリンクしている場合location、これらの phone department5 つの属性のいずれかに追加のユーザーのみをリンクできます。
フェデレーションユーザーを既存のユーザープロファイルにリンクする

577

Amazon Cognito

開発者ガイド• フェデレーションユーザーは、既存のフェデレーションユーザープロファイルまたはローカルユー
ザーにリンクできます。
• プロバイダーを のユーザープロファイルにリンクすることはできません AWS Management
Console。
• ユーザーの ID トークンには、identities クレームに関連するすべてのプロバイダーが含まれます。
• AdminSetUserPassword API リクエストで自動的に作成されたフェデレーティッドユー
ザープロファイルのパスワードを設定できます。その後、そのユーザーのステータスは
EXTERNAL_PROVIDER から CONFIRMED に変わります。この状態のユーザーは、フェデレー
ティッドユーザーとしてサインインし、リンクされたローカルユーザーAPIのように で認証フローを開始できます。また、 や などのトークン認証APIリクエストのパスワードChangePasswordと属性を変更することもできますUpdateUserAttributes。セキュリティのベストプラクティスとして、またユーザーを外部 IdP と同期した状態を維持するため、フェデレーションユーザープロ
ファイルにパスワードを設定しないでください。代わりに、AdminLinkProviderForUser でユーザーをローカルプロファイルにリンクしてください。
• Amazon Cognito は、ユーザーが IdP からサインインするときに、リンクされたローカルユーザー
プロファイルにユーザー属性を入力します。Amazon Cognito は、IdP からの ID OIDC トークンでID クレームを処理し、2.0 OAuth とOIDCプロバイダーの両方のuserInfoエンドポイントも確認します。Amazon Cognito では、ID トークン内の情報は userInfo からの情報よりも優先されます。
プロファイルにリンクした外部ユーザーアカウントをユーザーが使用しなくなった場合は、ユーザーアカウントとユーザープールユーザーとの関連付けを解除できます。ユーザーをリンクしたときに、ユーザーの属性名、属性値、プロバイダー名をリクエストに入力しました。ユーザーが不要になった
プロファイルを削除するには、同等のパラメータを使用して AdminDisableProviderForUser API リク
エストを行います。
のその他のコマンド構文と例AdminLinkProviderForUserについては、「」を参照してください AWS
SDKs。

Lambda トリガーを使用したユーザープールワークフローのカスタ
マイズ
Amazon Cognito は AWS Lambda 関数と連携して、ユーザープールの認証動作を変更します。初回
サインアップ前、認証完了後、およびその間のいくつかの段階で Lambda 関数を自動的に呼び出す
Lambda トリガーの使用

578

Amazon Cognito

開発者ガイドようにユーザープールを設定できます。関数は、認証フローのデフォルトの動作を変更したり、ユー
ザープールやその他の AWS リソースの変更をAPIリクエストしたり、外部システムと通信したりできます。Lambda 関数のコードはユーザー独自のものです。Amazon Cognito はイベントデータを関数に送信し、関数がデータを処理するのを待ちます。ほとんどの場合、セッションへの変更を示すレ
スポンスイベントが返されます。
リクエストおよびレスポンスイベントのシステム内で、独自の認証チャレンジの導入、ユーザープー
ルと別の ID ストア間のユーザーの移行、メッセージのカスタマイズ、JSONウェブトークン () の変
更を行うことができますJWTs。
Lambda トリガーは、ユーザーがユーザープールでアクションを開始した後に Amazon Cognito がユーザーに配信するレスポンスをカスタマイズできます。例えば、他の方法では成功するはずのユー
ザーによるサインインを禁止できます。また、環境、外部 、データベースAPIs、または ID ストア
に対してランタイムオペレーションを実行することもできます AWS 。例えば、ユーザー移行のトリ
ガーでは、外部アクションと Amazon Cognito の変更を組み合わせることができます。つまり、外部
ディレクトリでユーザー情報を検索し、その外部情報に基づいて新しいユーザーに属性を設定できます。
Lambda トリガーをユーザープールに割り当てると、Amazon Cognito はデフォルトのフローを中断
して関数から情報をリクエストします。Amazon Cognito はJSONイベントを生成し、それを関数に渡します。イベントには、ユーザーアカウントの作成、サインイン、パスワードのリセット、または属性の更新を求めるユーザーのリクエストに関する情報が含まれます。これで、関数がアクションを実行、またはイベントを変更せずに送り返すことができます。
次の表は、Lambda トリガーを使用してユーザープールオペレーションをカスタマイズする方法をまとめたものです。
ユーザープールフロー

オペレーション

説明

カスタム認証フロー

認証チャレンジの定義

カスタム認証フローでの次のチャレンジを決定する

認証チャレンジの作成

カスタム認証フローでのチャレンジを作成する

認証チャレンジレスポンスの確認

カスタム認証フローでのレスポンスが正しいかどうかを判断する

Lambda トリガーの使用

579

Amazon Cognito

開発者ガイドユーザープールフロー

オペレーション

説明

認証イベントthe section called “認証前のLambda トリガー”

サインインリクエストを承認
または拒否するカスタム検証

the section called “認証後のLambda トリガー”

カスタム分析用のイベントをログに記録する

the section called “トークン生
成前の Lambda トリガー”

トークンの主張を強化または制限する

the section called “サインアップ前の Lambda トリガー”

サインアップリクエストを承認または拒否するカスタム検証を実行するthe section called “確認後のLambda トリガー”

カスタム分析用のカスタム
ウェルカムメッセージまたは
イベントログ記録を作成する

the section called “ユーザー移行の Lambda トリガー”

既存のユーザーディレクト
リからユーザープールにユー
ザーを移行するメッセージ

the section called “カスタムメッセージの Lambda トリガー”

メッセージの高度なカスタマ
イズとローカライズを実行する

トークンの作成the section called “トークン生
成前の Lambda トリガー”

ID トークンの属性を追加または削除する

E メールプロバイダーとSMS
サードパーティープロバイ
ダーthe section called “カスタム送
信者の Lambda トリガー”

サードパーティープロバイ
ダーを使用してメッセージを
送信SMSおよび E メールで送信する

サインアップトピック• 重要な考慮事項• ユーザープールの Lambda トリガーの追加
Lambda トリガーの使用

580

Amazon Cognito

開発者ガイド• ユーザープールの Lambda トリガーイベント• ユーザープールの Lambda トリガーの一般的なパラメータ• Lambda トリガーへのAPIオペレーションの接続• Lambda トリガーのユーザープールの機能オペレーションへの接続• サインアップ前の Lambda トリガー
• 確認後の Lambda トリガー
• 認証前の Lambda トリガー
• 認証後の Lambda トリガー
• カスタム認証チャレンジの Lambda トリガー
• トークン生成前の Lambda トリガー
• ユーザー移行の Lambda トリガー
• カスタムメッセージの Lambda トリガー
• カスタム送信者の Lambda トリガー

重要な考慮事項
Lambda 関数用のユーザープールを準備するときは、以下の点を考慮します。
• Amazon Cognito が Lambda トリガーに送信するイベントは、新しい機能に伴って変わる可能性があります。JSON 階層内のレスポンス要素とリクエスト要素の位置が変更されたり、要素名が追加されたりする可能性があります。Lambda 関数では、このガイドで説明している入力要素のキーと値のペアを受け取ることが期待できますが、入力検証がより厳密になると、関数が失敗する可能性があります。
• Amazon Cognito が一部のトリガーに送信する複数のバージョンのイベントから 1 つを選択できます。バージョンによっては、Amazon Cognito 料金の変更を受け入れることが必要になる場合があります。料金の詳細については、「Amazon Cognito の料金」を参照してください。トークン生成前の Lambda トリガー のアクセストークンをカスタマイズするには、アドバンストセキュリティ機能を使用してユーザープールを設定し、イベントバージョン 2 を使用するように Lambda トリ
ガー設定を更新する必要があります。
• カスタム送信者の Lambda トリガーを除き、Amazon Cognito は Lambda 関数を同期的に呼び出します。Amazon Cognito が Lambda 関数を呼び出したら、5 秒以内に応答する必要があります。
失敗し、呼び出しを再試行できる場合、Amazon Cognito は呼び出しを再試行します。試行が 3 回失敗すると、関数はタイムアウトします。この 5 秒のタイムアウト値を変更することはできませ重要な考慮事項

581

Amazon Cognito

開発者ガイドん。詳細については、「 AWS Lambda デベロッパーガイド」の「Lambda プログラミングモデ
ル」を参照してください。
Amazon Cognito は、HTTPステータスコードが 500～599 の呼び出しエラーを返す関数呼び出しを再試行しません。これらのコードは、Lambda が関数を起動できない原因となる設定の問題を示しています。詳細については、「 でのエラー処理と自動再試行 AWS Lambda」を参照してください。
• Lambda トリガー設定で関数バージョンを宣言することはできません。Amazon Cognito ユーザー
プールは、デフォルトで最新バージョンの関数を呼び出します。ただし、関数バージョンをエイリ
アスに関連付けて、トリガーLambdaArnを CreateUserPoolまたは UpdateUserPoolAPIリクエス
トARNのエイリアスに設定することはできます。このオプションは、 AWS Management Console
では使用できません。エイリアスの詳細については、「AWS Lambda デベロッパーガイド」の「Lambda 関数のエイリアス」を参照してください。
• Lambda トリガーを削除する場合は、ユーザープール内の対応するトリガーを更新する必要があります。例えば、認証後トリガーを削除した場合は、ユーザープール内の対応する認証後トリガーを[なし] に設定する必要があります。
• Lambda 関数がリクエストとレスポンスのパラメータを Amazon Cognito に返さないか、エラーを返す場合、認証イベントは成功しません。関数にエラーを返して、ユーザーのサインアップ、認証、トークン生成、または Lambda トリガーを呼び出す認証フローのその他の段階を防ぐことができます。
Amazon Cognito がホストする UI は、Lambda トリガーが生成するエラーをサインインプロンプ
トの上にエラーテキストとして返します。Amazon Cognito ユーザープールは、 の形式でトリガー
エラーAPIを返します[trigger] failed with error [error text from response]。
ベストプラクティスとして、Lambda 関数では、ユーザーに表示させるエラーのみを生成します。
のような出力方法を使用してprint()、機密情報やデバッグ情報を CloudWatch ログに記録します。例については、サインアップ前の例:ユーザー名が 5 文字未満の場合にサインアップを拒否す
るを参照してください。
• ユーザープールのトリガー AWS アカウント として、別の に Lambda 関数を追加できます。クロ
スアカウントトリガーは、 CreateUserPoolおよび UpdateUserPoolAPIオペレーション、またはそれに相当する AWS CloudFormation および で追加する必要があります AWS CLI。クロスアカウン
ト関数を に追加することはできません AWS Management Console。
• Amazon Cognito コンソールに Lambda トリガーを追加すると、Amazon Cognito はユーザープールが関数を呼び出すことを許可するリソースベースのポリシーを、関数に追加します。ク
ロスアカウント関数を含む Lambda トリガーを Amazon Cognito コンソールの外部で作成する
場合は、Lambda 関数のリソースベースポリシーにアクセス許可を追加する必要があります。
重要な考慮事項

582

Amazon Cognito

開発者ガイド

追加したアクセス権限では、Amazon Cognito はユーザープールの代わりに関数を呼び出すことを許可する必要があります。Lambda コンソールからアクセス許可を追加するか、Lambda
AddPermissionAPIオペレーションを使用できます。
Lambda リソースベースのポリシーの例
次の Lambda リソースベースのポリシーの例では、Lambda 関数を呼び出す Amazon Cognito の限定的な機能が付与されます。Amazon Cognito は、aws:SourceArn の条件でのユーザープールと
aws:SourceAccount 条件でのアカウントの両方に代わって関数を呼び出す場合にのみ、関数を呼び出すことができます。
{"Version": "2012-10-17","Id": "default","Statement": [{"Sid": "lambda-allow-cognito","Effect": "Allow","Principal": {"Service": "cognito-idp.amazonaws.com"},"Action": "lambda:InvokeFunction","Resource": "<your Lambda function ARN>","Condition": {"StringEquals": {"AWS:SourceAccount": "<your account number>"},"ArnLike": {"AWS:SourceArn": "<your user pool ARN>"
}
}
}
]
}

重要な考慮事項

583

Amazon Cognito

開発者ガイドユーザープールの Lambda トリガーの追加
コンソールを使用してユーザープールの Lambda トリガーを追加する
1.

Lambda コンソールを使用して Lambda 関数を作成します。Lambda 関数の詳細について
は、AWS Lambda デベロッパーガイドを参照してください。

2.

[Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

3.

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

4.

[] (ユーザープールのプロパティ) タブを選択し、[Lambda triggers] (Lambda トリガー) を検索します。

5.

[Add a Lambda trigger] (Lambda トリガーの追加) を選択します。

6.

カスタマイズする認証のステージに基づいて、Lambda トリガーカテゴリを選択します。

7.

Lambda 関数の割り当てを選択し、ユーザープール AWS リージョン と同じ 内の関数を選択します。
Note
AWS Identity and Access Management （IAM) 認証情報に Lambda 関数を更新するアクセス許可がある場合、Amazon Cognito は Lambda リソースベースのポリシーを追加します。このポリシーを使用すると、Amazon Cognito は選択した関数を呼び出すことができます。サインイン認証情報に十分なIAMアクセス許可がない場合は、リソースベースのポリシーを個別に更新する必要があります。詳細については、「the section called“重要な考慮事項”」を参照してください。

8.

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

9.

Lambda コンソール CloudWatch で を使用して、Lambda 関数 をログに記録できます。詳細については、「Lambda の CloudWatch ログへのアクセス」を参照してください。

ユーザープールの Lambda トリガーイベント
Amazon Cognito は Lambda 関数にイベント情報を渡します。Lambda 関数はレスポンスで、同じイ
ベントオブジェクトを変更と共に Amazon Cognito に返します。以下のイベントは、Lambda トリ
ガーの一般的なパラメータを示しています。

ユーザープールの トリガーの追加

584

Amazon Cognito

開発者ガイドJSON{"version": "string","triggerSource": "string","region": AWSRegion,"userPoolId": "string","userName": "string","callerContext":{"awsSdkVersion": "string","clientId": "string"},"request":{"userAttributes": {"string": "string",
....
}
},
"response": {}}ユーザープールの Lambda トリガーの一般的なパラメータバージョン
Lambda 関数のバージョン番号。
triggerSource
Lambda 関数をトリガーしたイベントの名前。それぞれの説明については、 triggerSource 「」を参照してくださいLambda トリガーのユーザープールの機能オペレーションへの接続。
regionAWSRegion インスタンス AWS リージョン としての 。
userPoolId
ユーザープールの ID。
userName
現在のユーザーのユーザー名。
ユーザープールの Lambda トリガーの一般的なパラメータ585

Amazon Cognito

開発者ガイドcallerContext
リクエストとコード環境に関するメタデータ。これには、フィールド awsSdkVersionと が含まれますclientId。
awsSdkVersion
リクエストを生成した のバージョン AWS SDK。
clientId
ユーザープールアプリクライアントの ID。
request
ユーザーのAPIリクエストの詳細。以下のフィールドと、トリガーに固有のリクエストパラ
メータが含まれます。例えば、Amazon Cognito が事前認証トリガーに送信するイベントには
userNotFound パラメータも含まれます。ユーザーが未登録のユーザー名でサインインしようとしたときに、このパラメータの値を処理してカスタムアクションを実行できます。
userAttributes
ユーザー属性の名前と値の 1 つ以上のキーと値のペア。例: "email":"john@example.com"。
レスポンス
このパラメータには、元のリクエストの情報は含まれていません。Lambda 関数はイベント全体
を Amazon Cognito に返し、返されるパラメータは response に追加する必要があります。関数に含めることができる返されるパラメータを確認するには、使用するトリガーのドキュメントを参照してください。

Lambda トリガーへのAPIオペレーションの接続
以下のセクションでは、Amazon Cognito がユーザープールのアクティビティから呼び出す Lambda
トリガーについて説明します。
アプリが Amazon Cognito ユーザープール、ホストされた UIAPI、またはユーザープールエンドポイ
ントを介してユーザーをサインインすると、Amazon Cognito はセッションコンテキストに基づいてLambda 関数を呼び出します。Amazon Cognito ユーザープールAPIとユーザープールエンドポイン
トの詳細については、「」を参照してくださいAmazon Cognito ユーザープールAPIとユーザープー
ルエンドポイントの使用。次のセクションの表では、Amazon Cognito が関数を呼び出す原因とな
イベントごとの Lambda トリガーのソース

586

Amazon Cognito

開発者ガイドるイベントと、Amazon Cognito がリクエストに含める triggerSource 文字列について説明します。
トピック• Amazon Cognito の Lambda トリガー API• ホストされた UI の Amazon Cognito ローカルユーザーの Lambda トリガー
• フェデレーティッドユーザーの Lambda トリガー

Amazon Cognito の Lambda トリガー API
次の表は、アプリがローカルユーザーを作成、サインイン、または更新するときに Amazon Cognito
が呼び出すことができる Lambda トリガーのソース文字列を示しています。
Amazon Cognito のローカルユーザートリガーソース API
API オペレーション

Lambda トリガー

トリガーソース

AdminCreateUser

サインアップ前

PreSignUp_AdminCre
ateUser

トークン生成前TokenGeneration_Ne
wPasswordChallenge

カスタムメッセージ

CustomMessage_Admi
nCreateUser

カスタム E メール送信者

CustomEmailSender_
AdminCreateUser

カスタムSMS送信者

CustomSMSSender_Ad
minCreateUser

SignUp

サインアップ前

PreSignUp_SignUp

カスタムメッセージ

CustomMessage_SignUp

カスタム E メール送信者

CustomEmailSender_
SignUp

イベントごとの Lambda トリガーのソース

587

Amazon Cognito

API オペレーション

開発者ガイドLambda トリガー

トリガーソース

カスタムSMS送信者

CustomSMSSender_Si
gnUp

ConfirmSignUp

確認後

onfirmSignUp

AdminConfirmSignUp
InitiateAuth

PostConfirmation_C

認証前

PreAuthentication_
Authentication

AdminInitiateAuth
認証チャレンジの定義

DefineAuthChalleng
e_Authentication

認証チャレンジの作成

CreateAuthChalleng
e_Authentication

トークン生成前TokenGeneration_Au
thentication
TokenGeneration_Au
thenticateDevice
TokenGeneration_Re
freshTokens

ユーザー移行

UserMigration_Authentication

カスタムメッセージ

CustomMessage_Authentication

カスタム E メール送信者

CustomEmailSender_
AccountTakeOverNot
ification

カスタムSMS送信者

CustomSMSSender_Au
thentication

イベントごとの Lambda トリガーのソース

588

Amazon Cognito

開発者ガイドAPI オペレーション

Lambda トリガー

トリガーソース

ForgotPassword

ユーザー移行

UserMigration_Forg
otPassword

カスタムメッセージ

CustomMessage_Forg
otPassword

カスタム E メール送信者

CustomEmailSender_
ForgotPassword

カスタムSMS送信者

CustomSMSSender_Fo
rgotPassword

ConfirmForgotPassword

確認後

PostConfirmation_C
onfirmForgotPasswo
rdUpdateUserAttributes

カスタムメッセージ

CustomMessage_Upda
teUserAttribute

AdminUpdateUserAttributes
カスタム E メール送信者

CustomEmailSender_
UpdateUserAttribute

カスタムSMS送信者

CustomSMSSender_Up
dateUserAttribute

VerifyUserAttributes

カスタムメッセージ

CustomMessage_Veri
fyUserAttributeカスタム E メール送信者

CustomEmailSender_
VerifyUserAttribute

カスタムSMS送信者

CustomSMSSender_Ve
rifyUserAttribute

イベントごとの Lambda トリガーのソース

589

Amazon Cognito

開発者ガイドホストされた UI の Amazon Cognito ローカルユーザーの Lambda トリガー
次の表は、ローカルユーザーがホストされた UI でユーザープールにサインインするときに Amazon
Cognito が呼び出すことができる Lambda トリガーのソース文字列を示しています。
ホストされた UI のローカルユーザートリガーソース
ホストされた UI URI

Lambda トリガー

トリガーソース/signup

サインアップ前

PreSignUp_SignUp

カスタムメッセージ

CustomMessage_SignUp

カスタム E メール送信者

CustomEmailSender_
SignUp

カスタムSMS送信者

CustomSMSSender_Si
gnUp/confirmuser

確認後

PostConfirmation_C
onfirmSignUp/login

認証前

PreAuthentication_
Authentication

認証チャレンジの定義

DefineAuthChalleng
e_Authentication

認証チャレンジの作成

CreateAuthChalleng
e_Authentication

トークン生成前TokenGeneration_Au
thentication
TokenGeneration_Au
thenticateDevice
TokenGeneration_Re
freshTokens

イベントごとの Lambda トリガーのソース

590

Amazon Cognito

ホストされた UI URI

開発者ガイドLambda トリガー

トリガーソース

ユーザー移行

UserMigration_Authentication

カスタムメッセージ

CustomMessage_Authentication

カスタム E メール送信者

CustomEmailSender_
AccountTakeOverNot
ification
CustomEmailSender_
Authentication

カスタムSMS送信者

CustomSMSSender_Au
thentication/forgotpassword

ユーザー移行

UserMigration_Forg
otPassword

カスタムメッセージ

CustomMessage_Forg
otPassword

カスタム E メール送信者

CustomEmailSender_
ForgotPassword

カスタムSMS送信者

CustomSMSSender_Fo
rgotPassword/confirmforgotpass

確認後

word

PostConfirmation_C
onfirmForgotPassword

フェデレーティッドユーザーの Lambda トリガー
次の Lambda トリガーを使用して、フェデレーションプロバイダーでサインインするユーザーのユーザープールのワークフローをカスタマイズできます。

イベントごとの Lambda トリガーのソース

591

Amazon Cognito

開発者ガイドNote
フェデレーションユーザーは Amazon Cognito でホストされている UI を使用してサインイン
でき、また、ID プロバイダーのサインインページにサイレントリダイレクトするリクエストを 認可エンドポイント に 生成することもできます。Amazon Cognito ユーザープール を使用してフェデレーティッドユーザーにサインインすることはできませんAPI。

フェデレーティッドユーザートリガーのソース
サインインイベント

Lambda トリガー

トリガーソース

初回サインインサインアップ前

PreSignUp_External
Provider

確認後

PostConfirmation_C
onfirmSignUp

トークン生成前TokenGeneration_Ho
stedAuth

その後のサインイン

認証前

PreAuthentication_
Authentication

認証後

PostAuthentication_Authentication

トークン生成前TokenGeneration_Ho
stedAuth

フェデレーティッドサインインは、ユーザープールの カスタム認証チャレンジの Lambda トリ
ガー、ユーザー移行の Lambda トリガー、カスタムメッセージの Lambda トリガー、または カスタ
ム送信者の Lambda トリガー を呼び出しません。

Lambda トリガーのユーザープールの機能オペレーションへの接続
各 Lambda トリガーは、ユーザープールで機能的な役割を果たします。例えば、トリガーを使用
してサインアップフローを変更したり、カスタム認証チャレンジを追加したりできます。Amazon
Cognito が Lambda 関数に送信するイベントには、その機能ロールを構成する複数のアクションのう
機能ごとの Lambda トリガーのソース

592

Amazon Cognito

開発者ガイドちの 1 つが反映されます。例えば、Amazon Cognito は、ユーザーがサインアップしたとき、およびユーザーを作成したときに、事前サインアップトリガーを呼び出します。同じ機能的役割を持つ、これらのさまざまなケースには、それぞれ独自の triggerSource 値があります。Lambda 関数は、呼び出したオペレーションに基づいて受信イベントを異なる方法で処理できます。
また Amazon Cognito は、イベントがトリガーソースに対応するときに、割り当てられたすべての関数を呼び出します。例えば、ユーザー移行トリガーと事前認証トリガーを割り当てたユーザープールにユーザーがサインインすると、両方がアクティブになります。
サインアップ、確認、およびサインイン (認証) トリガー
Trigger トリガー)

triggerSource 値

イベント

サインアップ前

PreSignUp_SignUp

サインアップ前。

サインアップ前

PreSignUp_AdminCre

管理者が新しいユーザーを作成するときのサインアップ前

ateUser
サインアップ前

確認後

Provider外部 ID プロバイダーのサインアップ前。

PostConfirmation_C

サインアップの確認後。

PreSignUp_External

onfirmSignUp
確認後

PostConfirmation_C
onfirmForgotPasswo

パスワードを忘れた場合の確
認後。

rd
認証前

PreAuthentication_

認証前。

Authentication
認証後

PostAuthentication

認証後。

_Authentication

機能ごとの Lambda トリガーのソース593

Amazon Cognito

開発者ガイドカスタム認証チャレンジトリガー
TriggertriggerSource 値

イベント

認証チャレンジの定義

DefineAuthChalleng

認証チャレンジの定義。

e_Authentication
認証チャレンジの作成

CreateAuthChalleng

認証チャレンジの作成。

e_Authentication
認証チャレンジの検証。

VerifyAuthChallengeResponse_Authenti

認証チャレンジレスポンスの確認。

cationトークン生成前トリガー
Trigger トリガー)

triggerSource 値

イベント

トークン生成前TokenGeneration_Ho

Amazon Cognito は、のホストされた UI のサインインページ
からユーザーを認証します。

stedAuth

トークン生成前TokenGeneration_Au
thentication

トークン生成前TokenGeneration_Ne
wPasswordChallenge

トークン生成前TokenGeneration_Au
thenticateDevice

トークン生成前TokenGeneration_Re
freshTokens

機能ごとの Lambda トリガーのソース

ユーザー認証フローが完了しました。
管理者がユーザーを作成します。ユーザーが一時パスワー
ドを変更する必要があるときに、Amazon Cognito は、これを呼び出します。
ユーザーデバイスの認証の終了。
ユーザーは、ID およびアクセ
ストークンを更新しようとし
ます。

594

Amazon Cognito

開発者ガイド移行ユーザートリガー
Trigger トリガー)

triggerSource 値

イベント

ユーザー移行

UserMigration_Auth

サインイン時のユーザー移行。

entication
ユーザー移行

otPassword

パスワードを忘れた場合のフロー実行時のユーザー移行

Trigger トリガー)

triggerSource 値

イベント

カスタムメッセージ

CustomMessage_SignUp

ユーザーがユーザープールにサインアップしたときのカス
タムメッセージ。

カスタムメッセージ

CustomMessage_Admi

管理者としてユーザーを作成
し、Amazon Cognito から一時
パスワードが送信されるときのカスタムメッセージ。

UserMigration_Forg

カスタムメッセージトリガー

nCreateUser

カスタムメッセージ

CustomMessage_ResendCodeカスタムメッセージ

CustomMessage_Forg
otPassword

カスタムメッセージ

CustomMessage_Upda
teUserAttribute

カスタムメッセージ

CustomMessage_Veri
fyUserAttribute

機能ごとの Lambda トリガーのソース

既存のユーザーが新しい確認
コードをリクエストしたときのカスタムメッセージ。
ユーザーがパスワードのリセットを要求したときのカス
タムメッセージ。
ユーザーが E メールアドレ
スまたは電話番号を変更し、Amazon Cognito が検証コードを送信したときのカスタムメッセージ。
ユーザーが E メールアドレ
スまたは電話番号を追加し595

Amazon Cognito

Trigger トリガー)

開発者ガイドtriggerSource 値

イベント、Amazon Cognito が検証コードを送信したときのカスタムメッセージ。

カスタムメッセージ

CustomMessage_Authenticationを設定したユーザーがSMSMFAサインインしたときのカスタムメッセージ。

サインアップ前の Lambda トリガー
Amazon Cognito は、新しいユーザーをサインアップする直前に、サインアップ前の AWS Lambda
関数をアクティブにします。サインアッププロセスの一環として、この関数を使用してカスタム検証を実行し、検証の結果に基づいて、登録リクエストを受け入れるか拒否することができます。
トピック• サインアップ前の Lambda フロー• サインアップ前の Lambda トリガーのパラメータ• サインアップのチュートリアル• サインアップ前の例: 登録済みドメインのユーザーを自動確認する• サインアップ前の例: すべてのユーザーを自動確認して自動検証する• サインアップ前の例:ユーザー名が 5 文字未満の場合にサインアップを拒否する

サインアップ前の Lambda トリガー

596

Amazon Cognito

開発者ガイド

サインアップ前の Lambda フロー
クライアントのサインアップフロー

サーバーのサインアップフロー

リクエストには、クライアントからの検証データが含まれます。このデータは、ユーザープール
SignUp と AdminCreateUser API メソッドに渡されたValidationData値から取得されます。

サインアップ前の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {"string": "string",. . .
サインアップ前の Lambda トリガー

597

Amazon Cognito

開発者ガイド},"validationData": {"string": "string",. . .
},"clientMetadata": {"string": "string",
. . .
}
},
"response": {"autoConfirmUser": "boolean","autoVerifyPhone": "boolean","autoVerifyEmail": "boolean"}}

サインアップ前のリクエストパラメータ
userAttributes
ユーザー属性を表す 1 つ以上の名前 - 値ペア。属性名はキーです。
validationData
新しいユーザーの作成リクエストでアプリケーションから Amazon Cognito に渡したユーザー
属性データを示す 1 つ以上のキーと値のペアです。この情報を AdminCreateUserまたは SignUp
API リクエストの ValidationData パラメータで Lambda 関数に送信します。
Amazon Cognito は、作成したユーザーの属性として ValidationData データを設定しません。
ValidationData は、サインアップ前の Lambda トリガーのために指定する一時的なユーザー情報です。
clientMetadata
サインアップ前のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1
つ、または複数のキー/値ペア。このデータは、、AdminCreateUser、、ForgotPasswordおよび の ClientMetadata API アクションで パラメータを使用して Lambda
AdminRespondToAuthChallenge関数に渡すことができますSignUp。

サインアップ前の Lambda トリガー

598

Amazon Cognito

開発者ガイド

サインアップ前のレスポンスパラメータ
ユーザーを自動的に確認する場合は、レスポンスで autoConfirmUser を true に設定できます。autoVerifyEmail を true に設定してユーザーの E メールを自動検証できます。autoVerifyPhone を true に設定してユーザーの電話番号を自動検証できます。
Note
サインアップ前 Lambda 関数が AdminCreateUser API によってトリガーされる
場合、レスポンスパラメータの autoVerifyPhone、autoVerifyEmail、および
autoConfirmUser は Amazon Cognito によって無視されます。

autoConfirmUser
ユーザーを自動的に確認する場合は true に、それ以外の場合は false に設定します。
autoVerifyEmailtrue に設定すると、サインアップしたユーザーの E メールアドレスを検証済みとして設定します。それ以外の場合は false です。autoVerifyEmail が true に設定されている場
合、email 属性は有効な null 以外の値である必要があります。それ以外の場合はエラーが発生し、ユーザーがサインアップを完了できません。
email 属性がエイリアスとして選択されている場合、autoVerifyEmail が設定されていると、ユーザーの E メールアドレスのエイリアスが自動的に作成されます。その E メールアドレ
スのエイリアスが既に存在している場合は、エイリアスは新規ユーザーに移動され、以前のユー
ザーの E メールアドレスは未検証としてマークされます。詳細については、「ログイン属性のカ
スタマイズ」を参照してください。
autoVerifyPhone
true に設定すると、サインアップしたユーザーの電話番号を検証済みとして設定します。それ以外の場合は false です。autoVerifyPhone が true に設定されている場
合、phone_number 属性は有効な null 以外の値である必要があります。それ以外の場合はエラーが発生し、ユーザーがサインアップを完了できません。
phone_number 属性がエイリアスとして選択されている場合、autoVerifyPhone が設定されていると、ユーザーの電話番号のエイリアスが自動的に作成されます。その電話番号のエイリア
スが既に存在している場合、エイリアスは新規ユーザーに移動され、以前のユーザーの電話番号
サインアップ前の Lambda トリガー

599

Amazon Cognito

開発者ガイドは未検証としてマークされます。詳細については、「ログイン属性のカスタマイズ」を参照してください。

サインアップのチュートリアル
サインアップ前の Lambda 関数は、ユーザーのサインアップ前にトリガーされます。
JavaScript、Android、iOS に関する以下の Amazon Cognito サインアップチュートリアルを参照してください。
プラットフォーム

チュートリアルJavaScript ID SDK

でユーザーをサインアップする JavaScript

Android ID SDK

Android でのユーザーのサインアップ

iOS ID SDK

iOS でのユーザーのサインアップ

サインアップ前の例: 登録済みドメインのユーザーを自動確認する
サインアップ前の Lambda トリガーを使用して、ユーザープールにサインアップする新しいユーザーを検証するためのカスタムロジックを追加できます。これは、新しいユーザーをサインアップする方法を示すサンプル JavaScript プログラムです。これは認証の一環としてサインアップ前のLambda トリガーを呼び出します。
JavaScript
var attributeList = [];var dataEmail = {Name: "email",
Value: "...", // your email here};
var dataPhoneNumber = {Name: "phone_number",Value: "...", // your phone number here with +country code and no delimiters infront};
var dataEmailDomain = {Name: "custom:domain",
サインアップ前の Lambda トリガー

600

Amazon Cognito

開発者ガイドValue: "example.com",};
var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(
dataPhoneNumber);
var attributeEmailDomain = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmailDomain);
attributeList.push(attributeEmail);
attributeList.push(attributePhoneNumber);
attributeList.push(attributeEmailDomain);var cognitoUser;
userPool.signUp("username","password",
attributeList,
null,function (err, result) {if (err) {alert(err);
return;}cognitoUser = result.user;
console.log("user name is " + cognitoUser.getUsername());});

以下は、ユーザープールサインアップ前の Lambda トリガーを使用してサインアップ直前に呼び出されるサンプル Lambda トリガーです。これは、カスタム属性の [custom:domain] を使用して特定の E メールドメインからの新しいユーザーを自動的に確認します。このカスタムドメインに属していない新しいユーザーは、ユーザープールには追加されますが、自動的には確認されません。
Node.jsexports.handler = (event, context, callback) => {// Set the user pool autoConfirmUser flag after validating the email domain
event.response.autoConfirmUser = false;// Split the email address so we can compare domains
サインアップ前の Lambda トリガー

601

Amazon Cognito

開発者ガイドvar address = event.request.userAttributes.email.split("@");// This example uses a custom attribute "custom:domain"if (event.request.userAttributes.hasOwnProperty("custom:domain")) {if (event.request.userAttributes["custom:domain"] === address[1]) {event.response.autoConfirmUser = true;}}// Return to Amazon Cognito
callback(null, event);};

Pythondef lambda_handler(event, context):# It sets the user pool autoConfirmUser flag after validating the email domain
event['response']['autoConfirmUser'] = False# Split the email address so we can compare domains
address = event['request']['userAttributes']['email'].split('@')# This example uses a custom attribute 'custom:domain'
if 'custom:domain' in event['request']['userAttributes']:
if event['request']['userAttributes']['custom:domain'] == address[1]:event['response']['autoConfirmUser'] = True
# Return to Amazon Cognito
return event

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"request": {"userAttributes": {"email": "testuser@example.com",
サインアップ前の Lambda トリガー

602

Amazon Cognito

開発者ガイド"custom:domain": "example.com"}},"response": {}}サインアップ前の例: すべてのユーザーを自動確認して自動検証する
次の例では、すべてのユーザーを確認し、ユーザーの email 属性と phone_number 属性を検証済
みとして設定します (属性が存在する場合)。また、エイリアシングが有効になっている場合は、自動検証が設定されていると、phone_number および email にエイリアスが作成されます。
Note
同じ電話番号のエイリアスが既に存在している場合は、エイリアスは新規ユーザーに移動
され、以前のユーザーの phone_number は未検証としてマークされます。E メールアドレ
スの場合も同様です。これを防ぐには、ユーザープール ListUsers API を使用して、新しいユーザーの電話番号または E メールアドレスをエイリアスとして既に使用している既存のユーザーがいるかどうかを確認できます。

Node.js
const handler = async (event) => {// Confirm the user
event.response.autoConfirmUser = true;// Set the email as verified if it is in the request
if (event.request.userAttributes.hasOwnProperty("email")) {event.response.autoVerifyEmail = true;}// Set the phone number as verified if it is in the request
if (event.request.userAttributes.hasOwnProperty("phone_number")) {event.response.autoVerifyPhone = true;}
return event;};export { handler };サインアップ前の Lambda トリガー

603

Amazon Cognito

開発者ガイドPythondef lambda_handler(event, context):# Confirm the user
event['response']['autoConfirmUser'] = True
# Set the email as verified if it is in the request
if 'email' in event['request']['userAttributes']:
event['response']['autoVerifyEmail'] = True
# Set the phone number as verified if it is in the request
if 'phone_number' in event['request']['userAttributes']:
event['response']['autoVerifyPhone'] = True
# Return to Amazon Cognito
return event

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"request": {"userAttributes": {"email": "user@example.com","phone_number": "+12065550100"}},"response": {}}サインアップ前の例:ユーザー名が 5 文字未満の場合にサインアップを拒否する
次の例は、サインアップリクエストのユーザー名の長さを調べます。次の例は、ユーザーが 5 文字
未満の名前を入力した場合、エラーを返します。

サインアップ前の Lambda トリガー

604

Amazon Cognito

開発者ガイドNode.jsexports.handler = (event, context, callback) => {// Impose a condition that the minimum length of the username is 5 is imposed on
all user pools.
if (event.userName.length < 5) {var error = new Error("Cannot register users with username less than theminimum length of 5");// Return error to Amazon Cognito
callback(error, event);}// Return to Amazon Cognito
callback(null, event);};

Pythondef lambda_handler(event, context):
if len(event['userName']) < 5:raise Exception("Cannot register users with username less than the minimum
length of 5")# Return to Amazon Cognito
return event

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"userName": "rroe","response": {}}サインアップ前の Lambda トリガー

605

Amazon Cognito

開発者ガイド確認後の Lambda トリガー
Amazon Cognito は、サインアップしたユーザーがユーザーアカウントを確認した後にこのトリガーを呼び出します。投稿確認 Lambda 関数では、カスタムメッセージを送信したり、カスタム API リ
クエストを追加したりできます。たとえば、外部システムにクエリを実行して、ユーザーに追加の属性を入力できます。Amazon Cognito は、管理者認証情報を使用して作成したユーザーではなく、
ユーザープールにサインアップしたユーザーに対してのみこのトリガーを呼び出します。
リクエストには、確認されたユーザーの現在の属性が含まれています。
トピック• 確認後の Lambda フロー• 確認後の Lambda トリガーのパラメータ• ユーザー確認チュートリアル• 確認後の例

確認後の Lambda フロー
クライアントの確認サインアップフロー

確認後の Lambda トリガー

606

Amazon Cognito

開発者ガイドサーバーの確認サインアップフロー

パスワードを忘れた場合の確認フロー

確認後の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {"string": "string",. . .
},"clientMetadata": {"string": "string",
. . .
}
},
確認後の Lambda トリガー

607

Amazon Cognito

開発者ガイド"response": {}}確認後のリクエストパラメータ
userAttributes
ユーザー属性を表す 1 つ以上のキーバリューペア。
clientMetadata
確認後のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。このデータ
は、AdminConfirmSignUp、ConfirmForgotPassword、ConfirmSignUp、および SignUp の API アクションで ClientMetadata パラメータを使用することによって Lambda 関数に渡すことができます。
確認後のレスポンスパラメータ
レスポンスで返される追加の情報は想定されていません。

ユーザー確認チュートリアル
確認後の Lambda 関数は、Amazon Cognito が新しいユーザーを確認した直後にトリガーされます。JavaScript、Android、iOS に関する以下のユーザー確認チュートリアルを参照してください。
プラットフォーム

チュートリアルJavaScript ID SDKJavaScript でのユーザーの確認

Android ID SDK

Android でのユーザーの確認

iOS ID SDK

iOS でのユーザーの確認

確認後の例
この Lambda 関数の例では、Amazon SES を使用してユーザーに確認 E メールメッセージを送信します。詳細については、Amazon Simple Email Service デベロッパーガイドを参照してください。
確認後の Lambda トリガー

608

Amazon Cognito

開発者ガイドNode.js// Import required AWS SDK clients and commands for Node.js. Note that this requires// the `@aws-sdk/client-ses` module to be either bundled with this code or included// as a Lambda layer.
import { SES, SendEmailCommand } from "@aws-sdk/client-ses";const ses = new SES();const handler = async (event) => {if (event.request.userAttributes.email) {await sendTheEmail(event.request.userAttributes.email,`Congratulations ${event.userName}, you have been confirmed.`);}
return event;};const sendTheEmail = async (to, body) => {const eParams = {Destination: {ToAddresses: [to],},Message: {Body: {
Text: {
Data: body,},},
Subject: {Data: "Cognito Identity Provider registration completed",},},// Replace source_email with your SES validated email address
Source: "<source_email>",};try {await ses.send(new SendEmailCommand(eParams));} catch (err) {console.log(err);}};

確認後の Lambda トリガー

609

Amazon Cognito

開発者ガイドexport { handler };Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"request": {"userAttributes": {"email": "user@example.com","email_verified": true}},
"response": {}}認証前の Lambda トリガー
Amazon Cognito は、ユーザーがサインインしようとするときにこのトリガーを呼び出し、準備アクションを実行するカスタム認証を作成できるようにします。たとえば、認証リクエストを拒否した
り、外部システムへのセッションデータを記録したりできます。
Note
ユーザーが存在しない場合や、ユーザープールに既にセッションがある場合、このLambda トリガーはアクティブになりません。ユーザープールアプリクライアントのPreventUserExistenceErrors 設定が ENABLED になっている場合、Lambda トリガー
はアクティブになります。

トピック• 認証フローの概要• 認証前の Lambda トリガーのパラメータ
認証前の Lambda トリガー

610

Amazon Cognito

開発者ガイド• 事前認証の例

認証フローの概要

リクエストには、アプリケーションからユーザープールの InitiateAuth およびAdminInitiateAuth API オペレーションに渡す ClientMetadata 値のクライアント検証データが含まれます。
詳細については、「ユーザープール認証フロー」を参照してください。

認証前の Lambda トリガー

611

Amazon Cognito

開発者ガイド認証前の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {"string": "string",. . .
},"validationData": {"string": "string",. . .
},"userNotFound": boolean},"response": {}}認証前のリクエストパラメータ
userAttributes
ユーザー属性を表す 1 つ以上の名前 - 値ペア。
userNotFound
ユーザープールクライアントの PreventUserExistenceErrors を ENABLED に設定すると、Amazon Cognito はこのブール値を入力します。
validationData
ユーザーのサインインリクエストに検証データを含む 1 つ以上のキーバリューペア。このデータを Lambda 関数に渡すには、InitiateAuth および AdminInitiateAuth API アクションでClientMetadata パラメータを使用します。

認証前の Lambda トリガー

612

Amazon Cognito

開発者ガイド

認証前のレスポンスパラメータ
Amazon Cognito は、レスポンスに追加の戻り情報を期待していません。関数がエラーを返してサインイン試行を拒否したり、API オペレーションを使用してリソースをクエリしたり変更できます。

事前認証の例
このサンプル関数は、特定のアプリクライアントからユーザープールにサインインされるのを防ぎます。事前認証の Lambda 関数は、ユーザーが既存のセッションを持っている場合は呼び出されないため、この関数はブロックするアプリクライアント ID の新規セッションのみを防止します。
Node.js
const handler = async (event) => {if (event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked") {throw new Error("Cannot authenticate users from this user pool app client");}
return event;};export { handler };Pythondef lambda_handler(event, context):
if event['callerContext']['clientId'] == "<user pool app client id to be
blocked>":raise Exception("Cannot authenticate users from this user pool app client")# Return to Amazon Cognito
return event

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。

認証前の Lambda トリガー

613

Amazon Cognito

開発者ガイドJSON{"callerContext": {"clientId": "<user pool app client id to be blocked>"},"response": {}}認証後の Lambda トリガー
Amazon Cognito はユーザーのサインイン後にこのトリガーを呼び出すため、Amazon Cognito がユーザーを認証した後にカスタムロジックを追加できます。
トピック• 認証フローの概要• 認証後の Lambda トリガーのパラメータ• 認証チュートリアル• 認証後の例

認証後の Lambda トリガー

614

Amazon Cognito

開発者ガイド

認証フローの概要

詳細については、「ユーザープール認証フロー」を参照してください。

認証後の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {認証後の Lambda トリガー

615

Amazon Cognito

開発者ガイド"string": "string",. . .
},"newDeviceUsed": boolean,"clientMetadata": {"string": "string",
. . .
}
},
"response": {}}認証後のリクエストパラメータ
newDeviceUsed
このフラグは、ユーザーが新しいデバイスにサインインしているかどうかを示します。Amazon
Cognito は、ユーザープールの記憶済みデバイス値が Always または User Opt-In である場合にのみ、このフラグを設定します。
userAttributes
ユーザー属性を表す 1 つ以上の名前 - 値ペア。
clientMetadata
認証後のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。このデータを Lambda 関数に渡すには、AdminRespondToAuthChallenge およびRespondToAuthChallenge API アクションで ClientMetadata パラメータを使用します。Amazon
Cognito は、認証後関数に渡すリクエストの AdminInitiateAuth および InitiateAuth API オペレー
ションの ClientMetadata パラメータからのデータを含めません。
認証後のレスポンスパラメータ
Amazon Cognito は、レスポンスに追加の返品情報を期待しません。関数では、API オペレーションを使用してリソースをクエリして変更したり、イベントメタデータを外部システムに記録することができます。

認証チュートリアル
Amazon Cognito がユーザーにサインインした直後、認証後の Lambda 関数をアクティブ化します。JavaScript、Android、iOS に関する以下のサインインチュートリアルを参照してください。
認証後の Lambda トリガー

616

Amazon Cognito

開発者ガイドプラットフォーム

チュートリアルJavaScript ID SDKJavaScript でのユーザーのサインイン

Android ID SDK

Android でのユーザーのサインイン

iOS ID SDK

iOS でのユーザーのサインイン

認証後の例
この認証後の Lambda 関数のサンプルは、正常に行われたサインインからのデータをCloudWatch
Logs に送信します。
Node.js
const handler = async (event) => {// Send post authentication data to Amazon CloudWatch logs
console.log("Authentication successful");console.log("Trigger function =", event.triggerSource);
console.log("User pool = ", event.userPoolId);
console.log("App client ID = ", event.callerContext.clientId);
console.log("User ID = ", event.userName);
return event;};export { handler }Pythonimport os
def lambda_handler(event, context):# Send post authentication data to Cloudwatch logs
print ("Authentication successful")
print ("Trigger function =", event['triggerSource'])print ("User pool = ", event['userPoolId'])
print ("App client ID = ", event['callerContext']['clientId'])
print ("User ID = ", event['userName'])

認証後の Lambda トリガー

617

Amazon Cognito

開発者ガイド# Return to Amazon Cognito
return event

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"triggerSource": "testTrigger","userPoolId": "testPool","userName": "testName","callerContext": {"clientId": "12345"},"response": {}}認証後の Lambda トリガー

618

Amazon Cognito

開発者ガイドカスタム認証チャレンジの Lambda トリガー

これらの Lambda トリガーは、ユーザープールのカスタム認証フローの一環として独自のチャレンジを発行し、検証します。
認証チャレンジの定義
Amazon Cognito は、このトリガーを呼び出してカスタム認証フローを開始します。
認証チャレンジの作成
Amazon Cognito は、このトリガーを [Define Auth Challenge] (認証チャレンジの定義後に呼び出して、カスタムチャレンジを作成します。
認証チャレンジレスポンスの検証
Amazon Cognito は、このトリガーが呼び出して、カスタムチャレンジに対するエンドユーザー
からのレスポンスが有効であるかどうかを検証します。

チャレンジの Lambda トリガー

619

Amazon Cognito

開発者ガイド

これらのチャレンジ Lambda トリガーに新しいチャレンジタイプに組み込むことができます。例えば、これらのチャレンジタイプには、 CAPTCHAsまたは の動的なチャレンジの質問が含まれる場合があります。
ユーザープール InitiateAuthと RespondToAuthChallenge APIメソッドを使用して、認証を 2 つの一般的なステップに一般化できます。
このフローでは、認証が失敗するか、トークンが発行されるまで、ユーザーは引き続きチャレンジに回答して認証を行います。これら 2 つのAPI呼び出しを繰り返して、異なるチャレンジを含めることができます。
Note
Amazon Cognito でホストされた UI は、カスタム認証チャレンジの Lambda トリガーを使用したカスタム認証フローをサポートしていません。

トピック• 認証チャレンジの定義の Lambda トリガー
• 認証チャレンジの作成の Lambda トリガー
• 認証チャレンジレスポンスの検証の Lambda トリガー

チャレンジの Lambda トリガー

620

Amazon Cognito

開発者ガイド認証チャレンジの定義の Lambda トリガー

認証チャレンジの定義
Amazon Cognito は、このトリガーを呼び出してカスタム認証フローを開始します。
この Lambda トリガーのリクエストには、session が含まれます。session パラメータは、現在の認証プロセスでユーザーに提示されたすべてのチャレンジが含まれる配列です。リクエストには、対応する結果も含まれます。session 配列は、チャレンジの詳細 (ChallengeResult) を時系列に保存します。チャレンジ session[0] は、ユーザーが最初に受け取るチャレンジを表します。
Amazon Cognito では、カスタムチャレンジを発行する前にユーザーパスワードを検証させることができます。リクエストレートクォータの認証カテゴリに関連付けられた Lambda トリガーは、カス
タムチャレンジフローでSRP認証を実行するときに実行されます。以下は、そのプロセスの概要です。

チャレンジの Lambda トリガー

621

Amazon Cognito

開発者ガイド1. アプリは、AuthParameters マップを使用して InitiateAuth または AdminInitiateAuthを呼び出してサインインを開始します。パラメータには CHALLENGE_NAME: SRP_A,、SRP_A お
よび USERNAME の値を含める必要があります。
2. Amazon Cognito は、challengeName: SRP_A と challengeResult: true を含む初期セッションで、認証チャレンジの定義 Lambda トリガーを呼び出します。
3. Lambda 関数は、これらの入力を受け取った後、challengeName:PASSWORD_VERIFIER、issueTokens: false、failAuthentication: false で応答します。
4. パスワードの検証が成功すると、Amazon Cognito challengeName: PASSWORD_VERIFIER とchallengeResult: true が含まれる新しいセッションで Lambda 関数を再度呼び出します。
5. カスタムチャレンジを開始するために、Lambda 関数は challengeName:
CUSTOM_CHALLENGE、issueTokens: false、および failAuthentication: false で応答します。パスワード検証でカスタム認証フローを開始したくない場合は、CHALLENGE_NAME:CUSTOM_CHALLENGE を含む AuthParameters マップでサインインを開始できます。
6. チャレンジループは、すべてのチャレンジが回答されるまで繰り返します。
トピック• 認証チャレンジの定義の Lambda トリガーのパラメータ• 認証チャレンジの定義の例
認証チャレンジの定義の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {"string": "string",. . .
},"session": [ChallengeResult,. . .
],チャレンジの Lambda トリガー

622

Amazon Cognito

開発者ガイド"clientMetadata": {"string": "string",. . .
},"userNotFound": boolean},"response": {"challengeName": "string","issueTokens": boolean,"failAuthentication": boolean}}

認証チャレンジの定義のリクエストパラメータ
Amazon Cognito が Lambda 関数を呼び出すときに、次のパラメータを提供します。
userAttributes
ユーザー属性を表す 1 つ以上の名前 - 値ペア。
userNotFound
ユーザープールクライアントの PreventUserExistenceErrors が ENABLED に設定されている場合に、Amazon Cognito が入力するブール値です。true の値は、ユーザー ID (ユーザー名、
メールアドレス、その他の詳細など) が既存のいずれのユーザーとも一致しなかったことを意味します。PreventUserExistenceErrors が ENABLED に設定されている場合、サービスは存在しないユーザーをアプリに通知しません。Lambda 関数が同じユーザーエクスペリエンスを維持し、レイテンシーを考慮することをお勧めします。この方法では、発信者はユーザーが存在す
る場合と存在しない場合で異なる動作を検出することができません。
セッション
ChallengeResult 要素の配列。それぞれに以下の要素が含まれます。
challengeName
次のチャレンジタイプのいずれか:

CUSTOM_CHALLENGE、SRP_A、PASSWORD_VERIFIER、SMS_MFA、、SOFTWARE_TOKEN_MFADEVIまたは ADMIN_NO_SRP_AUTH。
認証チャレンジの定義関数が多要素認証を設定したユーザーにPASSWORD_VERIFIERチャレンジを発行すると、Amazon Cognito はそれを SMS_MFAまたは SOFTWARE_TOKEN_MFAチャ
チャレンジの Lambda トリガー

623

Amazon Cognito

開発者ガイドレンジでフォローアップします。これらは、多要素認証コードのプロンプトです。関数には、
SMS_MFAおよび SOFTWARE_TOKEN_MFAチャレンジからの入力イベントの処理を含めます。
認証MFAチャレンジの定義関数でチャレンジを呼び出す必要はありません。
Important
ユーザーが正常に認証され、トークンが発行されるべきかを判断するときは、常に
define auth challenge 関数で challengeName をチェックし、予想された値と一致することを確認します。

challengeResult
ユーザーが正常にチャレンジを完了した場合は true に、それ以外の場合は false に設定します。
challengeMetadata
カスタムチャレンジの名前を入力します。challengeName が CUSTOM_CHALLENGE である
場合にのみ使用されます。
clientMetadata
認証チャレンジの定義のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。このデータを Lambda 関数に渡すには、
AdminRespondToAuthChallengeおよび RespondToAuthChallengeAPIオペレーションでClientMetadataパラメータを使用できます。認証チャレンジ定義関数を呼び出すリクエストには、 AdminInitiateAuthおよび InitiateAuthAPIオペレーションの ClientMetadata パラメータに渡されたデータは含まれません。
認証チャレンジの定義のレスポンスパラメータ
レスポンスで、認証プロセスの次のステージを返すことができます。
challengeName
次のチャレンジの名前を含む文字列。ユーザーに新しいチャレンジを提示する場合は、ここでチャレンジ名を指定します。

チャレンジの Lambda トリガー

624

Amazon Cognito

開発者ガイドissueTokens
ユーザーが認証チャレンジを十分に完了したと判断した場合、true に設定します。ユーザーがチャレンジを十分に満たしていない場合は、false に設定します。
failAuthentication
現在の認証プロセスを終了する場合は、true に設定します。現在の認証プロセスを続行するには、false に設定します。
認証チャレンジの定義の例
この例では、認証用に一連のチャレンジを定義し、それらのチャレンジがすべて正常に完了した場合にのみトークンを発行します。
Node.js
const handler = async (event) => {if (event.request.session.length == 1 &&event.request.session[0].challengeName == "SRP_A") {event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = "PASSWORD_VERIFIER";} else if (event.request.session.length == 2 &&event.request.session[1].challengeName == "PASSWORD_VERIFIER" &&event.request.session[1].challengeResult == true
) {event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = "CUSTOM_CHALLENGE";} else if (event.request.session.length == 3 &&event.request.session[2].challengeName == "CUSTOM_CHALLENGE" &&event.request.session[2].challengeResult == true
) {event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = "CUSTOM_CHALLENGE";} else if (event.request.session.length == 4 &&チャレンジの Lambda トリガー

625

Amazon Cognito

開発者ガイドevent.request.session[3].challengeName == "CUSTOM_CHALLENGE" &&event.request.session[3].challengeResult == true
) {event.response.issueTokens = true;
event.response.failAuthentication = false;} else {event.response.issueTokens = false;
event.response.failAuthentication = true;}
return event;};export { handler }認証チャレンジの作成の Lambda トリガー

チャレンジの Lambda トリガー

626

Amazon Cognito

開発者ガイド認証チャレンジの作成
認証チャレンジの定義トリガーの一部としてカスタムチャレンジが指定されている場
合、Amazon Cognito は認証チャレンジの定義後にこのトリガーを呼び出します。これにより、カスタム認証フローを作成します。
この Lambda トリガーは、ユーザーに提示するチャレンジを作成するために呼び出されます。このLambda トリガーのリクエストには challengeName と session が含まれます。challengeName
は文字列であり、ユーザーに対する次のチャレンジの名前です。この属性の値は、認証チャレンジの
定義の Lambda トリガーに設定されています。
チャレンジループは、すべてのチャレンジに応答するまで繰り返されます。
トピック• 認証チャレンジの作成 Lambda トリガーパラメータ• 認証チャレンジの作成の例
認証チャレンジの作成 Lambda トリガーパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {"string": "string",. . .
},"challengeName": "string","session": [ChallengeResult,. . .
],"clientMetadata": {"string": "string",. . .
},"userNotFound": boolean
チャレンジの Lambda トリガー

627

Amazon Cognito

開発者ガイド},"response": {"publicChallengeParameters": {"string": "string",. . .
},"privateChallengeParameters": {"string": "string",. . .
},"challengeMetadata": "string"}}

認証チャレンジの作成のリクエストパラメータ
userAttributes
ユーザー属性を表す 1 つ以上の名前 - 値ペア。
userNotFound
このブール値は、ユーザープールクライアントで PreventUserExistenceErrors が
ENABLED に設定されている場合に設定されます。
challengeName
新しいチャレンジの名前。
sessionsession 要素は ChallengeResult 要素の配列であり、それぞれに以下の要素が含まれます。
challengeName
チャレンジタイプ。"CUSTOM_CHALLENGE"、"PASSWORD_VERIFIER"、"SMS_MFA"、"DEVICE_SRP_AUTH"、"DEのいずれかです。
challengeResult
ユーザーが正常にチャレンジを完了した場合は true に、それ以外の場合は false に設定します。
チャレンジの Lambda トリガー

628

Amazon Cognito

開発者ガイドchallengeMetadata
カスタムチャレンジの名前を入力します。challengeName が "CUSTOM_CHALLENGE" である場合にのみ使用されます。
clientMetadata
認証チャレンジの作成のトリガーに指定する Lambda 関数へのカスタム入力として提供でき
る 1 つ、または複数のキー/値ペア。このデータは、AdminRespondToAuthChallenge および RespondToAuthChallenge API アクションで ClientMetadata パラメータを使用することに
よって Lambda 関数に渡すことができます。create auth challenge 関数を呼び出すリクエストに、AdminInitiateAuth および InitiateAuth API オペレーションで ClientMetadata パラメータに渡されたデータは含まれません。
認証チャレンジの作成のレスポンスパラメータ
publicChallengeParameters
クライアントアプリケーションでユーザーに提示されるチャレンジに使用する 1 つ以上のキー 値ペア。このパラメータには、ユーザーにチャレンジを正確に提示するために必要なすべての情報を含める必要があります。
privateChallengeParameters
このパラメータは、認証チャレンジレスポンスの検証の Lambda トリガー以外では使用されません。このパラメータには、チャレンジに対するユーザーのレスポンスを検証するために必要な情報のすべてを含める必要があります。つまり、publicChallengeParameters には、ユーザーに示される質問が含まれ、privateChallengeParameters には、質問に対する有効な回答が含まれます。
challengeMetadata
カスタムチャレンジの名前 (カスタムチャレンジの場合)。
認証チャレンジの作成の例
CAPTCHA はユーザーに対するチャレンジとして作成されます。CAPTCHA イメージの URL が"captchaUrl" としてパブリックチャレンジパラメータに追加され、想定される回答がプライベート
チャレンジパラメータに追加されます。

チャレンジの Lambda トリガー

629

Amazon Cognito

開発者ガイドNode.js
const handler = async (event) => {if (event.request.challengeName !== "CUSTOM_CHALLENGE") {return event;}if (event.request.session.length === 2) {event.response.publicChallengeParameters = {};event.response.privateChallengeParameters = {};event.response.publicChallengeParameters.captchaUrl = "url/123.jpg";
event.response.privateChallengeParameters.answer = "5";}if (event.request.session.length === 3) {event.response.publicChallengeParameters = {};event.response.privateChallengeParameters = {};event.response.publicChallengeParameters.securityQuestion ="Who is your favorite team mascot?";
event.response.privateChallengeParameters.answer = "Peccy";}
return event;};export { handler }チャレンジの Lambda トリガー

630

Amazon Cognito

開発者ガイド認証チャレンジレスポンスの検証の Lambda トリガー

認証チャレンジレスポンスの検証
Amazon Cognito は、このトリガーが呼び出して、カスタム認証チャレンジに対するユーザーからのレスポンスが有効であるかどうかを検証します。これはユーザープールのカスタム認証フ
ローの一環です。
このトリガーのリクエストには privateChallengeParameters および challengeAnswer パラ
メータが含まれます。privateChallengeParameters 値は、認証チャレンジの作成の Lambda
トリガーによって返され、ユーザーからの期待されるレスポンスが含まれます。challengeAnswer
パラメータには、チャレンジに対するユーザーのレスポンスが含まれます。
レスポンスには、answerCorrect 属性が含まれます。ユーザーがチャレンジを正常に完了すると、Amazon Cognito は属性値を true に設定します。ユーザーがチャレンジを正常に完了しなかった場合、Amazon Cognito は値を false に設定します。

チャレンジの Lambda トリガー

631

Amazon Cognito

開発者ガイドチャレンジループは、すべてのチャレンジが回答されるまで繰り返します。
トピック• 認証チャレンジの検証の Lambda トリガーのパラメータ• 認証チャレンジレスポンスの確認の例
認証チャレンジの検証の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {"string": "string",. . .
},"privateChallengeParameters": {"string": "string",. . .
},"challengeAnswer": "string","clientMetadata": {"string": "string",. . .
},"userNotFound": boolean},"response": {"answerCorrect": boolean}}

認証チャレンジの検証のリクエストパラメータ
userAttributes
このパラメータには、ユーザー属性を表す 1 つ以上の名前-値ペアが含まれます。
チャレンジの Lambda トリガー

632

Amazon Cognito

開発者ガイドuserNotFound
Amazon Cognito がユーザープールクライアントの PreventUserExistenceErrors を
ENABLED に設定すると、Amazon Cognito はこのブール値を入力します。
privateChallengeParameters
このパラメータは、認証チャレンジの作成トリガーから取得されます。ユーザーがチャレンジに合格したかどうかを判断するために、Amazon Cognito はパラメータをユーザーのchallengeAnswer パラメータと比較します。
このパラメータには、チャレンジに対するユーザーのレスポンスを検証するために必要な情報のすべてが含まれます。その情報には、Amazon Cognito がユーザーに提示する質問 (publicChallengeParameters) と、その質問に対する有効な回答(privateChallengeParameters) が含まれます。認証チャレンジレスポンスの検証の Lambda
トリガーのみがこのパラメータを使用します。
challengeAnswer
このパラメータ値は、チャレンジに対するユーザーの回答です。
clientMetadata
このパラメータには、認証チャレンジの検証のトリガーの Lambda 関数へのカスタム入力として提供できる 1 つまたは複数のキーバリューペアが含まれています。このデータを Lambda 関数に渡すには、AdminRespondToAuthChallenge および RespondToAuthChallenge API オペレーショ
ンで ClientMetadata パラメータを使用します。Amazon Cognito は、認証チャレンジの検証関数に渡すリクエストの AdminInitiateAuth および InitiateAuth API オペレーションの ClientMetadata
パラメータからのデータを含めません。
認証チャレンジの検証のレスポンスパラメータ
answerCorrect
ユーザーがチャレンジを正常に完了した場合、Amazon Cognito はこのパラメータを true に設定します。ユーザーがチャレンジを正常に完了しなかった場合、Amazon Cognito はパラメータを false に設定します。

チャレンジの Lambda トリガー

633

Amazon Cognito

開発者ガイド認証チャレンジレスポンスの確認の例
この例では、チャレンジに対するユーザーのレスポンスが期待されるレスポンスに一致するかどうかを Lambda 関数がチェックします。ユーザーのレスポンスが期待されるレスポンスと一致した場
合、Amazon Cognito は answerCorrect パラメータを true に設定します。
Node.js
const handler = async (event) => {if (event.request.privateChallengeParameters.answer ==event.request.challengeAnswer) {event.response.answerCorrect = true;} else {event.response.answerCorrect = false;}
return event;};export { handler };トークン生成前の Lambda トリガー
Amazon Cognito は、このトリガーをトークンの生成前に呼び出すため、ユーザープールトークンのクレームをカスタマイズできます。バージョン 1 または V1_0 のトークン生成前トリガーイベントの基本機能を使用して、アイデンティティ (ID) トークンをカスタマイズできます。高度なセキュリ
ティ機能が有効なユーザープールでは、アクセストークンのカスタマイズにより、バージョン 2 ま
たは V2_0 のトリガーイベントを生成できます。
Amazon Cognito は、ID トークンに書き込むデータが含まれているリクエストとして V1_0 イベントを関数に送信します。V2_0 イベントは、Amazon Cognito が ID トークンとアクセストークンの両方に書き込むデータが含まれている 1 つのリクエストです。両方のトークンをカスタマイズするには、最新のトリガーバージョンを使用するように関数を更新し、同じレスポンスで両方のトークン用のデータを送信する必要があります。
この Lambda トリガーでは、Amazon Cognito がアプリケーションに発行する前の ID トークンとアクセストークンの一部のクレームを追加、削除、変更できます。この機能を使用するには、Amazon
トークン生成前の Lambda トリガー

634

Amazon Cognito

開発者ガイドCognito ユーザープールコンソールから Lambda 関数を関連付けるか、 AWS Command LineInterface (AWS CLI) でユーザープール LambdaConfig を更新します。

イベントバージョン
ユーザープールは、トークン生成前トリガーイベントのさまざまなバージョンを Lambda 関数に配信できます。V1_0 トリガーは、ID トークンを変更するためのパラメータを配信します。V2_0 トリ
ガーは、以下のパラメータを配信します。
1. V1_0 トリガーの関数。
2. アクセストークンをカスタマイズする機能。
3. ID およびアクセストークンのクレーム値に複雑なデータ型を渡す機能：
• 文字列
• 数
• ブール値• 文字列、数値、ブール値、またはこれらの組み合わせの配列• JSONNote
ID トークンでは、、、phone_number_verified、email_verifiedupdated_atおよびを除くクレームの値に複雑なオブジェクトを入力できますaddress。

ユーザープールはデフォルトでV1_0イベントを配信します。V2_0 イベントを送信するようにユー
ザープールを設定するには、Amazon Cognito コンソールでトリガーを設定するときに、基本機能のトリガーイベントバージョン + アクセストークンのカスタマイズを選択します。 UpdateUserPool
または CreateUserPool APIリクエストLambdaVersionのLambdaConfigパラメータで の値を設定することもできます。V2_0 イベントによるアクセストークンのカスタマイズには、追加料金が適用されます。詳細については、「Amazon Cognito の料金」を参照してください。

除外されたクレームとスコープ
Amazon Cognito は、アクセストークンと ID トークンに対して追加、変更、または抑制できるク
レームとスコープを制限します。Lambda 関数がこれらのクレームのいずれかに値を設定しようとすると、Amazon Cognito は元のクレーム値 (リクエストに存在する場合) を含むトークンを発行します。
トークン生成前の Lambda トリガー

635

Amazon Cognito

開発者ガイド共有クレーム• acr• amr• at_hash• auth_time
• azp
• exp
• iat
• iss
• jti
• nbf
• nonce• origin_jti• sub• token_use
ID トークンのクレーム• identities• aud• cognito:username
アクセストークンのクレーム• username• client_id• scopeNote
アクセストークンのスコープは scopesToAdd および scopesToSuppress レスポンス値で変更できますが、scope クレームを直接変更することはできません。ユーザープールの
トークン生成前の Lambda トリガー

636

Amazon Cognito

開発者ガイドリザーブドスコープ aws.cognito.signin.user.admin など、aws.cognito で始まるスコープを追加することはできません。
• device_key• event_id• version
以下のプレフィックスを含むクレームを追加またはオーバーライドすることはできませんが、これらをトークンで抑制または非表示にすることはできます。
• dev:• cognito:
IAM ロールはcognito:roles、デフォルトでユーザープールグループにリンクcognito:preferred_roleされています。これらのクレームを抑制するには、
claimsToSuppress オブジェクトcognito:groupsで を抑制します。
aud クレームをアクセストークンに追加することはできますが、その値は現在のセッションのアプリクライアント ID と一致する必要があります。リクエストイベントのクライアント ID
は、event.callerContext.clientId から取得できます。

ID トークンのカスタマイズ
トークン生成前の Lambda トリガーを使用すると、ユーザープールのアイデンティティ (ID) トーク
ンの内容をカスタマイズできます。ID トークンは、ウェブまたはモバイルアプリにサインインするためのユーザー属性を、信頼できる ID ソースから提供します。ID トークンの詳細については、「IDトークンの使用」を参照してください。
トークン生成前の Lambda トリガーでは、ID トークンを使用して以下のような操作を行います。
• 実行時に、ユーザーが ID プールからリクエストするIAMロールを変更します。
• 外部ソースからユーザー属性を追加します。
• 既存のユーザー属性値を追加または置換します。
• アプリに渡されるはずのユーザー属性が、ユーザーの許可されたスコープや、アプリクライアントに付与した属性の読み取りアクセス権により開示されることを抑制します。
トークン生成前の Lambda トリガー

637

Amazon Cognito

開発者ガイドアクセストークンのカスタマイズ
トークン生成前の Lambda トリガーを使用すると、ユーザープールのアクセストークンの内容をカスタマイズできます。アクセストークンは、Amazon Cognito トークン認証APIオペレーションや
サードパーティー などのアクセス保護されたリソースから情報を取得することをユーザーに許可しますAPIs。Amazon Cognito では、クライアント認証情報付与を使用して (M2M) 認証用の machineto-machineアクセストークンを生成できますが、M2M リクエストはトークン生成前のトリガー関数を呼び出しず、カスタマイズされたアクセストークンを発行できません。アクセストークンの詳細については、「アクセストークンの使用」を参照してください。
トークン生成前の Lambda トリガーでは、アクセストークンを使用して以下のような操作を行います。
• scope クレームに OAuth 2.0 スコープを追加または抑制します。例えば、スコープ のみを割り当てた Amazon Cognito ユーザープールAPI認証によって生成されたアクセストークンにスコープを追加できますaws.cognito.signin.user.admin。
• ユーザープールグループのユーザーのメンバーシップを変更します。
• Amazon Cognito アクセストークンにまだ存在していないクレームを追加します。
• アプリに渡されるはずのクレームの開示を抑制します。
ユーザープールでのアクセスのカスタマイズをサポートするには、トリガーリクエストの更新バー
ジョンを生成するようにユーザープールを設定する必要があります。ユーザープールを更新するには、次の手順に従います。
AWS Management Console
トークン生成前の Lambda トリガーでアクセストークンのカスタマイズをサポートするには1.

Amazon Cognito コンソールに移動し、[ユーザープール] を選択します。

2.

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

3.

まだアクティブ化していない場合は、アドバンストセキュリティタブからアドバンストセ
キュリティ機能を有効にします。

4.

[] (ユーザープールのプロパティ) タブを選択し、[Lambda triggers] (Lambda トリガー) を検
索します。

5.

トークン生成前トリガーを追加または編集します。

6.

[Lambda 関数を割り当てる] で Lambda 関数を選択します。

トークン生成前の Lambda トリガー

638

Amazon Cognito

7.

開発者ガイド[基本機能 + アクセストークンのカスタマイズ] の [トリガーイベントバージョン] を選択します。この設定により、Amazon Cognito が関数に送信するリクエストパラメータが更新され、アクセストークンをカスタマイズするためのフィールドが含まれるようになります。

User pools API
トークン生成前の Lambda トリガーでアクセストークンのカスタマイズをサポートするにはCreateUserPool または UpdateUserPoolAPIリクエストを生成します。デフォルト値に設定しないすべてのパラメータには、値を指定する必要があります。詳細については、「ユーザープール
設定の更新」を参照してください。
リクエストの LambdaVersion パラメータに以下の内容を含めます。LambdaVersion の値がV2_0 である場合、ユーザープールはアクセストークンをカスタマイズするためのパラメータを追加します。特定の関数バージョンを呼び出すには、関数バージョンARNを の値として Lambda関数を使用しますLambdaArn。
"PreTokenGenerationConfig": {"LambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction","LambdaVersion": "V2_0"},

その他のリソース• Amazon Cognito ユーザープールのアクセストークンをカスタマイズする方法
トピック• トークン生成前の Lambda トリガーのソース• トークン生成前の Lambda トリガーのパラメータ• トークン生成前トリガーイベントバージョン 2 の例:クレーム、スコープ、グループの追加と非表
示• トークン生成前イベントバージョン 2 の例: 複雑なオブジェクトでクレームを追加する• トークン生成前イベントバージョン 1 の例: 新しいクレームの追加と既存のクレームの非表示• トークン生成前イベントバージョン 1 の例: ユーザーグループのメンバーシップの変更

トークン生成前の Lambda トリガー

639

Amazon Cognito

開発者ガイドトークン生成前の Lambda トリガーのソース
triggerSource 値

イベント

TokenGeneration_HostedAuth

認証時に Amazon Cognito のホストされた UIのサインインページから呼び出されます。

TokenGeneration_Authentication

ユーザー認証フローが完了した後に呼び出されます。

TokenGeneration_NewPassword

管理者によってユーザーが作成された後に呼び出されます。このフローは、ユーザーが一時パ

Challenge

スワードを変更する必要があるときに呼び出されます。
TokenGeneration_Authenticat
eDevice
TokenGeneration_RefreshTokens

ユーザーデバイスの認証の終了時に呼び出されます。
ユーザーが ID およびアクセスのトークンを更新しようとしたときに呼び出されます。

トークン生成前の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。トークン生成前の Lambda
トリガーをユーザープールに追加するときに、トリガーバージョンを選択できます。このバージョン
により、Amazon Cognito がアクセストークンをカスタマイズするための追加パラメータを含むリク
エストを Lambda 関数に渡すかどうかが決まります。
Version 1
バージョン 1 トークンは、ID トークンでグループメンバーシップ、IAMロール、および新しいクレームを設定できます。
{"request": {"userAttributes": {"string": "string"},"groupConfiguration": {"groupsToOverride": [トークン生成前の Lambda トリガー

640

Amazon Cognito

開発者ガイド"string","string"],"iamRolesToOverride": ["string","string"],"preferredRole": "string"},"clientMetadata": {"string": "string"}},"response": {"claimsOverrideDetails": {"claimsToAddOrOverride": {"string": "string"},"claimsToSuppress": ["string","string"],"groupOverrideDetails": {"groupsToOverride": ["string","string"],"iamRolesToOverride": ["string","string"],"preferredRole": "string"}}}}

Version 2
バージョン 2 リクエストイベントは、アクセストークンをカスタマイズするフィールドを追加します。また、レスポンスオブジェクトの複雑なclaimsToOverrideデータ型に対するサポートも追加されています。Lambda 関数は、 の値で次のタイプのデータを返すことができますclaimsToOverride。
• 文字列
• 数
トークン生成前の Lambda トリガー

641

Amazon Cognito

開発者ガイド• ブール値• 文字列、数値、ブール値、またはこれらの組み合わせの配列• JSON{"request": {"userAttributes": {"string": "string"},"scopes": ["string", "string"],"groupConfiguration": {"groupsToOverride": ["string", "string"],"iamRolesToOverride": ["string", "string"],"preferredRole": "string"},"clientMetadata": {"string": "string"}},"response": {"claimsAndScopeOverrideDetails": {"idTokenGeneration": {"claimsToAddOrOverride": {"string": [accepted datatype]},"claimsToSuppress": ["string", "string"]},"accessTokenGeneration": {"claimsToAddOrOverride": {"string": [accepted datatype]},"claimsToSuppress": ["string", "string"],"scopesToAdd": ["string", "string"],"scopesToSuppress": ["string", "string"]},"groupOverrideDetails": {"groupsToOverride": ["string", "string"],"iamRolesToOverride": ["string", "string"],"preferredRole": "string"}}}
トークン生成前の Lambda トリガー

642

Amazon Cognito

開発者ガイド}トークン生成前のリクエストパラメータ
名前

説明

トリガーイベントの最小バージョン

userAttributes

ユーザープール内のユーザープロファイルの属性。

1

groupConf
iguration

現在のグループ設定を含む入力オブジェクト。このオ

1

ブジェクトには、groupsToOverride 、iamRolesT
oOverride
ます。

、および preferredRole が含まれていgroupsToO
verrideユーザーがメンバーになっているユーザープールグループ。

1

iamRolesToオー
バーライド

ユーザープールグループを AWS Identity and Access
Management （IAM) ロールに関連付けることができます。この要素は、ユーザーがメンバーであるグループのすべてのIAMロールのリストです。

1

preferredRole

ユーザープールグループには、優先順位を設定できま1

す。この要素には、 groupsToOverride 要素内で優先順位が最も高いグループからのIAMロールの名前が含まれます。
clientMetadata

トークン生成前のトリガーに指定する Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキー/値ペア。

1

このデータを Lambda 関数に渡すには、 ClientMet
adataAdminRespondToAuthChallengeおよび RespondTo
AuthChallengeAPIオペレーションで パラメータを使用します。Amazon Cognito は、トークン生成前関数に渡すリクエストの AdminInitiateAuthおよび InitiateAuthAPIオペ

トークン生成前の Lambda トリガー

643

Amazon Cognito

名前開発者ガイド説明

トリガーイベントの最小バー
ジョン

レーションに ClientMetadata パラメータからのデー
タを含めません。
スコープ

ユーザーの OAuth 2.0 スコープ。アクセストークンに含まれるスコープは、ユーザーがリクエストし、アプリ
クライアントに発行を許可したユーザープールの標準ス
コープとカスタムスコープです。

2

トークン生成前のレスポンスパラメータ
名前

説明

トリガーイベントの最小バージョン

claimsOve
rrideDetails

V1_0 トリガーイベントのすべての要素を格納するコンテナ。

1claimsAnd
ScopeOver
rideDetails

V2_0 トリガーイベントのすべての要素を格納するコンテナ。

2

idTokenGe
neration

ユーザーの ID トークンで上書き、追加、または抑制するクレーム。ID トークンのカスタマイズ値に対するこの親はバージョン 2 のイベントにのみ表示されますが、子要素はバージョン 1 のイベントに表示されます。

2

accessTok
enGeneration

ユーザーのアクセストークンで上書き、追加、または抑制するクレームとスコープ。アクセストークンのカスタマイズ値に対するこの親は、バージョン 2 のイベントにのみ表示されます。

2

claimsToA
ddOrOverride

追加または変更する 1 つ以上のクレームとその値のマッ1プ。グループ関連のクレームには、代わりに groupOver
rideDetails

トークン生成前の Lambda トリガー*を使用します。
644

Amazon Cognito

名前開発者ガイド説明

トリガーイベントの最小バージョンバージョン 2 のイベントの場合、この要素はaccessTokenGenerationと idTokenGe

neration の両方の下に表示されます。
claimsToS
uppress

Amazon Cognito で抑制するクレームのリスト。関数がクレーム値の非表示と置換の両方を行う場合、Amazon
Cognito はクレームを非表示にします。

1

バージョン 2 のイベントの場合、この要素はaccessTokenGenerationと idTokenGe

neration の両方の下に表示されます。
groupOver
rideDetails

現在のグループ設定を含む出力オブジェクト。このオ

1

ブジェクトには、groupsToOverride 、iamRolesT
oOverride
ます。

、および preferredRole が含まれていこの関数は、groupOverrideDetails オブジェク
トを、指定したオブジェクトに置き換えます。レスポ
ンスで空または Null オブジェクトを返すと、Amazon
Cognito はグループを非表示にします。既存のグループ
設定を同じままにするには、リクエストの groupConf
iguration

オブジェクトの値をレスポンスのgroupOverrideDetails オブジェクトにコピーします。その後、サービスに渡します。
Amazon Cognito ID とアクセストークンには、両方
とも cognito:groups クレームが含まれています。groupOverrideDetails

オブジェクトは、アクセストークンおよび ID トークンの cognito:groups
クレームを置き換えます。

トークン生成前の Lambda トリガー

645

Amazon Cognito

開発者ガイド名前説明

トリガーイベントの最小バージョン

scopesToAdd

ユーザーのアクセストークンの scopeクレームに追加する OAuth 2.0 スコープのリスト。1 つ以上の空白文字を含むスコープ値を追加することはできません。

2

scopesToS
uppress

ユーザーのアクセストークンの scopeクレームから削除
する OAuth 2.0 スコープのリスト。

2*

バージョン 1 イベントへのレスポンスオブジェクトは文字列を返すことができます。バージョン 2
イベントへのレスポンスオブジェクトは、複雑なオブジェクト を返す可能性があります。

トークン生成前トリガーイベントバージョン 2 の例:クレーム、スコープ、グループの追加と非表示この例では、ユーザーのトークンに以下の変更を行います。
1. ID トークンに family_name として Doe を設定します。
2. ID トークンに email クレームと phone_number クレームが表示されないようにします。
3. ID トークンの cognito:roles クレームを "arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/
sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB" に設定します。
4. ID トークンの cognito:preferred_role クレームを
arn:aws:iam::123456789012:role/sns_caller に設定します。
5. スコープとして openid、email、solar-system-data/asteroids.add をアクセストークンに追加します。
6. アクセストークンの phone_number スコープと aws.cognito.signin.user.admin スコープを非表示にします。phone_number を削除すると、userInfo からユーザーの電話番号が取得されなくなります。を削除すると、Amazon Cognito ユーザープール でユーザーによる独自のプロファイルの読み取りと変更のAPIリクエストがaws.cognito.signin.user.admin防止されますAPI。

トークン生成前の Lambda トリガー

646

Amazon Cognito

開発者ガイドNotephone_number をスコープから削除した場合、アクセストークンの残りのスコープに
openid と少なくとも 1 つの標準スコープが含まれていれば、ユーザーの電話番号のみが取得できなくなります。詳細については、「スコープについて」を参照してください。
7. ID トークンとアクセストークンの cognito:groups クレームを "new-group-A","newgroup-B","new-group-C" に設定します。
JavaScript
export const handler = function(event, context) {event.response = {"claimsAndScopeOverrideDetails": {"idTokenGeneration": {"claimsToAddOrOverride": {"family_name": "Doe"},"claimsToSuppress": ["email","phone_number"]},"accessTokenGeneration": {"scopesToAdd": ["openid","email","solar-system-data/asteroids.add"],"scopesToSuppress": ["phone_number","aws.cognito.signin.user.admin"]},"groupOverrideDetails": {"groupsToOverride": ["new-group-A","new-group-B","new-group-C"],"iamRolesToOverride": [トークン生成前の Lambda トリガー

647

Amazon Cognito

開発者ガイド"arn:aws:iam::123456789012:role/new_roleA","arn:aws:iam::123456789012:role/new_roleB","arn:aws:iam::123456789012:role/new_roleC"],"preferredRole": "arn:aws:iam::123456789012:role/new_role",}}};// Return to Amazon Cognito
context.done(null, event);};

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"version": "2","triggerSource": "TokenGeneration_Authentication","region": "us-east-1","userPoolId": "us-east-1_EXAMPLE","userName": "JaneDoe","callerContext": {"awsSdkVersion": "aws-sdk-unknown-unknown","clientId": "1example23456789"},"request": {"userAttributes": {"sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111","cognito:user_status": "CONFIRMED","email_verified": "true","phone_number_verified": "true","phone_number": "+12065551212","family_name": "Zoe","email": "Jane.Doe@example.com"},"groupConfiguration": {"groupsToOverride": ["group-1", "group-2", "group-3"],

トークン生成前の Lambda トリガー

648

Amazon Cognito

開発者ガイド"iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1","arn:aws:iam::123456789012:role/sns_caller2", "arn:aws:iam::123456789012:role/
sns_caller3"],"preferredRole": ["arn:aws:iam::123456789012:role/sns_caller"]},"scopes": ["aws.cognito.signin.user.admin", "openid", "email", "phone"]},"response": {"claimsAndScopeOverrideDetails": []}}トークン生成前イベントバージョン 2 の例: 複雑なオブジェクトでクレームを追加する
この例では、ユーザーのトークンに以下の変更を行います。
1. ID トークンに数値、文字列、ブール値、およびJSON型のクレームを追加します。これは、バー
ジョン 2 のトリガーイベントが ID トークンで使用できるようにする唯一の変更です。
2. アクセストークンに数値、文字列、ブール値、およびJSON型のクレームを追加します。
3. アクセストークンに 3 つのスコープを追加します。
4. ID トークンemailとアクセストークンの および subクレームを非表示にします。
5. アクセストークンのaws.cognito.signin.user.adminスコープを非表示にします。
JavaScript
export const handler = function(event, context) {var scopes = ["MyAPI.read", "MyAPI.write", "MyAPI.admin"]var claims = {}claims["aud"]= event.callerContext.clientId;
claims["booleanTest"] = false;
claims["longTest"] = 9223372036854775807;
claims["exponentTest"] = 1.7976931348623157E308;
claims["ArrayTest"] = ["test", 9223372036854775807, 1.7976931348623157E308,
true];
claims["longStringTest"] = "\{\
トークン生成前の Lambda トリガー

649

Amazon Cognito

開発者ガイド\"first_json_block\": \{\\"key_A\": \"value_A\",\\"key_B\": \"value_B\"\\},\\"second_json_block\": \{\\"key_C\": \{\\"subkey_D\": [\\"value_D\",\\"value_E\"\],\\"subkey_F\": \"value_F\"\\},\\"key_G\": \"value_G\"\\}\\}";
claims["jsonTest"] = {"first_json_block": {"key_A": "value_A","key_B": "value_B"},"second_json_block": {"key_C": {"subkey_D": ["value_D","value_E"],"subkey_F": "value_F"},"key_G": "value_G"}};
event.response = {"claimsAndScopeOverrideDetails": {"idTokenGeneration": {"claimsToAddOrOverride": claims,"claimsToSuppress": ["email","sub"]},"accessTokenGeneration": {"claimsToAddOrOverride": claims,"claimsToSuppress": ["email","sub"],"scopesToAdd": scopes,"scopesToSuppress": ["aws.cognito.signin.user.admin"]}}

トークン生成前の Lambda トリガー

650

Amazon Cognito

開発者ガイド};console.info("EVENT response\n" + JSON.stringify(event, (_, v) => typeof v ==='bigint' ? v.toString() : v, 2))console.info("EVENT response size\n" + JSON.stringify(event, (_, v) => typeof v=== 'bigint' ? v.toString() : v).length)// Return to Amazon Cognito
context.done(null, event);};

Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"version": "2","triggerSource": "TokenGeneration_HostedAuth","region": "us-west-2","userPoolId": "us-west-2_EXAMPLE","userName": "JaneDoe","callerContext": {"awsSdkVersion": "aws-sdk-unknown-unknown","clientId": "1example23456789"},"request": {"userAttributes": {"sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111","cognito:user_status": "CONFIRMED""email_verified": "true","phone_number_verified": "true","phone_number": "+12065551212","email": "Jane.Doe@example.com"},"groupConfiguration": {"groupsToOverride": ["group-1", "group-2", "group-3"],"iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1"],"preferredRole": ["arn:aws:iam::123456789012:role/sns_caller1"]},"scopes": ["aws.cognito.signin.user.admin",
トークン生成前の Lambda トリガー

651

Amazon Cognito

開発者ガイド"phone","openid","profile","email"]},"response": {"claimsAndScopeOverrideDetails": []}}トークン生成前イベントバージョン 1 の例: 新しいクレームの追加と既存のクレームの非表示
この例では、トークン生成前の Lambda 関数でバージョン 1 のトリガーイベントを使用して、新しいクレームを追加し、既存のクレームを抑制します。
Node.js
const handler = async (event) => {event.response = {claimsOverrideDetails: {claimsToAddOrOverride: {my_first_attribute: "first_value",
my_second_attribute: "second_value",},claimsToSuppress: ["email"],},};return event;};export { handler };Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。コード例 ではリクエストパラメータを処理しないため、空のリクエストでテトークン生成前の Lambda トリガー

652

Amazon Cognito

開発者ガイドストイベントを使用できます。共通のリクエストパラメータの詳細については、「ユーザープールのLambda トリガーイベント」を参照してください。
JSON{"request": {},"response": {}}トークン生成前イベントバージョン 1 の例: ユーザーグループのメンバーシップの変更
この例では、トークン生成前の Lambda 関数でバージョン 1 のトリガーイベントを使用し、ユー
ザーのグループメンバーシップを変更します。
Node.js
const handler = async (event) => {event.response = {claimsOverrideDetails: {groupOverrideDetails: {groupsToOverride: ["group-A", "group-B", "group-C"],
iamRolesToOverride: ["arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA","arn:aws:iam::XXXXXXXXX:role/sns_callerB","arn:aws:iam::XXXXXXXXXX:role/sns_callerC",],
preferredRole: "arn:aws:iam::XXXXXXXXXXX:role/sns_caller",},},};
return event;};export { handler };Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに
トークン生成前の Lambda トリガー

653

Amazon Cognito

開発者ガイド

関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"request": {},"response": {}}ユーザー移行の Lambda トリガー
パスワードによるサインイン時にユーザーがユーザープールに存在しない場合、またはユーザーがパスワードを忘れた場合のフローにいる場合に、Amazon Cognito は、このトリガーを呼び出します。Amazon Cognito は、Lambda 関数が正常に値を返した後でユーザーをユーザープールに作成します。ユーザー移行の Lambda トリガーを使用した認証フローの詳細については、「ユーザー移行の Lambda トリガーを使用したユーザープールへのユーザーのインポート」を参照してください。
サインイン時、またはパスワードを忘れた場合のフロー中に、ユーザーを既存のユーザーディレクト
リから Amazon Cognito ユーザープールに移行するには、この Lambda トリガーを使用します。
トピック• ユーザー移行の Lambda トリガーのソース• ユーザー移行の Lambda トリガーのパラメータ• 例: 既存のパスワードを使用したユーザーの移行

ユーザー移行の Lambda トリガーのソース
triggerSource 値

イベント

UserMigration_Authentication

サインイン時のユーザーの移行。

UserMigration_ForgotPassword

パスワードを忘れた場合のフロー実行時のユー
ザー移行

ユーザー移行の Lambda トリガー

654

Amazon Cognito

開発者ガイドユーザー移行の Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"userName": "string","request": {"password": "string","validationData": {"string": "string",. . .
},"clientMetadata": {"string": "string",
. . .
}
},
"response": {"userAttributes": {"string": "string",. . .
},"finalUserStatus": "string","messageAction": "string","desiredDeliveryMediums": [ "string", . . .],"forceAliasCreation": boolean,"enableSMSMFA": boolean}}

ユーザー移行リクエストパラメータ
userName
ユーザーがサインイン時に入力するユーザー名。
password
ユーザーがサインイン時に入力するパスワード。Amazon Cognito は、パスワードを忘れた場合のフローによって開始されたリクエストでこの値を送信しません。
ユーザー移行の Lambda トリガー

655

Amazon Cognito

開発者ガイドvalidationData
ユーザーサインインリクエストに検証データを含む 1 つ以上のキーバリューペア。このデータをLambda 関数に渡すには、InitiateAuth および AdminInitiateAuth API アクションで ClientMetadata
パラメータを使用できます。
clientMetadata
ユーザー移行のトリガーの Lambda 関数へのカスタム入力として提供できる 1 つ、または複数のキーバリューペア。このデータを Lambda 関数に渡すには、AdminRespondToAuthChallenge お
よび ForgotPassword API アクションで ClientMetadata パラメータを使用できます。
ユーザー移行レスポンスパラメータ
userAttributes
このフィールドは必須です。
このフィールドには、Amazon Cognito がユーザープール内のユーザープロファイルに保存され、ユーザー属性として使用される、名前と値のペアが 1 つ以上含まれている必要があります。
標準およびカスタムの両方のユーザー属性を含めることができます。カスタム属性は、標準属性と区別するために、custom: プレフィックスを必要とします。詳細については、「カスタム属
性」を参照してください。
Note
パスワードを忘れた場合のフローでパスワードをリセットするには、ユーザーに検証済
みの E メールアドレスまたは電話番号のどちらかが必要です。Amazon Cognito は、ユーザー属性にある E メールアドレスまたは電話番号宛てに、パスワードのリセットコードが含まれるメッセージを送信します。

属性

要件

ユーザープールの作成時に必須とマークした属性

移行時に必須属性が見当たらない場合は、Amazon Cognito はデ
フォルト値を使用します。

username

サインイン用のユーザー名に加えてエイリアス属性を使用してユーザープールを設定しており、ユーザーがユーザー名として有ユーザー移行の Lambda トリガー

656

Amazon Cognito

属性

開発者ガイド要件
効なエイリアスを入力している場合は、必須です。エイリアスの値は、E メールアドレス、優先ユーザー名、電話番号です。
リクエストとユーザープールがエイリアスの要件を満たしている
場合、関数からのレスポンスは、受け取った username パラメー
タをエイリアス属性に割り当てる必要があります。また、レスポ
ンスは username 属性に自身の値を割り当てる必要があります。
ユーザープールが、受け取った username をエイリアスにマッピングするのに必要な条件を満たしていない場合、レスポンスのusername パラメータはリクエストと完全に一致するか、省略する必要があります。
Noteusername はユーザープールで一意である必要があります。

finalUserStatus
このパラメータを CONFIRMED に設定すると、ユーザーが以前のパスワードでサインインできる
ように自動確認することができます。ユーザーを CONFIRMED に設定した場合は、サインインする前に追加のアクション操作を実行する必要はありません。この属性を CONFIRMED に設定しない場合は、RESET_REQUIRED に設定されます。
RESET_REQUIRED の finalUserStatus は、サインイン時の移行後、ユーザーはすぐにパスワードを変更する必要があり、クライアントアプリは認証フロー中に
PasswordResetRequiredException を処理する必要があることを意味します。
Note
Amazon Cognito は、Lambda トリガーを使用して移行中にユーザープールに設定したパスワード強度ポリシーを強制しません。パスワードが設定したパスワードポリシーを満たさない場合でも、Amazon Cognito は引き続きユーザーを移行できるように、パスワードを受け入れます。パスワード強度ポリシーを施行してポリシーを満たさないパスワードを

ユーザー移行の Lambda トリガー

657

Amazon Cognito

開発者ガイド拒否するには、コード内のパスワード強度を検証して、パスワードがポリシーを満たさない場合は、finalUserStatus を RESET_REQUIRED に設定します。

messageAction
このパラメータを SUPPRESS に設定すると、通常、Amazon Cognito は新規ユーザーに送信するウェルカムメッセージの送信を拒否することができます。関数がこのパラメータを返さない場
合、Amazon Cognito はウェルカムメッセージを送信します。
desiredDeliveryMediums
このパラメータを EMAIL に設定すると E メールで、SMS に設定すると SMS でウェルカムメッ
セージを送信できます。関数がこのパラメータを返さない場合、Amazon Cognito は SMS でウェ
ルカムメッセージを送信します。
forceAliasCreation
このパラメータを TRUE に設定した場合、UserAttributes パラメータの E メールアドレスまたは電話番号がすでに別のユーザーのエイリアスとして存在していると、API の呼び出しで以前のユーザーのエイリアスが新しく作成されたユーザーに移行されます。以前のユーザーはそのエイリアスを使用してログインできなくなります。
このパラメータを、FALSE に設定し、エイリアスが存在する場合、Amazon Cognito はユーザーを移行せず、クライアントアプリにエラーを返します。
このパラメータを返さない場合、Amazon Cognito はその値が「false」であると見なします。
enableSMSMFA
このパラメータを true に設定すると、移行したユーザーはサインインするために SMS テキス
トメッセージの多要素認証 (MFA) を完了することが必要になります。ユーザープールで MFA が有効になっている必要があります。リクエストパラメータのユーザー属性には、電話番号を含める必要があります。電話番号がないと、そのユーザーの移行は失敗します。

例: 既存のパスワードを使用したユーザーの移行
この例の Lambda 関数は、既存のパスワードを使用してユーザーを移行し、Amazon Cognito からのウェルカムメッセージを抑制します。

ユーザー移行の Lambda トリガー

658

Amazon Cognito

開発者ガイドNode.js
const validUsers = {belladonna: { password: "Test123", emailAddress: "bella@example.com" },};// Replace this mock with a call to a real authentication service.
const authenticateUser = (username, password) => {if (validUsers[username] && validUsers[username].password === password) {return validUsers[username];} else {return null;}};
const lookupUser = (username) => {const user = validUsers[username];if (user) {return { emailAddress: user.emailAddress };} else {return null;}};
const handler = async (event) => {if (event.triggerSource == "UserMigration_Authentication") {// Authenticate the user with your existing user directory service
const user = authenticateUser(event.userName, event.request.password);
if (user) {event.response.userAttributes = {email: user.emailAddress,
email_verified: "true",};
event.response.finalUserStatus = "CONFIRMED";
event.response.messageAction = "SUPPRESS";}} else if (event.triggerSource == "UserMigration_ForgotPassword") {// Look up the user in your existing user directory service
const user = lookupUser(event.userName);if (user) {event.response.userAttributes = {email: user.emailAddress,// Required to enable password-reset code to be sent to user
ユーザー移行の Lambda トリガー

659

Amazon Cognito

開発者ガイドemail_verified: "true",};
event.response.messageAction = "SUPPRESS";}}
return event;};export { handler };カスタムメッセージの Lambda トリガー
Amazon Cognito は、E メールまたは電話の検証メッセージ、または多要素認証 (MFA) コードを送信する前に、このトリガーを呼び出します。カスタムメッセージトリガーを使用して、メッセー
ジを動的にカスタマイズできます。静的なカスタムメッセージは、Amazon Cognito コンソールの[Message Customizations] (メッセージのカスタマイズ) タブで編集できます。
リクエストには codeParameter が含まれます。これは、Amazon Cognito がユーザーに配信するコードのプレースホルダーとなる文字列です。メッセージ本文で検証コードを表示する位置にcodeParameter 文字列を挿入します。Amazon Cognito がこのレスポンスを受信すると、Amazon
Cognito が codeParameter 文字列を実際の検証コードに置き換えます。
Note
CustomMessage_AdminCreateUser トリガーソースがあるカスタムメッセー
ジの Lambda 関数 はユーザー名と検証コードを返します。管理者が作成したユー
ザーはユーザー名とコードの両方を受け取る必要があるため、関数からの応答には
request.usernameParameter と request.codeParameterの両方を含める必要があり
ます。

トピック
• カスタムメッセージの Lambda トリガーのソース• カスタムメッセージの Lambda トリガーのパラメータ• サインアップのカスタムメッセージの例• 管理者作成ユーザーのカスタムメッセージの例
カスタムメッセージの Lambda トリガー

660

Amazon Cognito

開発者ガイドカスタムメッセージの Lambda トリガーのソース
triggerSource 値

イベント

CustomMessage_SignUp

カスタムメッセージ - サインアップ後に確認
コードを送信するため。

CustomMessage_AdminCreateUser

カスタムメッセージ – 新規ユーザーに一時パス
ワードを送信するため。

CustomMessage_ResendCode

カスタムメッセージ – 既存ユーザーに確認コー
ドを再送するため。

CustomMessage_ForgotPassword

カスタムメッセージ - 忘れたパスワードのリク
エスト用の確認コードを送信するため。

CustomMessage_UpdateUserAtt

カスタムメッセージ - ユーザーの E メールまたは電話番号が変更されると、このトリガーは検証コードをそのユーザーに自動的に送信します。他の属性には使用できません。

ributeCustomMessage_VerifyUserAttributeCustomMessage_Authentication

カスタムメッセージ – ユーザーが手動で新しいE メールや電話番号の認証コードをリクエスト
すると、このトリガーからユーザーに認証コードが送信されます。
カスタムメッセージ – 認証中にMFAコードを送信します。

カスタムメッセージの Lambda トリガーのパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"userAttributes": {カスタムメッセージの Lambda トリガー

661

Amazon Cognito

開発者ガイド"string": "string",. . .
}"codeParameter": "####","usernameParameter": "string","clientMetadata": {"string": "string",
. . .
}
},
"response": {"smsMessage": "string","emailMessage": "string","emailSubject": "string"}}

カスタムメッセージリクエストパラメータ
userAttributes
ユーザー属性を表す 1 つ以上の名前 - 値ペア。
codeParameter
カスタムメッセージで、検証コードのプレースホルダーとして使用する文字列。
usernameParameter
ユーザー名。Amazon Cognito は、管理者が作成したユーザーからのリクエストにこのパラメー
タを含めます。
clientMetadata
カスタムメッセージのトリガーに指定する Lambda 関数へのカスタム入力として提供でき
る 1 つ、または複数のキー/値ペア。カスタムメッセージ関数を呼び出すリクエストには、
AdminInitiateAuthおよび InitiateAuthAPIオペレーションの ClientMetadata パラメータに渡されたデータは含まれません。このデータを Lambda 関数に渡すには、次のAPIアクションでClientMetadata パラメータを使用できます。
• AdminResetUserPassword• AdminRespondToAuthChallenge• AdminUpdateUserAttributes
カスタムメッセージの Lambda トリガー

662

Amazon Cognito

開発者ガイド• ForgotPassword• GetUserAttributeVerificationCode• ResendConfirmationCode• SignUp• UpdateUserAttributes
カスタムメッセージレスポンスパラメータ
レスポンスで、ユーザーへのメッセージに使用するカスタムテキストを指定します。Amazon
Cognito がこれらのパラメータに適用する文字列制約については、「」を参照してくださいMessageTemplateType。
smsMessage
ユーザーに送信するカスタムSMSメッセージ。リクエストで受信する codeParameter 値を含める必要があります。
emailMessage
ユーザーに送信するカスタム E メールメッセージ。emailMessage パラメータでHTML書式設定を使用できます。リクエストで受信される codeParameter 値を変数 {####} として含める必要があります。Amazon Cognito は、ユーザープールのEmailSendingAccount 属性が DEVELOPER の場合のみ、emailMessage パラメータを使用できます。ユーザープールの EmailSendingAccount 属性が、DEVELOPER ではなく、emailMessage パラメータが返されると、Amazon Cognito は 400 エラーコード
com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseExceptionを生成します。Amazon Simple Email Service (Amazon SES) を選択して E メールメッセージを送信する場合、ユーザープールのEmailSendingAccount属性は ですDEVELOPER。それ以外の場合、値は COGNITO_DEFAULT です。
emailSubject
カスタムメッセージの件名。emailSubject パラメータは、ユーザープールの 属
性が の EmailSendingAccount場合にのみ使用できますDEVELOPER。ユーザープー
ルの EmailSendingAccount 属性が DEVELOPER ではなく、Amazon Cognito がemailSubject パラメータを返した場合、Amazon Cognito は 400 エラーコード
com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseExceptionを生成します。Amazon Simple Email Service (Amazon SES) を使用して E メールを送
カスタムメッセージの Lambda トリガー

663

Amazon Cognito

開発者ガイド

信DEVELOPERする場合、ユーザープールのEmailSendingAccount属性は です。それ以外の場
合、値は COGNITO_DEFAULT です。

サインアップのカスタムメッセージの例
この Lambda 関数の例では、サービスがユーザーに検証コードを送信するためにアプリを必要とする場合に、E メールまたはSMSメッセージをカスタマイズします。
Amazon Cognito は、登録後、検証コードの再送信時、パスワードを忘れた場合、ユーザー属性の検証時といった複数のイベントで Lambda トリガーを呼び出すことができます。レスポンスには、
SMSと E メールの両方のメッセージが含まれます。メッセージにはコードのパラメータ "####" を含める必要があります。このパラメータは、ユーザーが受け取る検証コードのプレースホルダーです。
E メールメッセージの最大長は 20,000UTF～8 文字です。この長さには検証コードが含まれます。
これらの E メールメッセージではHTMLタグを使用できます。
SMS メッセージの最大長は 140UTF～8 文字です。この長さには検証コードが含まれます。
Node.js
const handler = async (event) => {if (event.triggerSource === "CustomMessage_SignUp") {const message = `Thank you for signing up. Your confirmation code is${event.request.codeParameter}.`;event.response.smsMessage = message;
event.response.emailMessage = message;
event.response.emailSubject = "Welcome to the service.";}return event;};export { handler };Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。

カスタムメッセージの Lambda トリガー

664

Amazon Cognito

開発者ガイドJSON{"version": "1","region": "us-west-2","userPoolId": "us-west-2_EXAMPLE","userName": "test-user","callerContext": {"awsSdkVersion": "aws-sdk-unknown-unknown","clientId": "1example23456789"},"triggerSource": "CustomMessage_SignUp","request": {"userAttributes": {"sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111","cognito:user_status": "CONFIRMED","email_verified": "true","phone_number_verified": "true","phone_number": "+12065551212","email": "test-user@example.com"},"codeParameter": "{####}","linkParameter": "{##Click Here##}","usernameParameter": "None"},"response": {"smsMessage": "None","emailMessage": "None","emailSubject": "None"}}

管理者作成ユーザーのカスタムメッセージの例
Amazon Cognito がこのサンプルカスタムメッセージ Lambda 関数に送信したリクエストのtriggerSource値は で、CustomMessage_AdminCreateUserユーザー名と一時パスワードがあります。関数は、リクエスト${event.request.codeParameter}の一時パスワードとリクエス
トのユーザー名${event.request.usernameParameter}から入力します。
カスタムメッセージは、レスポンスオブジェクトの codeParameterおよび usernameParameterに smsMessageおよび emailMessage の値を挿入する必要があります。この例では、関数
カスタムメッセージの Lambda トリガー

665

Amazon Cognito

開発者ガイドはレスポンスフィールド event.response.smsMessageと に同じメッセージを書き込みますevent.response.emailMessage。
E メールメッセージの最大長は 20,000UTF～8 文字です。この長さには検証コードが含まれます。
これらの E メールではHTMLタグを使用できます。SMS メッセージの最大長は 140UTF～8 文字です。この長さには検証コードが含まれます。
レスポンスには、 SMSと E メールの両方のメッセージが含まれます。
Node.js
const handler = async (event) => {if (event.triggerSource === "CustomMessage_AdminCreateUser") {const message = `Welcome to the service. Your user name is${event.request.usernameParameter}. Your temporary password is${event.request.codeParameter}`;
event.response.smsMessage = message;
event.response.emailMessage = message;
event.response.emailSubject = "Welcome to the service";}
return event;};export { handler }Amazon Cognito は Lambda 関数にイベント情報を渡します。関数はレスポンスで、同じイベントオ
ブジェクトを変更と共に Amazon Cognito に返します。Lambda コンソールで、Lambda トリガーに関連するデータを使用したテストイベントをセットアップできます。以下は、このコードサンプルのテストイベントです。
JSON{"version": 1,"triggerSource": "CustomMessage_AdminCreateUser","region": "<region>","userPoolId": "<userPoolId>","userName": "<userName>","callerContext": {"awsSdk": "<calling aws sdk with version>","clientId": "<apps client id>",
カスタムメッセージの Lambda トリガー

666

Amazon Cognito

開発者ガイド...
},"request": {"userAttributes": {"phone_number_verified": false,"email_verified": true,...
},"codeParameter": "####","usernameParameter": "username"},"response": {"smsMessage": "<custom message to be sent in the message with code parameterand username parameter>""emailMessage": "<custom message to be sent in the message with code parameterand username parameter>""emailSubject": "<custom email subject>"}}

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

カスタム送信者の Lambda トリガー

667

Amazon Cognito

開発者ガイドCustomEmailSenderAmazon Cognito は、E メール通知をユーザーに送信するためにこのトリガーを呼び出します。
CustomSMSSenderAmazon Cognito はこのトリガーを呼び出して、ユーザーにSMS通知を送信します。

リソース
Amazon Cognito は、カスタム送信者トリガーに送信するイベントでユーザーのコードをプレーンテ
キストで送信しません。Lambda 関数は、イベント内のコードを復号する必要があります。以下の概念は、関数がユーザーに配信できるコードを取得するために使用する必要がある暗号化アーキテク
チャです。
AWS KMSAWS KMS は、 AWS KMS キーを作成および制御するためのマネージドサービスです。これらのキーは、データを暗号化します。詳細については、「AWS Key Management Serviceとは何ですか?」を参照してください。
KMS キーKMS キーは、暗号化キーの論理表現です。KMS キーには、キー ID、作成日、説明、キーの状態などのメタデータが含まれます。KMS キーには、データの暗号化と復号に使用されるキーマテリ
アルも含まれています。詳細については、「 AWS KMSキー」を参照してください。
対称KMSキー
対称KMSキーは、暗号化されていない状態で終了 AWS KMS しない 256 ビットの暗号化キーです。対称KMSキーを使用するには、 を呼び出す必要があります AWS KMS。Amazon Cognito は対称キーを使用します。同じキーで暗号化と復号化が行われます。詳細については、「対称KMS
キー」を参照してください。

カスタム E メール送信者の Lambda トリガー
ユーザープールにカスタム E メール送信者トリガーを割り当てると、ユーザーイベントで E メール
メッセージの送信が必要になった時点で、Amazon Cognito がデフォルトの動作ではなく Lambda 関
数を呼び出します。カスタム送信者トリガーを使用すると、 AWS Lambda 関数は選択したメソッドとプロバイダーを通じてユーザーに E メール通知を送信できます。関数のカスタムコードは、すべての e メールメッセージを、ユーザープールから処理して配信する必要があります。
カスタム送信者の Lambda トリガー

668

Amazon Cognito

開発者ガイドこのトリガーは、ユーザープールが E メールメッセージを送信する方法をより細かく制御したいシ
ナリオを提供します。Lambda 関数は、複数の検証済み ID を管理したり、 をまたいだりする場合な
どに、Amazon SESAPIオペレーションへの呼び出しをカスタマイズできます AWS リージョン。関数は、メッセージを別の配信メディアまたはサードパーティーサービスにリダイレクトすることもで
きます。
Note
現在、Amazon Cognito コンソールでカスタム送信者のトリガーを割り当てることはできません。CreateUserPool または UpdateUserPoolAPIリクエストの LambdaConfigパラ
メータを使用してトリガーを割り当てることができます。

このトリガーをセットアップするには、以下のステップを実行します。
1. AWS Key Management Service () で対称暗号化キーを作成しますAWS KMS。Amazon Cognito
は、一時パスワード、検証コード、確認コードなどのシークレットを生成し、このKMSキーを使用してシークレットを暗号化します。その後、Lambda 関数で Decrypt APIオペレーションを使用してシークレットを復号し、プレーンテキストでユーザーに送信できます。AWS Encryption SDKは、関数での AWS KMS オペレーションに役立つツールです。
2. カスタム送信者のトリガーとして割り当てる Lambda 関数を作成します。KMS キーのkms:Decryptアクセス許可を Lambda 関数ロールに付与します。
3. Amazon Cognito サービスプリンシパルに、Lambda 関数を呼び出すための cognitoidp.amazonaws.com へのアクセス権を付与します。
4. カスタム配信メソッドまたはサードパーティープロバイダーにメッセージを転送する Lambda 関
数コードを書き込みます。ユーザーの認証コードまたは確認コードを配信するには、Base64 がリクエストで code パラメーターの値をデコードして復号化します。このオペレーションでは、メッセージに含める必要があるプレーンテキストのコードまたはパスワードが生成されます。
5. カスタム送信者 Lambda トリガーを使用するようにユーザープールを更新します。カスタム送信者トリガーを使用してユーザープールを更新または作成するIAMプリンシパルには、KMSキーの許可を作成するアクセス許可が必要です。次のLambdaConfigスニペットは、カスタムSMSおよび E メール送信者関数を割り当てます。
"LambdaConfig": {"KMSKeyID": "arn:aws:kms:useast-1:123456789012:key/a6c4f8e2-0c45-47db-925f-87854bc9e357","CustomEmailSender": {カスタム送信者の Lambda トリガー

669

Amazon Cognito

開発者ガイド"LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction","LambdaVersion": "V1_0"},"CustomSMSSender": {"LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction","LambdaVersion": "V1_0"}

カスタム E メール送信者の Lambda トリガーパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"type": "customEmailSenderRequestV1","code": "string","clientMetadata": {"string": "string",. . .
},"userAttributes": {"string": "string",
. . .
}
}

カスタム E メール送信者のリクエストパラメータtype
リクエストバージョン。カスタム E メール送信者イベントの場合、この文字列の値は常にcustomEmailSenderRequestV1 です。
コード
関数が復号してユーザーに送信できる暗号化されたコード。

カスタム送信者の Lambda トリガー

670

Amazon Cognito

開発者ガイドclientMetadata
カスタム E メール送信者 Lambda 関数トリガーへのカスタム入力として提供できる 1 つ以上のキーバリューペア このデータを Lambda 関数に渡すには、 AdminRespondToAuthChallengeお
よび RespondToAuthChallengeAPIアクションで ClientMetadata パラメータを使用できます。Amazon Cognito は、認証後関数に渡すリクエストの AdminInitiateAuthおよびInitiateAuthAPIオペレーションに ClientMetadata パラメータからのデータを含めません。
Note
Amazon Cognito はClientMetadata、次のトリガーソースを持つイベントでカスタム
E メールトリガー関数に を送信します。
• CustomEmailSender_ForgotPassword• CustomEmailSender_SignUp
Amazon Cognito は、ソース のトリガーイベントClientMetadataで を送信しませんCustomEmailSender_AccountTakeOverNotification。

userAttributes
ユーザー属性を表す 1 つ以上のキーバリューペア。
カスタム E メール送信者の応答パラメータ
Amazon Cognito は、カスタム E メール送信者のレスポンスに追加の情報が返されることを期待しません。Lambda 関数は、イベントを解釈してコードを復号し、メッセージコンテンツを配信する必
要があります。一般的な 関数は E メールメッセージをアセンブルし、サードパーティーのSMTPリ
レーに転送します。
カスタム E メール送信者の Lambda トリガーのアクティブ化
カスタムロジックを使用してユーザープールの E メールメッセージを送信するカスタム E メール送
信者トリガーを設定するには、次のようにトリガーをアクティブ化します。次の手順では、カスタ
ム E メールトリガー、カスタムSMSトリガー、またはその両方をユーザープールに割り当てます。
カスタム E メール送信者トリガーを追加すると、Amazon Cognito は常に E メールアドレスなどのユーザー属性とワンタイムコードを Lambda 関数に送信します (それ以外の場合は、Amazon Simple
Email Service で E メールメッセージを送信します)。
カスタム送信者の Lambda トリガー

671

Amazon Cognito

開発者ガイドImportantAmazon Cognito HTML- (&lt;) や < (>&gt;) などの予約文字をユーザーの一時パスワードにエスケープします。これらの文字は、Amazon Cognito がカスタム E メール送信者機能に送信する一時パスワードには表示される場合がありますが、一時的な確認コードには表示されません。一時パスワードを送信するには、Lambda 関数がパスワードを復号した後、ユーザーにメッセージを送信する前に、これらの文字をアンエスケープする必要があります。

1.

AWS KMSで暗号化キーを作成します。このキーは、Amazon Cognito が生成する一時パスワー
ドと認可コードを暗号化します。次に、カスタム送信者の Lambda 関数でこれらのシークレッ
トを復号して、プレーンテキストでユーザーに送信できます。

2.

Amazon Cognito サービスプリンシパルに、 KMSキーでコードを暗号化するためのcognitoidp.amazonaws.comアクセス許可を付与します。
次のリソースベースのポリシーをKMSキーに適用します。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "cognito-idp.amazonaws.com"},"Action": "kms:CreateGrant","Resource": "arn:aws:kms:uswest-2:111222333444:key/1example-2222-3333-4444-999example","Condition": {"StringEquals": {"aws:SourceAccount": "111222333444"},"ArnLike": {"aws:SourceArn": "arn:aws:cognito-idp:uswest-2:111222333444:userpool/us-east-1_EXAMPLE"
}
}
}]
}

カスタム送信者の Lambda トリガー

672

Amazon Cognito

3.

開発者ガイドカスタム送信者トリガーのための Lambda 関数を作成します。Amazon Cognito はAWS 暗号化
SDKを使用して、ユーザーのAPIリクエストを許可するシークレット、一時パスワード、およびコードを暗号化します。
•

4.

KMS 少なくともキーに対するアクセスkms:Decrypt許可を持つ IAMロールを Lambda 関
数に割り当てます。

Amazon Cognito サービスプリンシパルに、Lambda 関数を呼び出すための cognitoidp.amazonaws.com へのアクセス権を付与します。
次の AWS CLI コマンドは、Lambda 関数を呼び出すためのアクセス許可を Amazon Cognito に付与します。

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

5.

メッセージを送信する Lambda 関数コードを作成します。Amazon Cognito AWS Encryption
SDK は、Amazon Cognito がシークレットをカスタム送信者 Lambda 関数に送信する前に、 を使用してシークレットを暗号化します。関数内でシークレットを復号し、関連するメタデータを処理します。次に、コードを、独自のカスタムメッセージ、および送信先電話番号を、メッセー
ジを配信APIするカスタムに送信します。

6.

Lambda 関数 AWS Encryption SDK に を追加します。詳細については、AWS 「暗号化SDKプロ
グラミング言語」を参照してください。Lambda パッケージを更新するには、次のステップを完
了します。

7.

a.

Lambda 関数を.zip ファイルとして AWS Management Consoleにエクスポートします。

b.

関数を開き、 を追加します AWS Encryption SDK。詳細とダウンロードリンクについて
は、AWS Encryption SDK デベロッパーガイドの「AWS Encryption SDK プログラミング言語」を参照してください。

c.

関数をSDK依存関係で圧縮し、関数を Lambda にアップロードします。詳細について
は、AWS Lambda デベロッパーガイドの「Lambda 関数の .zip ファイルアーカイブとしてのデプロイ」を参照してください。

ユーザープールを更新してカスタム送信者の Lambda トリガーを追加します。UpdateUserPool API リクエストに CustomSMSSenderまたは CustomEmailSenderパ
ラメータを含めます。UpdateUserPool API オペレーションには、ユーザープールのすべてのパラメータと、変更するパラメータが必要です。関連するすべてのパラメータを指定しない場

カスタム送信者の Lambda トリガー

673

Amazon Cognito

開発者ガイド合、Amazon Cognito は不足しているパラメータの値をデフォルトに設定します。次の例に示す
ように、ユーザープールに追加または保持するすべての Lambda 関数のエントリを含めます。
詳細については、「ユーザープール設定の更新」を参照してください。

#Send this parameter in an 'aws cognito-idp update-user-pool' CLI command,
including any existing#user pool configurations.
--lambda-config "PreSignUp=lambda-arn, \CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn},\
KMSKeyID=key-id"

でカスタム送信者の Lambda トリガーを削除するにはupdate-user-pool AWS CLI、 から
CustomSMSSenderまたは CustomEmailSenderパラメータを省略し--lambda-config、ユーザープールで使用する他のすべてのトリガーを含めます。
UpdateUserPool API リクエストを含むカスタム送信者 Lambda トリガーを削除するには、ユーザープール設定の残りの部分を含むリクエスト本文から CustomSMSSenderまたはCustomEmailSenderパラメータを省略します。
コード例
次の Node.js 例は、カスタム E メール送信者の Lambda 関数で E メールメッセージイベントを処理します。この例では、関数に 2 つの環境変数が定義されていることを前提としています。
KEY_ALIAS
ユーザーのコードを暗号化および復号するために使用するKMSキーのエイリアス。
KEY_ARN
ユーザーのコードを暗号化および復号するために使用するKMSキーの Amazon リソースネーム(ARN）。

const AWS = require('aws-sdk');
const b64 = require('base64-js');
const encryptionSdk = require('@aws-crypto/client-node');カスタム送信者の Lambda トリガー

674

Amazon Cognito

開発者ガイド//Configure the encryption SDK client with the KMS key from the environment variables.
const { encrypt, decrypt } =encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
const generatorKeyId = process.env.KEY_ALIAS;
const keyIds = [ process.env.KEY_ARN ];const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds })exports.handler = async (event) => {//Decrypt the secret code using encryption SDK.
let plainTextCode;if(event.request.code){
const { plaintext, messageHeader } = await decrypt(keyring,b64.toByteArray(event.request.code));plainTextCode = plaintext}//PlainTextCode now contains the decrypted secret.
if(event.triggerSource == 'CustomEmailSender_SignUp'){//Send an email message to your user via a custom provider.
//Include the temporary password in the message.
}else if(event.triggerSource == 'CustomEmailSender_Authentication'){//Send an MFA message.
}else if(event.triggerSource == 'CustomEmailSender_ResendCode'){//Send a message with next steps for password reset.
}
else if(event.triggerSource == 'CustomEmailSender_ForgotPassword'){//Send a message with next steps for password reset.
}
else if(event.triggerSource == 'CustomEmailSender_UpdateUserAttribute'){//Send a message with next steps for confirming the new attribute.
}else if(event.triggerSource == 'CustomEmailSender_VerifyUserAttribute'){//Send a message with next steps for confirming the new attribute.
}else if(event.triggerSource == 'CustomEmailSender_AdminCreateUser'){//Send a message with next steps for signing in with a new user profile.
}else if(event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification'){//Send a message describing the threat protection event and next steps.
}
return;};カスタム送信者の Lambda トリガー

675

Amazon Cognito

開発者ガイドカスタム E メール送信者の Lambda トリガーのソース
以下の表には、Lambda コード内のカスタム E メールトリガーのソースに対するトリガーイベント
が記載されています。

TriggerSource value

イベント

CustomEmailSender_SignUp

ユーザーがサインアップすると、Amazon
Cognito がウェルカムメッセージを送信します。

CustomEmailSender_Authentication

ユーザーがサインインし、Amazon Cognito が多要素認証 (MFA) コードを送信します。

CustomEmailSender_ForgotPassword

ユーザーがパスワードをリセットするコードを要求します。

CustomEmailSender_ResendCode

ユーザーがパスワードをリセットするための置換コードを要求します。

CustomEmailSender_UpdateUse

ユーザーが E メールアドレスまたは電話番号の属性を更新すると、Amazon Cognito は属性を検証するためのコードを送信します。

rAttribute

CustomEmailSender_VerifyUserAttribute

CustomEmailSender_AdminCrea
teUserCustomEmailSender_AccountTa
keOverNotification

カスタム送信者の Lambda トリガー

ユーザーが新しい E メールアドレスまたは電
話番号属性を作成し、Amazon Cognito は属性を検証するコードを送信します。
ユーザープールに新しいユーザーを作成すると、Amazon Cognito から一時パスワードが送信されます。
Amazon Cognito は、ユーザーアカウントを引き継ぐ試みを検出し、ユーザーに通知を送信し
ます。

676

Amazon Cognito

開発者ガイドカスタムSMS送信者の Lambda トリガー
ユーザープールにカスタムSMS送信者トリガーを割り当てると、Amazon Cognito は、ユーザーイベ
ントがSMSメッセージを送信する必要がある場合に、デフォルトの動作ではなく Lambda 関数を呼び出します。カスタム送信者トリガーを使用すると、 AWS Lambda 関数は選択したメソッドとプロバイダーを通じてユーザーにSMS通知を送信できます。関数のカスタムコードは、ユーザープール
からのすべてのSMSメッセージを処理して配信する必要があります。
このトリガーは、ユーザープールがSMSメッセージを送信する方法をより詳細に制御したいシナリ
オを提供します。Lambda 関数は、複数の送信元IDsまたはクロス を管理する場合などに、Amazon
SNSAPIオペレーションへの呼び出しをカスタマイズできます AWS リージョン。関数は、メッセー
ジを別の配信メディアまたはサードパーティーサービスにリダイレクトすることもできます。
Note
現在、Amazon Cognito コンソールでカスタム送信者のトリガーを割り当てることはできません。CreateUserPool または UpdateUserPoolAPIリクエストの LambdaConfigパラ
メータを使用してトリガーを割り当てることができます。

このトリガーをセットアップするには、以下のステップを実行します。
1. AWS Key Management Service () で対称暗号化キーを作成しますAWS KMS。Amazon Cognito
は、一時パスワード、検証コード、確認コードなどのシークレットを生成し、このKMSキーを使用してシークレットを暗号化します。その後、Lambda 関数の Decrypt APIオペレーションを使用してシークレットを復号し、プレーンテキストでユーザーに送信できます。AWS Encryption SDKは、関数での AWS KMS オペレーションに役立つツールです。
2. カスタム送信者のトリガーとして割り当てる Lambda 関数を作成します。KMS キーのkms:Decryptアクセス許可を Lambda 関数ロールに付与します。
3. Amazon Cognito サービスプリンシパルに、Lambda 関数を呼び出すための cognitoidp.amazonaws.com へのアクセス権を付与します。
4. カスタム配信メソッドまたはサードパーティープロバイダーにメッセージを転送する Lambda 関
数コードを書き込みます。ユーザーの認証コードまたは確認コードを配信するには、Base64 がリクエストで code パラメーターの値をデコードして復号化します。このオペレーションでは、メッセージに含める必要があるプレーンテキストのコードまたはパスワードが生成されます。
5. カスタム送信者 Lambda トリガーを使用するようにユーザープールを更新します。カスタム送信者トリガーを使用してユーザープールを更新または作成するIAMプリンシパルには、KMSキーのカスタム送信者の Lambda トリガー

677

Amazon Cognito

開発者ガイド許可を作成するアクセス許可が必要です。次のスニペットLambdaConfigは、カスタムSMSおよび E メール送信者関数を割り当てます。
"LambdaConfig": {"KMSKeyID": "arn:aws:kms:useast-1:123456789012:key/a6c4f8e2-0c45-47db-925f-87854bc9e357","CustomEmailSender": {"LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction","LambdaVersion": "V1_0"},"CustomSMSSender": {"LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction","LambdaVersion": "V1_0"}

カスタムSMS送信者の Lambda トリガーパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
JSON{"request": {"type": "customSMSSenderRequestV1","code": "string","clientMetadata": {"string": "string",. . .
},"userAttributes": {"string": "string",
. . .
}
}

カスタム送信者の Lambda トリガー

678

Amazon Cognito

開発者ガイドカスタムSMS送信者リクエストパラメータtype
リクエストバージョン。カスタムSMS送信者イベントの場合、この文字列の値は常に ですcustomSMSSenderRequestV1。
コード
関数が復号してユーザーに送信できる暗号化されたコード。
clientMetadata
カスタム送信者の Lambda 関数トリガーへのカスタム入力として提供できる SMS 1 つ以上のキーと値のペア。このデータを Lambda 関数に渡すには、 AdminRespondToAuthChallengeお
よび RespondToAuthChallengeAPIアクションで ClientMetadata パラメータを使用できます。Amazon Cognito は、認証後関数に渡すリクエストの AdminInitiateAuthおよびInitiateAuthAPIオペレーションに ClientMetadata パラメータからのデータを含めません。
userAttributes
ユーザー属性を表す 1 つ以上のキーバリューペア。
カスタムSMS送信者レスポンスパラメータ
Amazon Cognito は、レスポンスに追加の返品情報を期待しません。関数は APIオペレーションを使用して、リソースのクエリと変更、または外部システムへのイベントメタデータの記録を行うことができます。
カスタムSMS送信者 Lambda トリガーのアクティブ化
カスタムロジックを使用してユーザープールのSMSメッセージを送信するカスタムSMS送信者トリガーを設定できます。次の手順では、カスタムSMSトリガー、カスタム E メールトリガー、またはその両方をユーザープールに割り当てます。カスタムSMS送信者トリガーを追加すると、Amazon
Cognito は、Amazon Simple Notification Service でSMSメッセージを送信するデフォルトの動作ではなく、電話番号やワンタイムコードなどのユーザー属性を Lambda 関数に常に送信します。
ImportantAmazon Cognito HTML- (&lt;) や < (>&gt;) などの予約文字をユーザーの一時パスワードにエスケープします。これらの文字は、Amazon Cognito がカスタム E メール送信者機能にカスタム送信者の Lambda トリガー

679

Amazon Cognito

開発者ガイド送信する一時パスワードには表示される場合がありますが、一時的な確認コードには表示されません。一時パスワードを送信するには、Lambda 関数がパスワードを復号した後、ユーザーにメッセージを送信する前に、これらの文字をアンエスケープする必要があります。

1.

AWS KMSで暗号化キーを作成します。このキーは、Amazon Cognito が生成する一時パスワー
ドと認可コードを暗号化します。次に、カスタム送信者の Lambda 関数でこれらのシークレッ
トを復号して、プレーンテキストでユーザーに送信できます。

2.

Amazon Cognito サービスプリンシパルに、 KMSキーでコードを暗号化するためのcognitoidp.amazonaws.comアクセス許可を付与します。
次のリソースベースのポリシーをKMSキーに適用します。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "cognito-idp.amazonaws.com"},"Action": "kms:CreateGrant","Resource": "arn:aws:kms:uswest-2:111222333444:key/1example-2222-3333-4444-999example","Condition": {"StringEquals": {"aws:SourceAccount": "111222333444"},"ArnLike": {"aws:SourceArn": "arn:aws:cognito-idp:uswest-2:111222333444:userpool/us-east-1_EXAMPLE"
}
}
}]
}

3.

カスタム送信者トリガーのための Lambda 関数を作成します。Amazon Cognito はAWS 暗号化
SDKを使用して、ユーザーのAPIリクエストを許可するシークレット、一時パスワード、およびコードを暗号化します。
•

KMS 少なくともキーに対するアクセスkms:Decrypt許可を持つ IAMロールを Lambda 関
数に割り当てます。

カスタム送信者の Lambda トリガー

680

Amazon Cognito

4.

開発者ガイドAmazon Cognito サービスプリンシパルに、Lambda 関数を呼び出すための cognitoidp.amazonaws.com へのアクセス権を付与します。
次の AWS CLI コマンドは、Lambda 関数を呼び出すためのアクセス許可を Amazon Cognito に付与します。

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

5.

メッセージを送信する Lambda 関数コードを作成します。Amazon Cognito は AWS Encryption
SDK 、Amazon Cognito がシークレットをカスタム送信者 Lambda 関数に送信する前に、 を使用してシークレットを暗号化します。関数内でシークレットを復号し、関連するメタデータを処理します。次に、コードを、独自のカスタムメッセージ、および送信先電話番号を、メッセージを配信APIするカスタムに送信します。

6.

7.

Lambda 関数 AWS Encryption SDK に を追加します。詳細については、AWS 「暗号化SDKプロ
グラミング言語」を参照してください。Lambda パッケージを更新するには、次のステップを完
了します。
a.

Lambda 関数を.zip ファイルとして AWS Management Consoleにエクスポートします。

b.

関数を開き、 を追加します AWS Encryption SDK。詳細とダウンロードリンクについて
は、AWS Encryption SDK デベロッパーガイドの「AWS Encryption SDK プログラミング言語」を参照してください。

c.

関数をSDK依存関係で圧縮し、関数を Lambda にアップロードします。詳細について
は、AWS Lambda デベロッパーガイドの「Lambda 関数の .zip ファイルアーカイブとしてのデプロイ」を参照してください。

ユーザープールを更新してカスタム送信者の Lambda トリガーを追加します。UpdateUserPool API リクエストに CustomSMSSenderまたは CustomEmailSenderパ
ラメータを含めます。UpdateUserPool API オペレーションには、ユーザープールのすべてのパラメータと、変更するパラメータが必要です。関連するすべてのパラメータを指定しない場
合、Amazon Cognito は不足しているパラメータの値をデフォルトに設定します。次の例に示す
ように、ユーザープールに追加または保持するすべての Lambda 関数のエントリを含めます。
詳細については、「ユーザープール設定の更新」を参照してください。

カスタム送信者の Lambda トリガー

681

Amazon Cognito

開発者ガイド#Send this parameter in an 'aws cognito-idp update-user-pool' CLI command,
including any existing#user pool configurations.
--lambda-config "PreSignUp=lambda-arn, \CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn},\
KMSKeyID=key-id"

でカスタム送信者の Lambda トリガーを削除するにはupdate-user-pool AWS CLI、 から
CustomSMSSenderまたは CustomEmailSenderパラメータを省略し--lambda-config、ユーザープールで使用する他のすべてのトリガーを含めます。
UpdateUserPool API リクエストでカスタム送信者 Lambda トリガーを削除するには、
ユーザープール設定の残りの部分を含むリクエスト本文から CustomSMSSenderまたはCustomEmailSenderパラメータを省略します。
コード例
次の Node.js の例では、カスタム送信者 Lambda SMS 関数でSMSメッセージイベントを処理します。この例では、関数に 2 つの環境変数が定義されていることを前提としています。
KEY_ALIAS
ユーザーのコードを暗号化および復号するために使用するKMSキーのエイリアス。
KEY_ARN
ユーザーのコードを暗号化および復号するために使用するKMSキーの Amazon リソースネーム(ARN）。

const AWS = require('aws-sdk');
const b64 = require('base64-js');
const encryptionSdk = require('@aws-crypto/client-node');//Configure the encryption SDK client with the KMS key from the environment variables.
const { encrypt, decrypt } =encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
const generatorKeyId = process.env.KEY_ALIAS;
カスタム送信者の Lambda トリガー

682

Amazon Cognito

開発者ガイドconst keyIds = [ process.env.KEY_ARN ];const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds })exports.handler = async (event) => {//Decrypt the secret code using encryption SDK.
let plainTextCode;if(event.request.code){
const { plaintext, messageHeader } = await decrypt(keyring,b64.toByteArray(event.request.code));plainTextCode = plaintext}//PlainTextCode now contains the decrypted secret.
if(event.triggerSource == 'CustomSMSSender_SignUp'){//Send an SMS message to your user via a custom provider.
//Include the temporary password in the message.
}else if(event.triggerSource == 'CustomSMSSender_ResendCode'){}else if(event.triggerSource == 'CustomSMSSender_ForgotPassword'){}else if(event.triggerSource == 'CustomSMSSender_UpdateUserAttribute'){}else if(event.triggerSource == 'CustomSMSSender_VerifyUserAttribute'){}else if(event.triggerSource == 'CustomSMSSender_AdminCreateUser'){}
else if(event.triggerSource == 'CustomSMSSender_AccountTakeOverNotification'){}return;};トピック• カスタムSMS送信者関数を使用してSMSメッセージ機能を評価する• カスタムSMS送信者の Lambda トリガーソース
カスタムSMS送信者関数を使用してSMSメッセージ機能を評価する
カスタムSMS送信者の Lambda 関数は、ユーザープールが送信するSMSメッセージを受け入れ、関数はカスタムロジックに基づいてコンテンツを配信します。Amazon Cognito は関数に カスタム
SMS送信者の Lambda トリガーパラメータ を送信します。この情報を使用して、関数はユーザーが望むことを実行できます。例えば、Amazon Simple Notification Service (Amazon SNS) トピックにカスタム送信者の Lambda トリガー

683

Amazon Cognito

開発者ガイド

コードを送信できます。Amazon SNSトピックのサブスクライバーは、SMSメッセージ、HTTPSエ
ンドポイント、または E メールアドレスです。
カスタム送信者 Lambda 関数を使用して Amazon Cognito SMS SMSメッセージングのテスト環境を作成するには、 の aws-samples ライブラリの amazon-cognito-user-pooldevelopment-and-testingwith-sms-redirected-to-email- を参照してください。 GitHubリポジトリには、新しいユーザープー
ルを作成したり、既に持っているユーザープールを操作したりできる AWS CloudFormation テンプ
レートが含まれています。これらのテンプレートは、Lambda 関数と Amazon SNSトピックを作成します。テンプレートがカスタム送信者トリガーとして割り当てる Lambda SMS 関数は、SMSメッ
セージを受信者に Amazon SNSトピックにリダイレクトします。
このソリューションをユーザープールにデプロイすると、Amazon Cognito が通常SMSメッセージ
ングを介して送信するすべてのメッセージは、代わりに Lambda 関数が中央の E メールアドレスに送信します。このソリューションを使用して、SMSメッセージをカスタマイズおよびプレビュー
し、Amazon Cognito がSMSメッセージを送信する原因となるユーザープールイベントをテストします。テストが完了したら、 CloudFormation スタックをロールバックするか、ユーザープールからカスタムSMS送信者関数の割り当てを削除します。
Importantamazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email のテンプ
レートを使用して本番環境を構築しないでください。ソリューションのカスタムSMS送信
者 Lambda 関数はメッセージをシミュレートしますが、Lambda 関数はそれらすべてを 1 つの中央 E メールアドレスに送信します。 SMS本番稼働用 Amazon Cognito ユーザープール
でSMSメッセージを送信する前に、「」に示す要件を満たす必要がありますSMS Amazon
Cognito ユーザープールのメッセージ設定。

カスタムSMS送信者の Lambda トリガーソース
次の表は、Lambda コード内のカスタムトリガーソースのSMSトリガーイベントを示しています。

TriggerSource value

イベント

CustomSMSSender_SignUp

ユーザーがサインアップすると、Amazon
Cognito がウェルカムメッセージを送信します。

カスタム送信者の Lambda トリガー

684

Amazon Cognito

開発者ガイドTriggerSource value

イベント

CustomSMSSender_ForgotPassword

ユーザーがパスワードをリセットするコードを要求します。

CustomSMSSender_ResendCode

ユーザーが新しいコードをリクエストして登録を確認します。

CustomSMSSender_VerifyUserA

ユーザーが新しい E メールアドレスまたは電話番号の属性を作成すると、Amazon Cognito
は属性を検証するコードを送信します。

ttribute

CustomSMSSender_UpdateUserA
ttribute

ユーザーが E メールアドレスまたは電話番号の属性を更新すると、Amazon Cognito は属性を検証するためのコードを送信します。

CustomSMSSender_Authentication

SMS 多要素認証 (MFA) で設定されたユーザー
はサインインします。

CustomSMSSender_AdminCreateUser

ユーザープールに新しいユーザーを作成すると、Amazon Cognito から一時パスワードが送信されます。

ユーザープール分析に Amazon Pinpoint を使用する
Amazon Cognito ユーザープールは、Amazon Cognito ユーザープールの分析を提供し、Amazon
Pinpoint キャンペーンのユーザーデータを強化するために Amazon Pinpoint と統合されています。Amazon Pinpoint は、プッシュ通知を使用するモバイルアプリケーションでのユーザーエンゲー
ジメントを促進するために、分析と的を絞ったキャンペーンを提供します。Amazon Cognito ユー
ザープールでの Amazon Pinpoint 分析のサポートにより、Amazon Pinpoint コンソールでユーザー
プールのサインアップ、サインイン、認証の失敗、毎日のアクティブユーザー (DAUs）、および毎月のアクティブユーザー (MAUs) を追跡できます。 Amazon Pinpoint デバイスプラットフォーム、
デバイスロケール、およびアプリケーションのバージョンなどのデータを異なる日付範囲や属性で表示できます。
また、アプリケーションにカスタム属性を設定することもできます。これらは、Amazon Pinpoint でユーザーを分割し、的を絞ったプッシュ通知をユーザーに送信するために使用できます。Amazon
Cognito コンソールの [Analytics] (分析) タブで、[Share user attribute data with Amazon Pinpoint]
Amazon Pinpoint 分析の使用

685

Amazon Cognito

開発者ガイド(Amazon Pinpoint とユーザー属性データを共有する) を選択すると、Amazon Pinpoint は、ユーザーの E メールアドレスと電話番号用に追加のエンドポイントを作成します。
Amazon Cognito コンソールを使用してユーザープールで Amazon Pinpoint 分析をアクティブ化す
ると、Amazon Cognito がユーザープールの Amazon Pinpoint にリクエストを行うときに Amazon
Cognito が引き受けるサービスにリンクされたロールも作成されます。 API Amazon Pinpoint 分析設定を追加するIAMプリンシパルには、 アクセスCreateServiceLinkedRole許可が必要です。サービスにリンクされたロールは ですAWSServiceRoleForAmazonCognitoIdp。詳細については、「Amazon
Cognito のサービスリンクロールの使用」を参照してください。
Amazon Cognito でアプリクライアントAnalyticsConfigurationに を適用するとAPI、Amazon
Pinpoint のカスタムIAMロールと、ロールを引き受ける外部 ID を割り当てることができます。ロールは cognito-idp サービスプリンシパルを信頼している必要があり、ロール信頼ポリシーで外部
ID が必要な場合は、AnalyticsConfiguration と一致する必要があります。Amazon Pinpoint
プロジェクトには、ロール cognito-idp:Describe* 権限と以下の権限を付与する必要があります。
• mobiletargeting:UpdateEndpoint• mobiletargeting:PutEvents

Amazon Cognito と Amazon Pinpoint の利用可能なリージョン
次の表は、次のいずれかの条件を満たす Amazon Cognito と Amazon Pinpoint 間の AWS リージョン
マッピングを示しています。
• Amazon Pinpoint プロジェクトは、米国東部 (バージニア北部) (us-east-1) リージョンでのみ使用できます。
• Amazon Pinpoint プロジェクトは、同じリージョンまたは米国東部 (バージニア北部) (us-east-1)
リージョンで使用できます。
デフォルトでは、Amazon Cognito は同じ AWS リージョンの Amazon Pinpoint プロジェクトにのみ分析を送信できます。このルールの例外は、次の表のリージョンと Amazon Pinpoint が利用できな
いリージョンです。
Amazon Pinpoint は、次のリージョンでは利用できません。これらのリージョンの Amazon Cognito
ユーザープールは分析をサポートしていません。
• ヨーロッパ (ミラノ)Amazon Cognito と Amazon Pinpoint のリージョンマッピングを確認する

686

Amazon Cognito

開発者ガイド• 中東 (バーレーン)• アジアパシフィック (大阪)
• イスラエル (テルアビブ)• アフリカ (ケープタウン)• アジアパシフィック (ジャカルタ)この表は、Amazon Cognito ユーザープールを構築したリージョンと、Amazon Pinpoint の対応するリージョンとの関係を示しています。Amazon Pinpoint プロジェクトを Amazon Cognito と統合するには、使用可能なリージョンに設定する必要があります。
Amazon Cognito ユーザープールのリージョン

Amazon Pinpoint プロジェクトのリージョン

ap-northeast-1

us-east-1

ap-northeast-2

us-east-1

ap-south-1

us-east-1、ap-south-1

ap-southeast-1

us-east-1

ap-southeast-2

us-east-1、ap-southeast-2

ca-central-1

us-east-1

eu-central-1

us-east-1、eu-central-1

eu-west-1

us-east-1、eu-west-1

eu-west-2

us-east-1

us-east-1

us-east-1

us-east-2

us-east-1

us-west-2

us-east-1、us-west-2

リージョンマッピングの例

Amazon Cognito と Amazon Pinpoint のリージョンマッピングを確認する

687

Amazon Cognito

開発者ガイド• ap-northeast-1 でユーザープールを作成する場合、Amazon Pinpoint プロジェクトは us-east-1 で作成する必要があります。
• ap-south-1 でユーザープールを作成する場合、Amazon Pinpoint プロジェクトは us-east-1 または
ap-south-1 のいずれかで作成できます。

Note
上記の表 AWS リージョン を除くすべての について、Amazon Cognito はユーザープールと同じリージョンの Amazon Pinpoint プロジェクトのみを使用できます。ユーザープー
ルを構築したリージョンで Amazon Pinpoint が利用できず、表にも記載されていない場
合、Amazon Cognito はそのリージョンで Amazon Pinpoint 分析をサポートしません。詳細な AWS リージョン 情報については、「Amazon Pinpoint エンドポイントとクォータ」を参照してください。

Amazon Pinpoint 分析設定の指定 (AWS Management Console)
Amazon Cognito ユーザープールを設定して、分析データを Amazon Pinpoint に送信できます。Amazon Cognito は、ローカルユーザーの分析データのみを Amazon Pinpoint に送信します。Amazon Pinpoint プロジェクトに関連付けるようにユーザープールを設定したら、APIリク
エストAnalyticsMetadataに を含める必要があります。詳細については、「アプリを Amazon
Pinpoint と統合する」を参照してください。
分析の設定を指定する
1.

Amazon Cognito コンソールに移動します。 AWS 認証情報を求められる場合があります。

2.

[User Pools] (ユーザープール) を選択して、リストから既存のユーザープールを選択します。

3.

[App integration] (アプリケーションの統合) タブを選択します。

4.

[App clients and analytics] (アプリケーションクライアントと分析) で、リストから既存の [Appclient name] (アプリケーションクライアント名) を選択します。

5.

[Pinpoint analytics] (Pinpoint 分析) で [Enable] (有効化) を選択します。

6.

[Pinpoint Region] (Pinpoint リージョン) を選択します。

7.

[Amazon Pinpoint project] (Amazon Pinpoint プロジェクト) を選択するか、[Create Amazon
Pinpoint project] (Amazon Pinpoint プロジェクトを作成する) を選択します。

Amazon Cognito と Amazon Pinpoint のリージョンマッピングを確認する

688

Amazon Cognito

開発者ガイドNote
Amazon Pinpoint プロジェクト ID は、Amazon Pinpoint プロジェクトに固有の 32 文字の文字列です。これは Amazon Pinpoint コンソールにリストされています。
複数の Amazon Cognito アプリケーションを単一の Amazon Pinpoint プロジェクトにマッピングできますが、各 Amazon Cognito アプリは 1 つの Amazon Pinpoint プロジェ
クトにしかマップできません。
Amazon Pinpoint では、各プロジェクトを単一のアプリにする必要があります。例
えば、ゲームデベロッパーが 2 つのゲームを持っている場合、両方のゲームが同じ
Amazon Cognito ユーザープールを使用しているとしても、各ゲームを個別の Amazon
Pinpoint プロジェクトにする必要があります。Amazon Pinpoint プロジェクトの詳細については、「Amazon Pinpoint でプロジェクトを作成する」を参照してください。
8.

Amazon Cognito が E メールアドレスと電話番号を Amazon Pinpoint に送信し、ユーザー用の追加のエンドポイントを作成する場合は、[User data sharing] (ユーザーデータの共有) で [Shareuser data with Amazon Pinpoint] (Amazon Pinpoint でユーザーデータを共有する) を選択します。ユーザーが E メールアドレスと電話番号を確認した後、Amazon Cognito はそれらがユー
ザーアカウントで利用可能な場合にのみ Amazon Pinpoint と共有します。
Note
エンドポイントは、Amazon Pinpoint でプッシュ通知を送信することができるユーザー
デバイスを一意に識別します。エンドポイントの詳細については、Amazon Pinpoint デベロッパーガイドの「エンドポイントの追加」を参照してください。

9.

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

Amazon Pinpoint 分析設定の指定 (AWS CLI および AWS API）
以下のコマンドを使用して、ユーザープールの Amazon Pinpoint 分析設定を指定します。
アプリケーション作成時にユーザープールの既存のクライアントアプリケーションの分析設定を指定する• AWS CLI: aws cognito-idp create-user-pool-client• AWS API: CreateUserPoolClient

Amazon Cognito と Amazon Pinpoint のリージョンマッピングを確認する

689

Amazon Cognito

開発者ガイドユーザープールの既存のクライアントアプリケーションの分析設定を更新する• AWS CLI: aws cognito-idp update-user-pool-client• AWS API: UpdateUserPoolClient

Note
Amazon Cognito は、ApplicationArn の使用時にリージョン内の統合をサポートします。

アプリを Amazon Pinpoint と統合する
ユーザープール API内の Amazon Cognito ローカルユーザーの分析メタデータを Amazon Pinpoint に発行できます。 Amazon Cognito
ローカルユーザー
サードパーティー ID プロバイダー (IdP) を通じてサインインするのではなく、アカウントにサインアップしたユーザー、またはユーザープールで作成されたユーザー。
ユーザープール API
カスタムユーザーインターフェイス (UI) を備えたアプリを使用して AWS SDK、 と統合できるオ
ペレーション。ホストされた UI からサインインするフェデレーティッドユーザーまたはローカ
ルユーザーの分析メタデータを渡すことはできません。ユーザープールAPIオペレーションのリストについては、Amazon Cognito APIリファレンス」を参照してください。
キャンペーンに発行するようにユーザープールを設定すると、Amazon Cognito は次のAPIオペレー
ションのためにメタデータを Amazon Pinpoint に渡します。
• AdminInitiateAuth• AdminRespondToAuthChallenge• ConfirmForgotPassword• ConfirmSignUp• ForgotPassword• InitiateAuth• ResendConfirmationCode
アプリを Amazon Pinpoint と統合する

690

Amazon Cognito

開発者ガイド• RespondToAuthChallenge• SignUp
ユーザーのセッションに関するメタデータを Amazon Pinpoint キャンペーンに渡すには、APIリク
エストの AnalyticsMetadataパラメータに AnalyticsEndpointId値を含めます。 JavaScript
例については、「 AWS ナレッジセンター」のAmazon Cognito ユーザープール分析が Amazon
Pinpoint ダッシュボードに表示されないのはなぜですか？」を参照してください。

ユーザープール内のユーザーを管理する
ユーザープールを作成した後で、ユーザーアカウントの作成、確認、および管理を行うことができます。Amazon Cognito グループでは、IAM ロールをグループにマップすることによって、ユーザーと、ユーザーのリソースへのアクセスを管理できます。
ユーザーは、ユーザー移行の Lambda トリガーを使用してユーザープールにインポートできます。
このアプローチでは、ユーザープールに初めてサインインするときに、既存のユーザーディレクトリ
からユーザープールにユーザーをシームレスに移行できます。
トピック• ユーザー作成ポリシーの設定• ユーザーアカウントのサインアップと確認• 管理者としてのユーザーアカウントの作成• ユーザープールにグループを追加する• ユーザーアカウントの管理と検索• ユーザーアカウントの復旧• ユーザープールへのユーザーのインポート• ユーザープール属性• ユーザープールのパスワードの追加要件

ユーザー作成ポリシーの設定
ユーザープールでは、ユーザーにサインアップを許可するか、ユーザーを管理者として作成できます。また、サインアップ後の検証と確認のプロセスを、どの程度ユーザーに委ねるかを制御できます。例えば、サインアップを確認して、外部の検証プロセスに基づいてサインアップを承認できま
ユーザーの管理

691

Amazon Cognito

開発者ガイドす。この設定 (管理者作成ユーザーポリシー) では、ユーザーが自分のユーザーアカウントを確認できなくなるまでの時間も設定します。
Amazon Cognito は、ソフトウェアのカスタマー ID およびアクセス管理 (CIAM) プラットフォーム
として、一般顧客のニーズに応えることができます。サインアップを受け入れるユーザープールに
アプリケーションクライアントがある場合は、ホストされた UI の有無にかかわらず、一般に検出可能なアプリケーションクライアント ID を使用してインターネットからサインアップをリクエストしたすべてのユーザーに対してユーザープロファイルを作成します。サインアップしたユーザー
プロファイルは、アクセストークンと ID トークンを受け取り、アプリケーション用に承認されたリソースにアクセスできます。ユーザープールでサインアップを有効にする前に、オプションを確認し、設定がセキュリティ基準に準拠していることを確認してください。[自己登録を有効化] とAllowAdminCreateUserOnly を、以下の手順で説明するように注意して設定します。
AWS Management Console
ユーザープールの [サインアップエクスペリエンス] タブと、ユーザープール作成ウィザードの[サインアップエクスペリエンスを設定] ステップには、ユーザープール内のユーザーのサインアップと管理作成に関する設定の一部が含まれています。
サインアップエクスペリエンスを設定するには
1.

[Cognito による検証と確認] で、[Cognito が検証と確認のためのメッセージを自動的に送信することを許可] するかどうかを選択します。この設定を有効にすると、Amazon Cognito
はユーザープールに提示する必要があるコードを含む E メールまたは SMS メッセージを新規ユーザーに送信します。これにより、E メールアドレスまたは電話番号の所有権が確認され、同等の属性が検証済みとして設定され、ユーザーアカウントのサインインが確認されます。選択した [検証する属性] により、検証メッセージの配信方法と送信先が決まります。

2.

[属性変更の確認] は、ユーザーの作成時には重要ではありませんが、属性の検証に関係します。[サインイン属性] を変更したが、まだ検証していないユーザーに対して、新しい属性値
または元の属性値を使用して引き続きサインインすることを許可できます。詳細について
は、「ユーザーが E メールまたは電話番号を変更するときに確認する」を参照してください。

3.

[必須の属性] には、ユーザーのサインアップやユーザーの作成前に値を指定する必要がある
属性が表示されます。必須の属性は、ユーザープールの作成ウィザードでのみ設定できます。

4.

カスタム属性は、ユーザーの作成とサインアップのプロセスにとって重要です。イミュータ
ブルなカスタム属性の値を設定できるのは、ユーザーの初回作成時のみであるためです。カ
スタム属性の詳細については、「カスタム属性」を参照してください。

ユーザーのサインアップの許可

692

Amazon Cognito

5.

開発者ガイド認証されていない SignUp API を使用して新しいアカウントを生成することをユーザーに許可する場合は、[セルフサービスのサインアップ] で、[自己登録を有効化] を設定します。自己登録を無効にした場合は、Amazon Cognito コンソールまたは AdminCreateUser API リク
エストで新しいユーザーを管理者としてのみ作成できます。自己登録が非アクティブなユー
ザープールでは、SignUp API リクエストが NotAuthorizedException を返し、ホストされた UI に [サインアップ] リンクが表示されません。

管理者としてのユーザーを作成する予定のユーザープールでは、[サインインエクスペリエンス]
タブの [管理者が設定した一時パスワードの有効期限] で一時パスワードの有効期間を設定できます。
管理者としてのユーザーを作成する場合の別の重要な要素は、招待メッセージです。新しいユーザーを作成すると、Amazon Cognito はアプリへのリンクを含むメッセージをユーザーに送信し、初回のサインインができるようにします。このメッセージテンプレートを [メッセージング]の [メッセージテンプレート] でカスタマイズします。
[機密アプリクライアント] (通常はウェブアプリケーション) には、アプリクライアントシーク
レットがないとサインアップできないようにするクライアントシークレットを設定できます。セキュリティ上のベストプラクティスとして、パブリックアプリクライアント (通常はモバイルア
プリ) にはアプリクライアントシークレットを配布しないでください。クライアントシークレットを使用したアプリケーションクライアントは、Amazon Cognito コンソールの [アプリケーショ
ンの統合] タブで作成できます。
Amazon Cognito user pools API
ユーザープールのユーザーを作成するためのパラメータは、CreateUserPool またはUpdateUserPool API リクエストを使用してプログラムで設定できます。
AdminCreateUserConfig 要素は、ユーザープールの以下のプロパティの値を設定します。
1. セルフサービスのサインアップの有効化
2. 管理者が新規作成したユーザーに送信する招待メッセージ
次の例を API リクエスト本文全体に追加すると、セルフサービスのサインアップが無効なユー
ザープールと、基本的な招待メールが設定されます。
"AdminCreateUserConfig": {"AllowAdminCreateUserOnly": true,
ユーザーのサインアップの許可

693

Amazon Cognito

開発者ガイド"InviteMessageTemplate": {"EmailMessage": "Your username is {username} and temporary password is{####}.","EmailSubject": "Welcome to ExampleApp","SMSMessage": "Your username is {username} and temporary password is{####}."}}CreateUserPool または UpdateUserPool API リクエストの以下の追加パラメータは、新規ユー
ザーの作成を制御します。
AutoVerifiedAttributes
新しいユーザーを登録するときに自動的にメッセージを送信する先の属性、メールアドレス、
または電話番号。
ポリシー
ユーザープールのパスワードポリシー。
Schema
ユーザープールのカスタム属性。イミュータブルなカスタム属性の値を設定できるのはユー
ザーの初回作成時のみであるため、カスタム属性はユーザーの作成とサインアップのプロセス
にとって重要です。
このパラメータでは、ユーザープールの必須の属性も設定します。次のテキストを API リク
エスト本文全体の Schema 要素に挿入すると、email 属性が必要に応じて設定されます。
{"Name": "email","Required": true}

ユーザーアカウントのサインアップと確認
ユーザーアカウントは次の方法の 1 つでユーザープールに追加されます。
• ユーザーは、ユーザープールのクライアントアプリにサインアップします。これはモバイルまたは
ウェブアプリです。
ユーザーアカウントのサインアップと確認

694

Amazon Cognito

開発者ガイド• ユーザープールにユーザーのアカウントをインポートできます。詳細については、「CSV ファイ
ルからユーザープールへのユーザーのインポート」を参照してください。
• ユーザープールにユーザーのアカウントを作成し、サインインへユーザーを招待することができます。詳細については、「管理者としてのユーザーアカウントの作成」を参照してください。
サインアップするユーザーは、サインインする前に確認が求められます。インポートされ作成されたユーザーはすでに確認されていますが、初めてサインインするときはパスワードを作成する必要があります。以下のセクションで、確認プロセス、E メール、電話確認について説明します。

ユーザーアカウント確認の概要
次の図は確認プロセスを示しています。

ユーザーアカウントは、以下のいずれかの状態になります。
ユーザーアカウントのサインアップと確認

695

Amazon Cognito

開発者ガイド登録済み (未確認)
ユーザーは正常にサインアップできますが、ユーザーアカウントを確認するまではサインインできません。ユーザーは有効ですが、この状態で確認されていません。
サインアップする新しいユーザーはこの状態から開始します。
確認済み
ユーザーアカウントが確認され、ユーザーはサインインできます。ユーザーがユーザーアカウン
トを確認するためにコードを入力したり、E メールのリンクをたどったりすると、その E メール
や電話番号が自動的に認証されます。コードまたはリンクは 24 時間有効です。
ユーザーアカウントが管理者またはサインアップ前の Lambda トリガーによって確認された場合は、検証済みの E メールまたは電話番号がアカウントに関連付けられていないことがあります。
パスワードのリセットが必要
ユーザーアカウントは確認されましたが、ユーザーはサインインする前にコードをリクエスト
し、自身のパスワードをリセットする必要があります。
管理者またはデベロッパーがインポートしたユーザーアカウントは、この状態から開始します。
パスワードの強制変更
ユーザーアカウントが確認され、ユーザーは一時パスワードを使用してサインインできますが、初回のサインイン時に他の操作を行う前にパスワードを新しい値に変更する必要があります。
管理者またはデベロッパーが作成したユーザーアカウントは、この状態から開始します。
Disabled
ユーザーアカウントを削除する前に、そのユーザーのサインインアクセスを無効にする必要があります。
その他のリソース• Amazon Cognito による非アクティブなユーザーアカウントの検出と修復

サインアップ時に連絡先情報を検証する
新しいユーザーがアプリにサインアップする際、1 つ以上の連絡先の入力を求める必要があります。
たとえば、ユーザーの連絡先情報は、以下のように使用されます。
ユーザーアカウントのサインアップと確認

696

Amazon Cognito

開発者ガイド• ユーザーが自分のパスワードをリセットする際、仮パスワードを送信する。
• ユーザーの個人情報または財務情報が更新された際に通知する。
• プロモーションメッセージ (特価販売や割引など) を送信する。
• アカウントの概要または請求日のお知らせを送信する。
このようなユースケースでは、検証済みの送信先にメッセージを送信することが重要です。そうしな
いと、誤入力された無効な E メールアドレスまたは電話番号にメッセージが送信される可能性があります。さらに悪いケースでは、ユーザーを騙る悪人に機密情報が送信される可能性があります。
適切なユーザーにのみメッセージが送信されることを確実にするには、サインアップ時にユーザーが以下の情報を入力することを必須とするように Amazon Cognito ユーザープールを設定します。
a. E メールアドレスおよび電話番号。
b. Amazon Cognito がその E メールアドレスまたは電話番号に送信する検証コード。24 時間が経過
し、ユーザーのコードまたはリンクが無効になった場合は、 ResendConfirmationCode API オペ
レーションを呼び出して新しいコードまたはリンクを生成して送信します。
検証コードを入力することで、コードを受信したメールボックスまたは電話へのアクセス権があるユーザーであることが証明されます。ユーザーがコードを入力すると、Amazon Cognito が以下を行うことによってユーザープールのユーザーに関する情報を更新します。
• ユーザーのステータスを CONFIRMED に設定する。
• ユーザーの属性を更新し、E メールアドレスまたは電話番号が検証されていることを示す。
この情報は、Amazon Cognito コンソールを使用して表示できます。または、 AdminGetUser API
オペレーション、 で admin-get-user コマンド AWS CLI、または AWS SDKs のいずれかの対応
するアクションを使用できます。
ユーザーに検証済みの連絡方法がある場合は、ユーザーがパスワードリセットをリクエストする時に、Amazon Cognito が自動的にメッセージをユーザーに送信します。
E メールまたは電話による検証を求めるようにユーザープールを設定するにはユーザーの E メールアドレスと電話番号を確認することで、ユーザーに連絡できることを確認します。の次の手順を実行して AWS Management Console 、ユーザーが E メールアドレスまたは電話番号を確認するようにユーザープールを設定します。
ユーザーアカウントのサインアップと確認

697

Amazon Cognito

開発者ガイドNoteアカウントにまだユーザープールがない場合は、「ユーザープールの開始方法」を参照してください。

ユーザープールを設定するには
1.

Amazon Cognitoコンソール に移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

ナビゲーションペインで、[User Pools] (ユーザープール) を選択します。リストから既存のユー
ザープールを選択するか、ユーザープールを作成します。

3.

Sign-up experience] (サインアップエクスペリエンス) タブを選択して、[Attribute verification
and user account confirmation] (属性の検証とユーザーアカウントの確認) を検索します。[編集]を選択します。

4.

[Cognito による検証と確認] で、[Cognito が検証と確認のためのメッセージを自動的に送信することを許可] するかどうかを選択します。この設定を有効にすると、Amazon Cognito は、ユー
ザーのサインアップ時またはユーザープロファイルの作成時に選択したユーザー連絡先属性にメッセージを送信します。サインイン用の属性を検証し、ユーザープロファイルを確認するために、Amazon Cognito はコードまたはリンクをメッセージでユーザーに送信します。次に、ユー
ザーは UI にコードを入力し、アプリが ConfirmSignUp または AdminConfirmSignUp API
リクエストで確認できるようにする必要があります。
Note[Cognito-assisted verification and confirmation] (Cognito アシストの検証と確認) を無効にして、API アクションまたは Lambda トリガーを使用して属性を検証し、ユーザーを確認することもできます。
このオプションを選択すると、Amazon Cognito はユーザーのサインアップ時に検証コードを送信しません。このオプションは、Amazon Cognito からの検証コードを使用
せずに、少なくとも 1 つの連絡方法を検証するカスタムの認証フローを使用している場
合に選択します。例えば、特定のドメインに属する E メールアドレスを自動的に確認するサインアップ前 Lambda トリガーを使用することができます。
ユーザーの連絡先情報を検証しない場合は、アプリケーションを使用できない場合があります。以下を行うには、ユーザーの連絡情報の検証が必要となる点にご注意ください。

ユーザーアカウントのサインアップと確認

698

Amazon Cognito

開発者ガイド• [Reset their passwords] (パスワードのリセット) — ユーザーが ForgotPassword
API アクションを呼び出すオプションをアプリケーションで選択すると、Amazon
Cognito はユーザーの E メールアドレスまたは電話番号に一時パスワードを送信します。Amazon Cognito がこのパスワードを送信するのは、ユーザーが検証済みの連絡方法を少なくとも 1 つ持っている場合のみです。
• [Sign in by using an email address or phone number as an alias] (E メールアドレスまたは電話番号をエイリアスとして使用してサインインする) — これらのエイリアスを許可するようにユーザープールを設定した場合、ユーザーは、検証済みである場合にのみ、そのエイリアスを使用してサインインできます。詳細については、「ログイン属性のカスタマイズ」を参照してください。
5.

[Attributes to verify] (検証する属性) を以下から選択します。
SMS メッセージを送信し、電話番号を確認する
ユーザーがサインアップすると Amazon Cognito が SMS メッセージで検証コードを送信します。通常 SMS メッセージでユーザーと通信する場合は、このオプションを選択してください。例えば、配信通知、予約確認、または警告を送信する場合は、検証済みの電話番号を使用します。アカウントが確認されると、ユーザーの電話番号が検証済み属性になります。
ユーザーの E メールアドレスを確認して通信するには、追加のアクションを実行する必要があります。
E メールメッセージを送信し、E メールアドレスを確認する
ユーザーがサインアップすると Amazon Cognito が E メール経由で検証コードを送信します。通常 E メールでユーザーと通信する場合は、このオプションを選択してください。たとえば、請求明細、注文書、特価販売を使用する場合は、検証済みの E メールアドレスを使用する必要があります。アカウントが確認されると、ユーザーのメールアドレスが検証済み属
性になります。ユーザーの電話番号を確認して通信するには、追加のアクションを実行する必要があります。
電話番号が利用可能な場合は SMS メッセージを送信し、そうでない場合は E メールメッセージを送信する
すべてのユーザーに同じ検証済みの連絡方法を要求する必要がない場合は、このオプション
を選択してください。この場合、アプリのサインアップページで、希望する連絡方法のみを検証するようにユーザーに求めることができます。Amazon Cognito が検証コードを送信するときは、アプリからの SignUp リクエストで指定された連絡方法にコードが送信されます。ユーザーが E メールアドレスと電話番号の両方を入力し、アプリが SignUp リクエスト

ユーザーアカウントのサインアップと確認

699

Amazon Cognito

開発者ガイドに両方の連絡方法を指定する場合、Amazon Cognito は検証コードを電話番号のみに送信します。
ユーザーが E メールアドレスと電話番号の両方を検証することを必須としている場合は、このオプションを選択してください。Amazon Cognito は、ユーザーのサインアップ時に 1 つの連絡方法を検証するので、アプリがユーザーのサインイン後にもう一方の連絡方法を検証する必要があります。詳細については、「ユーザーに E メールアドレスと電話番号の両方の確認を要求する場合」を参照してください。
6.

[変更の保存] を選択します。

E メールアドレスまたは電話による検証を使用した認証フロー
ユーザープールで連絡先情報の検証をユーザーに要求する場合、ユーザーがアプリにサインアップした後のフローを容易にする必要があります。
1.

ユーザーは、ユーザー名、メールアドレス、電話番号やその他の属性を入力してアプリにサインアップします。

2.

Amazon Cognito サービスは、アプリからサインアップリクエストを受け取ります。サインアッ
プに必要なすべての属性がリクエストに含まれることを確認した後で、サービスはサインアップ
プロセスを完了し、確認コードをユーザーの電話 (SMS メッセージ) または E メールに送信します。コードは 24 時間有効です3.

サービスは、サインアップが完了しユーザーアカウントが確認保留であることを返します。応答には、確認コードの送信先に関する情報が含まれます。この時点でユーザーアカウントは未確認状態になり、ユーザーのメールアドレスと電話番号は未確認です。

4.

アプリは、ユーザーに確認コードを入力するよう求めるメッセージを表示できます。ユーザー
は、コードをすぐに入力する必要はありません。ただし、確認コードを入力するまでユーザーはサインインできません。

5.

ユーザーがアプリに確認コードを入力します。

6.

アプリは、Amazon Cognito サービスにコードを送信する ConfirmSignUp を呼び出します。
これは、コードを検証し、コードが正しい場合はユーザーのアカウントを確認済み状態に設定します。ユーザーアカウントが正常に確認されると、Amazon Cognito サービスが自動的に、E
メールアドレスまたは電話番号を確認するために使用された属性を検証済みとしてマークします。この属性の値が変更されていない場合、ユーザーはそれを再度確認する必要はありません。

7.

この時点で、ユーザーアカウントは確認済みの状態になっており、ユーザーはサインインできます。

ユーザーアカウントのサインアップと確認

700

Amazon Cognito

開発者ガイドユーザーに E メールアドレスと電話番号の両方の確認を要求する場合
Amazon Cognito は、ユーザーのサインアップ時に 1 つの連絡方法しか検証しません。Amazon
Cognito が E メールアドレスまたは電話番号のどちらを検証するかを選択する必要がある場合
は、SMS メッセージ経由で検証コードを送信して電話番号を検証することを選択します。例えば、
ユーザーが E メールアドレスと電話番号のいずれかを検証できるようにユーザープールを設定する
場合、およびアプリがサインアップ時にこれら両方の属性を提供する場合、Amazon Cognito は電話番号のみを検証します。ユーザーが電話番号を検証したら、Amazon Cognito がユーザーのステータ
スを CONFIRMED に設定し、ユーザーはアプリにサインインできるようになります。
ユーザーがアプリにサインインした後、サインアップ時に検証されなかった連絡方法を検証するオプションを提示することができます。この 2 つ目の方法を検証するには、アプリでVerifyUserAttribute API アクションを呼び出します。このアクションには AccessToken パラ
メータが必要で、Amazon Cognito は認証されたユーザーにアクセストークンしか提供しないことに注意してください。したがって、2 つ目の連絡方法は、ユーザーがサインインした後にのみ検証できます。
E メールアドレスと電話番号の両方を検証するようにユーザーに求める場合は、以下のように行います。
1.

E メールアドレスまたは電話番号を検証することをユーザーに許可するようにユーザープールを設定します。

2.

アプリのサインアップフローで、E メールアドレスおよび電話番号の両方を入力するようユー
ザーに求めます。SignUp API アクションを呼び出し、UserAttributes パラメータの E メー
ルアドレスおよび電話番号を指定します。この時点で、Amazon Cognito がユーザーの携帯電話に検証コードを送信します。

3.

アプリのインターフェイスで、ユーザーが検証コードを入力する確認ページを提示します。ユー
ザーを確認するには、ConfirmSignUp API アクションを呼び出します。この時点で、ユーザーのステータスは CONFIRMED となり、ユーザーの電話番号は検証されますが、E メールアドレス
はまだ検証されていません。

4.

サインインページを提示し、ユーザーを認証するには、InitiateAuth API アクションを呼び出します。ユーザーが認証されると、Amazon Cognito がアプリにアクセストークンを返します。

5.

GetUserAttributeVerificationCode API アクションを呼び出します。リクエストで次のパラメータを指定します。
• AccessToken – ユーザーのサインイン時に Amazon Cognito が返したアクセストークン。

ユーザーアカウントのサインアップと確認

701

Amazon Cognito

開発者ガイド• AttributeName – "email" を属性値として指定します。
Amazon Cognito がユーザーの E メールアドレスに検証コードを送信します。
6.

ユーザーが検証コードを入力する確認ページを提示します。ユーザーがコードを入力した
ら、VerifyUserAttribute API アクションを呼び出します。リクエストで次のパラメータを指定します。
• AccessToken – ユーザーのサインイン時に Amazon Cognito が返したアクセストークン。
• AttributeName – "email" を属性値として指定します。
• Code – ユーザーが提供した検証コード。
この時点で、E メールアドレスが検証されます。

ユーザーにアプリケーションへのサインアップを許可するがユーザープール管理者として確認する
ユーザープールで確認メッセージを自動的に送信しないにも関わらず、誰でもアカウントにサインアップできるようにしたい場合があります。このモデルでは、たとえば、新しい登録リクエスト
を人間が確認したり、サインアップの一括検証と処理を行ったりする余地があります。新しいユー
ザーアカウントは、Amazon Cognito コンソールまたは IAM 認証 API オペレーション で確認できま
すAdminConfirmSignUp。ユーザープールが確認メッセージを送信するかどうかにかかわらず、ユー
ザーアカウントを管理者として確認できます。
この方法では、ユーザーのセルフサービスサインアップを確認することしかできません。管理者として作成したユーザーを確認するには、 を Permanentに設定して AdminSetUserPassword API リク
エストを作成しますTrue。
1.

ユーザーは、ユーザー名、メールアドレス、電話番号やその他の属性を入力してアプリにサインアップします。

2.

Amazon Cognito サービスは、アプリからサインアップリクエストを受け取ります。サインアッ
プに必要なすべての属性がリクエストに含まれることを確認した後で、サービスはサインアップ
プロセスを完了し、アプリにサインアップが完了し確認が保留中であることをアプリに返します。この時点でユーザーのアカウントは未確認状態です。アカウントが確認されるまで、ユー
ザーはサインインすることはできません。

ユーザーアカウントのサインアップと確認

702

Amazon Cognito

3.

開発者ガイドユーザーのアカウントを確認します。アカウントを確認するには、 にサインイン AWSManagement Console するか、 AWS 認証情報を使用して API リクエストに署名する必要があ
ります。

4.

a.

Amazon Cognito コンソールでユーザーを確認するには、[ユーザー] タブに移動して確認するユーザーを選択し、[アクション] メニューから [確認] を選択します。

b.

AWS API または CLI でユーザーを確認するには、 AdminConfirmSignUp API リクエスト、または admin-confirm-sign-upで を作成します AWS CLI。

この時点で、ユーザーアカウントは確認済みの状態になっており、ユーザーはサインインできます。

シークレットハッシュ 値の計算
ベストプラクティスとして、機密アプリケーションクライアントにクライアントシークレットを割り当てます。アプリケーションクライアントにクライアントシークレットを割り当てる場合、Amazon
Cognito ユーザープール API リクエストには、リクエスト本文にクライアントシークレットを含むハッシュを含める必要があります。以下のリストにある API オペレーションのクライアントシーク
レットに関する知識を検証するには、クライアントシークレットをアプリケーションのクライアント
ID とユーザーのユーザー名と連結し、その文字列を base64 でエンコードします。
シークレットハッシュを持つクライアントにアプリがユーザーをサインインすると、ユーザープー
ルのサインイン属性の値をシークレットハッシュのユーザー名要素として使用できます。アプリ
が REFRESH_TOKEN_AUTH による認証オペレーションで新しいトークンをリクエストする場合、ユーザー名要素の値はサインイン属性によって異なります。ユーザープールにサインイン属性として username がない場合は、ユーザーのアクセストークンまたは ID トークンの sub クレームからのシークレットハッシュユーザー名の値を設定します。username がサインイン属性である場合
は、username クレームからのシークレットハッシュユーザー名の値を設定します。
以下の Amazon Cognito ユーザープール API は、SecretHash パラメータにクライアントシーク
レットのハッシュ値を受け入れます。
• ConfirmForgotPassword• ConfirmSignUp• ForgotPassword• ResendConfirmationCode• SignUp
ユーザーアカウントのサインアップと確認

703

Amazon Cognito

開発者ガイドまた、以下の API は、認証パラメータまたはチャレンジレスポンス内の SECRET_HASH パラメータにクライアントシークレットのハッシュ値を受け入れます。
API オペレーション

SECRET_HASH の親パラメータ

InitiateAuth

AuthParameters

AdminInitiateAuth

AuthParameters

RespondToAuthChallenge

ChallengeResponses

AdminRespondToAuthChallenge

ChallengeResponses

シークレットハッシュ値は、Base 64 でエンコードされたキー付きハッシュメッセージ認証コード(HMAC) であり、ユーザープールクライアントおよびユーザー名、さらにメッセージ内のクライア
ント ID を使用して計算されたものです。次の擬似コードは、この値の計算方法を示します。この
擬似コードで + は連結を表し、HMAC_SHA256 は HmacSHA256 を使用して HMAC 値を生成する関数を、Base64 は Base-64 でエンコードされたバージョンのハッシュ出力を生成する関数を示します。
Base64 ( HMAC_SHA256 ( "Client Secret Key", "Username" + "Client Id" ) )SecretHash パラメータの計算方法と使用方法の詳細な概要については、 AWS ナレッジセンターのAmazon Cognito ユーザープール API からクライアント <client-id> のエラーのシークレットハッ
シュを確認できない」のトラブルシューティング方法を教えてください。
サーバー側の Java アプリケーションコードで、次のコード例を使用できます。
Shellecho -n "[username][app client ID]" | openssl dgst -sha256 -hmac [app client secret]-binary | openssl enc -base64

Javaimport javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

ユーザーアカウントのサインアップと確認

704

Amazon Cognito

開発者ガイドpublic static String calculateSecretHash(String userPoolClientId, String
userPoolClientSecret, String userName) {final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
SecretKeySpec signingKey = new SecretKeySpec(
userPoolClientSecret.getBytes(StandardCharsets.UTF_8),
HMAC_SHA256_ALGORITHM);
try {Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
mac.init(signingKey);
mac.update(userName.getBytes(StandardCharsets.UTF_8));
byte[] rawHmac =mac.doFinal(userPoolClientId.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(rawHmac);} catch (Exception e) {throw new RuntimeException("Error while calculating ");}}Pythonimport sys
import hmac, hashlib, base64
username = sys.argv[1]app_client_id = sys.argv[2]key = sys.argv[3]message = bytes(sys.argv[1]+sys.argv[2],'utf-8')
key = bytes(sys.argv[3],'utf-8')
secret_hash = base64.b64encode(hmac.new(key, message,
digestmod=hashlib.sha256).digest()).decode()
print("SECRET HASH:",secret_hash)E メールまたは電話番号の確認なしでユーザーアカウントを確認する
検証コードを要求したり、E メールまたは電話番号を検証したりすることなくサインアップ時にユー
ザーアカウントを自動的に確認するには、サインアップ前の Lambda トリガーを使用できます。この方法で確認されたユーザーは、コードを受け取らないですぐにサインインできます。
このトリガーによって検証されたユーザーのメールまたは電話番号をマーキングすることもできます。

ユーザーアカウントのサインアップと確認

705

Amazon Cognito

開発者ガイドNote
これはユーザーが始めるにあたって便利な方法ですが、E メールまたは電話番号を少なくとも 1 つ自動検証することをお勧めします。そうしないと、ユーザーがパスワードを忘れた際に復旧できないままになる場合があります。

ユーザーがサインアップ時に検証コードを受信して入力することを必須とせず、サインアップ前のLambda トリガーで E メールと電話番号を自動検証しない場合は、そのユーザーアカウントに検証済みの E メールアドレスまたは電話番号が存在しないリスクが生じます。ユーザーはメールアドレ
スまたは電話番号を後で確認できます。ただし、パスワードを忘れて確認済みの E メールアドレス
または電話番号がない場合、パスワードを忘れた場合のフローで検証コードをユーザーに送信するために確認済みの E メールまたは電話番号が必要となるため、ユーザーはアカウントからロックアウ
トされます。

ユーザーが E メールまたは電話番号を変更するときに確認する
ユーザーがアプリで自分の E メールアドレスまたは電話番号を更新すると、その属性を自動的に検証するようにユーザープールを設定した場合、Amazon Cognito は検証コード付きのメッセージをすぐにユーザーに送信します。その後、ユーザーは検証メッセージからアプリにコードを提供する必要があります。次に、アプリケーションは VerifyUserAttribute API リクエストでコードを送信して、新
しい属性値の検証を完了します。
ユーザープールで更新された E メールアドレスまたは電話番号の検証がユーザーに要求されない場
合、Amazon Cognito はただちに更新された email または phone_number 属性の値を変更し、その属性を未検証としてマークします。ユーザーは、未確認の E メールまたは電話番号でサインイン
できません。その属性をサインインエイリアスとして使用するには、更新された値の検証を完了する必要があります。
ユーザープールで更新された E メールアドレスまたは電話番号の検証がユーザーに要求される場
合、Amazon Cognito はユーザーが新しい属性値を検証するまで、属性を検証されたままにし、元の値に設定します。属性がサインイン用のエイリアスである場合、検証によって属性が新しい値に変更されるまで、ユーザーは元の属性値を使用してサインインできます。更新された属性の検証をユーザーに要求するようにユーザープールを設定する方法の詳細については、「E メールまたは電話による検証の設定」を参照してください。
検証メッセージは、カスタムメッセージの Lambda トリガーを使用してカスタマイズできます。
詳細については、「カスタムメッセージの Lambda トリガー」を参照してください。ユーザーの E
メールアドレスや電話番号が未確認の場合、アプリはユーザーに属性を確認する必要があることを通ユーザーアカウントのサインアップと確認

706

Amazon Cognito

開発者ガイド知し、ユーザーが新しい E メールアドレスや電話番号を確認するためのボタンやリンクを提供する必要があります。

管理者またはデベロッパーが作成するユーザーアカウントの確認および検証プロセス
管理者またはデベロッパーが作成したユーザーアカウントは常に確認済み状態にあるため、ユーザーは確認コードを入力する必要はありません。Amazon Cognito サービスがこれらのユーザーに送信する招待メッセージには、ユーザー名と一時パスワードが含まれています。ユーザーは、サインイン
する前にパスワードを変更する必要があります。詳細について、は、「E メールメッセージと SMS
メッセージのカスタマイズ」の「管理者としてのユーザーアカウントの作成」と「Lambda トリガーを使用したユーザープールワークフローのカスタマイズ」のカスタムメッセージのトリガーを参照してください。

インポート済みユーザーアカウントの確認および検証プロセス、CLI AWS Management Console、または API のユーザーインポート機能を使用して作成された
ユーザーアカウント (「」を参照CSV ファイルからユーザープールへのユーザーのインポート) は既に確認済み状態になっているため、ユーザーは確認コードを入力する必要はありません。招待メッ
セージは送信されません。ただし、インポートされたユーザーアカウントでは、サインインする前にまず ForgotPassword API を呼び出してコードをリクエストし、次に、提供されたコードを使用
して ConfirmForgotPassword API を呼び出すことによってパスワードを作成する必要があります。詳細については、「インポートされたユーザーにパスワードをリセットするように要求」を参照
してください。
ユーザーアカウントがインポートされたときに、ユーザーの E メールまたは電話番号は確認済みとしてマークする必要があります。したがって、ユーザーがサインインする際に認証は必要ありません。

アプリケーションのテスト中に E メールを送信する
ユーザープールのクライアントアプリでアカウントを作成および管理する場合は、Amazon Cognito
がユーザーに E メールメッセージを送信します。E メール検証を必須とするようにユーザープールを設定した場合は、以下のタイミングで Amazon Cognito が E メールを送信します。
• ユーザーのサインアップ時。
• ユーザーが E メールアドレスを更新する際。
• ユーザーが ForgotPassword API アクションを呼び出すアクションを実行する際。
• 管理者としてユーザーアカウントを作成する際。
ユーザーアカウントのサインアップと確認

707

Amazon Cognito

開発者ガイドE メールを開始するアクションに応じて、検証コードまたは仮パスワードが含まれます。ユーザー
は、これらの E メールを受け取り、メッセージを理解する必要があります。そうしないと、アプリにサインインして使用できない場合があります。
E メールが正常に送信され、メッセージの内容が正しいことを確認するには、Amazon Cognito からの E メール配信を開始するアプリのアクションをテストします。たとえば、アプリでサインアップ
ページを使用するか、SignUp API アクションを使用して、テスト用メールアドレスでサインアップ
することで E メールを配信できます。この方法でテストする場合は、次の点に注意してください。
[重要]
Amazon Cognito からの E メールを開始するアクションをテストするために E メールアドレ
スを使用する場合は、偽の E メールアドレス (メールボックスが存在しないメールアドレス)
は使用しないでください。ハードバウンスを発生させずに Amazon Cognito からの E メール
を受信する実際の E メールアドレスを使用します。
ハードバウンスは、Amazon Cognito が受取人のメールボックスへの E メールの配信に失敗
した場合に発生します。これは、常にメールボックスが存在しない場合に発生します。
Amazon Cognito は、ハードバウンスが永続的に発生する AWS アカウントによって送信できる E メールの数を制限します。

E メールを配信するアクションをテストする場合、次のいずれかの E メールアドレスを使用してハードバウンスを回避します。
• テスト用に所有し、使用している E メールアカウントのメールアドレス。独自の E メールアドレ
スを使用すると、Amazon Cognito が送信する E メールを受け取ります。この E メールでは、検証コードを使用して、アプリのサインアップエクスペリエンスをテストできます。ユーザープールの E メールメッセージをカスタマイズした場合は、正しく表示されていることを確認します。
• メールボックスシミュレーターのアドレス (success@simulator.amazonses.com)。シミュレー
ターのアドレスを使用する場合、Amazon Cognito は E メールを正常に送信しますが、それを表示することはできません。このオプションは、検証コードを使用する必要がなく、E メールのメッ
セージを確認する必要がない場合に役立ちます。
• success+user1@simulator.amazonses.com または success+user2@simulator.amazonses.com な
どの、任意のラベルを使用するメールボックスシミュレーターのアドレス。Amazon Cognito はこ
れらのアドレスに E メールを正常に送信しますが、送信された E メールを表示することはできません。このオプションは、複数のテストユーザーをユーザープールに追加してサインアッププロセ
スをテストし、各テストユーザーに一意の E メールアドレスがある場合に便利です。
ユーザーアカウントのサインアップと確認

708

Amazon Cognito

開発者ガイドE メールまたは電話による検証の設定
E メールまたは電話による確認の設定は、[メッセージング] タブで選択できます。多要素認証 (MFA)の詳細については、SMS「テキストメッセージMFA」を参照してください。
Amazon Cognito は Amazon を使用してSMSメッセージを送信SNSします。Amazon Cognito または他の からSMSメッセージを送信したことがない場合 AWS サービス 、Amazon はアカウントをSMS
サンドボックスに配置するSNSことがあります。アカウントをサンドボックスから本番環境に削除する前に、検証済みの電話番号にテストメッセージを送信することをお勧めします。さらに、米国の宛先電話番号にSMSメッセージを送信する場合は、Amazon Pinpoint から発信元 ID または送信者 IDを取得する必要があります。Amazon Cognito ユーザープールをSMSメッセージ用に設定するには、「」を参照してくださいSMS Amazon Cognito ユーザープールのメッセージ設定。
Amazon Cognito は、E メールアドレスまたは電話番号を自動的に検証できます。この検証を行うために、Amazon Cognito は検証コードまたは検証リンクを送信します。E メールアドレスの場合、Amazon Cognito は、コードまたはリンクを E メールメッセージで送信できます。Amazon
Cognito コンソールの [メッセージング] タブで [検証メッセージ] テンプレートを編集するときに、検証タイプとしてコードまたはリンクを選択できます。詳細については、「E メール検証メッセージのカスタマイズ」を参照してください。
電話番号の場合、Amazon Cognito はSMSコードをテキストメッセージで送信します。
Amazon Cognito は、ユーザーを確認し、パスワードを忘れた場合の回復を支援するために、電話番号または E メールアドレスを検証する必要があります。または、サインアップ前の Lambda トリ
ガーを使用してユーザーを自動的に確認するか、 AdminConfirmSignUpAPIオペレーションを使用できます。詳細については、「ユーザーアカウントのサインアップと確認」を参照してください。
確認コードまたはリンクは 24 時間有効です。
E メールアドレスや電話番号の検証を必須とした場合、Amazon Cognito はユーザーのサインアッ
プ時に自動的に検証コードまたはリンクを送信します。ユーザープールに カスタムSMS送信者のLambda トリガー または カスタム E メール送信者の Lambda トリガー を設定すると、その関数が代わりに呼び出されます。
メモ• Amazon は、電話番号の検証に使用するSMSテキストメッセージに対して別途SNS料金を請求します。E メールメッセージを送信しても料金はかかりません。Amazon のSNS料金の詳細については、「Worldwide pricingSMS」を参照してください。SMS メッセージング
ユーザーアカウントのサインアップと確認

709

Amazon Cognito

開発者ガイドが利用可能な国の現在のリストについては、「サポートされているリージョンと国」を参照してください。
• Amazon Cognito からの E メールメッセージを生成するアプリ内のアクションをテストするときは、Amazon Cognito がハードバウンスを発生させずに送信できる実際の E メール
アドレスを使用してください。詳細については、「the section called “アプリケーションのテスト中に E メールを送信する”」を参照してください。
• パスワードを忘れた場合のフローでは、ユーザーのメールまたはユーザーの電話番号が検証される必要があります。

Important
ユーザーが電話番号と E メールアドレスの両方にサインアップし、ユーザープールの設定で両方の属性の検証が必要な場合、Amazon Cognito は検証コードをSMSメッ
セージを通じて電話番号に送信します。Amazon Cognito は E メールアドレスをまだ検証していないため、アプリは GetUserを呼び出して、E メールアドレスが検証を待っているかどうかを確認する必要があります。検証が必要な場合、アプリは を呼び出
しGetUserAttributeVerificationCodeて E メール検証フローを開始する必要があります。次に、 を呼び出して検証コードを送信する必要がありますVerifyUserAttribute。

AWS アカウント および個々のSMSメッセージのメッセージ支出クォータを調整できます。この制限
は、SMSメッセージを送信するコストにのみ適用されます。詳細については、Amazon の「アカウントレベルとメッセージレベルの支出クォータとは」および「どのように機能しますか？」を参照してください。 SNS FAQs
Amazon Cognito は、ユーザープール AWS リージョン を作成した または次の表のレガシー Amazon
SNS代替リージョンのいずれかで、Amazon SNSリソースを使用してSMSメッセージを送信します。例外は、アジアパシフィック (ソウル) リージョンの Amazon Cognito ユーザープールです。これらのユーザープールは、アジアパシフィック (東京) リージョンの Amazon SNS設定を使用します。詳細については、「Amazon SNS SMS メッセージの AWS リージョン を選択する」を参照してください。
Amazon Cognito リージョン

レガシー Amazon SNS代替リージョン

米国東部(オハイオ)

米国東部 (バージニア北部)

ユーザーアカウントのサインアップと確認

710

Amazon Cognito

開発者ガイドAmazon Cognito リージョン

レガシー Amazon SNS代替リージョン

アジアパシフィック (ムンバイ)

アジアパシフィック (シンガポール)

アジアパシフィック (ソウル)

アジアパシフィック (東京)

カナダ (中部)

米国東部 (バージニア北部)

欧州 (フランクフルト)

欧州 (アイルランド)

欧州 (ロンドン)

欧州 (アイルランド)

例: Amazon Cognito のユーザープールがアジアパシフィック (ムンバイ) にあり、ap-southeast-1 で使用制限を引き上げている場合は、ap-south-1 で別途引き上げる要求をしないでください。代わりに、アジアパシフィック (シンガポール) で Amazon SNSリソースを使用できます。
E メールアドレスと電話番号の更新を検証する
E メールアドレスまたは電話番号の属性は、ユーザーが値を変更した直後にアクティブになり、検証されない場合があります。Amazon Cognito は、Amazon Cognito が属性を更新する前に、ユーザーに新しい値を検証するように要求することもできます。ユーザーが新しい値を最初に検証することを要求する場合、新しい値を検証するまでは、サインインおよびメッセージの受信に元の値を使用することができます。
ユーザーがユーザープールの E メールアドレスまたは電話番号をサインインエイリアスとして使用できる場合、更新された属性のサインイン名は、更新された属性の検証が必要かどうかによって異なります。更新された属性を検証する必要がある場合、新しい値を検証するまで、ユーザーは元の属性値を使用してサインインできます。更新された属性を検証する必要がない場合、新しい値を検証する
まで、ユーザーは新しい属性値または元の属性値でサインインまたはメッセージを受信することはできません。
例えば、ユーザープールでは、E メールアドレスのエイリアスでのサインインが許可され、ユーザーが更新時に E メールアドレスを検証する必要があるとします。sue@example.com としてサインインしている Sue は、自分の E メールアドレスを sue2@example.com に変更しようとしましたが、誤って ssue2@example.com と入力してしまいました。Sue は確認用の E メールを受信していな
いので、ssue2@example.com を検証することができません。sue@example.com としてサインイ
ンし、アプリでフォームを再送信して、E メールアドレスを sue2@example.com に更新します。
この E メールを受信し、アプリに確認コードを提供して、sue2@example.com としてサインインを開始します。
ユーザーアカウントのサインアップと確認

711

Amazon Cognito

開発者ガイドユーザーが属性を更新し、ユーザープールが新しい属性値を検証する場合• コードを確認する前は、元の属性値でサインインして新しい値を確認できます。
• コードを確認した後は、新規の属性値でサインインして新しい値を確認できます。
• AdminUpdateUserAttributes API リクエストtrueで email_verifiedまたはphone_number_verifiedを に設定した場合、Amazon Cognito が送信したコードを確認する前にサインインできます。
ユーザーが属性を更新し、ユーザープールが新しい属性値を検証しない場合• 元の属性値を使用してサインインしたり、元の属性値でメッセージを受信したりすることはできません。
• 新しい値を確認するコードを確認するま、新しい属性値を使用してサインインしたり、確認コード
以外のメッセージを受信したりすることはできません。
• AdminUpdateUserAttributes API リクエストtrueで email_verifiedまたはphone_number_verifiedを に設定した場合、Amazon Cognito が送信したコードを確認する前にサインインできます。
ユーザーが E メールアドレスまたは電話番号を更新するときに属性の検証を要求するには
1.

Amazon Cognito コンソールにサインインします。プロンプトが表示されたら、 AWS 認証情報を入力します。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[Sign-up experience] (サインアップエクスペリエンス) タブで、[Attribute verification and user
account confirmation] (属性の検証とユーザーアカウントの確認) から [Edit] (編集) を選択します。

4.

[Keep original attribute value active when an update is pending] (更新が保留中の場合、元の属性値をアクティブに保つ) を選択します。

5.

[Active attribute values when an update is pending] (更新が保留中の場合にアクティブな属性値)
から、Amazon Cognito が値を更新する前にユーザーに検証を要求する属性を選択します。

6.

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

Amazon Cognito で属性更新の検証を要求するにはAPI、 UpdateUserPoolリクエストでAttributesRequireVerificationBeforeUpdateパラメータを設定できます。
ユーザーアカウントのサインアップと確認

712

Amazon Cognito

開発者ガイドユーザーに代わってSMSメッセージを送信することを Amazon Cognito に許可するユーザーに代わってユーザーにSMSメッセージを送信するには、Amazon Cognito に アクセス許可が必要です。このアクセス許可を付与するには、 AWS Identity and Access Management （IAM)
ロールを作成します。の下にある Amazon Cognito コンソールのメッセージングタブでSMS、編集を選択してロールを設定します。

SMS と E メール検証メッセージおよびユーザー招待メッセージの設定
Amazon Cognito を使用すると、SMS および E メールの検証メッセージとユーザー招待メッセージをカスタマイズして、アプリケーションのセキュリティとユーザーエクスペリエンスを強化できます。Amazon Cognito では、アプリケーションのニーズに応じて、コードベースのリンク検証または
ワンクリックリンク検証を選択できます。このトピックでは、Amazon Cognito コンソールで多要素
認証 (MFA) と検証通信をパーソナライズする方法について説明します。
[メッセージング] タブの [メッセージテンプレート] で、以下をカスタマイズできます。
• SMS テキストメッセージ多要素認証 (MFA) メッセージ• SMS と E メールの検証メッセージ• E メールの検証タイプ (コードまたはリンク)• ユーザーの招待メッセージ• ユーザープールを介するメールの FROM および REPLY-TO E メールアドレス

Note
SMS と電子メールの確認メッセージのテンプレートは、[検証] タブで電話番号と E メールの確認を要求するよう選択した場合にのみ表示されます。同様に、SMS MFA メッセージのテンプレートは、MFA 設定が [required] (必要) または [optional] (任意) の場合にのみ表示され
ます。

トピック
• メッセージテンプレート• SMS メッセージのカスタマイズ• E メール検証メッセージのカスタマイズ• ユーザー招待メッセージのカスタマイズ
ユーザーアカウントのサインアップと確認

713

Amazon Cognito

開発者ガイド• E メールアドレスのカスタマイズ• Amazon SES E メールを代理送信するための Amazon Cognito の承認 (カスタム REPLY-TO E
メールアドレスからの送信)
メッセージテンプレート
メッセージテンプレートを使用して、メッセージにプレースホルダーを挿入できます。Amazon
Cognito はプレースホルダーを対応する値に置き換えます。ユニバーサルテンプレートプレースホル
ダーは、任意のタイプのメッセージテンプレートで参照できますが、これらの値はすべてのメッセー
ジタイプに存在するわけではありません。
ユニバーサルテンプレートプレースホルダー
説明

トークン

メッセージの種類

検証コード{####}

検証、確認、および MFA メッ
セージ

一時パスワード{####}

パスワードを忘れた場合と招待メッセージ[ユーザーネーム]{username}

招待と高度なセキュリティ
メッセージ

高度なセキュリティ機能を備えた利用可能な自動応答の 1 つは、Amazon Cognito が潜在的に悪意のあるアクティビティを検出したことをユーザーに通知することです。アドバンスドセキュリティのテンプレートのプレースホルダーを使用して、以下を行うことができます。
• IP アドレス、市、国、サインイン時間、デバイス名など、イベントに関する具体的な詳細を記載
します。Amazon Cognito のアドバンスドセキュリティ機能は、これらの詳細を分析できます。
• ワンクリックリンクが有効であるかどうかを確認します。
• イベント ID、フィードバックトークン、およびユーザー名を使用して独自のワンクリックリンクを構築します。

ユーザーアカウントのサインアップと確認

714

Amazon Cognito

開発者ガイドNote
ワンクリックリンクを生成し、アドバンスドセキュリティ E メールテンプレートで {oneclick-link-valid} および {one-click-link-invalid} プレースホルダーを使用するには、ユーザープール用にドメインが既に設定されている必要があります。

高度なセキュリティ機能では、メッセージテンプレートに挿入することができる以下のプレースホル
ダーが追加されています。
アドバンスドセキュリティのテンプレートのプレースホルダー
説明

トークン

IP アドレス{ip-address}

City{city}Country{country}

ログイン時間{login-time}

デバイス名{device-name}

オンクリックリンクが有効{one-click-link-valid}

オンクリックリンクが無効{one-click-link-invalid}

イベント ID{event-id}

フィードバックトークン{feedback-token}

SMS メッセージのカスタマイズ
Note
新しい Amazon Cognito コンソールエクスペリエンスでは、SMS メッセージをカスタマイズ
できます。

ユーザーアカウントのサインアップと確認

715

Amazon Cognito

開発者ガイド多要素認証 (MFA) 用の SMS メッセージは、[メッセージテンプレート] 見出しの下にある [メッセージング] タブでカスタマイズできます。
Important
カスタムメッセージには、{####}プレースホルダーを含む必要があります。このプレース
ホルダーは、メッセージが送信される前に認証コードへ置き換えられます。

Amazon Cognito では、SMS メッセージの最大長を 140 文字 (認証コードを含む) の UTF-8 文字に設定しています。
SMS 検証メッセージのカスタマイズ[SMS 検証メッセージをカスタマイズしますか?] ヘッダーの下のテンプレートを編集して、電話番号
認証用の SMS メッセージをカスタマイズできます。
Important
カスタムメッセージには、{####}プレースホルダーを含む必要があります。このプレース
ホルダーは、メッセージが送信される前に検証コードへ置き換えられます。

メッセージの最大長は検証コードを含めて UTF-8 で 140 文字です。
E メール検証メッセージのカスタマイズ
Amazon Cognito でユーザープール内のユーザーの E メールアドレスを確認するには、ユーザーが選択できるリンクを記載した E メールメッセージをユーザーに送信するか、ユーザーが入力できるコードを送信します。
E メールアドレス検証メッセージの E メールの件名とメッセージ内容をカスタマイズするには、
ユーザープールの [メッセージング] タブで [検証メッセージ] テンプレートを編集します。[検証メッセージ] テンプレートを編集するときに、検証タイプとしてコードまたはリンクを選択できます。
検証タイプとしてコードを選択した場合、カスタムメッセージには {####} プレースホルダーを含める必要があります。メッセージを送信するときに、検証コードはこのプレースホルダーを置き換えます。
検証タイプとしてリンクを選択した場合、カスタムメッセージにはプレースホルダーを {##VerifyYour Email##} の形式で含める必要があります。プレースホルダー文字間のテキスト文字列
ユーザーアカウントのサインアップと確認

716

Amazon Cognito

開発者ガイドは、{##Click here##} のように変更できます。E メールを検証するというタイトルの検証リン
は、このプレースホルダーを置き換えます。
E メール検証メッセージのリンクは、ユーザーを次の例のような URL に誘導します。
https://<your user pool domain>/confirmUser/?
client_id=abcdefg12345678&user_name=emailtest&confirmation_code=123456

メッセージの最大長は検証コード (ある場合) を含めて UTF-8 で 20,000 文字です。このメッセージ
では、HTML タグを使用してコンテンツの書式を設定できます。
ユーザー招待メッセージのカスタマイズ
Amazon Cognito が SMS または E メールメッセージを使用して新規ユーザーに送信するユーザー招
待メッセージをカスタマイズするには、[メッセージング] タブの []招待メッセージ] テンプレートを編集します。
Important
カスタムメッセージには、{username} および {####} のプレースホルダーを含む必要があります。Amazon Cognito が招待メッセージを送信すると、これらのプレースホルダーはユーザーのユーザー名とパスワードに置き換えられます。

SMS メッセージの最大長は検証コードを含めて UTF-8 で 140 文字です。E メールメッセージの最大長は検証コードを含めて UTF-8 で 20,000 文字です。E メールメッセージに HTML タグを使用して、コンテンツの書式を設定できます。
E メールアドレスのカスタマイズ
デフォルトでは、Amazon Cognito は、no-reply@verificationemail.com からユーザープール内のユー
ザーに E メールメッセージを送信します。no-reply@verificationemail.com の代わりにカスタムの
FROM と REPLY-TO メールアドレスを指定するか選択できます。
FROM と REPLY-TO の E メールアドレスをカスタマイズするには
1.

[Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

2.

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

ユーザーアカウントのサインアップと確認

717

Amazon Cognito

3.

開発者ガイド[Messaging] (メッセージング) タブを選択します。[Email] (E メール) で、[Edit] (編集) を選択します。

4.

[SES Region] (SES リージョン)を選択します。

5.

選択した [SES Region] (SES リージョン) の Amazon SES で検証した E メールアドレスリス
トから [FROM email address] (FROM E メールアドレス) を選択します。検証済みドメインのE メールアドレスを使用するには、 AWS Command Line Interface または AWS API で E メー
ル設定を行います。詳細については、Amazon Simple Email Service デベロッパーガイドの「Amazon SES での E メールアドレスとドメインの検証」を参照してください。

6.

選択した[SES Region] (SES リージョン)の構成セットのリストから、[Configuration set] (構成セット) を選択します。

7.

E メールメッセージ用に、わかりやすい [FROM sender name] (FROM 送信者名) をJohn
Stiles <johnstiles@example.com>の形式で入力します。

8.

返信先 E メールアドレスをカスタマイズするには、[REPLY-TO email address (返信先 E メール
アドレス)] フィールドに有効な E メールアドレスを入力します。

Amazon SES E メールを代理送信するための Amazon Cognito の承認 (カスタム REPLY-TO E メー
ルアドレスからの送信)
Amazon Cognito は、デフォルトのアドレスではなく、カスタムの FROM メールアドレスからメールを送信するように設定できます。カスタムアドレスを使用するには、Amazon SES で検証済みのID から E メールメッセージを送信できる許可を Amazon Cognito に付与する必要があります。ほとんどの場合、送信承認ポリシーを作成することで許可が付与できます。詳細については、Amazon
Simple Email Service デベロッパーガイドの「Amazon SES での送信承認の使用」を参照してください。
メールメッセージに Amazon SES の使用許可をユーザープールを設定すると、Amazon Cognito
はアカウントに AWSServiceRoleForAmazonCognitoIdpEmailService ロールを作成して、Amazon SES へのアクセスを許可します。AWSServiceRoleForAmazonCognitoIdpEmailService サービスにリンクされたロールが使用される場合、送信承認ポリシーは必要ありません。ユーザープールのデフォルト E メール機
能と、検証済みの Amazon SES ID の両方を FROM アドレスとして使用する場合のみ、送信承認ポ
リシーを追加する必要があります。
Amazon Cognito が作成するサービスリンクロールの詳細については、「Amazon Cognito のサービ
スリンクロールの使用」を参照してください。

ユーザーアカウントのサインアップと確認

718

Amazon Cognito

開発者ガイド

次の送信承認ポリシーの例では、Amazon SES 検証済み ID を使用するための限定された権限がAmazon Cognito に付与されています。Amazon Cognito は、条件 aws:SourceArn のユーザープー
ルと条件 aws:SourceAccount のアカウントの両方に代わって送信する場合にのみ、E メールメッ
セージを送信できます。その他の例については、「Amazon Simple Email Service デベロッパーガイ
ド」の「Amazon SES 送信承認ポリシーの例」を参照してください。
Note
この例では、「Sid」値はステートメントを一意に識別する任意の文字列です。ポリシー構
文の詳細については、「Amazon Simple Email Service デベロッパーガイド」の「Amazon
SES 送信承認ポリシー」を参照してください。

{"Version": "2012-10-17","Statement": [{"Sid": "stmnt1234567891234","Effect": "Allow","Principal": {"Service": ["email.cognito-idp.amazonaws.com"]},"Action": ["SES:SendEmail","SES:SendRawEmail"],"Resource": "<your SES identity ARN>","Condition": {"StringEquals": {"aws:SourceAccount": "<your account number>"},"ArnLike": {"aws:SourceArn": "<your user pool ARN>"
}
}
}
]
}

ユーザーアカウントのサインアップと確認

719

Amazon Cognito

開発者ガイドAmazon Cognito コンソールは、ドロップダウンメニューから Amazon SES の ID を選択するときに同様のポリシーを追加します。CLI または API を使用してユーザープールを設定する場合は、前の例のように構造化されたポリシーを Amazon SES アイデンティティにアタッチする必要があります。

管理者としてのユーザーアカウントの作成
ユーザープールを作成したら、AWS Management Console、AWS Command Line Interface またはAmazon Cognito API を使用してユーザーを作成できます。ユーザープールで新しいユーザーのプロファイルを作成し、サインアップ手順を含めたウェルカムメッセージをそのユーザーに SMS またはE メールで送信できます。
デベロッパーと管理者は以下のタスクを実行できます。
• AWS Management Console を使用するか、AdminCreateUser API を呼び出すことで、新しいユーザープロファイルを作成します。
• ユーザー属性値を設定します。
• カスタム属性を作成します。
• AdminCreateUser API リクエストにイミュータブルなカスタム属性の値を設定します。この機能は Amazon Cognito コンソールでは利用できません。
• 一時パスワードを指定する、または Amazon Cognito が一時パスワードを自動生成できるようにする。
• 提供された E メールアドレスと電話番号が新しいユーザーに対して確認済みとマークされているかどうかを指定する。
• AWS Management Console またはカスタムメッセージ Lambda トリガーを使用して、新しいユーザー向けのカスタム SMS および E メール招待メッセージを指定する。詳細については、「Lambda トリガーを使用したユーザープールワークフローのカスタマイズ」を参照してください。
• 招待メッセージが SMS、E メール、その両方のいずれで送信されるかを指定する。
• AdminCreateUser パラメータに RESEND を指定して、MessageAction API を呼び出すことで、既存のユーザーにウェルカムメッセージを再送信する。
Note
このアクションは現在、AWS Management Console を使用して実行することはできません。
• ユーザー作成時の招待メッセージが送信されないようにする。
管理者としてのユーザーの作成

720

Amazon Cognito

開発者ガイド• ユーザーアカウントの有効期限を指定する (最大 90 日)。
• ユーザーに自己サインアップを許可したり、管理者にのみ新しいユーザーの追加を許可したりする。

管理者またはデベロッパーによって作成されるユーザーの認証フロー
これらのユーザーの認証フローには、新しいパスワードを送信するためや、必須の属性の未設定値を指定するための、追加の手順が含まれます。これらの手順は以下に説明しており、手順 5、6、7 は
これらのユーザーに固有のものです。
1.

ユーザーは、ユーザー名とパスワードを送信することで、初回のログインを開始します。

2.

SDK が InitiateAuth(Username, USER_SRP_AUTH) を呼び出します。

3.

Amazon Cognito が Salt & Secret ブロックで PASSWORD_VERIFIER チャレンジを返します。

4.

SDK が SRP 計算を実行し、RespondToAuthChallenge(Username, <SRP variables>,PASSWORD_VERIFIER) を呼び出します。

5.

Amazon Cognito は NEW_PASSWORD_REQUIRED チャレンジを返します。このチャレンジの本文には、ユーザーの現在の属性、およびユーザーのプロファイル内で現時点で値がないユーザー
プールの必須属性が含まれます。詳細については、「RespondToAuthChallenge」を参照してく
ださい。

6.

ユーザーは新しいパスワードと必須の属性の未設定値を入力するように求められます。

7.

SDK が RespondToAuthChallenge(Username, <New password>, <User
attributes>) を呼び出します。

8.

ユーザーに MFA の 2 番目の要素が必要な場合、Amazon Cognito が SMS_MFA チャレンジを返し、コードが送信されます。

9.

ユーザーが正常に自分のパスワードを変更し、必要に応じて属性の値を指定するか MFA を完了
すると、ユーザーがサインインされ、トークンが発行されます。

ユーザーがすべてのチャレンジに合格すると、Amazon Cognito サービスがユーザーを確認済みとマークし、ユーザーに ID トークン、アクセストークン、および更新トークンを発行します。詳細については、「ユーザープールでのトークンの使用」を参照してください。

AWS Management Console での新しいユーザーの作成
Amazon Cognito コンソールを使用して、ユーザーパスワードの要件を設定し、ユーザーに送信される招待メッセージと確認メッセージを設定し、新しいユーザーを追加できます。
管理者としてのユーザーの作成

721

Amazon Cognito

開発者ガイドパスワードポリシーを設定し、自己登録を有効にする
パスワードの複雑さを最小限に抑え、ユーザープールでパブリック API を使用してユーザーがサインアップできるかどうかを設定できます。
パスワードポリシーの設定
1.

[Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

2.

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

3.

[Sign-in experience] (サインインエクスペリエンス) タブを選択して、[Password policy] (パスワードポリシー) を検索します。[Edit] (編集) を選択します。

4.

[Custom] (カスタム) の [Password policy mode] (パスワードポリシーモード) を選択します。

5.

[Password minimum length] (パスワードの最小長) を選択します。パスワード長要件の制限については、「ユーザープールのリソースクォータ」を参照してください。

6.

[Password complexity] (パスワードの複雑さ) 要件を選択してください。

7.

管理者が設定したパスワードの有効期間を選択します。

8.

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

セルフサービスサインアップを許可する
1.

[Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

2.

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

3.

[Sign-up experience] (サインアップエクスペリエンス) タブを選択して、[Self-service sign-up](セルフサービスサインアップ) を検索します。[Edit] (編集) を選択します。

4.

[Enable self-registration] (自己登録を有効化) するかどうかを選択します。自己登録は、通常、クライアントシークレット、または AWS Identity and Access Management (IAM) API 認証情報を配布せずにユーザープールに新しいユーザーを登録する必要があるパブリックアプリケーション
クライアントで使用されます。

管理者としてのユーザーの作成

722

Amazon Cognito

開発者ガイド

自己登録の無効化
自己登録を有効にしない場合は、IAM API 認証情報、またはフェデレーションプロバイ
ダーとのサインインを使用して管理 API アクションで新しいユーザーを作成する必要が
あります。
5.

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

E メールメッセージと SMS メッセージのカスタマイズ
ユーザーメッセージのカスタマイズ
Amazon Cognito がユーザーにサインインするように招待したとき、ユーザーがユーザーアカウント
へのサインアップ、またはサインインして多要素認証 (MFA) を要求される際に Amazon Cognito はユーザーに送信するメッセージをカスタマイズできます。
Note[Invitation message] (招待メッセージ) はユーザープールにユーザーを作成し、サインインに招待すると送信されます。Amazon Cognito はユーザーの E メールアドレスまたは電話番号に初期サインイン情報を送信します。
検証メッセージは、ユーザーがユーザープールのユーザーアカウントに登録したときに送信されます。Amazon Cognito はユーザーにコードを送信します。ユーザーが Amazon Cognitoにコードを提供すると、連絡先情報を確認し、サインインのためにアカウントを確認します。検証コードは 24 時間有効です。
[MFA message] (MFA メッセージ) は、ユーザープールで SMS MFA を有効にし、SMS MFAを構成したユーザーがサインインして MFA を要求されたときに送信されます。

1.

[Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

2.

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

3.

[Messaging] (メッセージング) タブで、[Message templates] (メッセージテンプレート) を検索します。[Verification messages] (検証メッセージ)、[Invitation messages] (招待メッセージ)、または [MFA messages] (MFA メッセージ) を選択して、[Edit] (編集) を選択します。

4.

選択したメッセージタイプのメッセージをカスタマイズします。

管理者としてのユーザーの作成

723

Amazon Cognito

開発者ガイドNote
メッセージをカスタマイズするときは、メッセージテンプレート内のすべての変数を含める必要があります。例えば、変数の場合 {####} は含まれません。ユーザーにはメッ
セージアクションを完了するのに十分な情報がありません。
詳細については、「メッセージテンプレート」を参照してください。
5.

a.

検証メッセージi.

[Email] (E メール) メッセージの [Verification type] (検証タイプ) を選択します。[Code](コード) 検証は、ユーザーが入力する必要がある数値コードを送信します。[Link] (リンク) 検証は、ユーザーがクリックして連絡先情報を検証できるリンクを送信します。
変数内のテキスト [Link] (リンク) メッセージはハイパーリンクテキストとして表示されます。例えば、変数 {# #Click here##} を使用したメッセージテンプレートは、E メー
ルメッセージで「Click here (ここをクリックしてください) 」というように表示されま
す。

b.

c.

ii.

[Email] (E メール) メッセージの [Email subject] (E メールの件名) を入力します。

iii.

[Email] (E メール) メッセージのカスタムの [Email message] (E メールメッセージ) のテンプレートを入力します。このテンプレートは HTML でカスタマイズできます。

iv.

[SMS] メッセージのカスタムの [SMS message] (SMS メッセージ) のテンプレートを入
力します。

v.

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

[Invitation messages] (招待メッセージ)i.

[Email] (E メール) メッセージの [Email subject] (E メールの件名) を入力します。

ii.

[Email] (E メール) メッセージのカスタムの [Email message] (E メールメッセージ) のテンプレートを入力します。このテンプレートは HTML でカスタマイズできます。

iii.

[SMS] メッセージのカスタムの [SMS message] (SMS メッセージ) のテンプレートを入
力します。

iv.

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

MFA メッセージi.

[SMS] メッセージのカスタムの [SMS message] (SMS メッセージ) のテンプレートを入
力します。

ii.

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

管理者としてのユーザーの作成

724

Amazon Cognito

開発者ガイドユーザーの作成
ユーザーの作成
Amazon Cognito コンソールからユーザープールの新しいユーザーを作成できます。通常、ユーザーはパスワードを設定した後にサインインできます。E メールアドレスでサインインするには、
ユーザーは email 属性を確認する必要があります。電話番号でサインインするには、ユーザーはphone_number 属性を確認する必要があります。管理者としてのアカウントを確認するには、AWS
CLI または API を使用するか、フェデレーション ID プロバイダーを使用してユーザープロファイルを作成することもできます。詳細については、「Amazon Cognito API Reference」を参照してください。
1.

[Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

2.

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

3.

[Users] (ユーザー) タブを選択して、[Create use] (ユーザーを作成) をクリックします。

4.

パスワード要件、使用可能なアカウント回復方法、およびユーザープールのエイリアス属性に関するガイダンスは、「ユーザープールのサインインとセキュリティ要件」を参照してください。

5.

招待メッセージの送信方法を選択します。SMS メッセージ、E メールメッセージ、または両方を選択します。
Note
招待メッセージを送信する前に、ユーザープールの [Messaging] (メッセージング) タブ
で、Amazon Simple Notification Service および Amazon Simple Email Service で送信者と AWS リージョン を設定します。受信者メッセージとデータレートが適用されます。Amazon SES は、メールメッセージの請求を別途請求し、Amazon SNS は SMS
メッセージについて別途請求します。

6.

新規ユーザー用に [Username] (ユーザー名) を選択します。

7.

[Create a password] (パスワードを作成する) または、Amazon Cognito にユーザーの [Generatea password] (パスワードを生成する) を許可するかどうかを選択してください。一時パスワード
は、ユーザープールのパスワードポリシーに準拠する必要があります。

8.

[Create] (作成) を選択します。

9.

[Users] (ユーザー) タブを選択し、ユーザーの [User name] (ユーザー名) エントリを選択します。[User attributes] (ユーザー属性) および [Group memberships] (グループメンバーシップ) を追加して編集します。ユーザーイベント履歴の確認

管理者としてのユーザーの作成

725

Amazon Cognito

開発者ガイドユーザープールにグループを追加する
Amazon Cognito ユーザープール内のグループのサポートにより、ユーザーの作成と管理、グループへのユーザーの追加、およびグループからのユーザーの削除が可能になります。グループを使用して、ユーザーのコレクションを作成してそのアクセス権限を管理したり、異なるタイプのユーザーを表したりできます。 AWS Identity and Access Management (IAM) ロールをグループに割り当てて、グループのメンバーのアクセス許可を定義できます。
グループを使用して、ユーザープールでユーザーのコレクションを作成できます。この操作は、これらのユーザーのアクセス権限を設定するためによく行われます。例えば、ウェブサイトやアプリの読者、寄稿者、および編集者であるユーザーに対して別個のグループを作成できます。また、グループに関連付けられた IAM ロールを使用することで、これらの異なるグループに異なる許可を設定して、コントリビュータのみがコンテンツを Amazon S3 に配置し、エディタのみが Amazon API
Gateway の API を通じてコンテンツをパブリッシュできるようにすることも可能です。
、APIs、および CLI から AWS Management Consoleユーザープール内のグループを作成および管理できます。開発者 ( AWS 認証情報を使用) として、ユーザープールのグループを作成、読み取り、
更新、削除、および一覧表示できます。また、グループに対してユーザーを追加、削除できます。
ユーザープール内のグループを使用しても追加コストは発生しません。詳細については、「Amazon
Cognito の料金」を参照してください。

グループへの IAM ロールの割り当て
グループを使用して、IAM ロールでリソースへの許可を制御できます。IAM ロールには、信頼ポリ
シーと許可ポリシーが含まれます。ロールの信頼ポリシーでは、ロールを使用できるユーザーを指定します。アクセス許可ポリシーでは、グループメンバーがアクセスできるアクションとリソースを指定します。IAM ロールを作成するときに、グループユーザーがロールを引き受けることを許可する
ロールの信頼ポリシーを設定します。ロールの許可ポリシーで、グループに付与する許可を指定します。
Amazon Cognito でグループを作成するときは、ロールの ARNを指定して IAM ロールを指定します。グループメンバーが Amazon Cognito を使用してサインインすると、ID プールから一時的な認証情報を受け取ることができます。それらの許可は、関連付けられた IAM ロールによって決まります。
各ユーザーは複数のグループに属することができます。デベロッパーとして、ユーザーが複数のグ
ループに属している場合に IAM ロールを自動的に選択するための以下のオプションがあります。
ユーザープールにグループを追加する

726

Amazon Cognito

開発者ガイド• 各グループに優先順位の値を割り当てることができます。優先順位が高い (低い) グループが選択され、それに関連付けられた IAM ロールが適用されます。
• アプリは、 GetCredentialsForIdentityCustomRoleARNパラメータでロール ARN を指定すること
で、ID プールを通じてユーザーの認証情報をリクエスト AWS するときに、使用可能なロールから選択することもできます。指定された IAM ロールは、ユーザーが利用できるロールに一致する必要があります。

グループへの優先順位の値の割り当て
ユーザーは複数のグループに属することができます。ユーザーのアクセストークンと ID トーク
ンの cognito:groups クレームには、ユーザーが属するすべてのグループのリストが含まれます。cognito:roles クレームには、グループに対応するロールのリストが含まれます。
ユーザーは複数のグループに属することができるので、各グループに優先順位を割り当てることができます。これは、ユーザーがユーザープールで属するその他のグループに対するこのグループの優先
順字を指定する正数です。ゼロが最優先順位値です。低い優先順位の値を持つグループは、高い優先
順位の値または null 値を持つグループよりも優先されます。ユーザーが複数のグループに属している場合、ユーザーの ID トークンの cognito:preferred_role クレームに適用される IAM ロール
は、優先順位の値が最も低いグループのものになります。
2 つのグループは、同じ優先順位の値を持つことができます。その場合は、どちらのグループも他方に対して優先されません。同じ優先順位の値を持つ 2 つのグループのロール ARN が同じである場
合、そのロールは、各グループのユーザーの ID トークンの cognito:preferred_role クレームで使用されます。2 つのグループのロール ARN が異なる場合、cognito:preferred_role クレー
ムは、ユーザーの ID トークンで設定されません。

Amazon API Gateway を使用した許可の管理でのグループの使用
Amazon API Gateway を使用した許可の管理には、ユーザープールのグループを使用することができます。ユーザーがメンバーであるグループは、IDトークンと cognito:groups クレームのユー
ザープールからのアクセストークンの両方に含まれています。リクエストとともに ID またはアクセストークンを Amazon API Gateway に送信し、REST API に Amazon Cognito ユーザープール
オーソライザーを使用できます。詳細については、API Gateway デベロッパーガイドの「Amazon
Cognito ユーザープールをオーソライザーとして使用して REST API へのアクセスを制御する」を参照してくださいユーザープールにグループを追加する

727

Amazon Cognito

開発者ガイドカスタム JWT オーソライザーを使用して Amazon API Gateway HTTP API へのアクセスを承認することもできます。詳細については、API Gateway デベロッパーガイドの「JWT オーソライザーを使用した HTTP API へのアクセスの制御」を参照してください。

グループの制限
ユーザーグループには、次の制限が適用されます。
• 作成できるグループの数は、Amazon Cognito サービスクォータ によって制限されます。
• グループはネストできません。
• グループのユーザーを検索することはできません。
• グループを名前で検索することはできませんが、グループをリストすることはできます。

AWS Management Consoleでの新しいグループの作成
以下の手順に従って、新しいグループを作成します。
新しいグループを作成する
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Group] (グループ) タブを選択してから、[Create a Groups] (グループの作成) を選択します。

5.

[Create a group] (グループを作成する) ページで、[Group name] (グループ名) に新しいグループのフレンドリ名を入力します。

6.

オプションで、次のフィールドのいずれかを使用して、このグループに関する追加情報を指定できます。
• [Description] (説明) - この新しいグループの使用目的の詳細を入力します。
• [Precedence] (優先順位) - Amazon Cognito は、優先度が低いグループに属するグループに基づいて、特定のユーザーに対するすべてのグループ権限を評価し、適用します。優先順位が低いグループが選択され、それに関連付けられた IAM ロールが適用されます。詳細について
は、「グループへの優先順位の値の割り当て」を参照してください。
• [IAM role] (IAM ロール) -リソースへのアクセス許可を制御する必要がある場合は、グループに
IAM ロールを割り当てることができます。ID プールを持つユーザープールを統合する場合、[IAM ロール] の設定によって、トークンからロールを選択するよう ID プールが設定されていユーザープールにグループを追加する

728

Amazon Cognito

開発者ガイドるときに、ユーザーの ID トークンに割り当てられるロールが決定されます。詳細について
は、「グループへの IAM ロールの割り当て」を参照してください。
• [Add users to this group] (ユーザーをこのグループに追加する) - 既存のユーザーを作成した
後、このグループのメンバーとして追加します。
7.

[Create] (作成) を選択して確定します。

ユーザーアカウントの管理と検索
ユーザープールを作成すると、AWS Management Console、AWS Command Line Interface または Amazon Cognito API を使用してユーザーを表示し、管理することができます。このトピックでは、AWS Management Console を使用してユーザーを表示および検索する方法について説明します。

ユーザー属性の表示
Amazon Cognito コンソールでユーザー属性を表示するには、以下の手順に従います。
ユーザー属性を表示するには
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力
します。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Users] (ユーザー) タブをクリックし、リストからユーザーを選択します。

5.

ユーザーの詳細ページの [User attributes] (ユーザー属性) で、ユーザーに関連付けられている属性を表示できます。

ユーザーのパスワードのリセット
Amazon Cognito コンソールでユーザーのパスワードをリセットするには、以下の手順に従います。
ユーザーのパスワードのリセット
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力
します。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

ユーザーの管理と検索

729

Amazon Cognito

開発者ガイド

4.

[Users] (ユーザー) タブをクリックし、リストからユーザーを選択します。

5.

ユーザーの詳細ページで、[Actions] (アクション)、[Reset password] (パスワードのリセット) を選択します。

6.

[Reset password] (パスワードのリセット) ダイアログで、情報を確認し、準備ができたら[Reset] (リセット) を選択します。
この行動により、確認コードがユーザーに即時送信され、ユーザーの状態が RESET_REQUIREDに変更されることでユーザーの現在のパスワードが無効にされます。[Reset password] (ユーザーパスワードのリセット) コードは、1 時間有効です。

ユーザー属性の検索
ユーザープールがすでに作成されている場合は、AWS Management Consoleの [Users] (ユーザー)
パネルから検索できます。また、[Filter] (フィルター) パラメータを受け入れる Amazon CognitoのListUsers API も使用できます。
以下のどの標準属性でも検索できます。カスタム属性は検索できません。
• username (大文字と小文字が区別されます)• email• phone_number• name• given_name• family_name• preferred_username• cognito:user_status (コンソールでは [Status (ステータス)] となっています) (大文字と小文字が区別されません)• status (コンソールでは [Enabled (有効)] となっています) (大文字と小文字が区別されます)
• sub

Note
また、クライアント側のフィルターを使用してユーザーを一覧表示することもできます。
サーバー側のフィルターは、1 つ以上の属性に一致しません。高度な検索を行うには、AWS
Command Line Interface での list-users のアクションの --query パラメータを用いユーザーの管理と検索

730

Amazon Cognito

開発者ガイドたクライアント側のフィルターを使用します。クライアント側のフィルターを使用すると、ListUsers は 0 人以上のユーザーからなるページ分割されたリストを返します。結果がゼロで、複数のページを連続して受信できます。Null ページネーショントークン値を受け取るまで、返される各ページネーショントークンでクエリを繰り返し、組み合わせた結果を確認します。
サーバー側とクライアント側のフィルタリングの詳細については、ユーザーガイドの「AWS
Command Line Interface での AWS CLI 出力の フィルタリング」を参照してください。

AWS Management Console を使用したユーザーの検索
ユーザープールがすでに作成されている場合は、AWS Management Consoleの [Users] (ユーザー) パ
ネルから検索できます。
AWS Management Console は、常にプレフィックス ("先頭の文字") 検索を行います。
Amazon Cognito コンソールでユーザーを検索する
1.

Amazon Cognito コンソールに移動します。AWS 認証情報を求められる場合があります。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Users] (ユーザー) タブを選択し、検索フィールドに、ユーザーのユーザーネームを入力します。[Username] (ユーザーネーム) など、一部の属性値では、大文字と小文字が区別される点に注意してください。
また、検索フィルターを調整して、スコープを他のユーザープロパティ ([Email] (E メール)、[Phone number] (電話番号)、または [Last name] (姓)など) に絞り込むことで、ユーザーを検索することもできます。

ListUsers API を使用したユーザーの検索アプリからユーザーを検索するには、Amazon Cognito の ListUsers API を使用します。この API は
以下のパラメータを使用します。
• AttributesToGet: 文字列の配列です。各文字列は、検索結果でユーザーごとに返されるユー
ザー属性の名前です。すべての属性を取得するには、AttributesToGet パラメータを含めない
か、またはリテラル文字列の値 null を使って AttributesToGet をリクエストしてください。
ユーザーの管理と検索

731

Amazon Cognito

開発者ガイド• Filter: 「 ""」形式のフィルター文字列です。AttributeNameFilterTypeAttributeValueフィルター文字列内の引用符は、円記号 (\) を使用してエスケープする必要があります。例えば、"family_name = \"Reddy\"" です。フィルター文字列が空の場
合、ListUsers はユーザープールのすべてのユーザーを返します。
• AttributeName: 検索する属性の名前。同時に検索できる属性は 1 つのみです。
Note
標準属性のみを検索できます。カスタム属性は検索できません。これはインデックスが付けられた属性のみが検索可能なためで、カスタム属性にインデックスを作成することはできません。
• Filter-Type: 完全一致を検索する場合は、= を使用します (given_name = "Jon" など)。
プレフィックス (「先頭の文字」) 一致を検索する場合、^= を使用します (given_name ^="Jon" など)。
• AttributeValue: ユーザーごとに一致する必要がある属性値です。
• Limit: 返されるユーザーの最大数です。
• PaginationToken: 前の検索からさらに結果を取得するためのトークンです。Amazon Cognito
は 1 時間後にページ分割トークンを期限切れにします。
• UserPoolId: 検索を実行する必要があるユーザープールのユーザープール ID です。
すべての検索で大文字と小文字が区別されません。検索結果は、AttributeName 文字列により指定された属性によって昇順に並べ替えられます。

ListUsers API の使用例
次の例はすべてのユーザーを返します。すべての属性が含まれています。

{"AttributesToGet": null,"Filter": "","Limit": 10,"UserPoolId": "us-east-1_samplepool"}

ユーザーの管理と検索

732

Amazon Cognito

開発者ガイド

次の例は、電話番号の先頭が「+1312」のすべてのユーザーを返します。また、すべての属性が含まれています。

{"AttributesToGet": null,"Filter": "phone_number ^= \"+1312\"","Limit": 10,"UserPoolId": "us-east-1_samplepool"}

次の例は、姓が「Reddy」の先頭 10 人のユーザーを返します。各ユーザーの検索結果には、ユーザーの名、電話番号、E メールアドレスが含まれています。ユーザープールに存在する一致ユーザー
が 10 人を超える場合、レスポンスにはページ分割トークンが含まれています。
{"AttributesToGet": ["given_name","phone_number","email"],"Filter": "family_name = \"Reddy\"","Limit": 10,"UserPoolId": "us-east-1_samplepool"}

前の例でページ分割トークンが返された場合、次の例は同じフィルター文字列と一致する次の 10 人のユーザーを返します。
{"AttributesToGet": ["given_name","phone_number","email"],"Filter": "family_name = \"Reddy\"","Limit": 10,"PaginationToken": "pagination_token_from_previous_search","UserPoolId": "us-east-1_samplepool"}

ユーザーの管理と検索

733

Amazon Cognito

開発者ガイドユーザーアカウントの復旧
AccountRecoverySetting パラメータを使用すると、ユーザーが ForgotPassword API を呼び出したときにパスワードの復旧に使用できる方法をカスタマイズできます。ForgotPassword
は、検証済みの E メールまたは検証済みの電話番号に回復用コードを送信します。回復用コードは
1 時間有効です。ユーザープールに AccountRecoverySetting を指定した場合、Amazon Cognito
は、設定した優先度に基づいてコードの配信先を選択します。
AccountRecoverySetting を定義し、ユーザーに SMS MFA が設定されている場合、SMS をア
カウント復旧メカニズムとして使用することはできません。この設定の優先度は、1 が最も高いと優先度となります。Cognito は、指定された方法の 1 つだけに検証を送信します。
たとえば admin_only は、管理者がユーザー自身でアカウントを復旧することを望まず、その代わりに管理者に連絡してアカウントをリセットするようリクエストする場合に使用される値です。他のアカウント復旧メカニズムでは admin_only を使用できません。
AccountRecoverySetting を指定しない場合、Amazon Cognito はレガシーメカニズムを使用してパスワード復旧方法を決定します。この場合、Cognito は最初に確認済みの電話番号を使用します。ユーザーの確認済み電話番号が見つからない場合、Cognito はフォールバックし、次に確認済みの E メールを使用します。
AccountRecoverySetting の詳細については、Amazon Cognito ID プロバイダー API リファレン
スの「CreateUserPool」と「UpdateUserPool」を参照してください。

パスワードを忘れた場合の対応
ユーザーがパスワードを忘れた場合や忘れたパスワードを確認する場合のアクションの一環として、
パスワードのリセットコードをリクエストしたり、入力したりする試行を所定時間内に 5～20 回許可します。正確な回数は、リクエストに関連付けられたリスクパラメータによって異なります。この対応は変更される場合があることに注意してください。

ユーザープールへのユーザーのインポート
既存のユーザーディレクトリまたはユーザーデータベースから Amazon Cognito にユーザーをインポートまたは移行する方法は 2 つあります。1 つは、ユーザー移行の Lambda トリガーを使用して、ユーザーが Amazon Cognito を使用して初めてサインインするときにユーザーを移行する方法です。この方法では、ユーザーが既存のパスワードを引き続き使用でき、ユーザープールへの移行後にパスワードをリセットする必要はありません。もう 1 つは、すべてのユーザーのユーザープロファ
イル属性を含む CSV ファイルをアップロードして、ユーザーを一括で移行する方法です。以降のセクションでは、これらの両方のアプローチについて説明します。
ユーザーアカウントの復旧

734

Amazon Cognito

開発者ガイドその他のリソース• Amazon Cognito ユーザープールにユーザーを移行するためのアプローチ• AWS re:Inforce 2023 - Amazon Cognito への移行
トピック
• ユーザー移行の Lambda トリガーを使用したユーザープールへのユーザーのインポート• CSV ファイルからユーザープールへのユーザーのインポート

ユーザー移行の Lambda トリガーを使用したユーザープールへのユーザーのインポート
このアプローチでは、ユーザーがアプリケーションで初めてサインインするとき、またはパスワードのリセットをリクエストするときに、既存のユーザーディレクトリからユーザープールにユーザーをシームレスに移行できます。ユーザー移行の Lambda トリガー 関数をユーザープールに追加すると、サインインしようとするユーザーに関するメタデータを受け取り、外部 ID ソースからユーザー
プロファイル情報を返します。この Lambda トリガーの詳細 (リクエストとレスポンスのパラメータなど) とサンプルコードについては、「ユーザー移行の Lambda トリガーのパラメータ」を参照してください。
ユーザーの移行を開始する前に、 AWS アカウントでユーザー移行の Lambda 関数を作成し、ユー
ザープールに Lambda 関数 をユーザー移行トリガーとして設定します。Amazon Cognito サービ
スアカウントプリンシパルのみを許可する認証ポリシーを Lambda 関数に追加します。cognitoidp.amazonaws.com は、Lambda 関数を呼び出し、独自のユーザープールのコンテキスト内でのみ実行します。詳細については、「AWS Lambda のリソースベースのポリシーを使用する (Lambda
関数ポリシー)」を参照してください。
サインインプロセス
1. ユーザーはアプリを開き、Amazon Cognito ユーザープールAPIまたは Amazon Cognito がホストする UI を使用してサインインします。Amazon Cognito でのサインインを容易にする方法の詳細についてはAPIs、「」を参照してくださいAmazon Cognito の認証と承認を、ウェブアプリケー
ションとモバイルアプリケーションに統合する。
2. アプリケーションはユーザー名とパスワードを Amazon Cognito に送信します。アプリに で構築したカスタムサインイン UI がある場合 AWS SDK、アプリは InitiateAuthまたは
ADMIN_USER_PASSWORD_AUTHフローAdminInitiateAuthで USER_PASSWORD_AUTHまたは を使ユーザープールへのユーザーのインポート

735

Amazon Cognito

開発者ガイド用する必要があります。アプリがこれらのフローのいずれかを使用すると、 はパスワードをサー
バーSDKに送信します。
Note
ユーザー移行トリガーを追加する前に、アプリケーションクライアントの設定でUSER_PASSWORD_AUTH または ADMIN_USER_PASSWORD_AUTH フローを有効化します。
デフォルトの USER_SRP_AUTHフロー の代わりにこれらのフローを使用する必要があります。Amazon Cognito は、他のディレクトリでのユーザーの認証を検証できるように、Lambda 関数にパスワードを送信する必要があります。は、Lambda 関数からユー
ザーのパスワードをSRP隠します。
3. Amazon Cognito は、送信されたユーザー名がユーザープール内のユーザー名またはエイリアスと一致するかどうかをチェックします。ユーザーの電子メールアドレス、電話番号、または優先ユーザー名を、ユーザープールのエイリアスとして設定できます。ユーザーが存在しない場
合、Amazon Cognito は、ユーザー名やパスワードなどのパラメータを ユーザー移行の Lambda
トリガー 関数に送信します。
4. ユーザー移行の Lambda トリガー 関数は、既存のユーザーディレクトリまたはユーザーデー
タベースを使用してユーザーをチェックまたは認証します。この関数は、Amazon Cognito
がユーザープールのユーザープロファイルに保存するユーザー属性を返します。送信されたユーザー名がエイリアス属性と一致する場合にのみ、username パラメータを返します。ユー
ザーが既存のパスワードを引き続き使用できるようにする場合は、Lambda レスポンスで属性 finalUserStatus を CONFIRMED に設定します。アプリケーションは、ユーザー移行のLambda トリガーのパラメータ に示されるすべての "response" パラメータを返す必要があります。
Important
リクエストイベントオブジェクト全体をユーザー移行 Lambda コードに記録しないでください。このリクエストイベントオブジェクトには、ユーザーのパスワードが含まれます。
ログをサニタイズしないと、パスワードが CloudWatch ログに表示されます。
5. Amazon Cognito はユーザープールにユーザープロファイルを作成し、トークンをアプリケーショ
ンクライアントに返します。
6. アプリケーションはトークンの取り込みを実行し、ユーザー認証を受け入れ、リクエストされたコンテンツに進みます。

ユーザープールへのユーザーのインポート

736

Amazon Cognito

開発者ガイドユーザーを移行したら、USER_SRP_AUTH を使用してサインインします。Secure Remote
Password (SRP) プロトコルは、パスワードをネットワーク経由で送信せず、移行中に使用するUSER_PASSWORD_AUTHフローよりもセキュリティ上の利点を提供します。
クライアントデバイスやネットワークの問題など、移行中にエラーが発生した場合、アプリケーショ
ンは Amazon Cognito ユーザープール からエラーレスポンスを受け取りますAPI。この場合 Amazon
Cognito はユーザープールにユーザーアカウントを作成しない可能性があります。その後、ユーザー
は再度サインインを試行する必要があります。サインインが繰り返し失敗した場合、アプリケーショ
ンでパスワードを忘れた場合のフローを使用してユーザーのパスワードをリセットする必要があります。
パスワードを忘れた場合のフローでは、UserMigration_ForgotPassword イベントソースを使用して ユーザー移行の Lambda トリガー 関数も呼び出します。ユーザーはパスワードのリセットをリクエストしてもパスワードを送信しないため、Amazon Cognito は Lambda 関数に送信するイベン
トにパスワードを含めません。関数では、既存のユーザーディレクトリ内のユーザーのみを検索し、ユーザープールのユーザープロファイルに追加する属性を返すことができます。関数が呼び出しを完了し、Amazon Cognito にレスポンスを返すと、ユーザープールはパスワードリセットコードを E
メールまたは で送信しますSMS。アプリで、ユーザーに確認コードと新しいパスワードの入力を求め、その情報をConfirmForgotPasswordAPIリクエストで Amazon Cognito に送信します。Amazon
Cognito がホストする UI で、パスワードを忘れた場合のフロー用の組み込みページを使用することもできます。
追加リソース• Amazon Cognito ユーザープールにユーザーを移行するためのアプローチ

CSV ファイルからユーザープールへのユーザーのインポート
Amazon Cognito ユーザープールにユーザーをインポートできます。ユーザー情報は、特別にフォーマットされた .csv ファイルからインポートされます。インポートプロセスは、[パスワード] 以外のすべてのユーザー属性の値を設定します。セキュリティのベストプラクティスでは、パスワードはプレーンテキスト形式として使用できない必要があり、ハッシュのインポートはサポートされていな
いため、パスワードのインポートはサポートされません。つまり、ユーザーは最初にサインインした
際にパスワードを変更する必要があります。そのため、このメソッドを使用してインポートすると、ユーザーは RESET_REQUIRED 状態になります。
Permanent パラメータを true に設定する AdminSetUserPassword API リクエストでユーザーのパスワードを設定できます。
ユーザープールへのユーザーのインポート

737

Amazon Cognito

開発者ガイド

Note
各ユーザーの作成日は、ユーザーがユーザープールにインポートされた時間です。作成日
は、インポートされた属性の 1 つではありません。

基本的なステップは次のとおりです。
1. AWS Identity and Access Management (IAM) コンソールで Amazon CloudWatch Logs ロールを作成します。
2. ユーザーインポート .csv ファイルを作成します。
3. ユーザーインポートジョブを作成し、実行します。
4. ユーザーインポート .csv ファイルをアップロードします。
5. ユーザーインポートジョブを起動し、実行します。
6. CloudWatch を使用してイベントログを確認します。
7. インポートされたユーザーがパスワードをリセットするように要求します。
その他のリソース• Cognito ユーザープロファイルエクスポートリファレンスアーキテクチャ
トピック• CloudWatch Logs IAM ロールの作成• ユーザーインポート CSV ファイルの作成• Amazon Cognito ユーザープールのインポートジョブの作成と実行• ユーザープールのインポート結果を CloudWatch コンソールに表示• インポートされたユーザーにパスワードをリセットするように要求
CloudWatch Logs IAM ロールの作成
Amazon Cognito の CLI または API を使用している場合は、CloudWatch IAM ロールを作成する必要があります。以下の手順では、Amazon Cognito がインポートジョブの結果を CloudWatch Logs に書き込むために使用できる IAM ロールを作成する方法について説明します。
ユーザープールへのユーザーのインポート

738

Amazon Cognito

開発者ガイドNote
Amazon Cognito コンソールでインポート ジョブを作成すると、同時に IAM ロールを作成できます。新しい IAM ロールを作成することを選択すると、Amazon Cognito は適切な信頼ポ
リシーと IAM ポリシーをロールに自動的に適用します。

ユーザープールインポート用の CloudWatch Logs IAM ロールを作成するには (AWS CLI、API)
1.

AWS Management Console にサインインして、IAM コンソール (https://
console.aws.amazon.com/iam/) を開きます。

2.

AWS サービス 用の新しい IAM ロールを作成します。詳しい手順については、AWS Identity andAccess Management ユーザーガイドの「AWS サービス にアクセス許可を委任するロールの作成」を参照してください。
a.

信頼されたエンティティタイプのユースケースを選択するときは、任意のサービスを選択してください。Amazon Cognito は現在、サービスのユースケースに記載されていません。

b.

[Add permissions] (アクセス許可の追加) 画面で、[Create policy] (ポリシーの作成) を選択し、次のポリシーステートメントを挿入します。REGION をユーザープールの AWS リー
ジョン に置き換えます (us-east-1 など)。ACCOUNT を AWS アカウント ID に置き換えます (111122223333 など)。
{
"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["logs:CreateLogGroup","logs:CreateLogStream","logs:DescribeLogStreams","logs:PutLogEvents"],"Resource": ["arn:aws:logs:REGION:ACCOUNT:log-group:/aws/cognito/*"]}]}ユーザープールへのユーザーのインポート

739

Amazon Cognito

3.

開発者ガイドロールを作成したときに Amazon Cognito を信頼されたエンティティとして選択しなかったた
め、ロールの信頼関係を手動で編集する必要があります。IAM コンソールのナビゲーションペ
インから [Roles] (ロール) を選択し、作成した新しいロールを選択します。

4.

[信頼関係] タブを選択します。

5.

[Edit trust policy] (信頼ポリシーを編集) を選択します。

6.

次のポリシーステートメントを [Edit trust policy] (信頼ポリシーを編集) に貼り付け、既存のテキストを置き換えます。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "cognito-idp.amazonaws.com"},"Action": "sts:AssumeRole"
}
]
}

7.

[ポリシーの更新] を選択します。

8.

ロールの ARN を書き留めておきます。インポートジョブを作成するときに、ARN を指定します。

ユーザーインポート CSV ファイルの作成
既存のユーザーをユーザープールにインポートする前に、インポートするユーザーとその属性を含
むカンマ区切り値 (CSV) ファイルを作成する必要があります。ユーザープールから、ユーザープー
ルの属性スキーマを反映するヘッダーを含むユーザーインポートファイルを取得できます。その後、CSV ファイルのフォーマット のフォーマット要件に一致するユーザー情報を挿入できます。
CSV ファイルヘッダーのダウンロード (コンソール)
CSV ヘッダーファイルをダウンロードするには、次の手順に従います。
CSV ファイルヘッダーをダウンロードするには1.

Amazon Cognito コンソールに移動します。AWS 認証情報を求められる場合があります。

ユーザープールへのユーザーのインポート

740

Amazon Cognito

開発者ガイド

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Users] (ユーザー) タブを選択します。

5.

[Import users] (ユーザーのインポート) セクションで、[Create an import job] (インポートジョブの作成) を選択します。

6.

[Upload CSV] (CSV のアップロード) で [template.csv] リンクを選択し、CSV ファイルをダウンロードします。

CSV ファイルヘッダーのダウンロード (AWS CLI)
正しいヘッダーのリストを取得するには、USER_POOL_ID がユーザーをインポートするユーザー
プールのユーザープール ID である次の CLI コマンドを実行します。
aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID"

レスポンス例:{"CSVHeader": ["name","given_name","family_name","middle_name","nickname","preferred_username","profile","picture","website","email","email_verified","gender","birthdate","zoneinfo","locale","phone_number","phone_number_verified","address","updated_at","cognito:mfa_enabled","cognito:username"
ユーザープールへのユーザーのインポート

741

Amazon Cognito

開発者ガイド],"UserPoolId": "USER_POOL_ID"}

CSV ファイルのフォーマット
ダウンロードしたユーザーインポート CSV ヘッダーファイルは次の文字列のようになります。ユー
ザープールに追加したカスタム属性も含まれます。

cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,pi

ユーザーのためのこのヘッダーと属性値が含まれ、次のルールに従ってフォーマットされているように CSV ファイルを編集します。
Note
電話番号の適切な形式など属性値の詳細については、「ユーザープール属性」を参照してください。

• ファイルの最初の行はユーザー属性の名前を含む、ダウンロードされたヘッダーの行です。
• CSV ファイルの行の順序は重要ではありません。
• 最初の行の後の各行に、ユーザーの属性値が含まれます。
• ヘッダーのすべての列が存在している必要がありますが、列の値を指定する必要はありません。
• 以下の属性は必須です:• cognito:username• cognito:mfa_enabled• [email_verified] または [phone_number_verified]• 自動確認された属性の少なくとも一つは、各ユーザーに対して true である必要があります。
自動検証属性は、新しいユーザーがユーザープールに参加したときに Amazon Cognito が自動的にコードを送信する E メールアドレスまたは電話番号です。
• ユーザープールは [email_verified] または [phone_number_verified] の少なくとも一つの自動確認された属性が必要です。ユーザープールに自動確認された属性が存在しない場合は、インポートジョブは開始されません。
• ユーザープールに一つの自動確認された属性がある場合のみ、その属性はユーザーごとに確認する必要があります。たとえば、ユーザープールに自動確認された属性としてユーザープールへのユーザーのインポート

742

Amazon Cognito

開発者ガイド[phone_number] だけがある場合、[phone_number_verified] 値はそれぞれのユーザーに対してtrue である必要があります。
Note
ユーザーがパスワードをリセットするには、検証済みの E メールまたは電話番号が必要です。Amazon Cognito は、CSV ファイルで指定された E メールアドレスまたは電話番
号にパスワードのリセットコードが含まれるメッセージを送信します。メッセージが電
話番号に送信される場合は、SMS メッセージで送信されます。詳細については、「サインアップ時に連絡先情報を検証する」を参照してください。
• [email] ([email_verified] がtrue の場合)
• [phone_number] ([phone_number] が true の場合)
• ユーザープールを作成する際に必須と指定した任意の属性• 文字列である属性値には、引用符は使用できません。
• 属性値にカンマが含まれる場合、カンマの前にバックスラッシュ (\) を置く必要があります。これは、CSV ファイルのフィールドがカンマで区切られているためです。
• CSV ファイルのコンテンツは、バイトオーダーマークのない UTF-8 形式にする必要があります。
• [cognito:username] フィールドは必須であり、ユーザープール内で一意である必要があります。任意の Unicode 文字列を使えます。ただし、スペースまたはタブを含めることはできません。
• [birthdate] (生年月日) の値がある場合、「mm/dd/yyyy」の形式である必要があります。たとえば、生年月日が 1985 年 2 月 1 日だとすると、02/01/1985 にエンコードされる必要があります。
• [cognito:mfa_enabled] フィールドは必須です。ユーザープールで Multi-Factor Authentication(MFA) が必要であると設定している場合、このフィールドはすべてのユーザーに true である必
要があります。MFA をオフに設定している場合、このフィールドはすべてのユーザーに false である必要があります。MFA をオプションとして設定している場合、このフィールドは true または false で、空にすることはできません。
• 最大行数は 16,000 文字です。
• CSV ファイルの最大サイズは 100 MB です。
• ファイルの最大行数 (ユーザー) は 500,000 です。この最大値にはヘッダー行は含まれません。
• [updated_at] フィールド値はエポック時間 (秒) であると想定します。たとえば 1471453471 などです。
• 属性値の先頭または末尾の空白は切り捨てられます。
ユーザープールへのユーザーのインポート

743

Amazon Cognito

開発者ガイド

次のリストは、カスタム属性のないユーザープールの CSV インポートファイルの例です。ユーザー
プールスキーマは、この例とは異なる場合があります。その場合は、ユーザープールからダウンロー
ドした CSV テンプレートにテスト値を入力する必要があります。

cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,piJohn,,John,Doe,,,,,,,johndoe@example.com,TRUE,,02/01/1985,,,+12345550100,TRUE,123 Any
Street,,FALSE
Jane,,Jane,Roe,,,,,,,janeroe@example.com,TRUE,,01/01/1985,,,+12345550199,TRUE,100 Main
Street,,FALSE

Amazon Cognito ユーザープールのインポートジョブの作成と実行
このセクションは、Amazon Cognito コンソールおよび AWS Command Line Interface (AWS CLI) を使用してユーザープールのインポートジョブを作成し、実行する方法を説明します。
トピック• CSV ファイルからのユーザーのインポート (コンソール)• ユーザーのインポート (AWS CLI)CSV ファイルからのユーザーのインポート (コンソール)
次の手順は、CSV ファイルからユーザーをインポートする方法について説明します。
CSV ファイルからユーザーをインポートするには (コンソール)
1.

Amazon Cognito コンソールに移動します。AWS 認証情報を求められる場合があります。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Users] (ユーザー) タブを選択します。

5.

[Import users] (ユーザーのインポート) セクションで、[Create an import job] (インポートジョブの作成) を選択します。

6.

[Create import job] (インポートジョブの作成) ページで、ジョブ名を入力します。

7.

[Create a new IAM role] (新しい IAM ロールの作成)、または[Use an existing IAM role] (既存のロールを使用する) を選択します。
a.

[Create a new IAM role] (新しい IAM ロールの作成) を選択した場合は、新しいロールの名前を入力します。Amazon Cognito は、正しいアクセス許可と信頼関係を持つロールを自動ユーザープールへのユーザーのインポート

744

Amazon Cognito

開発者ガイド的に作成します。インポートジョブを作成する IAM プリンシパルに、IAM ロールを作成するアクセス許可が必要です。
b.

[Use an existing IAM role] (既存の IAM ロールを使用する) を選択した場合は、[IAM
role selection] (IAM ロール選択) のリストからロールを選択します。このロールには、CloudWatch Logs IAM ロールの作成 で説明されているアクセス許可と信頼ポリシーが
必要です。

8.

[Create job] (ジョブの作成) を選択してジョブを送信しますが、後で開始します。[Create andstart job] (ジョブを作成して開始) を選択してジョブを送信し、すぐに開始します。

9.

ジョブを作成したが開始しなかった場合は、後で開始できます。[Users] (ユーザー) タブの[Import users] (ユーザーのインポート) で、インポートジョブを選択し、[Start] (開始) を選択します。また、AWS SDK から StartUserImportJob API リクエストを送信することもできます。

10. ユーザーインポートジョブの進行状況は、[Import users] (ユーザーのインポート) の [Users](ユーザー) タブで監視します。ジョブが成功しない場合は、[Status] (ステータス) 値を選択できます。詳細については、[View the CloudWatch logs for more details] (詳細についてはCloudWatch ログを表示する) を選択して、CloudWatch ログコンソールで問題がないか確認してください。
ユーザーのインポート (AWS CLI)
ユーザープールにユーザーをインポートするには、次の CLI コマンドが使用できます:• create-user-import-job• get-csv-header• describe-user-import-job• list-user-import-jobs• start-user-import-job• stop-user-import-job
これらのコマンドに関するコマンドラインオプションのリストを取得するには、help コマンドライ
ンオプションを使用します。次に例を示します。
aws cognito-idp get-csv-header help

ユーザープールへのユーザーのインポート

745

Amazon Cognito

開発者ガイドユーザーインポートジョブの作成
CSV ファイルを作成した後、次の CLI コマンドを使用してユーザーインポートジョブを作成します。[JOB_NAME] にはジョブに付ける名前を指定します。[USER_POOL_ID] には以前と同じユーザープール ID を指定します。[ROLE_ARN] には、CloudWatch Logs IAM ロールの作成 で次のとおり受け取ったロール ARN を指定します。
aws cognito-idp create-user-import-job --job-name "JOB_NAME" --user-pool-id"USER_POOL_ID" --cloud-watch-logs-role-arn "ROLE_ARN"

レスポンスで返される PRE_SIGNED_URL は 15 分間有効です。この時間以後は無効になり、新規のユーザーインポートジョブを作成して新しい URL を取得し直す必要があります。
Example レスポンス例:{"UserImportJob": {"Status": "Created","SkippedUsers": 0,"UserPoolId": "USER_POOL_ID","ImportedUsers": 0,"JobName": "JOB_NAME","JobId": "JOB_ID","PreSignedUrl": "PRE_SIGNED_URL","CloudWatchLogsRoleArn": "ROLE_ARN","FailedUsers": 0,"CreationDate": 1470957431.965}}

ユーザーインポートジョブのステータス値
ユーザーインポートのコマンドに対する応答には、Status を示す次のような値が見つかります。
• Created - ジョブが作成されましたが、開始前の状態です。
• Pending - 遷移状態です。ジョブを開始しましたが、まだユーザーのインポートは開始していません。
• InProgress - ジョブが開始され、ユーザーインポートが進行中です。
• Stopping - ジョブを停止する処理中です。ユーザーインポートは停止していません。
• Stopped - ジョブは停止中で、ユーザーインポートも停止しています。
ユーザープールへのユーザーのインポート

746

Amazon Cognito

開発者ガイド• Succeeded - ジョブは正常に完了しました。
• Failed - エラーのためジョブは停止しました。
• Expired - ジョブを作成しましたが、24 ～ 48 時間以内にジョブを起動しませんでした。ジョブに関連付けられたすべてのデータは削除され、ジョブを開始することはできません。
CSV ファイルのアップロード
以下の curl コマンドを使用して、ユーザーデータが含まれる CSV ファイルを create-userimport-job コマンドのレスポンスから取得した事前署名済みの URL にアップロードします。
curl -v -T "PATH_TO_CSV_FILE" -H "x-amz-server-side-encryption:aws:kms""PRE_SIGNED_URL"

このコマンドの出力から、次のようなメッセージを見つけます: "We are completely uploaded
and fine" このメッセージは、ファイルが正常にアップロードされたことを示します。
ユーザーインポートジョブの説明
ユーザーインポートジョブの説明を取得するには、次のコマンドを使用します。USER_POOL_ID はユーザープール ID です。JOB_ID は、ユーザーインポートジョブの作成時に返されたジョブ ID です。
aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id"JOB_ID"

Example レスポンス例:{"UserImportJob": {"Status": "Created","SkippedUsers": 0,"UserPoolId": "USER_POOL_ID","ImportedUsers": 0,"JobName": "JOB_NAME","JobId": "JOB_ID","PreSignedUrl": "PRE_SIGNED_URL","CloudWatchLogsRoleArn":"ROLE_ARN","FailedUsers": 0,"CreationDate": 1470957431.965}
ユーザープールへのユーザーのインポート

747

Amazon Cognito

開発者ガイド}

前述の例の出力では、PRE_SIGNED_URL は CSV のアップロード先の URL です。ROLE_ARN は、ロールの作成時に受け取った CloudWatch Logs ロール ARN です。
ユーザーインポートジョブを表示する
ユーザーインポートジョブを一覧表示するには、次のコマンドを使用します:
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2

Example レスポンス例:{"UserImportJobs": [{"Status": "Created","SkippedUsers": 0,"UserPoolId": "USER_POOL_ID","ImportedUsers": 0,"JobName": "JOB_NAME","JobId": "JOB_ID","PreSignedUrl":"PRE_SIGNED_URL","CloudWatchLogsRoleArn":"ROLE_ARN","FailedUsers": 0,"CreationDate": 1470957431.965},{"CompletionDate": 1470954227.701,"StartDate": 1470954226.086,"Status": "Failed","UserPoolId": "USER_POOL_ID","ImportedUsers": 0,"SkippedUsers": 0,"JobName": "JOB_NAME","CompletionMessage": "Too many users have failed or been skipped during theimport.","JobId": "JOB_ID","PreSignedUrl":"PRE_SIGNED_URL","CloudWatchLogsRoleArn":"ROLE_ARN","FailedUsers": 5,"CreationDate": 1470953929.313}
ユーザープールへのユーザーのインポート

748

Amazon Cognito

開発者ガイド],"PaginationToken": "PAGINATION_TOKEN"}

ジョブは時系列で、作成が最後から最初の順で表示されます。2 番目のジョブのあとの
PAGINATION_TOKEN 文字列は、このリストコマンドについて、まだ結果が残っていることを示します。残りの結果を表示するには、次のように --pagination-token オプションを使用します:
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 -pagination-token "PAGINATION_TOKEN"

ユーザーインポートジョブの開始
ユーザーインポートジョブを開始するには、次のコマンドを使用します:
aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"

インポートジョブは、アカウントごとに 1 つしかアクティブにできません。
Example レスポンス例:{"UserImportJob": {"Status": "Pending","StartDate": 1470957851.483,"UserPoolId": "USER_POOL_ID","ImportedUsers": 0,"SkippedUsers": 0,"JobName": "JOB_NAME","JobId": "JOB_ID","PreSignedUrl":"PRE_SIGNED_URL","CloudWatchLogsRoleArn": "ROLE_ARN","FailedUsers": 0,"CreationDate": 1470957431.965}}

ユーザーインポートジョブの停止
ユーザーインポートジョブの進行中に停止するには、次のコマンドを使用します。ジョブを停止すると、再開することはできません。
ユーザープールへのユーザーのインポート

749

Amazon Cognito

開発者ガイドaws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"

Example レスポンス例:{"UserImportJob": {"CompletionDate": 1470958050.571,"StartDate": 1470958047.797,"Status": "Stopped","UserPoolId": "USER_POOL_ID","ImportedUsers": 0,"SkippedUsers": 0,"JobName": "JOB_NAME","CompletionMessage": "The Import Job was stopped by the developer.","JobId": "JOB_ID","PreSignedUrl":"PRE_SIGNED_URL","CloudWatchLogsRoleArn": "ROLE_ARN","FailedUsers": 0,"CreationDate": 1470957972.387}}

ユーザープールのインポート結果を CloudWatch コンソールに表示
インポートジョブの結果は、Amazon CloudWatch コンソールで表示できます。
トピック• 結果の表示• 結果の解釈
結果の表示
次のステップでは、ユーザープールのインポートの結果を表示する方法を説明します。
ユーザープールのインポート結果を見るには
1.

AWS Management Console にサインインして、CloudWatch コンソール (https://
console.aws.amazon.com/cloudwatch/) を開きます。

2.

[ログ] を選択します。

ユーザープールへのユーザーのインポート

750

Amazon Cognito

3.

開発者ガイドユーザープールのインポートジョブに使用するロググループを選択します。ロググループ名は /aws/cognito/userpools/USER_POOL_ID/USER_POOL_NAME の形式です。

4.

先ほど実行したユーザーインポートジョブのログを選択します。ログ名は JOB_ID/JOB_NAMEの形式です。ログの結果は行番号でユーザーを示しています。ユーザーデータはログに書き込まれていません。各ユーザーに対して、次のような行が表示されます。
• [SUCCEEDED] Line Number 5956 - The import succeeded.
• [SKIPPED] Line Number 5956 - The user already exists.
• [FAILED] Line Number 5956 - The User Record does not set any of the
auto verified attributes to true. (Example: email_verified to true).

結果の解釈正常にインポートしたユーザーは、ステータスが「PasswordReset」に設定済みです。
次の場合、ユーザーはインポートされませんが、インポートジョブは継続します。
• true に設定された自動検証された属性はありません。
• ユーザーデータはスキーマに一致しません。
• 内部エラーによりユーザーをインポートできませんでした。
以下の場合、インポートジョブは失敗します。
• Amazon CloudWatch Logs ロールを想定することができず、正しいアクセスポリシーがない、または削除されている。
• ユーザープールが削除されている。
• Amazon Cognito が .csv ファイルを解析できない。
インポートされたユーザーにパスワードをリセットするように要求
インポートされた各ユーザーが初めてサインインしてパスワードを入力するときは、新しいパスワー
ドを入力する必要があります。以下の手順では、CSV ファイルをインポートした後のローカルユー
ザーによるカスタム App でのユーザーエクスペリエンスについて説明します。ユーザーがホストされた UI でサインインすると、Amazon Cognito はユーザーが最初にサインインしたときに新しいパスワードを設定するように求めます。
ユーザープールへのユーザーのインポート

751

Amazon Cognito

開発者ガイドインポートされたユーザーにパスワードをリセットするように要求
1.

アプリケーションで、ランダムなパスワードを使用した InitiateAuth により、現在のユー
ザーのサインインをサイレントに試行します。

2.

PreventUserExistenceErrors が有効な場合、Amazon Cognito
は NotAuthorizedException を返します。そうでない場合はPasswordResetRequiredException を返します。

3.

アプリケーションが ForgotPassword API リクエストを行い、ユーザーのパスワードをリセッ
トします。
a.

アプリケーションは ForgotPassword API リクエストでユーザー名を送信します。

b.

Amazon Cognito は、確認済みの E メールまたは電話番号にコードを送信します。宛先
は、CSV ファイルで email_verified と phone_number_verified に指定した値によって異なります。ForgotPassword リクエストへのレスポンスは、コードの宛先を示します。
Note
ユーザープールは、E メールまたは電話番号を確認するように設定する必要があります。詳細については、「ユーザーアカウントのサインアップと確認」を参照して
ください。

c.

アプリケーションは、コードがコードの送信先を確認するメッセージをユーザーに表示し、ユーザーにコードと新しいパスワードを入力するように求めます。

d.

ユーザーがアプリでコードと新しいパスワードを入力します。

e.

アプリケーションは ConfirmForgotPassword API リクエストでコードと新しいパス
ワードを送信します。

f.

アプリケーションはユーザーをサインインにリダイレクトします。

ユーザープール属性
属性は、名前、E メールアドレス、電話番号など、個々のユーザーを識別できる各種情報です。新しいユーザープールにはデフォルトの標準属性のセットがあります。のユーザープール定義にカスタム属性を追加することもできます AWS Management Console。このトピックでは、それらの属性について詳しく説明し、ユーザープールの設定のヒントを示します。
属性752

Amazon Cognito

開発者ガイドユーザーに関するすべての情報を属性に保存しないでください。例えば、使用統計やゲームスコアな
どの頻繁に変化するユーザーデータは、Amazon Cognito Sync または Amazon DynamoDB などの個別のデータストアに保存してください。
Note
ドキュメントや標準によっては、属性をメンバーと呼んでいます。

トピック• 標準属性• ユーザー名および優先ユーザー名• ログイン属性のカスタマイズ• カスタム属性• 属性の権限と範囲

標準属性
Amazon Cognito は、[OpenID Connect の仕様] に基づいて、以下の標準属性セットをすべてのユー
ザーに割り当てます。標準属性値およびカスタム属性値は、デフォルトでは最大 2048 文字の任意の文字列ですが、一部の属性値には形式の制限があります。
標準属性は以下のとおりです。
• name• family_name• given_name• middle_name• nickname• preferred_username• profile• picture• website• gender属性753

Amazon Cognito

開発者ガイド• birthdate• zoneinfo• locale• updated_at• address• email• phone_number• sub
sub を除き、標準属性はすべてのユーザーに対してデフォルトでオプションとなります。属性を必須にする場合は、ユーザープールの作成プロセスで、属性の横にある [必須] チェックボックスをオンにします。Amazon Cognito は、各ユーザーの sub 属性に一意のユーザー識別子の値を割り当てます。検証できるのは E メールと phone_number 属性だけです。
標準属性には、DescribeUserPool APIレスポンス の SchemaAttributesパラメータで表示できる
事前定義されたプロパティがあります。データ型、ミュータビリティ、長さの制約など、これらの属
性プロパティのカスタム値を設定できます。標準属性プロパティを変更するには、CreateUserPool
スキーマパラメータ でカスタム値を設定します。スキーマは、必要な属性を設定する場所でもあります。Amazon Cognito コンソールでユーザープールを作成するときに、標準属性のプロパティを変更することはできません。
Note
標準属性を必須とマークすると、ユーザーは、属性の値が指定されない限り登録することはできません。ユーザーを作成し、必要な属性の値を指定しないようにするには、管理者はAdminCreateUser を使用できますAPI。ユーザープールを作成した後で、属性を必須と必須ではないの間で切り替えることができません。

標準属性の詳細と形式の制限
birthdate
値は、-MMYYYY-DD 形式の有効な 10 文字の日付である必要があります。
email
ユーザーおよび管理者は、E メールアドレスの値を確認できます。
属性754

Amazon Cognito

開発者ガイド

適切な AWS アカウント アクセス許可を持つ管理者は、ユーザーの E メールアドレスを変更
し、それを検証済みとしてマークすることもできます。AdminUpdateUserAttributes API または admin-update-user-attributes AWS Command Line Interface （AWS CLI) コマンドを使用して、E メールアドレスを検証済みとしてマークします。このコマンドを使用すると、管理者
はemail_verified 属性を true に変更できます。のユーザータブでユーザーを編集 AWSManagement Console して、E メールアドレスを検証済みとしてマークすることもできます。
値は、@ 記号とドメインを含む標準の電子メール形式に従った有効な E メールアドレス文字列
で、長さは 2048 文字までです。
phone_number
SMS 多要素認証 (MFA) がアクティブな場合、ユーザーは電話番号を指定する必要があります。
詳細については、「ユーザープールMFAへの の追加」を参照してください。
ユーザーおよび管理者は、電話番号の値を確認できます。
適切な AWS アカウント アクセス許可を持つ管理者は、ユーザーの電話番号を変更し、検証済みとしてマークすることもできます。AdminUpdateUserAttributes API または admin-update-userattributes AWS CLI コマンドを使用して、電話番号を検証済みとしてマークします。このコマンドを使用すると、管理者はphone_number_verified 属性を true に変更できます。のユーザータブでユーザーを編集 AWS Management Console して、電話番号を検証済みとしてマークすることもできます。
Important
電話番号は次の形式に従う必要があります: 電話番号は、プラス記号 (+) から始めて国番
号がその後に続く必要があります。電話番号には、プラス記号 (+) および数値のみを含めることができます。値をサービスに送信する前に、電話番号から括弧、スペース、ハイフ
ン (-) などの他の文字を削除してください。例えば、米国の電話番号は +14325551212の形式に従っています。

preferred_username
preferred_username は、必要に応じて、またはエイリアスとして選択できますが、両方を選択することはできません。preferred_username がエイリアスの場合、
UpdateUserAttributesAPIオペレーションにリクエストを行い、ユーザーを確認した後に属性値を追加できます。
属性755

Amazon Cognito

開発者ガイドsubsub 属性に基づいてユーザーをインデックス化して検索します。sub 属性は、各ユーザープール
内で一意のユーザー識別子です。ユーザーは phone_number や email などの属性を変更できます。sub 属性には固定値が含まれています。ユーザーの検索の詳細については、「ユーザーアカ
ウントの管理と検索」を参照してください。
必須属性を表示する
以下の手順に従って、特定のユーザープールに必要な属性を表示します。
Note
ユーザープールを作成した後は、必須の属性を変更することはできません。

必須属性を表示する
1.

の Amazon Cognito に移動します AWS Management Console。コンソールからプロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Sign-up experience] (サインアップエクスペリエンス) タブを選択します。

5.

[Required attributes] (必須の属性) セクションで、ユーザープールの必須属性が表示されます。

ユーザー名および優先ユーザー名
username 値は個別の属性であり、name 属性とは異なります。各ユーザーには、username 属性があります。Amazon Cognito は、フェデレーティッドユーザーのユーザー名を自動的に生成します。Amazon Cognito ディレクトリにローカルユーザーを作成するには、username 属性を指定する必要があります。ユーザーを作成した後で、username 属性の値を変更することはできません。
デベロッパーは、preferred_username 属性を使用して、変更可能なユーザー名をユーザーに付与できます。詳細については、「ログイン属性のカスタマイズ」を参照してください。
お客様のアプリケーションでユーザー名が不要の場合は、ユーザーにユーザー名を指定するように求める必要はありません。アプリでユーザー用の一意のユーザー名をバックグラウンドで作成できま属性756

Amazon Cognito

開発者ガイドす。例えば、E メールアドレスとパスワードを登録しそれを使用してサインインするようにユーザーに求める場合は便利です。詳細については、「ログイン属性のカスタマイズ」を参照してください。
username はユーザープール内で一意である必要があります。username は再利用できますが、削除されて使用されなくなった場合のみです。username 属性に対する文字列制約の詳細については、SignUpAPIリクエストのユーザー名プロパティを参照してください。

ログイン属性のカスタマイズ
ユーザープールを作成するときに、ユーザーが e メールアドレスまたは電話番号をユーザー名として使用してサインアップおよびサインインできるようにする場合は、ユーザー名属性を設定できます。また、エイリアス属性を設定してユーザーに選択肢を与えることもできます。サインアップする
ときに複数の属性を含めて、ユーザー名、優先ユーザー名、E メールアドレス、または電話番号でサインインできます。
Important
ユーザープールを作成した後は、この設定を変更することはできません。

エイリアス属性とユーザー名属性の選択方法
要件

エイリアス属性

ユーザー名属性

ユーザーには複数のサインイン属性があります

Yes¹

No²

ユーザーは、サインインする
前に E メールアドレスまたは電話番号を確認する必要があ
ります

あり

なし

E メールアドレスまたは電話番号が重複しているユーザーをサインアップ

あり

なし

し、UsernameExistsExce
ption エラーを防ぐ3

属性

757

Amazon Cognito

開発者ガイド要件

エイリアス属性

ユーザー名属性

複数のユーザーに同じ E メー
ルアドレスまたは電話番号属性値を割り当てることができ
ます

あり⁴

なし

¹ 使用可能なサインイン属性は、ユーザー名、E メールアドレス、電話番号、および優先ユーザー名です。
² E メールアドレスまたは電話番号を使用してサインインできます。
³ ユーザーが登録したメールアドレスや電話番号が重複している可能性があるが、ユーザー名がない
場合、ユーザープールで UsernameExistsException エラーが生成されません。この動作はユー
ザー名存在エラーを防ぐとは無関係です。これはサインイン操作には適用されますが、サインアップ
操作には適用されません。
⁴ 属性を確認した最後のユーザーのみが、その属性を使用してサインインできます。
オプション 1: 複数のログイン属性 (エイリアス属性)
ユーザーがサインイン時にユーザー名やその他の属性値を入力することを選択できるようにするには、エイリアスを有効にすることができます。デフォルトでは、ユーザーは各自のユーザー名とパスワードでサインインします。ユーザー名はユーザーが変更できない固定値です。属性をエイリア
スとしてマーキングすると、ユーザーはユーザー名の代わりにその属性を使用してサインインできます。E メールアドレス、電話番号、および任意ユーザー名属性は、エイリアスレコードとしてマーキ
ングできます。例えば、E メールと電話をユーザープールのエイリアスとして選択すると、そのユー
ザープールのユーザーは、自分のユーザー名、E メールアドレス、または電話番号とパスワードを使ってサインインできます。
エイリアス属性を選択するには、ユーザープールを作成するときに [User name] (ユーザー名) と 1
つ以上の追加のサインインオプションを選択します。
Note
大文字と小文字を区別しないようにユーザープールを設定すると、ユーザーは小文字または大文字を使用してサインアップ、またはエイリアスを使用してサインインできるようになり

属性

758

Amazon Cognito

開発者ガイドます。詳細については、CreateUserPoolAmazon Cognito ユーザープールAPIリファレンス」の「」を参照してください。

エイリアスとして E メールアドレスを選択した場合、Amazon Cognito は有効な E メールアドレ
ス形式と一致するユーザー名を受け入れません。同様に、電話番号をエイリアスとして選択した場
合、Amazon Cognito は、有効な電話番号形式に一致するユーザープールのユーザー名を受け入れません。
Note
エイリアス値は、ユーザープール内で一意にする必要があります。エイリアスがメールアド
レスまたは電話番号に設定される場合、指定される値は 1 つのアカウントのみで検証状態になります。サインアップ時に E メールアドレスまたは電話番号をエイリアス値として指定し、別のユーザーがそのエイリアス値を既に使用している場合、登録は成功します。ただし、ユーザーがこの E メール (または電話番号) を持つアカウントを確認して有効なコードを入力しようとする場合、Amazon Cognito は、AliasExistsException エラーを返します。エラーは、この E メールアドレス (または電話番号) を持つアカウントが既に存在していることを示します。この時点で、ユーザーは新しいアカウントの作成を中止して、古いアカ
ウントのパスワードのリセットを試すことができます。ユーザーが引き続き新しいアカウン
トを作成する場合、アプリは forceAliasCreationオプションConfirmSignUpAPIを使用
して を呼び出す必要があります。 ConfirmSignUpを と設定すると、エイリアスが前のア
カウントから新しく作成されたアカウントforceAliasCreationに移動され、前のアカウ
ントで未検証の属性がマークされます。

ユーザーが電話番号および E メールアドレスを確認した後、電話番号および E メールアドレスのみ
がユーザーのアクティブエイリアスになります。エイリアスとしてこれらを使用する場合は、E メー
ルアドレスと電話番号の自動確認を選択することをお勧めします。
ユーザーがサインアップするときに、E メールアドレスおよび電話番号の属性のUsernameExistsException エラーを防ぐために、エイリアス属性を選択します。
preferred_username 属性をアクティブにして、username 属性値が変更されていないときに、ユーザーがサインインに使用するユーザー名を変更できるようにします。このユーザーエクスペリ
エンスをセットアップする場合は、新しい username 値を preferred_username として送信し、エイリアスとして preferred_username を選択します。こうすることで、ユーザーは入力した新
しい値でサインインできます。preferred_username がエイリアスとして選択された場合、ユー
属性

759

Amazon Cognito

開発者ガイドザーはアカウントが確認されている場合にのみ、値を指定できます。登録時にはこの値は指定できません。
ユーザーがユーザー名を使用してサインアップする場合、ユーザーが次の 1 つ以上のエイリアスを使用してサインインできるかどうかを選択できます。
• 検証済みの E メールアドレス• 検証済みの電話番号• 優先ユーザー名
これらのエイリアスはユーザーがサインアップした後に変更できます。
Important
ユーザープールがエイリアスによるサインインをサポートしている場合、ユーザーを認証または検索するときに、サインイン属性のいずれかを使用してユーザーを特定することは避けてください。固定値のユーザー識別子 sub は、ユーザーのアイデンティティを示す唯一の一貫した指標です。

エイリアスを使用してサインインできるように、ユーザープールを作成する場合は、次の手順を含めます。
ユーザーが優先ユーザー名でサインインできるようにユーザープールを設定するには
1.

AWS Management Consoleの Amazon Cognito に移動します。コンソールからプロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

3.

ページの右上隅にある [Create a user pool] (ユーザープールを作成する) を選択して、ユーザープール作成のウィザードを開始します。

4.

[Configure sign-in experience] (サインインエクスペリエンスを構成する) で、ユーザープールに関連付けるアイデンティティの [Provider types] (プロバイダーのタイプ) を選択します。

5.

[Cognito user pool sign-in options] (Cognito ユーザープールのサインインオプション) で、[Username] (ユーザー名)、[Email] (E メール)、および [Phone number] (電話番号) のお好きな組み合
わせを選択します。

6.

[ユーザー名の要件] で、[優先ユーザー名を使用したサインインを許可する] を選択して、ユーザーがサインイン時に代替ユーザー名を設定できるようにします。

属性

760

Amazon Cognito

7.

開発者ガイド[Next] (次へ) をクリックし、ウィザードのすべての手順を完了します。

オプション 2: サインイン属性 (ユーザー名属性) としての E メールアドレスまたは電話番号
ユーザー名として E メールアドレスまたは電話番号でユーザーがサインアップする場合、E メール
アドレスのみ、電話番号のみ、またはいずれか一方でもサインアップできるようにするかを選択することができます。
ユーザー名属性を選択するには、ユーザープールを作成するときに、サインインオプションとして[ユーザー名] を選択しないでください。
E メールまたは電話番号は一意である必要があり、別のユーザーによって既に使用されていてはな
りません。これを検証する必要はありません。ユーザーが E メールアドレスまたは電話番号を使用
してサインアップした後、ユーザーは同じ E メールアドレスまたは電話番号を使用して新しいアカウントを作成することはできません。ユーザーは既存のアカウントを (必要に応じてパスワードをリセットして) 再利用できるだけです。ただし、ユーザーは E メールアドレスまたは電話番号を新しい
E メールアドレスまたは電話番号に変更できます。E メールアドレスまたは電話番号が既に使用中ではない場合は、それが新しいユーザー名となります。
Note
ユーザーが E メールアドレスをユーザー名として使用してサインアップした場合、ユーザー
名を別の E メールアドレスに変更できますが、電話番号に変更することはできません。電話番号でサインアップする場合は、ユーザー名を別の電話番号を変更できますが、E メールア
ドレスに変更することはできません。

次のステップを使用して、ユーザープール作成のプロセス中に、E メールアドレスまたは電話番号を使用したサインアップおよびサインインをセットアップします。
E メールアドレスまたは電話番号を使用したサインアップとサインインをユーザープールで設定するには
1.

AWS Management Consoleの Amazon Cognito に移動します。コンソールからプロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

3.

ページの右上隅にある [Create a user pool] (ユーザープールを作成する) を選択して、ユーザープール作成のウィザードを開始します。

属性

761

Amazon Cognito

4.

開発者ガイド[Cognito user pool sign-in options] (Cognito ユーザープールのサインインオプション) で、ユーザーがサインインに使用することを許可する属性を表す [Email] (E メール)、および [Phone
number] (電話番号) から任意の組み合わせを選択します。

5.

[Next] (次へ) をクリックし、ウィザードの残りのステップを完了します。

Note
E メールアドレスまたは電話番号をユーザープールの必須属性としてマークする必要はありません。

アプリケーションでオプション 2 を実装する
1.

を呼び出しCreateUserPoolAPIてユーザープールを作成します。UserNameAttributes パ
ラメータを phone_number、email、または phone_number | email に設定します。

2.

を呼び出しSignUpAPI、 の usernameパラメータに E メールアドレスまたは電話番号を渡しますAPI。これにより、次のAPIことが行われます。
• [username] 文字列が有効な E メールアドレス形式の場合、ユーザープールは自動的にユー
ザーの email 属性に username 値を入力します。
• [username] 文字列が有効な電話番号形式の場合、ユーザープールは自動的にユーザーのphone_number 属性に username 値を入力します。
• username 文字列形式が E メールアドレスまたは電話番号形式ではない場合、 は例
外SignUpAPIを返します。
• はユーザーの永続的な SignUpAPIを生成し、内部的にイミュータブルなユーザー名属性として使用UUIDします。これは、ユーザー ID トークンの subクレームと同じ値UUIDです。
• username 文字列に既に使用されている E メールアドレスまたは電話番号が含まれている場
合、 は例外SignUpAPIを返します。

APIs を除くすべての で、ユーザー名の代わりに E メールアドレスまたは電話番号をエイリアスとして使用できますListUsersAPI。ListUsers を呼び出すと、email または phone_number 属性で検索できます。username で検索する場合は、エイリアスではなく、実際のユーザー名を指定する必要があります。

属性762

Amazon Cognito

開発者ガイドカスタム属性
ユーザープールには、カスタム属性を最大 50 まで追加できます。カスタム属性の最小長または最大長を指定できます。ただし、すべてのカスタム属性の最大長は 2048 文字以下にする必要があります。
各カスタム属性には以下の特徴があります。
• 文字列または数値として定義できます。Amazon Cognito は ID トークンにカスタム属性値を文字列としてのみ書き込みます。
• ユーザーが属性の値を提供することを要求することはできません。
• ユーザープールに追加した後で、削除または変更することはできません。
• 属性名の文字長は、Amazon Cognito が受け入れる制限内です。詳細については、「Amazon
Cognito のクォータ」を参照してください。
• 変更可能またはイミュータブルとすることができます。ユーザーを作成するときに、イミュータ
ブル属性に値を書き込むことができます。アプリクライアントがその属性に対する書き込み権限を持っている場合、変更可能な属性の値を変更できます。詳細については、「属性の権限と範囲」を参照してください。

Note
コードおよび ロールベースアクセスコントロールの使用 のルールの設定で、カスタム属性
は標準属性と区別するために、custom: プレフィックスを必要とします。

ユーザープールを作成するときに、 の SchemaAttributesプロパティにデベロッパー属性を追加することもできますCreateUserPool。開発者属性には dev: プレフィックスがあります。ユー
ザーのデベロッパー属性は、 AWS 認証情報でのみ変更できます。開発者属性はレガシー機能であり、Amazon Cognito がアプリケーションクライアントの読み取り/書き込み権限と置き換えました。
以下の手順を使用して、新しくカスタム属性を作成します。
コンソールを使用してカスタム属性を追加する
1.

の Amazon Cognito に移動します AWS Management Console。コンソールからプロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

属性

763

Amazon Cognito

開発者ガイド3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Sign-up experience] (サインアップエクスペリエンス) タブをクリックして、[Custom attributes](カスタム属性) セクションで、[Add custom attributes] (カスタム属性を追加する) を選択します。

5.

[Add custom attributes] (カスタム属性を追加する) のページで、新しい属性に関する以下の詳細情報を入力します。
• 名前を入力します。
• [Type] (タイプ) (文字列または数値) を選択します。
• 最小文字列の長さまたは数値を入力します。
• 最大文字列の長さまたは数値を入力します。
• ユーザーが初期値を設定した後で、カスタム属性の値を変更する権限をユーザーに付与する場
合は、[Mutable] (変更可能) を選択します。

6.

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

属性の権限と範囲
各アプリクライアントで、各ユーザー属性に読み取りと書き込み権限を設定できます。これにより、
ユーザー用に保存する各属性の読み取りおよび変更に必要なアプリによるアクセスを制御できます。
例えば、ユーザーが有料サービスを利用しているお客様であるかどうかを示すカスタム属性があるとします。アプリでこの属性は表示できますが、直接変更することはできません。代わりに、管理ツー
ルまたはバックグラウンドプロセスを使用してこの属性を更新します。ユーザー属性のアクセス許可は、Amazon Cognito コンソール、Amazon Cognito API、または から設定できます AWS CLI。デフォルトでは、新しいカスタム属性を利用する前に、読み取り/書き込みの許可を設定する必要があります。デフォルトでは、新しいアプリケーションクライアントを作成するときに、すべての標準属性とカスタム属性に対する読み取りおよび書き込みアクセス許可をアプリケーションに付与します。
アプリケーションが必要とする情報量のみに制限するには、アプリケーションクライアント設定の属性に特定のアクセス権限を割り当てます。
ベストプラクティスとして、アプリケーションクライアントを作成するときに属性の読み取りおよび書き込みアクセス許可を指定します。アプリケーションのオペレーションに必要な最小限のユーザー
属性セットへのアクセス権をアプリケーションクライアントに付与します。

属性

764

Amazon Cognito

開発者ガイドNote
DescribeUserPoolClient は、デフォルト以外のアプリケーションクライアントのアクセス許可を設定するWriteAttributes場合にのみ、 ReadAttributesと の値を返します。

属性権限を更新するには (AWS Management Console)
1.

の Amazon Cognito に移動します AWS Management Console。コンソールからプロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

3.

リストから既存するユーザープールを 1 つ選択します。

4.

[App integration] (アプリケーションの統合) タブ、[App clients] (アプリケーションクライアント)
セクションで、リストからアプリケーションクライアントを選択します。

5.

[Attribute read and write permissions] (属性の読み込みおよび書き込みアクセス許可) セクション
で、[Edit] (編集) を選択します。

6.

[Edit attribute read and write permissions] (属性の読み込みおよび書き込みアクセス権限を編集)ページで、読み取りおよび書き込み権限を設定し、[Save changes] (変更の保存) を選択します。

カスタム属性を使用して、アプリクライアントごとに以上の手順を繰り返します。
アプリケーションクライアントごとに、属性を読み取り可能または書き込み可能としてマークできます。これは、標準属性とカスタム属性の両方に当てはまります。アプリは、読み取り可能としてマークした属性の値を取得したり、書き込み可能としてマークした属性の値を設定または変更したりできます。書き込み権限のない属性の値をアプリが設定しようとすると、Amazon Cognito
が NotAuthorizedException を返します。GetUser リクエストには、アプリケーションクライ
アントクレームを含むアクセストークンが含まれます。Amazon Cognito は、アプリケーションクラ
イアントが読み取ることができる属性の値のみを返します。アプリからのユーザーの ID トークンには、読み取り可能な属性に対応するクレームのみが含まれます。すべてのアプリケーションクライアントは、ユーザープールの必須属性を書き込むことができます。Amazon Cognito ユーザープール
APIリクエストで属性の値を設定できるのは、まだ値を持たない必須属性の値も指定する場合のみです。
カスタム属性の読み取り書き込みアクセス許可にはそれぞれ異なる機能があります。ユーザープールの変更可能な属性または変更不可能な属性として作成でき、どのアプリクライアントでも読み取りまたは書き込み属性として設定できます。
属性765

Amazon Cognito

開発者ガイド変更不可能なカスタム属性は、ユーザー作成時に 1 回だけ更新できます。変更不可能な属性には以下のメソッドを入力できます。
• SignUp: ユーザーは、変更不可能なカスタム属性への書き込みアクセス許可を持つアプリクライ
アントにサインアップします。その属性の値を提供します。
• サードパーティ IdP でのサインイン: ユーザーは、変更不可能なカスタム属性への書き込みアクセス許可を持つアプリクライアントにサインインします。IdP のユーザープール設定には、提供されたクレームを変更不可能な属性にマップするルールがあります。
• AdminCreateUser: 変更不可能な属性の値を指定します。
スコープを使用した属性アクセス許可
または CDK、、RESTAPIまたは で AWS SDK設定したユーザープールでは AWS CLI、OIDCス
コープ を使用してアプリケーションクライアントの読み取りまたは書き込みアクセスを設定できますoidc:profile。は、次の標準属性への読み取りまたは書き込みアクセスoidc:profileを許可します。
• name• family_name• given_name• middle_name• nickname• preferred_username• profile• picture• website• gender• birthdate• zoneinfo• locale
このリストはemail、仕様 のセクション 2.4 で定義されている標準OIDC属性から phone_number
subaddress、、、および を引いたものです。 OIDC アプリケーションクライアントに割り当てる
属性766

Amazon Cognito

開発者ガイドことができるスコープについては、「スコープ、M2M 、リソースサーバーによるAPI認可」を参照
してください。
oidc:profile スコープの属性に書き込むようにアプリケーションクライアントを設定するには、 の値を に設定します。さらにoidc:profile、 CreateUserPoolClientまたは WriteAttributes
UpdateUserPoolClientAPIリクエストでアプリケーションの変更を許可するその他の属性も設定します。同様に、これらの属性への読み取りアクセスを許可するには、 を の値oidc:profileに追加しますReadAttributes。
ユーザープールを作成した後、属性の権限と範囲を変更できます。

ユーザープールのパスワードの追加要件
強力で複雑なパスワードは、ユーザープールのセキュリティのベストプラクティスです。特にインターネットに公開されているアプリケーションでは、パスワードが弱いと、ユーザーの認証情報がパスワードを推測してデータにアクセスしようとするシステムに公開される可能性があります。
パスワードが複雑なほど、推測が困難になります。Amazon Cognito には、高度なセキュリティ機
能やAWS WAF ウェブ ACLsなど、セキュリティを重視する管理者向けの追加のツールがあります
が、パスワードポリシーはユーザーディレクトリのセキュリティの中心的な要素です。
Amazon Cognito ユーザープールのローカルユーザーのパスワードは、自動的に期限切れになることはありません。ベストプラクティスとして、ユーザーパスワードのリセットの時刻、日付、メタデー
タを外部システムに記録します。パスワードの有効期間の外部ログを使用すると、アプリケーション
または Lambda トリガーはユーザーのパスワードの有効期間を検索し、特定の期間後にリセットを要求できます。
セキュリティ標準に準拠したパスワードの複雑さを最小限に抑えるようにユーザープールを設定できます。複雑なパスワードの長さは 8 文字以上です。また、大文字、数字、特殊文字が混在しています。
高度なセキュリティ機能を使用すると、パスワードの再利用ポリシーを設定することもできます。
ユーザーが現在のパスワードまたは最大 23 個の追加前のパスワードのいずれかに一致する新しいパスワードにパスワードをリセットできないように、合計で最大 24 個まで設定できます。
ユーザープールのパスワードポリシーを設定するには
1.

ユーザープールを作成して [セキュリティ要件を設定] ステップに移動するか、既存のユーザー
プールにアクセスして [サインインエクスペリエンス] タブに移動します。

2.

[パスワードポリシー] に移動します。

パスワードの要件

767

Amazon Cognito

3.

開発者ガイド[パスワードポリシーモード] を選択します。[Cognito のデフォルト] では、推奨最小設定でユー
ザープールを設定します。[カスタム] パスワードポリシーを選択することもできます。

4.

[パスワードの最小文字数] を設定します。すべてのユーザーは、この値以上の長さのパスワー
ドでサインアップまたは作成する必要があります。この最小値は 99 まで設定できますが、ユー
ザーは最大 256 文字のパスワードを設定できます。

5.

[パスワードの要件] でパスワードの複雑さのルールを設定します。各ユーザーのパスワードで少なくとも 1 つは必須とする文字タイプ (数字、特殊文字、大文字、小文字) を選択します。
パスワードには、次の文字のうち少なくとも 1 つを要求できます。Amazon Cognito がパスワー
ドに最低限必要な文字が含まれていることを確認した後、ユーザーのパスワードには、パスワー
ドの最大長まで任意のタイプの追加の文字を含めることができます。
• 大文字と小文字の基本的なラテン文字• 数字• 以下の特殊文字。
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ ` = + -• 先頭でも末尾にもない空白文字。
6.

[管理者が設定した一時パスワードの有効期限] に値を設定します。この期間が過ぎると、Amazon Cognito コンソールまたは AdminCreateUser で作成した新しいユーザーは、
サインインして新しいパスワードを設定できなくなります。一時パスワードでサインインすると、ユーザーアカウントが期限切れになることはありません。Amazon Cognito ユーザープー
ル のパスワード期間を更新するにはAPI、 CreateUserPoolまたは UpdateUserPoolAPIリクエス
トTemporaryPasswordValidityDays で の値を設定します。

7.

可能な場合は、以前のパスワードの使用を禁止する の値を設定します。この機能を使用するには、ユーザープールで高度なセキュリティ機能を有効にします。このパラメータの値は、ユー
ザーがパスワードをリセットしたときに新しいパスワードが一致しなくなる以前のパスワードの数です。

期限切れのユーザーアカウントのアクセスをリセットするには、次のいずれかを実行します。
• ユーザープロファイルを削除し、新しいものを作成します。
• AdminSetUserPassword API リクエストで新しい永続パスワードを設定します。
• AdminResetUserPassword API リクエストで新しい確認コードを生成します。
パスワードの要件

768

Amazon Cognito

開発者ガイドAmazon Cognito ユーザープールの E メール設定
アプリケーション内の特定のイベントにより、Amazon Cognito がユーザーに E メールを送信する可能性があります。例えば、E メールの検証を必須とするようにユーザープールを設定している場合、ユーザーがアプリの新しいアカウントにサインアップする、またはパスワードをリセットする場合にAmazon Cognito が E メールを送信します。E メールを開始するアクションに応じて、検証コードまたは仮パスワードが含まれます。
E メール配信を処理するには、次のいずれかのオプションを使用できます。
• Amazon Cognito サービスに組み込まれているデフォルトの E メール設定。
• Amazon Simple Email Service (Amazon SES) の設定 。
ユーザープールを作成した後に、配信オプションを変更できます。
Amazon Cognito は、ユーザーが入力できるコードまたは選択できるURLリンクを使用して E メール
メッセージをユーザーに送信します。次の表は、E メールメッセージを生成できるイベントを示しています。
メッセージオプション
アクティビ
ティ

API オペレー
ション

配信オプ
ション

形式オプ
ション

カスタマイ
ズ可能

メッセージ
テンプレー
ト

パスワード
を忘れてし
まった

ForgotPassword,
AdminResetUserPassword

E メール、
SMS

コード

なし

該当なし

招待

AdminCreateUserE メール、
SMS

コード

あり

招待メッ
セージ

自己登録

SignUp,ResendCon
firmationCode

E メール、
SMS

コード、リ
ンク

あり

検証メッ
セージ

E メールアドレスまたUpdateUserAttributes,

E メール、
SMS

コード

あり

検証メッ
セージ

E メール設定

769

Amazon Cognito

開発者ガイドアクティビ
ティ

API オペレー
ション

は電話番号
の検証

AdminUpda
teUserAttributes,
GetUserAt
tributeVerificatio
nCode

配信オプ
ション

形式オプ
ション

カスタマイ
ズ可能

メッセージ
テンプレー
ト

Amazon は E メールメッセージに対してSES料金を請求します。詳細については、「Amazon のSES料金」を参照してください。

デフォルトの E メール設定
Amazon Cognito は、デフォルトの E メール設定を使用して E メール配信を処理できます。デフォ
ルトのオプションを使用すると、Amazon Cognito は、ユーザープールに毎日送信するメールの数を制限します。サービスの制限に関する詳細については、「Amazon Cognito のクォータ」を参照
してください。一般的な実稼働環境では、デフォルトの E メール制限は必要な配信ボリュームを下回っています。より高い配信ボリュームを有効にするには、Amazon SES E メール設定を使用できます。
デフォルト設定を使用する場合は、 によって AWS 管理される Amazon SESリソースを使用して E
メールメッセージを送信します。Amazon は、アカウントレベルのサプレッションリスト またはグローバルサプレッションリスト にハードバウンスを返す E メールアドレスSESを追加します。配信
不能な E メールアドレスが後で配信可能になった場合、ユーザープールがデフォルト設定を使用するように設定されている場合、サプレッションリストからの削除を制御することはできません。E
メールアドレスは、 AWSマネージドサプレッションリストに無期限に残すことができます。配信不能な E メールアドレスを管理するには、次のセクションで説明するように、アカウントレベルのサ
プレッションリストで Amazon SES E メール設定を使用します。
デフォルトの E メール設定を使用する場合、次のいずれかの E メールアドレスをFROMアドレスとして使用できます。
• デフォルトの E メールアドレス (no-reply@verificationemail.com)。
• カスタム E メールアドレス。独自の E メールアドレスを使用する前に、Amazon で検証SESし、
このアドレスを使用するアクセス許可を Amazon Cognito に付与する必要があります。
デフォルトの E メール設定

770

Amazon Cognito

開発者ガイドAmazon SES E メール設定
アプリケーションは、デフォルトのオプションで利用できるよりも大きいボリュームを必要とする可能性があります。可能な配信量を増やすには、ユーザープールで Amazon SESリソースを使用してユーザーに E メールを送信します。独自の Amazon SES設定で E メールメッセージを送信するときに、E メール送信アクティビティをモニタリングすることもできます。
Amazon SES設定を使用する前に、Amazon で 1 つ以上の E メールアドレスまたはドメインを検証する必要がありますSES。検証済み E メールアドレス、または検証済みドメインのアドレスを、
ユーザープールに割り当てる FROM E メールアドレスとして使用します。Amazon Cognito がユー
ザーに E メールを送信すると、Amazon SES を呼び出し、E メールアドレスを使用します。
Amazon SES設定を使用する場合、次の条件が適用されます。
• ユーザープールの E メール配信制限は、 の Amazon SES検証済み E メールアドレスに適用される制限と同じです AWS アカウント。
• グローバルサプレッションリスト を上書きSESする Amazon のアカウントレベルのサプレッショ
ンリストを使用して、配信不能な E メールアドレスへのメッセージを管理できます。アカウント
レベルのサプレッションリストを使用すると、E メールメッセージのバウンスが送信者としてのアカウントの評価に影響します。詳細については、Amazon Simple Email Service デベロッパーガイ
ドの「Amazon SESアカウントレベルのサプレッションリストの使用」を参照してください。

Amazon SES E メール設定リージョン
ユーザープール AWS リージョン を作成する には、Amazon での E メールメッセージの設定に関す
る 3 つの要件のいずれかがありますSES。ユーザープールと同じリージョン、同じリージョンを含む複数のリージョン、または 1 つ以上のリモートリージョンSESの Amazon から E メールメッセー
ジを送信できます。最高のパフォーマンスを得るには、 オプションがある場合は、ユーザープールと同じリージョンで Amazon SES 検証済み ID を使用して E メールメッセージを送信します。
Amazon SES検証済み ID のリージョン要件のカテゴリ
リージョン内のみ
ユーザープールは、ユーザープール AWS リージョン と同じ で検証済み ID を含む E メールメッ
セージを送信できます。カスタム E メールアドレスを使用しないデフォルトの FROM E メール設
定では、Amazon Cognito は同じリージョンでno-reply@verificationemail.com検証済み
ID を使用します。
Amazon SES E メール設定

771

Amazon Cognito

開発者ガイド下位互換性
ユーザープールは、同じリージョン AWS リージョン または次のいずれかの代替リージョンで、検証済み ID を含む E メールメッセージを送信できます。
• 米国東部 (バージニア北部)• 米国西部 (オレゴン)• 欧州 (アイルランド)
この機能は、サービスの起動時に Amazon Cognito の要件に合わせて作成したユーザープールリ
ソースの継続性をサポートします。その期間のユーザープールは、限られた数の で検証済み IDを持つ E メールメッセージのみを送信できました AWS リージョン。カスタム E メールアドレスを使用しないデフォルトの FROM E メール設定では、Amazon Cognito は同じリージョンでnoreply@verificationemail.com検証済み ID を使用します。
代替リージョン
ユーザープールは、ユーザープールリージョン外の代替 で、検証 AWS リージョン 済み ID を含む E メールメッセージを送信できます。この設定はSES、Amazon Cognito が利用可能なリージョンで Amazon が利用できない場合に発生します。
代替リージョンで検証済み ID の Amazon SES送信承認ポリシーは、発信元リージョンのAmazon Cognito サービスプリンシパルを信頼する必要があります。詳細については、「デフォルトの E メール設定を使用するアクセス許可を付与するには」を参照してください。
これらのリージョンの一部では、Amazon Cognito は のデフォルトの E メール設定のために E
メールメッセージを 2 つの代替リージョンに分割しますCOGNITO_DEFAULT。このような場合、
カスタム FROM E メールアドレスを使用するには、各代替リージョンで検証済み ID の Amazon
SES送信承認ポリシーが、発信元のリージョンの Amazon Cognito サービスプリンシパルを信頼する必要があります。詳細については、「デフォルトの E メール設定を使用するアクセス許可を付与するには」を参照してください。これらのリージョンDEVELOPERの の Amazon E SES
メール設定では、最初にリストされたリージョンで検証済み ID を使用し、ユーザープールリー
ジョンの Amazon Cognito サービスプリンシパルを信頼するように設定する必要があります。
例えば、中東 (UAE) のユーザープールで、 を信頼するように欧州 (フランクフルト) で検証済み
ID を設定しますcognito-idp.me-central-1.amazonaws.com。カスタム E メールアドレスを使用しないデフォルトの FROM E メール設定では、Amazon Cognito は各リージョンでnoreply@verificationemail.com検証済み ID を使用します。

Amazon SES E メール設定

772

Amazon Cognito

開発者ガイドNote
以下の条件の組み合わせでは、リージョン要素でワイルドカードEmailConfigurationを使用して の SourceArnパラメータを 形式で指定する必要がありま
すarn:${Partition}:ses:*:${Account}:identity/${IdentityName}。これにより、ユーザープールは、両方の の で同じ検証済み ID AWS アカウント の E メールメッセー
ジを送信できます AWS リージョン。
• は EmailSendingAccount ですCOGNITO_DEFAULT。
• カスタムFROMアドレスを使用します。
• ユーザープールは代替リージョン で E メールを送信します。
• ユーザープールには、次の Amazon がサポートするリージョンの表で指定されている 21番目の代替リージョンがあります。 SESを使用してプログラムでユーザープールを作成する場合 AWS SDK、Amazon Cognito APIまたはCLI、、または AWS CloudFormation– ユーザープールは AWS CDK、 の SourceArnパラメータ
でユーザープールにEmailConfiguration指定されている Amazon SES ID を含む E メールメッセー
ジを送信します。Amazon ID は、サポートされている を占有SESする必要があります AWS リー
ジョン。EmailSendingAccount が COGNITO_DEFAULT で SourceArn パラメータを指定しない場合、Amazon Cognito はユーザープールを作成したリージョン内のリソースを使用して noreply@verificationemail.com から E メールメッセージを送信します。
次の表は、Amazon Cognito SES で Amazon ID AWS リージョン を使用できる を示しています。
Amazon Cognito
ユーザープールリージョン

リージョンオプション

Amazon がSESサポートする
リージョン

米国東部 (バージニア北部)

下位互換性

米国東部 (バージニア北部)、
米国西部 (オレゴン)、欧州 (アイルランド)

米国東部（オハイオ)

下位互換性

米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルラ
ンド)

Amazon SES E メール設定

773

Amazon Cognito

開発者ガイドユーザープールリージョン

リージョンオプション

Amazon がSESサポートする
リージョン

米国西部 (北カリフォルニア)リージョン内のみ

米国西部 (北カリフォルニア)米国西部 (オレゴン)

下位互換性

米国東部 (バージニア北部)、
米国西部 (オレゴン)、欧州 (アイルランド)

カナダ (中部)

下位互換性

カナダ (中部)、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルランド)

カナダ西部 (カルガリー)

代替リージョン

カナダ (中部）、米国西部 (北1カリフォルニア）
アジアパシフィック (東京)

下位互換性

アジアパシフィック (東京)、
米国東部 (バージニア北部)、
米国西部 (オレゴン)、欧州 (アイルランド)

アジアパシフィック (香港)

代替リージョン

アジアパシフィック (シンガポール）、アジアパシフィッ
1

ク (東京）
アジアパシフィック (ソウル)

下位互換性

アジアパシフィック (ソウル)、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルランド)

アジアパシフィック (ムンバ
イ)

下位互換性

アジアパシフィック (ムンバイ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルランド)

アジアパシフィック (ハイデラバード)

代替リージョン

アジアパシフィック (ムンバイ）、アジアパシフィック (シ1ンガポール）

Amazon SES E メール設定

774

Amazon Cognito

開発者ガイドユーザープールリージョン

リージョンオプション

Amazon がSESサポートする
リージョン

アジアパシフィック (シンガ
ポール)

下位互換性

アジアパシフィック (シンガポール)、米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (アイルランド)

アジアパシフィック (シド
ニー)

下位互換性

アジアパシフィック (シドニー)、米国東部 (バージニア北部)、米国西部 (オレゴン)、
欧州 (アイルランド)

アジアパシフィック (大阪)

リージョン内のみ

アジアパシフィック (大阪)

アジアパシフィック (ジャカルタ)リージョン内のみ

アジアパシフィック (ジャカルタ)

アジアパシフィック (メルボルン)

代替リージョン

アジアパシフィック (シドニー）、アジアパシフィック(シンガポール）

1

欧州 (アイルランド)

下位互換性

米国東部 (バージニア北部)、
米国西部 (オレゴン)、欧州 (アイルランド)

欧州 (ロンドン)

下位互換性

欧州 (ロンドン)、米国東部(バージニア北部)、米国西部(オレゴン)、欧州 (アイルランド)

欧州 (パリ)リージョン内のみ

欧州 (パリ)

欧州 (フランクフルト)

下位互換性

欧州 (フランクフルト)、米国
東部 (バージニア北部)、米国
西部 (オレゴン)、欧州 (アイルランド)

Amazon SES E メール設定

775

Amazon Cognito

開発者ガイドユーザープールリージョン

リージョンオプション

Amazon がSESサポートする
リージョン

欧州 (チューリッヒ)

代替リージョン

欧州 (フランクフルト）、欧州
1(ロンドン）
欧州 (ストックホルム)

リージョン内のみ

欧州 (ストックホルム)

欧州 (ミラノ)

リージョン内のみ

欧州 (ミラノ)

欧州 (スペイン)

代替リージョン

欧州 (パリ）、欧州 (ストック1ホルム）
中東 (バーレーン)

リージョン内のみ

中東 (バーレーン)

中東 (UAE）

代替リージョン

欧州 (フランクフルト）、欧州
1(ロンドン）
南米 (サンパウロ)

リージョン内のみ

南米 (サンパウロ)

イスラエル (テルアビブ)

リージョン内のみ

イスラエル (テルアビブ)

アフリカ (ケープタウン)

リージョン内のみ

アフリカ (ケープタウン)

1

デフォルトの E メール設定のユーザープールで使用されます。Amazon Cognito は、各リージョン

で同じ E メールアドレスを持つ検証済み ID に E メールメッセージを配信します。カスタムFROMア
ドレスを使用するには、 形式の SourceArn パラメータEmailConfigurationを使用して を設定しますarn:${Partition}:ses:*:${Account}:identity/${IdentityName}。

ユーザープールの E メールの設定
ユーザープールの E メール設定を指定するには、以下のステップを完了します。使用する設定
によっては、Amazon 、 AWS Identity and Access Management （IAM）SES、および Amazon
Cognito でIAMアクセス許可が必要になる場合があります。
Note
これらのステップで作成したリソースを AWS アカウント間で共有することはできません。
例えば、あるアカウントでユーザープールを設定し、別のアカウントの Amazon SES E メー
E メールアカウントの設定

776

Amazon Cognito

開発者ガイドルアドレスで使用することはできません。複数のアカウントで Amazon Cognito を使用する
場合は、それぞれのアカウントでこれらのステップを繰り返すようにしてください。

ステップ 1: Amazon で E メールアドレスまたはドメインを検証する SES
ユーザープールを設定する前に、次のいずれかを実行するSES場合は、Amazon で 1 つ以上のドメインまたは E メールアドレスを検証する必要があります。
• 自分の E メールアドレスをFROMアドレスとして使用する• Amazon SES設定を使用して E メール配信を処理する
E メールアドレスを検証することにより、そのアドレスを所有していることを確認する (不正使用の防止に役立ちます)
Amazon で E メールアドレスを検証する方法についてはSES、Amazon Simple Email Service デベ
ロッパーガイドの「E メールアドレスの検証」を参照してください。Amazon でドメインを検証する
方法についてはSES、「ドメインの検証」を参照してください。

ステップ 2: Amazon SESサンドボックスからアカウントを移動する
デフォルトの Amazon Cognito E メール設定を使用している場合は、このステップを省略します。
SES で初めて Amazon を使用すると AWS リージョン、 はそのリージョン AWS アカウント のAmazon SESサンドボックスに配置されます。Amazon SES はサンドボックスを使用して、不正使
用や不正使用を防止します。Amazon SES設定を使用して E メール配信を処理する場合は、Amazon
Cognito がユーザーに E メールを送信する前に、サンドボックス AWS アカウント から を移動する必要があります。
サンドボックスでは、Amazon は送信できる E メールの数と送信先に制限をSES課します。E メー
ルは、Amazon で検証したアドレスとドメインにのみ送信することもSES、Amazon SESメール
ボックスシミュレーターアドレスに送信することもできます。がサンドボックスに AWS アカウント残っている間は、本番環境のアプリケーションに Amazon SES設定を使用しないでください。この状況では、Amazon Cognito がユーザーの E メールアドレスにメッセージを送信することができません。
サンドボックス AWS アカウント から を削除するには、「Amazon Simple Email Service デベロッ
パーガイド」の「Amazon SESサンドボックス外への移動」を参照してください。
E メールアカウントの設定

777

Amazon Cognito

開発者ガイドステップ 3: Amazon Cognito に E メール許可を付与する
Amazon Cognito がユーザーに E メールを送信する前に、特定の許可を Amazon Cognito に付与する必要がある場合があります。付与するアクセス許可と付与に使用するプロセスは、デフォルトの E
メール設定を使用しているか、Amazon SES設定を使用しているかによって異なります。
デフォルトの E メール設定を使用するアクセス許可を付与するにはこのステップは、Cognito で E メールを送信するようにユーザープールを設定するか、
EmailSendingAccountを に設定する場合にのみ実行しますCOGNITO_DEFAULT。
デフォルトの E メール設定では、ユーザープールは次のいずれかのアドレスで E メールメッセージを送信できます。
• デフォルトのアドレス no-reply@verificationemail.com。
• Amazon で検証済みの E FROMメールアドレスまたはドメインからのカスタムアドレスSES。
カスタムアドレスを使用している場合、Amazon Cognito には、そのアドレスからユーザーに E メー
ルを送信するための追加のアクセス許可が必要です。これらのアクセス許可は、Amazon のアドレスまたはドメインの送信承認ポリシーによって付与されますSES。Amazon Cognito コンソールを使用してユーザープールにカスタムアドレスを追加すると、ポリシーは Amazon SES検証済み E
メールアドレスに自動的にアタッチされます。ただし、 AWS CLI や Amazon Cognito を使用するなど、コンソールの外部でユーザープールを設定する場合はAPI、Amazon SESコンソールまたはPutIdentityPolicy を使用してポリシーをアタッチする必要がありますAPI。
Note
FROM アドレスは、 AWS CLI または Amazon Cognito を使用してのみ、検証済みドメインで設定できますAPI。

送信承認ポリシーは、Amazon Cognito を使用して Amazon を呼び出すアカウントリソースに基づ
いてアクセスを許可または拒否しますSES。リソースベースのポリシーの詳細については、「 IAM
ユーザーガイド」を参照してください。リソースベースのポリシーの例は、Amazon SESデベロッ
パーガイド でも確認できます。

E メールアカウントの設定

778

Amazon Cognito

開発者ガイド

Example 送信承認ポリシー
次の送信承認ポリシーの例では、Amazon Cognito に Amazon SES検証済み ID を使用する制限付き機能を付与します。Amazon Cognito は、条件 aws:SourceArn のユーザープールと条件
aws:SourceAccount のアカウントの両方に代わって送信する場合にのみ、E メールメッセージを送信できます。
Regions with Amazon SES
ユーザープールリージョンまたは代替リージョンの送信承認ポリシーでは、Amazon Cognito
サービスプリンシパルが E メールメッセージを送信することを許可する必要があります。詳細については、リージョン表を参照してください。ユーザープールリージョン が Amazon SESリー
ジョン で少なくとも 1 つの値と一致する場合は、次の例で グローバルサービスプリンシパルを使用して送信承認ポリシーを設定します。
{"Version": "2012-10-17","Statement": [{"Sid": "stmnt1234567891234","Effect": "Allow","Principal": {"Service": ["email.cognito-idp.amazonaws.com"]},"Action": ["SES:SendEmail","SES:SendRawEmail"],"Resource": "<your SES identity ARN>","Condition": {"StringEquals": {"aws:SourceAccount": "<your account number>"},"ArnLike": {"aws:SourceArn": "<your user pool ARN>"
}
}
}
]
}

E メールアカウントの設定

779

Amazon Cognito

開発者ガイドOpt-in Regions without Amazon SES
Amazon SES Cognito AWS リージョン が利用可能なすべてのオプトインで Amazon を利用できるわけではありません。 Amazon Cognito 中東 (UAE) は一例であり、 は欧州 (フランクフルト) ()で検証済みの ID を持つ E メールのみを送信できますeu-central-1。デフォルトの E メール設定を持つユーザープールでは、Amazon Cognito は 2 つのリージョンのそれぞれで検証済み ID を含む E メールメッセージも送信します。中東 (UAE) の場合、追加のリージョンは欧州 (ロンドン)です。両方のリージョンの送信承認ポリシーを更新する必要があります。
各代替リージョンの送信承認ポリシーでは、ユーザープールオプトインリージョンの Amazon
Cognito サービスプリンシパルが E メールメッセージを送信することを許可する必要があります。詳細については、リージョン表を参照してください。リージョンが代替リージョン としてマークされている場合は、次の例のように、リージョンサービスプリンシパルを使用して送信承認ポリシーを設定します。サンプルリージョン識別子を置き換える me-central-1 必要に応じて、必要なリージョン ID を入力します。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["cognito-idp.me-central-1.amazonaws.com"]},"Action": ["SES:SendEmail","SES:SendRawEmail"],"Resource": "<your SES identity ARN>","Condition": {"StringEquals": {"aws:SourceAccount": "<your account number>"},"ArnLike": {"aws:SourceArn": "<your user pool ARN>"}}}]

E メールアカウントの設定

780

Amazon Cognito

開発者ガイド}ポリシー構文の詳細については、「Amazon Simple Email Service デベロッパーガイド」の「Amazon SES送信承認ポリシー」を参照してください。
その他の例については、「Amazon Simple Email Service デベロッパーガイド」の「Amazon SES送信承認ポリシーの例」を参照してください。
Amazon SES設定を使用するアクセス許可を付与するにはAmazon SES設定を使用するようにユーザープールを設定する場合、Amazon Cognito はユーザーに
E メールを送信するときにユーザーSESに代わって Amazon を呼び出すための追加のアクセス許可が必要です。この認可は IAMサービスで付与されます。
このオプションを使用してユーザープールを設定すると、Amazon Cognito はサービスにリンクされたロール を作成します。これはロールの一種ですIAM AWS アカウント。このロールには、Amazon
Cognito が Amazon にアクセスしSES、お客様のアドレスで E メールを送信できるようにするアクセス許可が含まれています。
Amazon Cognito は、設定を設定するユーザーセッションの AWS 認証情報を使用して、サービスにリンクされたロールを作成します。このセッションのIAMアクセス許可には、
iam:CreateServiceLinkedRoleアクションが含まれている必要があります。のアクセス許可の詳細についてはIAM、「 ユーザーガイド」の「 AWS リソースのアクセス管理IAM」を参照してくだ
さい。
Amazon Cognito が作成するサービスリンクロールの詳細については、「Amazon Cognito のサービ
スリンクロールの使用」を参照してください。

ステップ 4: ユーザープールを設定する
以下のいずれかを使用してユーザープールを設定する場合は、次のステップを完了します。
• E メール送信者として表示されるカスタムFROMアドレス• ユーザーがアドレスに送信するメッセージを受信するカスタム REPLY-TO FROM アドレス
• Amazon SESの設定

E メールアカウントの設定

781

Amazon Cognito

開発者ガイドNote
検証済み ID が E メールアドレスの場合、Amazon Cognito はその E メールアドレスをデフォルトで FROMおよび REPLY-TO E メールアドレスとして設定します。ただし、検証済
み ID がドメインの場合は、 FROMおよび REPLY-TO E メールアドレスの値を指定する必要があります。例えば、検証済みドメインが example.com の場合、no-reply@example.com を
FROMと REPLY-TO の両方の E メールアドレスとして設定できます。

デフォルトの Amazon Cognito E メール設定とアドレスを使用する場合は、この手順を省略します。
カスタム E メールアドレスを使用するようにユーザープールを設定する方法
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Messaging] (メッセージング) タブを選択して、[Email configuration] (E メールの設定) を検索して、[Edit] (編集) をクリックします。

5.

E メール設定の編集ページで、Amazon から E SESメールを送信するか、Amazon Cognito で E
メールを送信を選択します。SES リージョン 、設定セット 、および送信者名は、Amazon から
E SESメールを送信 を選択した場合にのみカスタマイズできます。 FROM

6.

カスタムFROMアドレスを使用するには、次のステップを実行します。
a.

SES リージョン で、検証済みの E メールアドレスを含むリージョンを選択します。

b.

FROM E メールアドレス で、E メールアドレスを選択します。Amazon で検証した E メー
ルアドレスを使用しますSES。

c.

（オプション) 設定セット で、Amazon がSES使用する設定セットを選択します。この変更を行って保存すると、サービスにリンクされたロールが作成されます。

d.

（オプション) FROM 送信者アドレス で、E メールアドレスを入力します。E
メールアドレスだけ、または E メールアドレスと分かりやすい名前を Jane Doe<janedoe@example.com> 形式で指定できます。

e.
7.

（オプション) REPLY-TO E メールアドレス に、ユーザーがアドレスに送信するメッセー
ジを受信する E FROM メールアドレスを入力します。

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

E メールアカウントの設定

782

Amazon Cognito

開発者ガイド関連トピック• E メール検証メッセージのカスタマイズ• ユーザー招待メッセージのカスタマイズ

SMS Amazon Cognito ユーザープールのメッセージ設定
ユーザープールの Amazon Cognito イベントによっては、Amazon Cognito がユーザーにSMSテキ
ストメッセージを送信する可能性があります。例えば、電話による検証を要求するようにユーザープールを設定すると、ユーザーがアプリで新しいアカウントにサインアップしたり、パスワードをリセットしたりすると、Amazon Cognito からSMSテキストメッセージが送信されます。SMS テキス
トメッセージを開始するアクションに応じて、メッセージには検証コード、一時パスワード、または
ウェルカムメッセージが含まれます。
Amazon Cognito は、Amazon Simple Notification Service (Amazon SNS) を使用してSMSテキスト
メッセージを配信します。Amazon Cognito または Amazon 経由で初めてテキストメッセージを送信する場合SNS、Amazon はサンドボックス環境SNSに配置します。サンドボックス環境では、アプ
リケーションのSMSテキストメッセージをテストできます。サンドボックスでは、検証済みの電話番号にしかメッセージを送信できません。
Amazon では、SMSテキストメッセージのSNS料金が発生します。詳細については、「Amazon のSNS料金」を参照してください。
Note
SMS 世界中の未承諾トラフィックの量により、一部の政府はSMSメッセージの送信者と受信者の間に障壁を課しています。MFA およびユーザー更新にSMSメッセージを使用する場
合は、メッセージが確実に配信されるようにするための追加の手順を実行する必要があります。また、ユーザーが住んでいる可能性のある国の SMS-メッセージ関連の規制をモニタリングし、SMSメッセージ設定を最新の状態に保つ必要があります。詳細については、「Amazon Simple Notification Service デベロッパーガイド」の「モバイルテキストメッセー
ジ (SMS）」を参照してください。
ユーザーの認証と検証にSMSメッセージを使用することは、セキュリティのベストプラク
ティスではありません。電話番号によって所有者が変わる可能性があり、ユーザーMFAにとって重要な要素を確実に表すことができない場合があります。代わりに、アプリまたは
サードパーティーTOTPMFAの IdP を使用して を実装します。また、カスタム認証チャレン
ジの Lambda トリガー を使って、追加のカスタム認証要素を作成することもできます。

SMS メッセージ設定

783

Amazon Cognito

開発者ガイドAmazon Cognito は、ユーザーが入力できるコードでSMSメッセージを送信します。次の表は、SMS
メッセージを生成できるイベントを示しています。
メッセージオプション
アクティビ
ティ

API オペレー
ション

配信オプ
ション

形式オプ
ション

カスタマイ
ズ可能

メッセージ
テンプレー
ト

パスワード
を忘れてし
まった

ForgotPassword,
AdminResetUserPassword

E メール、
SMS

コード

なし

該当なし

招待

AdminCreateUserE メール、
SMS

コード

あり

招待メッ
セージ

自己登録

SignUp,ResendCon
firmationCode

E メール、
SMS

コード、リ
ンク

あり

検証メッ
セージ

E メールア
ドレスまた
は電話番号
の検証

UpdateUserAttributes,
AdminUpda
teUserAttributes,
GetUserAt
tributeVerificatio
nCode

E メール、
SMS

コード

あり

検証メッ
セージ

多要素認証
(MFA）

AdminInit
iateAuth,
InitiateAuth

SMS、認証
アプリ

コード

Yes¹

MFA メッセージ

1 SMS メッセージの場合。

Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する
Amazon Cognito は Amazon SNS を使用してユーザープールにSMSメッセージを送信します。を使用してカスタムSMS送信者の Lambda トリガー独自のリソースを使用してSMSメッセージを送信
Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

784

Amazon Cognito

開発者ガイドすることもできます。特定の でSMSテキストメッセージを送信するSNSように Amazon を初めて設定すると AWS リージョン、Amazon はそのリージョン AWS アカウント のSMSサンドボックスに SNSを配置します。Amazon SNSはサンドボックスを使用して、不正使用や不正使用を防止し、コンプライアンス要件を満たします。 AWS アカウント がサンドボックスにある場合、Amazon は
いくつかの制限をSNS課します。例えば、Amazon で検証した最大 10 の電話番号にテキストメッ
セージを送信できますSNS。がサンドボックスに AWS アカウント 残っている間は、本番環境のアプリケーションに Amazon SNS設定を使用しないでください。サンドボックスに置かれている
間、Amazon Cognito はユーザーの電話番号にメッセージを送信できません。
ユーザープールユーザーにSMSテキストメッセージを送信するには1.

Amazon Cognito が Amazon でSMSメッセージを送信するために使用できる IAMロールを準備する SNS

2.

Amazon SNS SMS メッセージの AWS リージョン を選択する

3.

米国の電話番号にSMSメッセージを送信するための発信元 ID を取得する

4.

SMS サンドボックスにいることを確認する

5.

Amazon SNSサンドボックスからアカウントを移動する

6.

Amazon での Amazon Cognito の電話番号の確認 SNS

7.

Amazon Cognito でユーザープールのセットアップを完了する

Amazon Cognito が Amazon でSMSメッセージを送信するために使用できる IAMロー
ルを準備する SNS
ユーザープールからSMSメッセージを送信すると、Amazon Cognito はアカウントで IAMロールを引き受けます。Amazon Cognito は、そのロールに割り当てられたsns:Publishアクセス許可を使用して、ユーザーにSMSメッセージを送信します。Amazon Cognito コンソールでは、ユーザープールのメッセージングタブからIAMロール選択を設定するSMSか、ユーザープール作成ウィザード中にこの選択を行うことができます。
次のIAMロール信頼ポリシーの例では、Amazon Cognito ユーザープールにロールを引き受ける制限付き機能を付与します。Amazon Cognito は、次の条件を満たす場合にのみロールを引き受けることができます。
• assume-role オペレーションは、 aws:SourceArn条件のユーザープールに代わって行われます。
• assume-role オペレーションは、 aws:SourceAccount条件によって設定された AWS アカウン
ト のユーザープールに代わって行われます。
Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

785

Amazon Cognito

開発者ガイド• assume-role オペレーションには、sts:externalId条件に外部 ID が含まれます。

{"Version": "2012-10-17","Statement": [{"Sid": "","Effect": "Allow","Principal": {"Service": "cognito-idp.amazonaws.com"},"Action": "sts:AssumeRole","Condition": {"StringEquals": {"sts:ExternalId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222","aws:SourceAccount": "111122223333"},"ArnLike": {"aws:SourceArn": "arn:aws:cognito-idp:uswest-2:111122223333:userpool/us-west-2_EXAMPLE"
}
}
}
]
}

aws:SourceArn 条件ARNの値には、正確なユーザープールARNまたはワイルドカードを指定できます。 AWS Management Console または DescribeUserPoolAPIリクエストを使用して、ユーザープールARNsの を検索します。
多要素認証のSMSメッセージを送信するには、IAMロールの信頼ポリシーに sts:ExternalId条件が必要です。 ???この条件の値は、ユーザープールの SmsConfigurationの ExternalIdプロパティと一致する必要があります。Amazon Cognito コンソールでユーザープールの作成プロセス中にIAM
ロールを作成すると、Amazon Cognito はロールとユーザープール設定で外部 ID を設定します。これは、既存のIAMロールを使用する場合には適用されません。
UpdateUserPool API リクエストのユーザープールExternalIdパラメータを更新し、IAMロールの
信頼ポリシーを同じ値を持つsts:externalId条件で更新する必要があります。を使用して、元の設定を保持する方法でユーザープールAPIを更新する方法については、「」を参照してくださいユー
ザープール設定の更新。
Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

786

Amazon Cognito

開発者ガイドIAM ロールと信頼ポリシーの詳細については、「 AWS Identity and Access Management ユーザーガ
イド」の「ロールの用語と概念」を参照してください。

Amazon SNS SMS メッセージの AWS リージョン を選択する
一部の では AWS リージョン、Amazon Cognito SMS メッセージに使用する Amazon SNSリソース
を含むリージョンを選択できます。アジアパシフィック (ソウル) を除く Amazon Cognito が利用可
能なすべての AWS リージョン で、ユーザープール AWS リージョン を作成した で Amazon SNSリ
ソースを使用できます。リージョンを選択したときにSMSメッセージングを高速化し、信頼性を高めるには、ユーザープールと同じリージョンの Amazon SNSリソースを使用します。
Note
では AWS Management Console、新しい Amazon Cognito コンソールエクスペリエンスに切り替えた後でのみSMS、リソースのリージョンを変更できます。

新しいユーザープールウィザードのメッセージ配信の設定ステップで、SMSリソースのリージョンを選択します。既存のユーザープールのメッセージングタブSMSの で編集 を選択することもできます。
起動時に、一部の について AWS リージョン、Amazon Cognito は代替リージョンに Amazon SNS
リソースを含むSMSメッセージを送信しました。任意のリージョンを設定するには、ユーザープー
ルの SmsConfigurationType オブジェクトの SnsRegionパラメータを使用します。次の表から
Amazon Cognito リージョンに Amazon Cognito ユーザープールリソースをプログラムで作成し、SnsRegionパラメータを指定しない場合、ユーザープールはレガシー Amazon SNSリージョン の
Amazon SNSリソースを使用してSMSメッセージを送信できます。
アジアパシフィック (ソウル) の Amazon Cognito ユーザープール AWS リージョン は、アジアパシ
フィック (東京) リージョンの Amazon SNS設定を使用する必要があります。
Amazon SNSは、すべての新規アカウントの支出クォータを 1 か月あたり 1.00 USD (USD) に設定します。Amazon Cognito AWS リージョン で使用する で支出制限が引き上げられた可能性があります。 AWS リージョン Amazon SNS SMS メッセージの を変更する前に、 AWS サポートセンター
でクォータ引き上げケースを開いて、新しいリージョンの制限を引き上げてください。詳細については、「Amazon Simple Notification Service デベロッパーガイド」の「Amazon の月額SMS使用
クォータの引き上げをリクエストSNSする」を参照してください。
次の表の任意の Amazon Cognito リージョンのSMSメッセージは、対応する Amazon SNSリージョ
ン の Amazon SNSリソースを使用して送信できます。
Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

787

Amazon Cognito

開発者ガイドAmazon Cognito リージョン

Amazon SNS リージョン

米国東部（オハイオ)

米国東部 (オハイオ)、米国東部 (バージニア北部)

米国東部 (バージニア北部)

米国東部 (バージニア北部)

米国西部 (北カリフォルニア)米国西部 (北カリフォルニア)米国西部 (オレゴン)

米国西部 (オレゴン)カナダ (中部)

カナダ (中部)、米国東部 (バージニア北部)

カナダ西部 (カルガリー)

カナダ西部 (カルガリー)

欧州 (フランクフルト)

欧州 (フランクフルト)、欧州 (アイルランド)

欧州 (ロンドン)

欧州 (ロンドン)、欧州 (アイルランド)

欧州 (アイルランド)

欧州 (アイルランド)

欧州 (パリ)欧州 (パリ)欧州 (ストックホルム)

欧州 (ストックホルム)

欧州 (ミラノ)

欧州 (ミラノ)

欧州 (スペイン)

欧州 (スペイン)

欧州 (チューリッヒ)

欧州 (チューリッヒ)

アジアパシフィック (ムンバイ)

アジアパシフィック (ムンバイ)、アジアパシ
フィック (シンガポール)

アジアパシフィック (ハイデラバード)

アジアパシフィック (ハイデラバード)

アジアパシフィック (香港)

アジアパシフィック (シンガポール)

アジアパシフィック (ソウル)

アジアパシフィック (東京)

アジアパシフィック (シンガポール)

アジアパシフィック (シンガポール)

Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

788

Amazon Cognito

開発者ガイドAmazon Cognito リージョン

Amazon SNS リージョン

アジアパシフィック (シドニー)

アジアパシフィック (シドニー)

アジアパシフィック (東京)

アジアパシフィック (東京)

アジアパシフィック (ジャカルタ)アジアパシフィック (ジャカルタ)アジアパシフィック (大阪)

アジアパシフィック (大阪)

アジアパシフィック (メルボルン)

アジアパシフィック (メルボルン)

中東 (バーレーン)

中東 (バーレーン)

中東 (UAE）

中東 (UAE）

南米 (サンパウロ)

南米 (サンパウロ)

イスラエル (テルアビブ)

イスラエル (テルアビブ)

アフリカ (ケープタウン)

アフリカ (ケープタウン)

米国の電話番号にSMSメッセージを送信するための発信元 ID を取得する
米国の電話番号にSMSテキストメッセージを送信する場合は、SMSサンドボックステスト環境を構築するか、本番環境を構築するかにかかわらず、発信元 ID を取得する必要があります。
米国の通信事業者は 2021 年 6 月 1 日付けで、米国の電話番号へのメッセージの送信に発信元 ID を
義務付けました。発信元 ID をまだ取得していない場合は、取得する必要があります。発信元 ID を取得する方法については、Amazon Pinpoint ユーザーガイドの「番号のリクエスト」を参照してください。
次の で運用する場合は AWS リージョン、 AWS Support チケットを開いて発信元 ID を取得する必要があります。手順については、「Amazon Simple Notification Service デベロッパーガイド」のSMS「メッセージングのサポートのリクエスト」を参照してください。
• 米国東部（オハイオ)• 欧州 (ストックホルム)• 欧州 (パリ)
Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

789

Amazon Cognito

開発者ガイド• ヨーロッパ (ミラノ)• 中東 (バーレーン)• 南米 (サンパウロ)• 米国西部 (北カリフォルニア)同じ に複数の発信元 ID がある場合 AWS リージョン、Amazon は、ショートコード、10、DLC通話
料無料番号の優先順位で発信元 ID タイプSNSを選択します。この優先順位を変更することはできません。詳細については、「Amazon SNS FAQs」を参照してください。

SMS サンドボックスにいることを確認する
次の手順を使用して、SMSサンドボックスにいることを確認します。本番稼働用の Amazon Cognito
ユーザープール AWS リージョン がある各 に対して、同じ手順を繰り返します。
Amazon Cognito コンソールでSMSサンドボックスのステータスを確認する
SMS サンドボックスにいることを確認するには1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入力
します。

2.

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

3.

リストから存在するユーザープールを 1 つ選択します。

4.

[Messaging] (メッセージング) タブを選択します。

5.

SMS 設定セクションで、「Amazon SNS本番環境に移動」を展開します。アカウントがSMSサ
ンドボックスにある場合、次のメッセージが表示されます。
You are currently in the SMS Sandbox and cannot send SMS messages tounverified numbers.
このメッセージが表示されない場合は、既にアカウントにSMSメッセージが設定されています。「Amazon Cognito でユーザープールのセットアップを完了する」へ進んでください。

6.

メッセージ内の Amazon SNS リンクを選択します。これにより、Amazon SNSコンソールが新しいタブで開きます。

7.

サンドボックス環境に置かれていることを確認します。コンソールメッセージには AWS リー
ジョン、サンドボックスのステータスと が次のように表示されます。
This account is in the SMS sandbox in US East (N. Virginia).

Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

790

Amazon Cognito

開発者ガイドAmazon SNSサンドボックスからアカウントを移動する
アプリをテストしていて、管理者が検証できる電話番号にのみSMSメッセージを送信する必要がある場合は、このステップをスキップしてください。
アプリケーションを本番環境で使用するには、アカウントをSMSサンドボックスから本番環境に移動します。Amazon Cognito で使用する Amazon SNSリソースを含む で AWS リージョン 発信元 IDを設定したら、 がSMSサンドボックスに AWS アカウント 残っている間、米国の電話番号を確認できます。Amazon SNS環境が本番環境にある場合、ユーザーにSNSSMSメッセージを送信するために Amazon でユーザーの電話番号を確認する必要はありません。
詳細な手順については、「Amazon Simple Notification Service デベロッパーガイド」のSMS「サンドボックス外への移動」を参照してください。

Amazon での Amazon Cognito の電話番号の確認 SNSアカウントをSMSサンドボックスから移動した場合は、このステップをスキップします。
SMS サンドボックスにいるときは、Amazon で検証した任意の電話番号にメッセージを送信できますSNS。
電話番号を確認するには、次の手順を実行します。
1. Amazon SNSコンソールのテキストメッセージ (SMS） セクションにサンドボックス送信先の電話番号を追加します。
2. 指定した電話番号にコードを含むSMSメッセージを受信します。
3. Amazon SNSコンソールのSMSメッセージから検証コードを入力します。
詳細な手順については、「Amazon Simple Notification Service デベロッパーガイド」のSMS「サンドボックスでの電話番号の追加と検証」を参照してください。
Note
Amazon は、SMSサンドボックスにいる間に検証できる送信先電話番号の数SNSを制限します。「Amazon Simple Notification Service デベロッパーガイド」のSMS「サンドボックス」
を参照してください。

Amazon Cognito ユーザープールで初めてSMSメッセージングを設定する

791

Amazon Cognito

開発者ガイドAmazon Cognito でユーザープールのセットアップを完了する
ユーザープールを作成または編集していたブラウザタブに戻ります。手順を完了します。ユーザー
プールSMSに設定を正常に追加すると、Amazon Cognito は内部電話番号にテストメッセージを送信
して、設定が機能することを確認します。Amazon では、テストSMSメッセージごとにSNS料金が発生します。

ユーザープールでのトークンの使用
トークンを使用してユーザーを認証し、リソースへのアクセス権を付与します。トークンのクレー
ムはユーザーに関する情報です。ID トークンには、ユーザー名、苗字、E メールアドレスなど、身元に関するクレームが含まれています。アクセストークンにはscope、認証されたユーザーがサー
ドパーティーの APIs、Amazon Cognito ユーザーのセルフサービスAPIオペレーション、および にア
クセスするために使用できるようなクレームが含まれていますUserInfo エンドポイント。アクセス
トークンと ID トークンの両方に、ユーザープール内でのユーザーのグループメンバーシップを示す
cognito:groups クレームが含まれています。ユーザープールグループの詳細については、「ユーザープールにグループを追加する」を参照してください。
Amazon Cognito には、新しいトークンの取得や既存のトークンの取り消しに使用できる更新トーク
ンもあります。トークンを更新して、新しい ID とアクセストークンを取得します。トークンを取り消して、更新トークンによって許可されているユーザーアクセスを取り消します。
Amazon Cognito は、Base 64 でエンコードされた文字列としてトークンを発行します Amazon
Cognito ID またはアクセストークンを base64 からプレーンテキスト にデコードできます
JSON。Amazon Cognito の更新トークンは暗号化されており、ユーザープールのユーザーと管理者に対して透過的ではなく、ユーザープールのみが読み取ることができます。
トークンを使用した認証
ユーザーがアプリケーションにサインインすると、Amazon Cognito がログイン情報を検証します。
ログインが正常に行われると、Amazon Cognito がセッションを作成し、認証されたユーザーの ID
トークン、アクセストークン、および更新トークンを返します。トークンを使用して、Amazon API
Gateway APIsなどのダウンストリームリソースへのアクセス権をユーザーに付与できます。または、これらのトークンを他の AWS サービスにアクセスするための一時的な AWS 認証情報と交換することができます。

トークンの使用

792

Amazon Cognito

開発者ガイドトークンの保存アプリケーションでは、さまざまなサイズのトークンを保存する必要があります。トークンのサイズ
は、クレームの追加、エンコーディングアルゴリズムの変更、暗号化アルゴリズムの変更による理由（ただし、これらに限定されない）で変更される場合があります。ユーザープールでトークン失効を有効にすると、Amazon Cognito はJSONウェブトークンにクレームを追加して、そのサイズを増やします。アクセストークンと ID トークンに対し、新たなクレーム origin_jti および jti が追加されます。トークンの取り消しの詳細については、「トークンの取り消し」を参照してください。
Important
ベストプラクティスとして、アプリケーションのコンテキストにおけるすべての転送中と保管中のトークンを保護します。トークンには、アプリケーションのユーザーに関する個人識
別情報、およびユーザープールで使用するセキュリティモデルに関する情報を含めることができます。

トークンをカスタマイズする
Amazon Cognito からアプリに渡すアクセストークンと ID トークンをカスタマイズできます。トー
クン生成前の Lambda トリガーでは、トークンクレームを追加、変更、および抑制できます。トー
クン生成前トリガーは、Amazon Cognito からデフォルトのクレームセットを送信する先の Lambda
関数です。クレームには、2.0 OAuth スコープ、ユーザープールグループのメンバーシップ、ユーザー属性などが含まれます。この関数は、必要に応じてランタイムに変更を加え、更新したトークン
クレームを Amazon Cognito に返すことができます。
バージョン 2 のイベントによるアクセストークンのカスタマイズには追加料金がかかります。詳細
については、「Amazon Cognito の料金」を参照してください。
トピック• ID トークンの使用• アクセストークンの使用
トークンの使用

793

Amazon Cognito

開発者ガイド• 更新トークンの使用• トークンの取り消し• JSON ウェブトークンの検証• キャッシュトークン

ID トークンの使用
ID トークンは、、name、 emailなど、認証されたユーザーの ID に関するクレームを含むJSON
ウェブトークン (JWT） ですphone_number。この ID 情報はアプリケーション内で使用できます。ID トークンは、リソースサーバーまたはサーバーアプリケーションに対するユーザーの認証にも使用できます。また、ウェブAPIオペレーションでアプリケーションの外部で ID トークンを使用することもできます。このような場合は、ID トークン内のクレームを信頼する前に、ID トークンの署名を検証する必要があります。「JSON ウェブトークンの検証」を参照してください。
ID トークンの有効期限は、5 分から 1 日までの任意の値に設定できます。この値は、アプリケー
ションのクライアントごとに設定できます。
Important
ユーザーがホストされた UI またはフェデレーション ID プロバイダー (IdP) でサインインす
ると、Amazon Cognito は 1 時間有効なセッション Cookie を設定します。ホストされた UIまたはフェデレーションを使用し、アクセストークンと ID トークンに 1 時間未満の最小期間を指定すると、Cookie の有効期限が切れるまで、ユーザーは有効なセッションを継続できます。1 時間のセッション中に有効期限が切れるトークンがある場合、ユーザーは再認証しなくてもトークンを更新できます。

ID トークンのヘッダーヘッダーには 2 つの情報 (キー ID: kid、アルゴリズム: alg) が含まれています。
{"kid" : "1234example=","alg" : "RS256"}

ID トークンの使用

794

Amazon Cognito

開発者ガイドkid
キー ID。その値は、トークンのJSONウェブ署名 (JWS) を保護するために使用されたキーを示します。ユーザープールの署名キーは、 jwks_uriエンドポイントIDsで表示できます。
kid パラメータの詳細については、「Key identifier (kid) header parameter」を参照してください。
alg
Amazon Cognito が、アクセストークンをセキュア化するために使用した暗号化アルゴリズム。
ユーザープールは、SHA-256 RSAの署名であるRS256暗号化アルゴリズムを使用します。
alg パラメータの詳細については、「Algorithm (alg) header parameter」を参照してください。

ID トークンのデフォルトペイロード
これは ID トークンからのペイロードの例です。認証されたユーザーに関するクレームが含まれています。OpenID Connect (OIDC) の標準クレームの詳細については、OIDC標準クレームのリストを参照してください。を使用して、独自の設計のクレームを追加できますトークン生成前の Lambda ト
リガー。
<header>.{"sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","cognito:groups": ["test-group-a","test-group-b","test-group-c"],"email_verified": true,"cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role","iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example","cognito:username": "my-test-user","middle_name": "Jane","nonce": "abcdefg","origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","cognito:roles": ["arn:aws:iam::111122223333:role/my-test-role"],"aud": "xxxxxxxxxxxxexample","identities": [{ID トークンの使用

795

Amazon Cognito

開発者ガイド"userId": "amzn1.account.EXAMPLE","providerName": "LoginWithAmazon","providerType": "LoginWithAmazon","issuer": null,"primary": "true","dateCreated": "1642699117273"}],"event_id": "64f513be-32db-42b0-b78e-b02127b4f463","token_use": "id","auth_time": 1676312777,"exp": 1676316377,"iat": 1676312777,"jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","email": "my-test-user@example.com"}.<token signature>sub
認証されたユーザーの一意の識別子 (UUID）、または件名。ユーザー名はユーザープール内で一意ではない可能性があります。sub クレームは、特定のユーザーを識別する最良の方法です。
cognito:groups
ユーザーをメンバーとするユーザープールグループの名前の配列。グループは、アプリケーショ
ンに提示する識別子にすることも、ID プールから優先IAMロールのリクエストを生成することもできます。
cognito:preferred_role
ユーザーの最も優先度の高いユーザープールグループに関連付けたIAMロールARNの 。ユーザー
プールがこのロールクレームを選択する方法の詳細については、「グループへの優先順位の値の割り当て」を参照してください。
iss
トークンを発行した ID プロバイダー。クレームは以下のような形式になります。
https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>
cognito:username
ユーザープール内のユーザーのユーザー名。
ID トークンの使用

796

Amazon Cognito

開発者ガイドnonce
nonce クレームは、2.0 authorizeエンドポイントへのリクエストに追加できるのと同じ名前
OAuthのパラメータから取得されます。パラメータを追加すると、Amazon Cognito が発行する
ID トークンに nonce クレームが含められます。これは、リプレイ攻撃からの保護のために使用できます。リクエストで nonce 値を指定せずにサードパーティー ID プロバイダーを介した認証を行う場合、Amazon Cognito はノンスを自動的に生成および検証した上で、その値を nonce ク
レームとして ID トークンに追加します。Amazon Cognito でのnonceクレームの実装は、OIDC
標準 に基づいています。
origin_jti
ユーザーの更新トークンに関連付けられたトークン失効識別子。Amazon Cognito は、 エンド
ポイントの取り消しまたは RevokeTokenAPIオペレーションでユーザーのトークンを取り消したかどうかを確認するときに、 origin_jtiクレームを参照します。トークンを取り消すと、Amazon Cognito は同じ origin_jti 値を持つすべてのアクセストークンと ID トークンを無効にします。
cognito:roles
ユーザーのグループに関連付けられているIAMロールの名前の配列。すべてのユーザープール
グループには、1 つのIAMロールを関連付けることができます。この配列は、優先順位に関係な
く、ユーザーのグループのすべてのIAMロールを表します。詳細については、「ユーザープールにグループを追加する」を参照してください。
aud
ユーザーを認証したユーザープールアプリクライアント。Amazon Cognito は、アクセストーク
ン client_id クレームで同じ値をレンダリングします。
identities
ユーザーの identities 属性の内容。この属性には、フェデレーションサインインによって、またはフェデレーションユーザーをローカルプロファイルにリンクすることによってユーザーにリンクした各サードパーティ ID プロバイダープロファイルに関する情報が含まれます。この情報には、プロバイダー名、プロバイダーの固有 ID、およびその他のメタデータが含まれます。
token_use
トークンの本来の目的。ID トークンでは、その値は id です。
auth_time
ユーザーが認証を完了した認証時刻 (Unix の時間形式)。
ID トークンの使用

797

Amazon Cognito

開発者ガイドexp
ユーザーのトークンの有効期限が切れる有効期限 (Unix の時間形式)。
iat
Amazon Cognito がユーザーのトークンを発行した発行時刻 (Unix の時間形式)。
jtiの一意の識別子JWT。
ID トークンには、OIDC標準クレーム でOIDC定義されている標準クレームを含めることができます。また、ユーザープールで定義されたカスタム属性が、この ID トークンに含まれる場合もあります。Amazon Cognito は、属性タイプに関係なく、カスタム属性値を文字列として ID トークンに書き込みます。
Note
ユーザープールのカスタム属性には、常に というプレフィックスが付けられますcustom:。

ID トークンの署名
ID トークンの署名は、JWTトークンのヘッダーとペイロードに基づいて計算されます。アプリが受け取る ID トークンのクレームを受け入れる前に、トークンの署名を検証してください。詳細については、JSON「ウェブトークンの検証」を参照してくださいJSON ウェブトークンの検証。

アクセストークンの使用
ユーザープールアクセストークンには、認証されたユーザーに関するクレーム、ユーザーのグループのリスト、およびスコープのリストが含まれます。アクセストークンの目的は、APIオペレーションを許可することです。ユーザープールは、ユーザーのセルフサービスオペレーションを許可するアク
セストークンを受け入れます。例えば、アクセストークンを使用して、ユーザーにユーザー属性を追加、変更、または削除するアクセス権を付与することができます。
ユーザープールに追加するカスタムOAuthスコープから派生したアクセストークンの 2.0 スコー
プを使用すると、 から情報を取得することをユーザーに許可できますAPI。例えば、Amazon API
Gateway は Amazon Cognito アクセストークンによる認可をサポートしています。REST API オーソ
ライザーにユーザープールの情報を入力するか、Amazon Cognito を のJSONウェブトークン (JWT)
オーソライザーとして使用できますHTTPAPI。カスタムスコープでアクセストークンを生成するに
アクセストークンの使用

798

Amazon Cognito

開発者ガイドは、ユーザープールのパブリックエンドポイントを通じてアクセストークンをリクエストする必要があります。
ユーザーのアクセストークンは、UserInfo エンドポイント からユーザーの属性に関する詳細情報をリクエストするためのアクセス許可です。ユーザーのアクセストークンは、ユーザー属性の読み取りと書き込みのアクセス許可でもあります。アクセストークンによって付与される属性へのアクセスレ
ベルは、アプリクライアントに割り当てるアクセス許可と、トークンで付与するスコープによって異なります。
アクセストークンはJSONウェブトークン (JWT) です。アクセストークンのヘッダーは ID トークンと同じ構造になっていますが、Amazon Cognito は、ID トークンに署名するキーとは異なるキーでアクセストークンに署名します。アクセスキー ID (kid) クレームの値は、同じユーザーセッションのID トークンの kid クレームの値と一致しません。アプリコードで、ID トークンとアクセストークンを個別に検証します。署名を検証するまでは、アクセストークンのクレームを信用しないでください。詳細については、「JSON ウェブトークンの検証」を参照してください。アクセストークンの有効期限は、5 分から 1 日までの間で任意の値に設定できます。この値は、アプリケーションのクライ
アントごとに設定できます。
Important
ホストされた UI を使用する場合、アクセストークンと ID トークンには、1 時間未満の最小値を指定しないでください。Amazon Cognito HostedUI は、有効期間が 1 時間のクッキーを使用します。最小値として 1 時間未満を入力した場合でも、有効期間は 1 時間より短くなりません。

アクセストークンのヘッダーヘッダーには 2 つの情報 (キー ID: kid、アルゴリズム: alg) が含まれています。
{"kid" : "1234example=""alg" : "RS256",}kid
キー ID。その値は、トークンのJSONウェブ署名 (JWS) を保護するために使用されたキーを示します。ユーザープールの署名キーは、 jwks_uriエンドポイントIDsで表示できます。
アクセストークンの使用

799

Amazon Cognito

開発者ガイドkid パラメータの詳細については、「Key identifier (kid) header parameter」を参照してください。
alg
Amazon Cognito が、アクセストークンをセキュア化するために使用した暗号化アルゴリズム。
ユーザープールは、SHA-256 RSAの署名であるRS256暗号化アルゴリズムを使用します。
alg パラメータの詳細については、「Algorithm (alg) header parameter」を参照してください。

アクセストークンのデフォルトペイロード
以下は、アクセストークンのサンプルペイロードです。詳細については、「クレームJWT」を参照
してください。を使用して、独自の設計のクレームを追加できますトークン生成前の Lambda トリ
ガー。
<header>.
{"sub":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","cognito:groups":["testgroup"],"iss":"https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example","version":2,"client_id":"xxxxxxxxxxxxexample","origin_jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","event_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","token_use":"access","scope":"phone openid profile resourceserver.1/appclient2 email","auth_time":1676313851,"exp":1676317451,"iat":1676313851,"jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","username":"my-test-user"}.<token signature>sub
認証されたユーザーの一意の識別子 (UUID）、または件名。ユーザー名はユーザープール内で一意ではない可能性があります。sub クレームは、特定のユーザーを識別する最良の方法です。
アクセストークンの使用

800

Amazon Cognito

開発者ガイドcognito:groups
ユーザーをメンバーとするユーザープールグループの名前の配列。
iss
トークンを発行した ID プロバイダー。クレームは以下のような形式になります。
https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>
client_id
ユーザーを認証したユーザープールアプリクライアント。Amazon Cognito は、ID トークン aud
クレームで同じ値をレンダリングします。
origin_jti
ユーザーの更新トークンに関連付けられたトークン失効識別子。Amazon Cognito は、 エンド
ポイントの取り消しまたは RevokeTokenAPIオペレーションでユーザーのトークンを取り消したかどうかをチェックするときに、 origin_jtiクレームを参照します。トークンを取り消すと、Amazon Cognito は同じ origin_jti 値を持つすべてのアクセストークンと ID トークンを無効にします。
token_use
トークンの本来の目的。アクセストークンでは、その値は access です。
scope
トークンが提供するアクセスを定義する OAuth 2.0 スコープのリスト。トークンエンドポ
イント のトークンには、アプリクライアントがサポートする任意のスコープを含めることができます。Amazon Cognito APIサインインのトークンには、スコープ のみが含まれますaws.cognito.signin.user.admin。
auth_time
ユーザーが認証を完了した認証時刻 (Unix の時間形式)。
exp
ユーザーのトークンの有効期限が切れる有効期限 (Unix の時間形式)。
iat
Amazon Cognito がユーザーのトークンを発行した発行時刻 (Unix の時間形式)。
jtiの一意の識別子JWT。
アクセストークンの使用

801

Amazon Cognito

開発者ガイドusername
ユーザープール内のユーザーのユーザー名。
その他のリソース• Amazon Cognito ユーザープールのアクセストークンをカスタマイズする方法

アクセストークンの署名
アクセストークンの署名は、JWTトークンのヘッダーとペイロードに基づいて計算されます。ウェ
ブ のアプリケーション外で使用する場合APIs、トークンを受け入れる前に、常にこの署名を検証する必要があります。詳細については、「JSON ウェブトークンの検証」を参照してください。

更新トークンの使用
更新トークンを使用して、新しい ID およびアクセストークンを取得できます。更新トークンはデフォルトで、アプリケーションユーザーがユーザープールにサインインしてから 30 日後に有効期限が切れます。ユーザープールのアプリケーションを作成するときは、アプリケーションの更新トーク
ンの有効期限を 60 分から 10 年までの任意の値に設定できます。
Mobile SDK for iOS、Mobile SDK for Android、Amplify for iOS、Android、および Flutter は、有効な(有効期限が切れていない) 更新トークンが存在する場合、ID トークンとアクセストークンを自動的に更新します。ID トークンとアクセストークンには、2 分間の最小残存有効期間があります。更新
トークンが有効期限切れになっている場合、アプリケーションユーザーはユーザープールに再度サインインすることで再認証される必要があります。アクセストークンと ID トークンの最小値が 5 分に設定されていて、 を使用している場合SDK、更新トークンは新しいアクセストークンと ID トークンの取得に継続的に使用されます。期待される動作は、最小値を 5 分ではなく 7 分以上を設定することで確認できます。
ユーザーのアカウント自体は、ユーザーが新しいアカウントの UnusedAccountValidityDays 時
間制限前に少なくとも 1 回ログインしている限り、その有効期限が切れることはありません。

更新トークンによる新しいアクセストークンと ID トークンの取得
API または ホストされた UI を使用して、更新トークンの認証を開始します。
更新トークンを使用してユーザープール で新しい ID トークンとアクセストークンを取得するにはAPI、 AdminInitiateAuthまたは InitiateAuthAPIオペレーションを使用します。AuthFlow パラメータの REFRESH_TOKEN_AUTH を渡します。AuthFlow の AuthParameters プロパティで、ユーザー
更新トークンの使用

802

Amazon Cognito

開発者ガイドの更新トークンを "REFRESH_TOKEN" の値として渡します。Amazon Cognito は、APIリクエストがすべてのチャレンジに合格した後、新しい ID トークンとアクセストークンを返します。
NoteAmazon Cognito ユーザープールを使用してホストされた UI ユーザーのトークンAPIを更新するには、REFRESH_TOKEN_AUTHフローで InitiateAuth リクエストを生成します。ア
プリケーションでのこのトークン処理方法は、ユーザーのホストされた UI セッションには影響しません。API レスポンスは新しい ID トークンとアクセストークンを発行しますが、ホストされた UI セッション Cookie は更新しません。

更新トークンは、ドメインを設定したユーザープール内の トークンエンドポイント に送信することもできます。リクエスト本文には、refresh_token の grant_type 値とユーザーの更新トークンの refresh_token 値を含めます。

更新トークンの取り消し
ユーザーに属する更新トークンを取り消すことができます。トークンの取り消しの詳細については、「トークンの取り消し」を参照してください。
Note
更新トークンを取り消すと、Amazon Cognito がそのトークンを使用して更新リクエストから発行したすべての ID トークンとアクセストークンが取り消されます。

および AdminUserGlobalSignOutAPIオペレーションを使用してユーザーのトークンをすべて取り消すGlobalSignOutと、ユーザーは現在サインインしているすべてのデバイスからサインアウト
できます。ユーザーがサインアウトすると、以下の結果になります。
• ユーザーの新しいトークンの取得にユーザーの更新トークンを使用できない。
• ユーザーのアクセストークンは、トークン認証APIリクエストを行うことができません。
• 新しいトークンを取得するためにユーザーが再認証される必要がある。ホストされた UI セッショ
ン cookie は自動的に期限切れにならないため、ユーザーは認証情報の入力を求められることな
く、セッション cookie を使用して再認証できます。ホストされた UI ユーザーをサインアウトした
ら、ユーザーをログアウトエンドポイントにリダイレクトします。ここで Amazon Cognito はユー
ザーのセッション cookie を消去します。
更新トークンの使用

803

Amazon Cognito

開発者ガイド更新トークンを使用すると、ユーザーのセッションをアプリケーション内で長期間維持できます。時間が経つに従って、ユーザーはサインインしている一部のデバイスの認証を解除して、セッションを継続的に更新することを希望する場合があります。1 つのデバイスからユーザーをサインアウトするには、ユーザーの更新トークンを取り消します。ユーザーがすべての認証済みセッションからサインアウトする場合は、GlobalSignOutAPIリクエスト を生成します。アプリケーションは、[すべてのデバイスからサインアウト] などのオプションをユーザーに提供できます。GlobalSignOut は、ユーザーの有効な (変更されていない、有効期限が切れていない、取り消されていない) アクセストーク
ンを受け入れます。API これはトークン認証されているため、あるユーザーはこれを使用して別のユーザーのサインアウトを開始できません。
ただし、すべてのデバイスから任意のユーザーをサインアウトするために、 AWS 認証情報で認証する AdminUserGlobalSignOut API リクエストを生成できます。管理者アプリケーションは AWS 、
開発者の認証情報を使用してこのAPIオペレーションを呼び出し、ユーザープール ID とユーザーのユーザー名をパラメータとして渡す必要があります。AdminUserGlobalSignOut API は、ユーザープール内の任意のユーザーをサインアウトできます。
AWS 認証情報またはユーザーのアクセストークンのいずれかで承認できるリクエストの詳細については、「」を参照してくださいAmazon Cognito ユーザープールの認証されたオペレーションと認証
されていないAPIオペレーション。

トークンの取り消しを使用して、ユーザーの更新トークンを取り消すことができます AWS API。更新トークンを取り消すと、その更新トークンによってそれまでに発行されたすべてのアクセストークンが無効になります。ユーザーに発行されたその他の更新トークンは影響を受けません。
Note
JWT トークンは、トークンの作成時に割り当てられた署名と有効期限で自己完結型です。取り消されたトークンは、トークンを必要とする Amazon Cognito API呼び出しでは使用できません。ただし、取り消されたトークンは、トークンの署名と有効期限を検証するJWTライ
ブラリを使用して検証された場合でも有効です。

トークンの取り消しが有効化されているユーザープールクライアント用の更新トークンは、取り消すことが可能です。トークンの取り消しは、新しいユーザープールクライアントの作成時にデフォルト
で有効になります。
トークンの取り消し804

Amazon Cognito

開発者ガイドトークンの取り消しを有効にする
既存のユーザープールクライアントのトークンを取り消す前に、トークンの取り消しを有効にする必要があります。または を使用して、 AWS CLI 既存のユーザープールクライアントのトークン失効を有効にできます AWS API。これを行うには、 aws cognito-idp describe-user-poolclient CLI コマンドまたは DescribeUserPoolClientAPIオペレーションを呼び出して、アプリクライアントから現在の設定を取得します。次に、 aws cognito-idp update-user-poolclient CLI コマンドまたは UpdateUserPoolClientAPIオペレーションを呼び出します。アプリ
クライアントの現在の設定を含め、EnableTokenRevocation パラメータを true に設定します。
AWS Management Console、、 AWS CLIまたは を使用して新しいユーザープールクライアントを作成すると AWS API、トークンの失効がデフォルトで有効になります。
トークン失効を有効にすると、Amazon Cognito JSONウェブトークンに新しいクレームが追加されます。アクセストークンと ID トークンに origin_jti と jti クレームが追加されます。これらのクレームにより、アプリケーションクライアントのアクセストークンと ID トークンのサイズが大きくなります。
トークン失効を有効にしてアプリクライアントを作成または変更するには、 CreateUserPoolClientま
たは UpdateUserPoolClientAPIリクエストに次のパラメータを含めます。
"EnableTokenRevocation": true

トークンを取り消す
更新トークンは、 aws cognito-idp revoke-token CLI コマンドなど、 RevokeToken API リク
エストを使用して取り消すことができます。エンドポイントの取り消し を使用してトークンを取り消すこともできます。このエンドポイントは、ユーザープールにドメインを追加した後で利用可能になります。取り消しエンドポイントは、Amazon Cognito がホストするドメイン、あるいは独自のカスタムドメインの両方で使用できます。
Note
更新トークンを取り消すリクエストには、そのトークンを取得するために使用したクライア
ント ID を含める必要があります。

以下は、RevokeTokenAPIリクエスト例の本文です。
トークンの取り消し805

Amazon Cognito

開発者ガイド{"ClientId": "1example23456789","ClientSecret": "abcdef123456789ghijklexample","Token": "eyJjdHkiOiJKV1QiEXAMPLE"}

以下は、カスタムドメインを持つユーザープールの/oauth2/revokeエンドポイントへの cURL リ
クエストの例です。
curl --location 'auth.mydomain.com/oauth2/revoke' \--header 'Content-Type: application/x-www-form-urlencoded' \--header 'Authorization: Basic Base64Encode(client_id:client_secret)' \--data-urlencode 'token=abcdef123456789ghijklexample' \--data-urlencode 'client_id=1example23456789'

RevokeToken オペレーションと /oauth2/revoke エンドポイントには、アプリケーションクライ
アントにクライアントシークレットがある場合を除き、追加の認証は必要ありません。

JSON ウェブトークンの検証
以下の手順では、ユーザープールのJSONウェブトークン () の検証について説明しますJWT。
トピック• 前提条件• によるトークンの検証 aws-jwt-verify• トークンの理解と検査

前提条件
ライブラリ、SDK、またはソフトウェアフレームワークが、このセクションのタスクをすでに処理している可能性があります。 AWS SDKs は、アプリケーションで Amazon Cognito ユーザープール
トークンの処理と管理のためのツールを提供します。 AWS Amplify には、Amazon Cognito トーク
ンを取得および更新する関数が含まれています。
詳細については、次のページを参照してください。
• Amazon Cognito の認証と承認を、ウェブアプリケーションとモバイルアプリケーションに統合する
JSON ウェブトークンの検証

806

Amazon Cognito

開発者ガイド• を使用した Amazon Cognito ID プロバイダーのコード例 AWS SDKs
• Amplify Dev Center の高度なワークフロー
JSON ウェブトークン () のデコードと検証には、多くのライブラリを使用できますJWT。サーバー側の処理のためにトークンを手動でAPI処理する場合や、他のプログラミング言語を使用している場
合は、これらのライブラリが役立ちます。JWT トークン を操作するためのライブラリの OpenID 基
盤リストを参照してください。

によるトークンの検証 aws-jwt-verify
Node.js アプリでは、 AWS は、ユーザーがアプリに渡すトークンのパラメータを検証するためにaws-jwt-verifyライブラリを推奨します。aws-jwt-verify を使用すると、1 つ以上のユーザー
プールについて検証したいクレーム値を CognitoJwtVerifier に入力できます。確認できる値には次のものがあります。
• アクセストークンや ID トークンの形式が不正ではなく、期限切れでもなく、有効な署名が付いているもの。
• アクセストークンが、正しいユーザープールとアプリクライアントから取得されたもの。
• そのアクセストークンクレームには、正しい OAuth 2.0 スコープ が含まれています。
• アクセストークンと ID トークンに署名したキーが、ユーザープール kidJWKSURIの の署名キーと一致すること。
には、ユーザーのトークンに署名したプライベートキーに関する公開情報JWKSURIが含まれています。ユーザープールJWKSURIの は、 にありますhttps://cognitoidp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json。
Node.js アプリまたは AWS Lambda オーソライザーで使用できる詳細とコード例については、「」のaws-jwt-verify「」を参照してください GitHub。

トークンの理解と検査
トークン検査をアプリケーションと統合する前に、Amazon Cognito が をアセンブルする方法を検討
してくださいJWTs。ユーザープールからサンプルトークンを取得します。それらをデコードして詳
細に調べて特性を理解し、何をいつ検証するかを決定します。例えば、あるシナリオではグループメ
ンバーシップを検証し、別のシナリオではスコープを調べたい可能性があります。
以下のセクションでは、アプリケーションの準備JWTs中に Amazon Cognito を手動で検査するプロ
セスについて説明します。
JSON ウェブトークンの検証

807

Amazon Cognito

開発者ガイドの構造を確認する JWTJSON ウェブトークン (JWT) には、3 つのセクションがあり、その間に . (ドット) 区切り文字があります。
[Header] (ヘッダー)
Amazon Cognito がトークンの署名に使用したキー IDalg、、kidおよびRSAアルゴリズ
ム 。Amazon Cognito は RS256 の alg でトークン署名します。kid は、ユーザープールが保持する 2048 ビットのRSAプライベート署名キーへの切り捨てられた参照です。
ペイロード
トークンクレーム。ID トークンでは、クレームには、ユーザー属性とユーザープール、iss、およびアプリクライアント、aud に関する情報が含まれます。アクセストークンのペイロードには、スコープ、グループメンバーシップ、ユーザープールが iss として含まれ、アプリクライア
ントは client_id として含まれます。
署名
署名は、ヘッダーやペイロードのようにデコード可能な base64 ではありません。これは、 で監視できる署名キーとパラメータから派生したRSA256識別子ですJWKSURI。
ヘッダーとペイロードは base64 でエンコードされた ですJSON。開始文字 { にデコードされる最初の文字 eyJ で識別できます。ユーザーが base64 でエンコードされた をアプリケーションJWTに提示し、それが 形式でない場合は[JSON Header].[JSON Payload].[Signature]、有効なAmazon Cognito トークンではないため、破棄できます。
を検証する JWTJWT 署名は、ヘッダーとペイロードのハッシュ化された組み合わせです。Amazon Cognito は、ユーザープールごとに 2 組のRSA暗号化キーを生成します。1 つの秘密鍵がアクセストークンに署名し、もう 1 つが ID トークンに署名します。
JWT トークンの署名を検証するには
1.

ID トークンを復号化します。
OpenID Foundation は、JWTトークン を操作するためのライブラリのリストも管理しています。

JSON ウェブトークンの検証

808

Amazon Cognito

開発者ガイドを使用してユーザープール AWS Lambda をデコードすることもできますJWTs。詳細について
は、「 を使用した Amazon Cognito JWTトークンのデコードと検証 AWS Lambda」を参照して
ください。
2.

ローカルキー ID (kid) とパブリック kid を比較します。
a.

ユーザープールに対応するパブリックJSONウェブキー (JWK) をダウンロードして保存します。これは、JSONウェブキーセット () の一部として使用できますJWKS。環境jwks_uriURIに合わせて以下を構築することで見つけることができます。
https://cognito-idp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json

JWK および JWKセットの詳細については、JSON「ウェブキー (JWK）」を参照してくだ
さい。
NoteAmazon Cognito は、ユーザープール内で署名キーをローテーションする可能性があります。ベストプラクティスとして、kid をキャッシュキーとして使用して、アプリに公開鍵をキャッシュし、定期的にキャッシュを更新してください。アプリが受け取るトークンの kid をキャッシュと比較します。
正しい発行者で kid が異なるトークンを受け取った場合、Amazon Cognito が署名
キーをローテーションした可能性があります。ユーザープール jwks_uri エンドポ
イントのキャッシュを更新します。

以下は、サンプル jwks.json ファイルです。
{"keys": [{"kid": "1234example=","alg": "RS256","kty": "RSA","e": "AQAB","n": "1234567890","use": "sig"}, {"kid": "5678example=","alg": "RS256",

JSON ウェブトークンの検証

809

Amazon Cognito

開発者ガイド"kty": "RSA","e": "AQAB","n": "987654321","use": "sig"}]}

Key ID (kid)kid は、トークンのJSONウェブ署名 (JWS) を保護するために使用されたキーを示すヒントです。
Algorithm (alg)alg ヘッダーパラメータは、ID トークンをセキュア化するために使用される暗号化アル
ゴリズムを表します。ユーザープールは、SHA-256 RSAの署名であるRS256暗号化アル
ゴリズムを使用します。の詳細についてはRSA、「RSAcryptography」を参照してください。
Key type (kty)kty パラメータは、この例RSAの「」など、キーで使用される暗号化アルゴリズムファ
ミリーを識別します。
RSA 指数 (e）e パラメータには、RSAパブリックキーの指数値が含まれます。これは Base64urlUInt
でエンコードされた値として表されます。
RSA モジュラス (n）n パラメータには、RSAパブリックキーのモジュラス値が含まれます。これはBase64urlUInt でエンコードされた値として表されます。
Use (use)
use パラメータは、パブリックキーの用途を表します。この例では、use 値の sig が署名を表しています。
b.
3.

パブリックJSONウェブキーで、 kidの kidと一致する を検索しますJWT。

JWT ライブラリを使用して、発行者の署名をトークンの署名と比較します。発行者署名は、トークン に一致する jwksRSA.json kidの のパブリックキー (モジュラス "n") から派生しますkid。最初に JWKを PEM形式に変換する必要がある場合があります。次の例では、
JWTJWKと を取得し、Node.js ライブラリ jsonwebtoken を使用してJWT署名を検証します。

JSON ウェブトークンの検証

810

Amazon Cognito

開発者ガイドNode.js

var jwt = require('jsonwebtoken');var jwkToPem = require('jwk-to-pem');var pem = jwkToPem(jwk);
jwt.verify(token, pem, { algorithms: ['RS256'] }, function(err, decodedToken) {});クレームを検証する
JWT クレームを検証するには
1.

次のいずれかの方法で、トークンの有効期限が切れていないことを確認します。
a.

トークンをデコードし、exp クレームを現在の時刻と比較します。

b.

アクセストークンに aws.cognito.signin.user.adminクレームが含まれている場合
は、 APIのような にリクエストを送信しますGetUser。API アクセストークンで認証した
リクエストは、トークンの有効期限が切れた場合にエラーを返します。

c.

UserInfo エンドポイント へのリクエストでアクセストークンを提示します。トークンの有効期限が切れている場合、リクエストはエラーを返します。

2.

ID トークンの aud クレームとアクセストークンの client_id クレームは、Amazon Cognito
ユーザープールで作成されたアプリクライアント ID と一致する必要があります。

3.

発行者 (iss) のクレームは、ユーザープールと一致する必要があります。例えば、us-east-1
リージョンで作成されたユーザープールには、以下の iss 値があります。
https://cognito-idp.us-east-1.amazonaws.com/<userpoolID>.

4.

token_use クレームをチェックします。
• ウェブAPIオペレーションでのみアクセストークンを受け入れる場合、その値は である必要がありますaccess。
• ID トークンのみを使用している場合、その値は id にする必要があります。
• ID とアクセストークンのいずれも使用している場合、token_use クレームは、id またはaccess になります。

これで、トークン内のクレームを信頼できるようになりました。
JSON ウェブトークンの検証

811

Amazon Cognito

開発者ガイドキャッシュトークン

新しいJSONウェブトークン () を取得するたびに、アプリは次のいずれかのリクエストを正常に完了する必要がありますJWT。
• トークンエンドポイント からクライアント認証情報または認証コードの付与をリクエストする。
• ホストされている UI から暗黙的付与をリクエストする。
• などの Amazon Cognito APIリクエストでローカルユーザーを認証しますInitiateAuth。
トークンの有効期限が分単位、時間単位、または日単位になるようにユーザープールを設定できます。アプリケーションのパフォーマンスと可用性を確保するには、Amazon Cognito トークンをトークンの有効期間の約 75% 使用し、その後新しいトークンのみを取得します。アプリ用に構築したキャッシュソリューションはトークンを利用可能な状態に保ち、リクエストレートが高すぎる場合にAmazon Cognito がリクエストを拒否するのを防ぎます。クライアント側のアプリは、トークンをメ
モリキャッシュに保存する必要があります。サーバー側アプリでは、暗号化されたキャッシュメカニ
ズムを追加してトークンを保存できます。
ユーザープールが大量のユーザーまたは machine-to-machine アクティビティを生成すると、Amazon Cognito がトークンのリクエスト数に設定できる制限が発生する可能性があります。Amazon Cognito エンドポイントへのリクエスト数を減らすには、認証データを安全に保存して再利用するか、エクスポネンシャルバックオフと再試行を実装することができます。

キャッシュトークン

812

Amazon Cognito

開発者ガイド

認証データは 2 つのクラスのエンドポイントから取得されます。Amazon Cognito OAuth2.0 エンド
ポイントには、クライアント認証情報とホストされた UI 認証コードリクエストを処理するトークン
エンドポイントが含まれています。サービスエンドポイントは、 InitiateAuthや などのユーザープールAPIリクエストに応答しますRespondToAuthChallenge。各タイプのリクエストには独自の制限があります。制限事項の詳細については、「Amazon Cognito のクォータ」を参照してください。

Amazon API Gateway を使用した machine-to-machine アクセストークンのキャッシュ
API Gateway トークンキャッシュを使用すると、アプリケーションは Amazon Cognito OAuthエンド
ポイントのデフォルトのリクエストレートクォータを超えるイベントに応じてスケールインできます。
アクセストークンをキャッシュして、キャッシュされたトークンの有効期限が切れた場合にのみ、アプリが新しいアクセストークンをリクエストするようにできます。それ以外の場合、キャッシュエン
ドポイントはキャッシュからトークンを返します。これにより、Amazon Cognito APIエンドポイン
トへの追加の呼び出しが防止されます。Amazon API Gateway を のプロキシとして使用するとトークンエンドポイント、 はリクエストクォータに寄与するリクエストの大部分にAPI応答し、レート制
限の結果として失敗したリクエストを回避します。
次のAPIゲートウェイベースのソリューションは、トークンキャッシュの低レイテンシー、低コード/
ノーコード実装を提供します。API ゲートウェイAPIsは転送中、およびオプションで保管中に暗号化されます。Gateway APIキャッシュは、2OAuth.0 クライアント認証情報付与 に最適です。これは、machine-to-machine およびマイクロサービスセッションを承認するためのアクセストークンを生成する、頻繁に大量の付与タイプです。マイクロサービスが水平方向にスケールするトラフィックの急増などのイベントでは、ユーザープールまたはアプリクライアントの AWS リクエストレート制限を超えるボリュームで同じクライアント認証情報を使用する多くのシステムが発生する可能性があります。このようなシナリオでは、アプリの可用性と低レイテンシーを維持するために、キャッシュソ
リューションがベストプラクティスです。
このソリューションでは、 にキャッシュを定義APIして、アプリでリクエストするOAuthスコープとアプリクライアントの組み合わせごとに個別のアクセストークンを保存します。アプリケーションがキャッシュキーに一致するリクエストを行うと、 は Amazon Cognito がキャッシュキーに一致する
最初のリクエストに発行したアクセストークンでAPI応答します。キャッシュキーの有効期限が切れ
ると、 はリクエストをトークンエンドポイントAPIに転送し、新しいアクセストークンをキャッシュ
します。

キャッシュトークン

813

Amazon Cognito

開発者ガイドNote
キャッシュキーの有効期間は、アプリクライアントのアクセストークン有効期間よりも短くする必要があります。

キャッシュキーは、 scopeURLパラメータでリクエストしたOAuthスコープと、リクエストのAuthorizationヘッダーの組み合わせです。Authorization ヘッダーには、アプリのクライアン
ト ID とクライアントシークレットが含まれます。このソリューションを実装するために、アプリに追加のロジックを実装する必要はありません。ユーザープールトークンエンドポイントへのパスを変更するには、設定を更新するだけで済みます。
ElastiCache (Redis OSS） を使用してトークンキャッシュを実装することもできます。（IAM) ポリシーによる AWS Identity and Access Management きめ細かな制御については、Amazon DynamoDB
キャッシュを検討してください。
Note
API Gateway でのキャッシュには追加料金がかかります。詳細については、料金表を参照してください。

API Gateway でキャッシュプロキシを設定するには
1.

API Gateway コンソールを開き、 REST を作成しますAPI。

2.

リソース で、 POSTメソッドを作成します。
a.

HTTP 統合タイプ を選択します。

b.

HTTP プロキシ統合の使用 を選択します。

c.

のエンドポイントURLを入力しますhttps://<your user pool domain>/oauth2/
token。

3.

[Resources] (リソース) で、キャッシュキーを設定します。
a.

メソッドのメソッドリクエストを編集します。 POSTb.

scope パラメータと Authorization ヘッダーをキャッシュキーとして設定します。
i.

キャッシュトークン

クエリ文字列URLパラメータにクエリ文字列を追加し、scope文字列にキャッシュを選
択します。
814

Amazon Cognito

ii.
4.

開発者ガイドヘッダーをHTTPリクエストヘッダーに追加し、Authorizationヘッダーのキャッシュを選択します。

[Stages] (ステージ) で、キャッシュを設定します。
a.

変更するステージを選択します。

b.

設定 で、APIキャッシュを有効にする を選択します。

c.

[Cache capacity] (キャッシュ容量) を選択します。

d.

3600 秒以上のキャッシュ time-to-live （TTL） を選択します。

e.

[承認を必須にする] チェックボックスをオフにします。

5.

ステージ で、 を呼び出す URLを書き留めます。

6.

ユーザープールの/oauth2/tokenエンドポイントAPIではなく、 の呼び出しURLへのリクエス
トをPOSTトークン化するようにアプリを更新します。

ユーザープール認証に成功した後のリソースへのアクセス
アプリユーザーは、ユーザープールから直接サインインすることも、サードパーティー
ID プロバイダー (IdP) を介してフェデレーションすることもできます。ユーザープール
は、Facebook、Google、Amazon、Apple を介したソーシャルサインイン、および OpenID Connect(OIDC) と から返されるトークンの処理のオーバーヘッドを管理しますSAML IdPs。詳細について
は、「ユーザープールでのトークンの使用」を参照してください。
認証が正常に行われると、アプリケーションが Amazon Cognito からユーザープールトークンを受け取ります。ユーザープールトークンを使用して、次のことができます。
• Amazon DynamoDB や Amazon S3 AWS サービス などの のアプリケーションリソースのリクエ
ストを許可する AWS 認証情報を取得します。
• 一時的な取り消し可能な認証証明を提供します。
• アプリのユーザープロファイルに ID データを入力します。
• ユーザープールディレクトリでサインインしたユーザーのプロファイルへの変更を承認します。
• アクセストークンを使用してユーザー情報に対するリクエストを承認します。
• アクセストークンAPIsを使用して、アクセスで保護された外部の背後にあるデータへのリクエス
トを承認します。
• Amazon Verified Permissions を使用して、クライアントまたはサーバーに保存されているアプリ
ケーションアセットへのアクセスを許可します。
サインイン後にリソースにアクセスする

815

Amazon Cognito

開発者ガイド詳細については、「ユーザープール認証フロー」および「ユーザープールでのトークンの使用」を参照してください。

トピック• Amazon Verified Permissions によるクライアントまたはサーバーリソースへのアクセスの許可• サインイン後に API Gateway でリソースにアクセスする• サインイン後の ID プール AWS サービス を使用した へのアクセス

Amazon Verified Permissions によるクライアントまたはサーバーリソース
へのアクセスの許可
アプリは、サインインしたユーザーから Amazon Verified Permissions にトークンを渡すことができます。Verified Permissions は、構築したカスタムアプリケーション向けのスケーラブルできめ
細かなアクセス許可の管理および承認サービスです。Amazon Cognito ユーザープールは、Verified
Permissions ポリシーストアの ID ソースにすることができます。Verified Permissions は、プリンシ
パルからのリクエストされたアクションとリソースpremium_badge.png、およびユーザープール
トークンの属性GetPhotoについて、承認の決定を行います。
次の図は、アプリケーションが認証リクエストで Verified Permissions にユーザーのトークンを渡す
方法を示しています。

Verified Permissions によるリソースへのアクセス

816

Amazon Cognito

開発者ガイドAmazon Verified Permissions の使用を開始する
ユーザープールを Verified Permissions と統合すると、すべての Amazon Cognito アプリに対する
きめ細かな認証を一元的に取得できます。これにより、すべてのアプリケーション間でコーディン
グとレプリケートを行う必要があるきめ細かなセキュリティロジックが不要になります。Verified
Permissions による認可の詳細については、「」を参照してくださいAmazon Verified Permissionsによる承認。
Verified Permissions 認証リクエストには AWS 認証情報が必要です。認証リクエストに認証情報を安全に適用するには、以下の手法の一部を実装できます。
• サーバーのバックエンドにシークレットを保存できるウェブアプリケーションを運用します。
Verified Permissions によるリソースへのアクセス

817

Amazon Cognito

開発者ガイド• 認証された ID プールの認証情報を取得します。
• を介してユーザーリクエストをプロキシし access-token-authorized API、リクエストに認証情報を追加します AWS 。

サインイン後に API Gateway でリソースにアクセスする
Amazon Cognito ユーザープールトークンの一般的な用途は、APIゲートウェイ REST APIへのリク
エストを承認することです。アクセストークンの OAuth2.0 スコープは、 HTTP GETのようなメソッ
ドとパスを承認できます/app_assets。ID トークンは、 への汎用認証として機能しAPI、ユーザー
属性をバックエンドサービスに渡すことができます。API Gateway には、より詳細なロジックを適用できる JWTのオーソライザーHTTPAPIsや Lambda オーソライザーなどの追加のカスタム認証オ
プションがあります。
次の図は、アクセストークン内の 2.0 スコープRESTAPIを持つ OAuth にアクセスしようとしている
アプリケーションを示しています。

API Gateway リソースへのアクセス

818

Amazon Cognito

開発者ガイドアプリは、認証されたセッションからトークンを収集し、ベアラートークンとしてリクエストのAuthorizationヘッダーに追加する必要があります。トークンの内容を評価するにはAPI、、パス、およびメソッド用に設定したオーソライザーを設定します。API Gateway は、リクエストがオーソライザーに設定した条件に一致する場合にのみデータを返します。
API Gateway がアプリケーションからのアクセスAPIを承認する方法には、次のようなものがあります。
• アクセストークンには正しい 2.0 OAuth スコープが含まれています。の Amazon Cognito ユーザー
プールオーソライザーRESTAPIは、エントリに対する障壁が低い一般的な実装です。このタイプのオーソライザーへのリクエストの本文、クエリ文字列パラメータ、ヘッダーを評価することもできます。
• ID トークンは有効であり、有効期限が切れていません。ID トークンを Amazon Cognito オーソラ
イザーに渡すと、アプリケーションサーバーで ID トークンの内容をさらに検証できます。
• アクセストークンまたは ID トークンのグループ、クレーム、属性、またはロールは、Lambda
関数で定義した要件を満たします。Lambda オーソライザーは、リクエストヘッダー内のトークンを解析し、承認の決定について評価します。関数でカスタムロジックを構築するか、Amazon
Verified Permissions にAPIリクエストを行うことができます。
ユーザープールからのトークンを使用して AWS AppSync GraphQL APIへのリクエストを承認することもできます。

サインイン後の ID プール AWS サービス を使用した へのアクセス
ユーザーがユーザープールでサインインすると、ID プールから発行された一時的なAPI認証情報
AWS サービス を使用して にアクセスできます。
ウェブまたはモバイルアプリは、ユーザープールからトークンを受け取ります。ユーザープールを
ID プールの ID プロバイダーとして設定すると、ID プールはトークンを一時的な AWS 認証情報と交換します。これらの認証情報の範囲は、限定された AWS リソースセットへのアクセスをユーザーに許可するIAMロールとそのポリシーに限定できます。詳細については、「ID プール (フェデレー
ティッドアイデンティティ) の認証フロー」を参照してください。
次の図は、アプリケーションがユーザープールでサインインし、ID プールの認証情報を取得し、 からアセットをリクエストする方法を示しています AWS サービス。

ID プールを使用した AWS リソースへのアクセス

819

Amazon Cognito

開発者ガイドID プールの認証情報を使用して、次のことができます。
• ユーザー自身の認証情報を使用して、Amazon Verified Permissions にきめ細かな認証リクエストを行います。
• との接続APIを許可する Amazon API Gateway RESTAPIまたは AWS AppSync GraphQL に接続しますIAM。
• との接続RDSを許可する Amazon DynamoDB や Amazon などのデータベースバックエンドに接続しますIAM。
• Amazon S3 バケットからアプリケーションアセットを取得します。
• Amazon WorkSpaces 仮想デスクトップでセッションを開始します。

ID プールを使用した AWS リソースへのアクセス

820

Amazon Cognito

開発者ガイドID プールは、ユーザープールとの認証されたセッション内でのみ動作するわけではありません。また、サードパーティーの ID プロバイダーから直接認証を受け入れ、認証されていないゲストユー
ザーの認証情報を生成することもできます。
ID プールとユーザープールグループを使用して AWS リソースへのアクセスを制御する方法の詳細については、ユーザープールにグループを追加する「」および「」を参照してくださいロールベー
スアクセスコントロールの使用。また、ID プールと の詳細については AWS Identity and Access
Management、「」を参照してくださいID プールの概念。

を使用したユーザープールのセットアップ AWS Management Console
Amazon Cognito ユーザープールを作成し、クライアントアプリごとに [User Pool ID] (ユーザープー
ル ID) と [App Client ID] (アプリクライアント ID) をメモしておきます。ユーザープール作成の詳細については、「ユーザープールの開始方法」を参照してください。

を使用した ID プールのセットアップ AWS Management Console
次の手順では、 を使用して ID プール AWS Management Console を 1 つ以上のユーザープールおよびクライアントアプリケーションと統合する方法について説明します。
Amazon Cognito のユーザープール ID プロバイダー (IdP) を追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Amazon Cognito ユーザープール] を選択します。

5.

ユーザープール ID とアプリクライアント ID を入力します。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
a.

認証されたロール を設定したときに設定したデフォルトのロールをその IdP のユーザーに付与することも、ルール でロールを選択することもできます。Amazon Cognito ユーザー
プール IdP では、トークンの優先ロールクレームを持つロールを選択することもできます。cognito:preferred_role クレームの詳細については、「グループへの優先順位の値の割り当て」を参照してください。
i.

ルールを使用してロールを選択 を選択した場合は、ユーザーの認証からソースクレー
ム、クレームをルールと比較するために使用するオペレーター、このロールの選択に一

ID プールを使用した AWS リソースへのアクセス

821

Amazon Cognito

開発者ガイド

致する値、ロールの割り当てが一致するときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。
ii.

トークン で preferred_role クレームを持つロールを選択を選択した場合、Amazon
Cognito はユーザーのcognito:preferred_roleクレームでロールの認証情報を発行します。優先ロールクレームが存在しない場合、Amazon Cognito はロール解決に基づ
いて認証情報を発行します。

b.
7.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
• プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。
• sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピン
グを使用] を選択します。
• プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

8.

[変更を保存] を選択します。

ユーザープールを ID プールと統合する
アプリユーザーが認証されると、認証情報プロバイダーのログインマップにユーザーのアイデンティ
ティトークンを追加します。プロバイダー名は、Amazon Cognito ユーザープール ID に応じて異なります。次の構造になります。
cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>の値を取得できます。<region> ユーザープール ID から 。例えば、ユーザープール ID が の場
合us-east-1_EXAMPLE1、<region> は ですus-east-1。ユーザープール ID が の場合uswest-2_EXAMPLE2、<region> は ですus-west-2。
JavaScript
var cognitoUser = userPool.getCurrentUser();if (cognitoUser != null) {ID プールを使用した AWS リソースへのアクセス

822

Amazon Cognito

開発者ガイドcognitoUser.getSession(function(err, result) {if (result) {console.log('You are now logged in.');// Add the User's Id Token to the Cognito credentials login map.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'YOUR_IDENTITY_POOL_ID',
Logins: {'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>':
result.getIdToken().getJwtToken()
}
});
}
});
}

Android
cognitoUser.getSessionInBackground(new AuthenticationHandler() {@Override
public void onSuccess(CognitoUserSession session) {String idToken = session.getIdToken().getJWTToken();
Map<String, String> logins = new HashMap<String, String>();logins.put("cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>",session.getIdToken().getJWTToken());
credentialsProvider.setLogins(logins);}});

iOS - objective-C
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc]
initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];
AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration =[[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID"
clientSecret:@"YOUR_CLIENT_SECRET" poolId:@"YOUR_USER_POOL_ID"];[AWSCognitoIdentityUserPool
registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration
userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"];
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool
CognitoIdentityUserPoolForKey:@"UserPool"];
ID プールを使用した AWS リソースへのアクセス

823

Amazon Cognito

開発者ガイドAWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider
alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID"
identityProviderManager:pool];

iOS - swift

let serviceConfiguration = AWSServiceConfiguration(region: .USEast1,
credentialsProvider: nil)
let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId:"YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID")AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfigura
userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1,
identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)

Amazon Cognito ユーザープールのセキュリティ機能を使用する
ネットワーク侵入、パスワード推測、ユーザー偽装、悪意のあるサインアップやサインインからアプ
リケーションを保護したい場合があります。Amazon Cognito ユーザープールのセキュリティ機能の設定は、セキュリティアーキテクチャの重要なコンポーネントになる可能性があります。アプリケー
ションのセキュリティは、「 責任共有モデル」で説明されているように、「クラウド内のセキュリティ」です。 AWS https://aws.amazon.com/compliance/shared-responsibility-model/この章のツール
は、アプリケーションセキュリティ設計がこれらの目標に沿ったものとなる能力に役立ちます。
ユーザープールを設定するときに行う必要がある重要な決定は、パブリックサインアップとサインインを許可するかどうかです。機密クライアント、ユーザーの管理作成と確認、ドメインのないユー
ザープールなど、一部のユーザープールオプションは、インターネット経由の攻撃の度合いが低くなります。ただし、一般的なユースケースは、インターネット上のすべてのユーザーからのサインアッ
プを受け入れ、すべてのオペレーションをユーザープールに直接送信するパブリッククライアントです。どの設定でも、特にこれらのパブリック設定の場合は、セキュリティ機能を念頭に置いてユー
ザープールを計画およびデプロイすることをお勧めします。また、セキュリティが不十分であると、不要なソースが新しいアクティブユーザーを作成したり、既存のユーザーを悪用しようとしたりした
場合に、 AWS 請求に影響する可能性があります。
MFA および の高度なセキュリティ機能は、ローカルユーザー に適用されます。フェデレーティッド
ユーザーのセキュリティ体制 IdPs は、サードパーティーが担当します。

セキュリティ機能を使用する

824

Amazon Cognito

開発者ガイドユーザープールのセキュリティ機能
多要素認証 (MFA）
ユーザープールがSMSメッセージまたは認証アプリから送信するコードをリクエストして、ユーザープールのサインインを確認します。
高度なセキュリティ機能
サインインをモニタリングしてリスクの指標を確認し、サインインを適用MFAまたはブロックします。アクセストークンにカスタムクレームとスコープを追加します。E メールでMFAコードを送信します。
AWS WAF ウェブ ACLs
ユーザープールエンドポイントへの受信トラフィックを検査し、ネットワークレイヤーとアプリ
ケーションレイヤーで不要なアクティビティがないか認証APIします。
大文字と小文字の区別
E メールアドレスまたは優先ユーザー名が、文字大文字と小文字を除き、別のユーザーと同じユーザーの作成を防止します。
削除保護
自動システムがユーザープールを誤って削除しないようにします。でユーザープールの削除をさらに確認する必要があります AWS Management Console。
ユーザー存在エラー
ユーザープール内の既存のユーザー名やエイリアスの開示を防止します。ユーザー名が有効かど
うかにかかわらず、認証に失敗した場合は一般的なエラーを返します。
トピック• ユーザープールMFAへの の追加• ユーザープールの高度なセキュリティ機能• AWS WAF ウェブとユーザープールACLの関連付け• ユーザープールの大文字と小文字の区別• ユーザープールの削除保護• ユーザー存在エラー応答の管理
セキュリティ機能を使用する

825

Amazon Cognito

開発者ガイドユーザープールMFAへの の追加
多要素認証 (MFA) は、アプリのセキュリティを向上させます。これは、ユーザー名とパスワードという知っていることの認証要素に、持っていることの認証要素を追加するものです。ユーザーへのサインインの追加要素として、SMSテキストメッセージまたは時間ベースのワンタイムパスワード(TOTP) を選択できます。
Note
新しいユーザーがアプリに初めてサインインすると、Amazon Cognito はユーザープールに
OAuth が必要な場合でも 2.0 トークンを発行しますMFA。ユーザーが初めてサインインする
ときの 2 番目の認証要因は、Amazon Cognito が送信する検証メッセージの確認です。ユー
ザープールに が必要な場合MFA、Amazon Cognito は最初のサインインの試行のたびに使用する追加のサインイン要素を登録するようにユーザーに求めます。

アダプティブ認証を使用すると、リスクレベルの増加に応じて追加の認証要素を要求するようにユー
ザープールを設定できます。アダプティブ認証をユーザープールに追加するには、「ユーザープールの高度なセキュリティ機能」を参照してください。
ユーザープールrequiredの MFAを に設定すると、すべてのユーザーがサインインMFAを完了する必要があります。サインインするには、各ユーザーが少なくとも 1 つのMFA要素を設定する必要があります。MFA を に設定するときはrequired、ユーザープールがサインインを許可できるように、ユーザーオンボーディングにMFAセットアップを含める必要があります。
ホストされた UI は、 を必須に設定するMFAときに を設定するMFAようユーザーに求めます。ユー
ザープールで をオプションMFAに設定すると、ホストされた UI はユーザーにプロンプトを表示しません。オプションの を使用するにはMFA、ユーザーが を設定することを選択するように促すイン
ターフェイスをアプリで構築しMFA、API入力をガイドして追加のサインイン要素を検証する必要が
あります。
トピック
• MFAに関する考慮事項• ユーザーMFA設定• 多要素認証用のユーザープールの設定• SMS MFA• TOTP ソフトウェアトークン MFA
追加 MFA

826

Amazon Cognito

開発者ガイドMFAに関する考慮事項を設定する前にMFA、次の点を考慮してください。
• ユーザープールMFAで をアクティブ化し、2 番目の要素としてSMSテキストメッセージを選択す
ると、Amazon Cognito で検証していない電話番号属性にSMSメッセージを送信できます。ユー
ザーが を完了するSMSとMFA、Amazon Cognito は phone_number_verified 属性を に設定しますtrue。
• MFA コードの提示に 5 回失敗すると、Amazon Cognito は で説明されている指数タイムアウト
ロックアウトプロセスを開始しますユーザープール認証フロー。
• アカウントがユーザープールの Amazon Simple Notification Service (Amazon SNS) リソース AWS
リージョン を含む のSMSサンドボックスにある場合は、SMSメッセージを送信SNSする前にAmazon の電話番号を確認する必要があります。詳細については、「SMS Amazon Cognito ユー
ザープールのメッセージ設定」を参照してください。
• 高度なセキュリティ機能を使用して検出されたイベントに応じてユーザーMFAのステータスを変更するには、Amazon Cognito ユーザープールコンソールでユーザーをアクティブ化MFAしてオプションとして設定します。詳細については、「ユーザープールの高度なセキュリティ機能」を参照
してください。
• SMS メッセージには、ユーザーに電話番号属性が必要です。ユーザープールで必須属
性phone_numberとして を設定できます。この場合、ユーザーは電話番号を指定しない限りサインアップを完了できません。これらの属性を必須として設定せず、SMSメッセージ を実行する
場合はMFA、ユーザーがサインアップするときに電話番号の入力を求めます。ベストプラクティ
スとして、ユーザープールを設定して、これらの属性 を検証するようにユーザーに自動的にメッセージを送信します。
Amazon Cognito は、ユーザーがSMSメッセージで一時コードを正常に受信し、そのコードをVerifyUserAttributeAPIリクエストで返した場合、電話番号を検証済みとしてカウントします。別の方法として、チームは電話番号を設定し、AdminUpdateUserAttributesAPIリクエストを実行する管理アプリケーションで検証済みとしてマークすることもできます。
• を必須MFAに設定し、複数の認証係数をアクティブ化した場合、Amazon Cognito は新しいユーザーに、使用するMFA係数を選択するよう促します。SMS メッセージ を設定するには、ユーザーに電話番号が必要ですMFA。ユーザーが使用可能なメッセージベースの に 属性を定義していない場合MFA、Amazon Cognito は TOTP を設定するように促しますMFA。MFA 要
素 (SELECT_MFA_TYPE) を選択し、選択した要素 (MFA_SETUP) を設定するプロンプトは、InitiateAuth および AdminInitiateAuthAPIオペレーションへのチャレンジレスポンスとして表示されます。
追加 MFA

827

Amazon Cognito

開発者ガイドユーザーMFA設定
ユーザーは複数のMFA要素を設定できます。アクティブにできるのは 1 つだけです。ユーザープー
ル設定またはユーザープロンプトで、ユーザーの有効なMFA設定を選択できます。ユーザープー
ルの設定と独自のユーザーレベルの設定が以下の条件を満たす場合、ユーザープールはユーザーに
MFAコードの入力を求めます。
1. ユーザープールではMFA、 をオプションまたは必須に設定します。
2. ユーザーには有効なphone_number属性があるか、 の認証アプリを設定していますTOTP。
3. 少なくとも 1 つのMFA要素がアクティブです。
4. 1 つのMFA要素が優先として設定されます。
MFA 設定について知っておくべきこと
ユーザープールの設定は、ユーザーが選択できるMFA方法に影響します。以下は、ユーザーがMFA設定する機能に影響を与えるユーザープール設定の一部です。
• Amazon Cognito コンソールの「サインインエクスペリエンス」タブの「多要素認証設定」
では、 MFA をオプションまたは必須に設定するか、オフにすることができます。この設定
は、、CreateUserPool、および MfaConfigurationのパラメータUpdateUserPoolとAPI同等ですSetUserPoolMfaConfig。
また、多要素認証設定では、 MFAメソッド設定によってユーザーが設定できるMFA要素が決まります。この設定は SetUserPoolMfaConfigオペレーションとAPI同等です。
「ユーザーアカウント復旧」の「サインインエクスペリエンス」タブで、パスワードを忘れたユー
ザーにユーザープールがメッセージを送信する方法を設定できます。ユーザーの優先MFA方法
は、ユーザープール内の最も優先度の高い Recovery メッセージ配信方法と同じ配信方法を持つことはできません。この設定は、 CreateUserPoolおよび の AccountRecoverySettingパラメータとAPI同等ですUpdateUserPool。
• MFA メソッドを 1 つだけ使用可能として設定した場合、ユーザーMFA設定を管理する必要はありません。
• アクティブなSMS設定により、SMSメッセージはユーザープールで自動的に使用可能なMFAメ
ソッドになります。
• ユーザープールで MFAを必須に設定すると、ユーザーはMFAメソッドを有効または無効にできません。優先メソッドのみを設定できます。
追加 MFA

828

Amazon Cognito

開発者ガイド• ユーザープールで MFAをオプションに設定すると、ホストされた UI はユーザーに対して の設定を求めるプロンプトを表示しませんがMFA、ユーザーが希望するMFA方法を持っている場合は
MFAコードの入力を求めます。
• 高度なセキュリティ機能をアクティブ化し、アダプティブ認証レスポンスをフル機能モードで設定する場合、 ユーザープールでは はオプションMFAである必要があります。アダプティブ認証による応答オプションの 1 つはMFA、サインイン試行にリスクレベルが含まれていると評価されたユーザーに を要求することです。
コンソールの「サインアップエクスペリエンス」タブの「必須属性」設定は、ユーザーがア
プリケーションにサインアップするために電話番号を指定する必要があるかどうかを決定しま
す。SMS ユーザーが phone_number 属性を持っている場合、 メッセージは対象となるMFA要素になります。の Schema パラメータは、必要に応じて属性CreateUserPoolを設定します。
• ユーザープールで MFAを必須に設定し、ユーザーがホストされた UI でサインインすると、Amazon Cognito はユーザープールで使用可能なMFAメソッドからメソッドを選択するように促します。ホストされた UI は、電話番号の収集と のセットアップを処理しますTOTP。
API MFA設定を構成するための オペレーション
アクセストークン認証を使用するセルフサービスモデル、または管理APIオペレーションを使用する管理者管理モデルで、ユーザーのMFAプリファレンスを設定できます。これらのオペレーション
はMFAメソッドを有効または無効にし、複数のメソッドのいずれかを優先オプションとして設定します。ユーザーが MFA 設定を設定すると、Amazon Cognito はサインイン時に任意のMFA方法からコードを提供するよう促します。設定を設定していないユーザーは、SELECT_MFA_TYPEチャレンジ
で優先メソッドを選択するプロンプトを受け取ります。
• ユーザーのセルフサービスモデルまたはパブリックアプリケーションでは、サインインユーザーのアクセストークンでSetUserMfaPreference承認された がMFA設定を行います。
• 管理者管理アプリケーションまたは機密アプリケーションでは、管理者 AWS 認証情報
でAdminSetUserPreference承認された がMFA設定を行います。
Amazon Cognito コンソールのユーザータブからユーザーMFA設定を設定することもできます。Amazon Cognito ユーザープール のパブリック認証モデルと機密認証モデルの詳細については
API、「」を参照してくださいAmazon Cognito ユーザープールAPIとユーザープールエンドポイントの使用。

追加 MFA

829

Amazon Cognito

開発者ガイド多要素認証用のユーザープールの設定
Amazon Cognito コンソールMFAで を設定できます。
Amazon Cognito コンソールMFAで を設定するには
1.

Amazon Cognito コンソールにサインインします。

2.

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

3.

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

4.

[Sign-in experience] (サインインエクスペリエンス) タブを選択します。[Multi-factor
authentication] (多要素認証) を探し、[Edit] (編集) を選択します。

5.

ユーザープールで使用するMFA強制方法を選択します。

a.

追加 MFAが必要ですMFA。ユーザープール内のすべてのユーザーは、追加のSMSコード、または時間ベースのワンタイムパスワード (TOTP) 要素でサインインする必要があります。
830

Amazon Cognitob.

開発者ガイドオプション MFA - 追加のサインイン要素を登録するオプションをユーザーに付与できますが、サインインMFAするように を設定していないユーザーも許可できます。アダプティブ認証を使用している場合は、このオプションを選択してください。アダプティブ認証の詳細については、「ユーザープールの高度なセキュリティ機能」を参照してください。

c.

なしMFA。ユーザーは、サインイン要素を追加登録することはできません。

6.

アプリでサポートしているMFA方法を選択します。SMS メッセージまたは TOTP生成のAuthenticator アプリケーションを 2 番目の要素として設定できます。

7.

SMS テキストメッセージを 2 番目の要素として使用し、SMSメッセージの Amazon Simple
Notification Service (Amazon SNS) で使用する IAMロールを設定していない場合は、コンソー
ルで作成します。ユーザープールのメッセージングタブで、 を検索SMSして編集 を選択します。Amazon Cognito がユーザーにSMSメッセージを送信できるようにする既存のロールを使用することもできます。詳細については、「IAM ロール」を参照してください。

8.

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

SMS MFASMS MFA メッセージは、ユーザーがサインインする前にメッセージの送信先にアクセスできることを確認します。パスワードだけでなく、元のユーザーのSMSメッセージにもアクセスできることを確認します。Amazon Cognito は、ユーザーがユーザー名とパスワードを正常に提供した後にユー
ザープールが送信したショートコードを提供するようユーザーに要求します。
SMS MFA ユーザーがプロファイルに電話番号を追加した後は、追加の設定は必要ありません。Amazon Cognito は、未検証の電話番号にメッセージを送信できます。ユーザーが最初の を完了するとMFA、Amazon Cognito は電話番号を検証済みとしてマークします。
MFA 認証は、 を持つユーザーがアプリケーションにユーザー名とパスワードMFAを入力したときに開始されます。アプリケーションは、 InitiateAuthまたは AdminInitiateAuthAPIリクエストを呼び出す
SDKメソッドでこれらの初期パラメータを送信します。API レスポンスChallengeParametersのには、認証コードが送信された場所を示すCODE_DELIVERY_DESTINATION値が含まれます。アプ
リケーションで、ユーザーに電話の確認を求めるフォームを表示し、コードの入力要素を含めます。
ユーザーがコードを入力したら、チャレンジレスポンスAPIリクエストで送信してサインインプロセ
スを完了します。
のユーザーがホストされた UI でユーザー名とパスワードを使用してMFAサインインすると、MFA
コードの入力が自動的に求められます。

追加 MFA

831

Amazon Cognito

開発者ガイドユーザープールは、 MFA の Amazon Simple Notification Service (Amazon ) リソースを使用して、およびその他の Amazon Cognito 通知のSMSメッセージを送信します AWS アカウント。 SNSこれらのリンクされたサービスには、メッセージ配信の AWS 請求書に独自のコストがかかります。また、本番稼働用ボリュームでメッセージを送信するための追加要件もあります。詳細については、次のリンクを参照してください。
• SMS Amazon Cognito ユーザープールのメッセージ設定• ワールドワイドSMS料金• Amazon Cognito ユーザープールの E メール設定
SMS メッセージに関する考慮事項 MFA• このMFAコードは、アプリケーションクライアントに設定した認証フローセッション期間に対して有効です。
[App clients and analytics] (アプリクライアントと分析) でアプリクライアントを変更するときに、[App integration] (アプリ統合) タブの Amazon Cognito コンソールで認証フローセッションの期間を設定します。CreateUserPoolClient または UpdateUserPoolClientAPIリクエストで認証フローセッション期間を設定することもできます。詳細については、「ユーザープール認証
フロー」を参照してください。
• ユーザーが Amazon Cognito が未検証の電話番号に送信したSMSメッセージからコードを正常に提供すると、Amazon Cognito は対応する属性を検証済みとしてマークします。
• ユーザーはアクセストークンを使用して、 に関連付けられている電話番号の値を変更することはできませんMFA。チームはAdminUpdateUserAttributesAPI、リクエストで管理者 AWS 認証情報を使用してこれらの値を変更する必要があります。
• ユーザーが に関連付けられている電話番号の値にセルフサービスで変更を加えるにはMFA、サイ
ンインしてアクセストークンでリクエストを承認する必要があります。現在の電話番号にアクセスできない場合は、サインインできません。チームはAdminUpdateUserAttributesAPI、リクエストで管理者 AWS 認証情報を使用してこれらの値を変更する必要があります。
• ユーザープールで を設定SMSした後は、使用可能なMFA要素としてSMSメッセージを無効にする
ことはできません。

TOTP ソフトウェアトークン MFA
ユーザープールMFAでTOTPソフトウェアトークンを設定すると、ユーザーはユーザー名とパスワー
ドでサインインし、 を使用して認証TOTPを完了します。ユーザーがユーザー名とパスワードを設定
追加 MFA

832

Amazon Cognito

開発者ガイドして検証すると、 のTOTPソフトウェアトークンをアクティブ化できますMFA。アプリが Amazon
Cognito がホストする UI を使用してユーザーをサインインする場合、ユーザーはユーザー名とパス
ワードを送信し、追加のサインインページでTOTPパスワードを送信します。
Amazon Cognito コンソールでユーザープールTOTPMFAの をアクティブ化することも、Amazon
Cognito APIオペレーションを使用することもできます。ユーザープールレベルでは、
SetUserPoolMfaConfigを呼び出して TOTP を設定MFAおよび有効化できますMFA。
Note
ユーザープールMFAのTOTPソフトウェアトークンをアクティブ化していない場合、Amazon
Cognito はトークンを使用してユーザーを関連付けたり検証したりすることはできません。この場合、ユーザーはSoftwareTokenMFANotFoundException説明による例
外Software Token MFA has not been enabled by the userPoolを受診します。
後でユーザープールMFAのソフトウェアトークンを非アクティブ化した場合、以前にTOTP
トークンを関連付けて検証したユーザーは、引き続き に使用できますMFA。

ユーザーの TOTPの設定は、ユーザーがワンタイムパスワードを入力して検証するシークレットコー
ドを受け取る複数ステップのプロセスです。次に、 をユーザーTOTPMFAに対して有効にするか、をユーザーに適したMFA方法TOTPとして設定できます。
が要求するようにユーザープールを設定しTOTPMFA、ユーザーがホストされた UI でアプリにサインアップすると、Amazon Cognito はユーザープロセスを自動化します。Amazon Cognito は、ユーザーにMFAメソッドの選択を促し、認証アプリをセットアップするための QR コードを表示し、MFA登録を検証します。ユーザーが SMSと のどちらかを選択できるユーザープールでは
MFA、Amazon Cognito TOTP はユーザーに対し、選択したメソッドも提示します。ホストされた UI
サインアップのエクスペリエンスについて詳しくは、「Amazon Cognito でホストされた UI での新規アカウントのサインアップの方法」を参照してください。
Important
ユーザープールACLに関連付けられた AWS WAF ウェブがあり、ウェブ内のルールが ACLを提示するとCAPTCHA、ホストされた UI TOTP登録で回復不可能なエラーが発生する可能性があります。CAPTCHA アクションがあり、ホストされた UI に影響を与えないルールを作成するにはTOTP、「」を参照してくださいホストされた UI ACL用に AWS WAF ウェブを設定する TOTP MFA。 AWS WAF ウェブACLsと Amazon Cognito の詳細については、「」を参照してくださいAWS WAF ウェブとユーザープールACLの関連付け。

追加 MFA

833

Amazon Cognito

開発者ガイドAmazon Cognito APIを使用するカスタム UI TOTPMFAに を実装するには、「」を参照してくださ
いAmazon Cognito ユーザープールのユーザーMFAに対する の設定 API。
ユーザープールMFAに を追加するには、「」を参照してくださいユーザープールMFAへの の追加。
TOTP MFA 考慮事項と制限事項
1. Amazon Cognito は、TOTPコードを生成する認証アプリケーションMFAを通じてソフトウェア
トークンをサポートします。Amazon Cognito はハードウェアベースの をサポートしていません
MFA。
2. ユーザープールTOTPを設定していないユーザーに が必要な場合、ユーザーは 1 回限りのアクセ
ストークンを受け取り、アプリがユーザーTOTPMFAに対して をアクティブ化するために使用できます。それ以降のサインイン試行は、ユーザーが追加のTOTPサインイン要素を登録するまで失敗します。
• SignUp API オペレーションまたはホストされた UI を使用してユーザープールにサインアップするユーザーは、サインアップが完了すると 1 回限りのトークンを受け取ります。
• ユーザーを作成し、ユーザーが初期パスワードを設定すると、Amazon Cognito はホストされた
UI からユーザーに 1 回限りのトークンを発行します。ユーザーに永続的なパスワードを設定す
ると、ユーザーが最初にサインインしたときに Amazon Cognito が 1 回限りのトークンを発行します。
• Amazon Cognito は、 InitiateAuthまたは AdminInitiateAuthAPIオペレーションでサインインする
管理者作成ユーザーに 1 回限りのトークンを発行しません。ユーザーが最初のパスワードを設定するチャレンジに成功した後、またはユーザーの永続的なパスワードを設定すると、Amazon
Cognito はすぐにユーザーに の設定をリクエストしますMFA。
3. を必要とするユーザープールのユーザーが 1 回限りのアクセストークンをMFA既に受け取っていてもTOTP、 をセットアップしていない場合MFA、ユーザーは をセットアップするまでホストされた UI でサインインできませんMFA。アクセストークンの代わりに、 MFA_SETUP チャ
レンジから InitiateAuthまたは へのsessionレスポンス値を AssociateSoftwareToken リクエス
トAdminInitiateAuthで使用できます。
4. ユーザーが をセットアップしている場合TOTP、後でユーザープールの を非アクティブ化した場
合でもMFA、 TOTP に使用できます。
5. Amazon Cognito は、 HMAC-SHA1 ハッシュ関数でコードを生成する認証アプリケーション
TOTPsからのみ受け付けます。SHA-256 ハッシュで生成されたコードはCode mismatchエラーを返します。

追加 MFA

834

Amazon Cognito

開発者ガイドAmazon Cognito ユーザープールのユーザーMFAに対する の設定 API
ユーザーが初めてサインインすると、アプリはワンタイムアクセストークンを使用してTOTPプライ
ベートキーを生成し、テキストまたは QR コード形式でユーザーに提示します。ユーザーは認証ア
プリケーションを設定し、その後のサインイン試行TOTPのために を提供します。アプリケーション
またはホストされた UI は、MFAチャレンジレスポンスで TOTPを Amazon Cognito に提示します。
トピック• TOTP ソフトウェアトークンを関連付ける• TOTP トークンを検証する• でサインインする TOTP MFA• TOTP トークンを削除する
TOTP ソフトウェアトークンを関連付ける
TOTP トークンを関連付けるには、ワンタイムパスワードで検証する必要があるシークレットコード
をユーザーに送信します。トークンの関連付けには 3 つのステップが必要です。
1. ユーザーがTOTPソフトウェアトークン を選択したらMFA、 AssociateSoftwareTokenを呼び出して、ユーザーアカウント用に一意に生成された共有シークレットキーコードを返します。アクセ
ストークンまたはセッション文字列 AssociateSoftwareToken を使用して を承認できます。
2. アプリは、プライベートキーまたはプライベートキーから生成した QR コードをユーザーに提示します。ユーザーは、Google Authenticator などの TOTP生成アプリにキーを入力する必要があります。libqrencode を使用して、QR コードを生成できます。
3. ユーザーがキーを入力するか、Google Authenticator などの認証システムアプリケーションに QR
コードをスキャンすると、アプリがコードの生成を開始します。
TOTP トークンを検証する
次に、TOTPトークンを検証します。次のように、ユーザーからサンプルコードをリクエスト
し、Amazon Cognito サービスに提供して、ユーザーがTOTPコードを生成していることを確認します。
1. アプリは、ユーザーが認証システムアプリケーションを適切に設定したことを示すコードの入力をユーザーに促します。
2. ユーザーの認証システムアプリケーションは、一時的なパスワードを表示します。認証システム
アプリケーションは、ユーザーに与えたシークレットキーに基づいてパスワードを作成します。
追加 MFA

835

Amazon Cognito

開発者ガイド3. ユーザーは一時パスワードを入力します。アプリケーションはVerifySoftwareTokenAPIリク
エストで一時パスワードを Amazon Cognito に渡します。
4. Amazon Cognito は、ユーザーに関連付けられたシークレットキーを保持し、 を生成
TOTPして、ユーザーから提供されたシークレットキーと比較します。一致した場合
は、VerifySoftwareToken は SUCCESS レスポンスを返します。
5. Amazon Cognito は、 TOTP要素をユーザーに関連付けます。
6. VerifySoftwareToken オペレーションが ERROR レスポンスを返した場合は、ユーザーのク
ロックが正しいこと、およびリトライの最大回数を超えていないことを確認します。Amazon
Cognito は、試行前または試行後 30 秒以内のTOTPトークンを受け入れ、マイナークロックス
キューを考慮します。問題を解決したら、 VerifySoftwareToken オペレーションを再試行してください。
でサインインする TOTP MFA
この時点で、ユーザーは時間ベースのワンタイムパスワードを使用したサインインを行います。以下
はその手順です。
1. ユーザーはユーザー名とパスワードを入力してクライアントアプリにサインインします。
2. TOTP MFA チャレンジが呼び出され、ユーザーはアプリケーションから一時パスワードを入力するように求められます。
3. ユーザーは、関連付けられた TOTP生成アプリから一時パスワードを取得します。
4. ユーザーがクライアントアプリにTOTPコードを入力します。アプリは、コードを検証するよう
Amazon Cognito サービスに通知します。サインインするたびに、 を呼び出して、新しいTOTP認
証チャレンジに対する応答を取得RespondToAuthChallengeする必要があります。
5. Amazon Cognito によってトークンが検証されると、サインインが成功し、ユーザーは認証フロー
を続行します。
TOTP トークンを削除する
最後に、アプリはユーザーがTOTP設定を非アクティブ化することを許可する必要があります。現在、ユーザーのTOTPソフトウェアトークンを削除することはできません。ユーザーのソフトウェ
アトークンを置き換えるには、新しいソフトウェアトークンを関連付けて検証します。ユーザーの TOTPMFAを非アクティブ化するには、 SetUserMFAPreferenceを呼び出して、 を使用しないか
MFA、 のみを使用するようにユーザーを変更しますSMSMFA。

追加 MFA

836

Amazon Cognito

開発者ガイド1. をリセットするユーザーのために、アプリにインターフェイスを作成しますMFA。このインターフェイスでユーザーにパスワードの入力を求めます。
2. Amazon Cognito がTOTPMFAチャレンジを返す場合は、 でユーザーMFAの設定を更新しますSetUserMFAPreference。
3. アプリで、ユーザーが非アクティブ化したことを伝えMFA、再度サインインするように促します。
ホストされた UI ACL用に AWS WAF ウェブを設定する TOTP MFA
ユーザープールACLに関連付けられた AWS WAF ウェブがあり、ウェブ内のルールが ACLを提示す
るとCAPTCHA、ホストされた UI TOTP登録で回復不可能なエラーが発生する可能性があります。
AWS WAF CAPTCHA ルールは、この方法でホストされた UI でのみ に影響TOTPMFAします。SMS
MFA は影響を受けません。
Amazon Cognito は、CAPTCHAルールでユーザーがTOTPMFAセットアップを完了できない場合に、次のエラーを表示します。
WAF captcha のため、リクエストは許可されません。
このエラーは、 がユーザープールがバックグラウンドCAPTCHAで行う AssociateSoftwareTokenお
よび VerifySoftwareTokenAPIリクエストに応答して を AWS WAF プロンプトする場合に発生します。CAPTCHA アクションがあり、ホストされた UI に影響を与えないルールを作成するにはTOTP、ルール内のCAPTCHAアクションVerifySoftwareTokenから
AssociateSoftwareTokenおよび のx-amzn-cognito-operation-nameヘッダー値を除外します。
次のスクリーンショットは、x-amzn-cognito-operation-nameヘッダー値がAssociateSoftwareTokenまたは でないすべてのリクエストにCAPTCHAアクションを適用する
AWS WAF ルールの例を示していますVerifySoftwareToken。

追加 MFA

837

Amazon Cognito

追加 MFA

開発者ガイド838

Amazon Cognito

開発者ガイドAWS WAF ウェブACLsと Amazon Cognito の詳細については、「」を参照してくださいAWS WAF
ウェブとユーザープールACLの関連付け。

ユーザープールの高度なセキュリティ機能
ユーザープールを作成すると、Amazon Cognito コンソールのナビゲーションバーの [Advanced
security] (アドバンストセキュリティ) にアクセスできるようになります。ユーザープールのアドバン
ストセキュリティ機能をオンにし、さまざまなリスクに対応して実行されるアクションをカスタマイズすることができます。また、監査モードを使用して、セキュリティ緩和策を適用せずに、検出されたリスクに関するメトリクスを収集できます。監査モードでは、高度なセキュリティ機能がメトリク
スを Amazon に発行します CloudWatch。Amazon Cognito が最初の高度なセキュリティイベントを生成した後に、高度なセキュリティメトリクスを確認できます。「脅威保護メトリクスの表示」を参照してください。
のアドバンスドセキュリティ機能には追加料金が適用されます。詳細については、Amazon Cognitoの料金」を参照してください。
次のユーザープールオプションは、高度なセキュリティ機能 のコンポーネントです。
アクセストークンのカスタマイズ
アドバンストセキュリティ機能を有効にすると、バージョン 2 の Lambda トリガーイベントへのレスポンスを受け入れるようにユーザープールを設定できます。バージョン 2 では、アクセス
トークンのスコープやその他のクレームをカスタマイズできます。これにより、ユーザーの認証時に柔軟な承認結果を作成する能力が高まります。詳細については、「アクセストークンのカス
タマイズ」を参照してください。
脅威からの保護
脅威保護は、ユーザープール内の望ましくないアクティビティのモニタリングツールのセットであり、潜在的に悪意のあるアクティビティを自動的にシャットダウンするための設定ツールです。脅威保護には、標準認証オペレーションとカスタム認証オペレーションの設定オプションが異なります。例えば、疑わしいカスタム認証のサインインを使用してユーザーに通知を送信し、追加のセキュリティ要因を設定しても、基本的なユーザー名/パスワード認証を使用して同じリス
クレベルでユーザーをブロックできます。
漏えいした認証情報
ユーザーは複数のユーザーアカウントのパスワードを再利用します。Amazon Cognito の認
証情報漏えい機能では、ユーザー名とパスワードの公開漏えいに関するデータを収集し、高度なセキュリティ機能

839

Amazon Cognito

開発者ガイドユーザーの認証情報を漏えいした認証情報のリストと比較します。漏えいした認証情報の検出では、よく推測されるパスワードもチェックされます。ユーザープールの username-andpassword 標準認証フローで、侵害された認証情報を確認できます。Amazon Cognito は、安全なリモートパスワード (SRP) またはカスタム認証で侵害された認証情報を検出しません。
漏えいした認証情報の確認を促すユーザーアクションと、それに応じて Amazon Cognito に実行してほしいアクションを選択できます。サインイン、サインアップ、パスワード変更のイベ
ントでは、Amazon Cognito はサインインをブロックするか、サインインを許可することができます。いずれの場合も、Amazon Cognito はイベントに関する詳細情報を見つけることができるユーザーアクティビティログを生成します。
アダプティブ認証
Amazon Cognito は、ユーザーのサインインリクエストから位置情報とデバイス情報を確認し、自動応答を適用してユーザープールのユーザーアカウントを疑わしいアクティビティから保護します。ユーザーアクティビティをモニタリングし、username-password と で検出されたリスクレベルへの応答、SRPおよびカスタム認証を自動化できます。
高度なセキュリティを有効にすると、Amazon Cognito はユーザーアクティビティにリスクス
コアを割り当てます。疑わしいアクティビティに自動応答を割り当てることができます。必須は MFA、ブロックサインイン 、アクティビティの詳細とリスクスコアを記録するだけです。
また、疑わしいアクティビティをユーザーに通知する E メールメッセージを自動的に送信して、ユーザーがパスワードのリセットやその他の自発的なアクションを実行できるようにすることもできます。
IP アドレスの許可リストと拒否リスト
完全な機能モードでの Amazon Cognito のアドバンストセキュリティ機能を使用して、IP ア
ドレス 常にブロック および 常に許可 例外を作成することができます。常にブロック 例外リストの IP アドレスからのセッションは、アダプティブ認証によってリスクレベルが割り当てられておらず、ユーザープールにサインインできません。
ログのエクスポート
高度なセキュリティ機能は、ユーザープールへのユーザーの認証リクエストの詳細をログに記録します。これらのログには、脅威評価、ユーザー情報、場所やデバイスなどのセッションメタ
データが記録されます。これらのログの外部アーカイブを作成して、保持と分析を行うことができます。Amazon Cognito ユーザープールは、脅威保護ログを Amazon S3、 CloudWatch Logs、および Amazon Data Firehose にエクスポートします。詳細については、「ユーザーイベント履歴の表示とエクスポート」を参照してください。
高度なセキュリティ機能

840

Amazon Cognito

開発者ガイドパスワードの再利用の防止
ユーザーは、記憶されているいくつかのパスワードの間で行き来することがあります。脅威からの保護における認証情報検出の侵害により、パスワード管理が不十分な場合の長期的な影響の一部を軽減できます。パスワード履歴ポリシーが残りを処理します。パスワードの再利用防止を使用すると、ユーザーの新しいパスワードと最後の n 個のパスワードを最大 24 個まで比較し、一致する場合はパスワードリセットオペレーションをブロックできます。
トピック• 高度なセキュリティ機能の考慮事項と制限事項• 高度なセキュリティ機能を有効にする• アクセストークンのカスタマイズ• 脅威からの保護• パスワードの再利用の防止• 高度なセキュリティ機能の無効化

高度なセキュリティ機能の考慮事項と制限事項
脅威保護オプションは認証フローによって異なります
Amazon Cognito は、アダプティブ認証と、認証フロー USER_PASSWORD_AUTHおよび による侵害された認証情報の検出の両方をサポートしていますADMIN_USER_PASSWORD_AUTH。に対してのみ
アダプティブ認証を有効にできますUSER_SRP_AUTH。フェデレーティッドサインインでは脅威保護を使用できません。
リクエストクォータへの常時ブロックのIPs寄与
ユーザープールの 常にブロック 例外リストの IP アドレスからのブロックされたリクエストは、
ユーザープールのリクエストレートクォータ に貢献します。
脅威保護はレート制限を適用しない
一部の悪意のあるトラフィックは、分散型サービス拒否 (DDoS) 攻撃など、大量のリクエストの特性を持っています。Amazon Cognito が受信トラフィックに適用するリスク評価はリクエストごとに行
われ、リクエストボリュームは考慮されません。ハイボリュームなイベントの個々のリクエストは、
ボリューム攻撃における各自の役割に関連しないアプリケーションレイヤーの理由で、リスクスコアと自動応答を受け取る場合があります。ユーザープールにボリューメトリック攻撃に対する防御を実高度なセキュリティ機能

841

Amazon Cognito

開発者ガイド装するには、 AWS WAF ウェブ を追加しますACLs。詳細については、「AWS WAF ウェブとユー
ザープールACLの関連付け」を参照してください。
脅威からの保護は M2M リクエストには影響しません
クライアント認証情報の付与は、ユーザーアカウントに接続しない machine-to-machine (M2M) 認証を目的としています。高度なセキュリティ機能は、ユーザープール内のユーザーアカウントとパス
ワードのみをモニタリングします。M2M アクティビティでセキュリティ機能を実装するには、リク
エストレートとコンテンツをモニタリング AWS WAF するための の機能を検討してください。詳細については、「AWS WAF ウェブとユーザープールACLの関連付け」を参照してください。

高度なセキュリティ機能を有効にする
Amazon Cognito user pools console
ユーザープールの高度なセキュリティ機能を有効にするには1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入
力します。

2.

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

3.

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

4.

高度なセキュリティタブを選択し、 のアクティブ化を選択します。

5.

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

API
CreateUserPool または UpdateUserPoolAPIリクエストで高度なセキュリティ機能をアクティブに設定します。次の部分的なリクエスト本文の例では、高度なセキュリティ機能を全機能モードに設定します。リクエストの完全な例については、「例」を参照してください。
"UserPoolAddOns": {"AdvancedSecurityMode": "ENFORCED"}

高度なセキュリティ機能

842

Amazon Cognito

開発者ガイドアクセストークンのカスタマイズ
Note
このページでは、Amazon Cognito ユーザープールの高度なセキュリティ機能がトークン生
成前の Lambda トリガーに追加する追加機能について説明します。トークン生成前トリガーの完全な概要については、「」を参照してくださいトークン生成前の Lambda トリガー。

ユーザープールアクセストークンは、 へのアクセス、エンドポイント APIからのユーザー属性の取得、外部システムのグループメンバーシップの確立など、アプリケーションにアクセス許可を付与します。 userInfo 高度なシナリオでは、実行時にアプリケーションが判断する追加の一時パラメー
タを使用して、ユーザープールディレクトリからデフォルトのアクセストークンデータに追加できます。例えば、Amazon Verified APIPermissions を使用してユーザーのアクセス許可を検証し、それに応じてアクセストークンのスコープを調整することができます。 ???
高度なセキュリティ機能は、トークン生成前トリガー の既存の関数に追加されます。高度なセキュリティ機能がなければ、追加のクレーム、ロール、グループメンバーシップを使用して ID トークン
をカスタマイズできます。高度なセキュリティにより、クレーム、ロール、グループメンバーシッ
プ、OAuthスコープを使用してアクセストークンをさらにカスタマイズできます。アクセストークンのカスタマイズは、 machine-to-machine (M2M) クライアント認証情報付与 では使用できません。
アクセストークンをカスタマイズするには
1.

高度なセキュリティ機能をアクティブ化します。

2.

トリガーの Lambda 関数を作成します。サンプル関数を使用するには、Node.js に設定します。

3.

Lambda 関数にサンプルコードを入力するか、独自のコードを作成します。関数は Amazon
Cognito からのリクエストオブジェクトを処理し、含める変更を返す必要があります。

4.

新しい関数をバージョン 2 のトークン生成前トリガーとして割り当てます。

詳細については、「アクセストークンのカスタマイズ」を参照してください。
追加リソース• Amazon Cognito ユーザープールのアクセストークンをカスタマイズする方法

高度なセキュリティ機能

843

Amazon Cognito

開発者ガイド脅威からの保護
脅威保護は、アカウント乗っ取りの兆候についてユーザーオペレーションをモニタリングし、影響を受けるユーザーアカウントのセキュリティ保護に自動的に応答する機能の総称です。脅威保護設定
は、ユーザーが標準認証フローとカスタム認証フローでサインインするときに適用できます。
脅威保護は、ユーザーのサインイン、サインアウト、その他のアクティビティを詳細に説明するログを生成します。これらのログはサードパーティーシステムにエクスポートできます。詳細について
は、「ユーザーイベント履歴の表示とエクスポート」を参照してください。
脅威保護の実施の概念
脅威保護は、ユーザープールがユーザーアクティビティをモニタリングし、リスクレベルを割り当て、ログを生成する監査専用モードで開始されます。ベストプラクティスとして、全機能モード を有効にする前に、監査専用モードで を 2 週間以上実行します。フル機能モードには、検出されたリスクの高いアクティビティと侵害されたパスワードに対する一連の自動リアクションが含まれます。
監査専用モードでは、Amazon Cognito が実行している脅威評価をモニタリングできます。また、誤検出と否定について特徴をトレーニングするフィードバックを提供することもできます。
ユーザープールレベル、および個々のアプリケーションクライアントのレベルで、すべてのアプリ
ケーションクライアントをカバーするように脅威保護の適用を設定できます。アプリケーションクラ
イアントの脅威保護設定は、ユーザープール設定を上書きします。アプリクライアントの脅威保護を設定するには、Amazon Cognito コンソールのユーザープールのアプリ統合タブからアプリクライア
ント設定に移動します。そこでは、クライアントレベルの設定を使用して、アプリケーションクライ
アント専用の強制を設定できます。
さらに、標準認証タイプとカスタム認証タイプに対して脅威保護を個別に設定できます。
標準認証とカスタム認証の脅威保護
脅威保護を設定する方法は、ユーザープールとアプリクライアントで実行する認証のタイプによって異なります。以下の各タイプの認証には、独自の強制モードと自動応答を含めることができます。
標準認証
標準認証は、ユーザーサインイン、サインアウト、パスワード管理であり、ユーザー名/パスワー
ドフローとホストされた UI を使用します。Amazon Cognito 脅威保護は、ホストされた UI でサ
インインするとき、または次のAPIAuthFlowパラメータを使用するときに、リスクの指標についてオペレーションをモニタリングします。
高度なセキュリティ機能

844

Amazon Cognito

開発者ガイドInitiateAuth
USER_PASSWORD_AUTH、USER_SRP_AUTH。 侵害された認証情報機能はUSER_SRP_AUTH、
サインイン時のパスワードにアクセスできず、このフローのイベントをモニタリングしたり、それに対してアクションを実行したりしません。
AdminInitiateAuth
ADMIN_USER_PASSWORD_AUTH、USER_SRP_AUTH。 侵害された認証情報機能
はUSER_SRP_AUTH、サインイン時のパスワードにアクセスできず、このフローのイベントをモニタリングしたり、それに対してアクションを実行したりしません。
標準認証の強制モードは、監査のみまたはフル関数 に設定できます。標準認証の脅威モニタリン
グを無効にするには、高度なセキュリティ機能を無効にします。
カスタム認証カスタム認証は、カスタムチャレンジ Lambda トリガー によるユーザーサインインです。
ホストされた UI でカスタム認証を行うことはできません。Amazon Cognito 脅威保護は、
InitiateAuthおよび の APIAuthFlowパラメータを使用してサインインするときに、リスクの指標CUSTOM_AUTHについてオペレーションをモニタリングしますAdminInitiateAuth。
カスタム認証の強制モードは、監査のみ、フル関数 、または強制なし に設定できます。 強制なしオプションは、他の高度なセキュリティ機能に影響を与えることなく、カスタム認証の脅威モニタリングを無効にします。
脅威保護の前提条件
開始するには、以下が必要です。
• アプリクライアントを持つユーザープール。詳細については、「ユーザープールの開始方法」を参照してください。
• リスクベースのアダプティブ認証機能を使用するには、Amazon Cognito コンソールで多要素認証(MFA) をオプションに設定します。詳細については、「ユーザープールMFAへの の追加」を参照
してください。
• E メール通知を使用している場合は、Amazon SESコンソールに移動して、E メール通知で使用する E メールアドレスまたはドメインを設定して検証します。Amazon の詳細については
SES、「Amazon での ID の検証SES」を参照してください。

高度なセキュリティ機能

845

Amazon Cognito

開発者ガイド

高度なセキュリティ機能と脅威保護の設定
Amazon Cognito の高度なセキュリティ機能を設定するには、次の手順に従います。
NoteAmazon Cognito ユーザープールコンソールでアプリクライアントに別の脅威保護設定を設定するには、アプリ統合タブからアプリクライアントを選択し、クライアントレベルの設定を使用するを選択します。

AWS Management Console
ユーザープールにアドバンストセキュリティを設定するには
1.

Amazon Cognito コンソールに移動します。プロンプトが表示されたら、 AWS 認証情報を入
力します。

2.

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

3.

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

4.

高度なセキュリティタブを選択し、 のアクティブ化を選択します。

5.

設定する脅威保護方法を選択します: 標準認証とカスタム認証 。カスタム認証と標準認証にはさまざまな強制モードを設定できますが、自動応答の設定はフル関数モードで共有されます。

6.

[Edit] (編集) を選択します。

7.

強制モード を選択します。検出されたリスクにすぐに対応を開始するには、フル関数を選択し、侵害された認証情報とアダプティブ認証の自動応答を設定します。ユーザーレベルのロ
グと で情報を収集するには CloudWatch、監査のみを選択します。
アドバンストセキュリティ料金は、[Audit only] (監査のみ) および [Full function] (完全な機能)
モードの両方で適用されます。詳細については、「Amazon Cognito の料金」を参照してください。
アクションを有効にする前に、高度なセキュリティ機能を監査モードで 2 週間保持することをお勧めします。この間、Amazon Cognito はアプリユーザーの使用パターンを学習し、イベントフィードバックを提供してレスポンスを調整できます。

8.

[Audit only] (監査のみ) を選択した場合、[Save changes] (変更の保存) を選択してください。[Full function] (完全な機能) を選択した場合:

高度なセキュリティ機能

846

Amazon Cognitoa.

開発者ガイド侵害された認証情報への応答は、 [Custom] (カスタム) アクションの実行または使用、または [Cognito defaults] (Cognito デフォルト) を選択します。Cognito デフォルトでは、i.

サインイン,サインアップ, およびパスワードの変更時に、侵害された認証情報を検
出します。

ii.

侵害された認証情報は、[Block sign-in] (サインインをブロックする) で応答します。

b.

[Compromised credentials] (侵害された認証情報) で [Custom] (カスタム) アクションを選択した場合、Amazon Cognito が [Event detection] (イベント検出) で使用する
ユーザープールアクション、および、Amazon Cognito に実行させたい [Compromised
credentials responses] (侵害された認証情報への応答) を選択します。侵害された認証情報によるサインインをブロックまたはサインインを許可することができます。

c.

[Adaptive authentication] (アダプティブ認証) で、悪意のあるサインイン試行への応答方
法を選択します。[Custom] (カスタム) アクションを実行または使用、または悪意のある
アクティビティの疑いに対応するために [Cognito defaults] (Cognito デフォルト) を選択します。[Cognito defaults] (Cognito デフォルト) を選択した場合、Amazon Cognito はす
べてのリスクレベルでサインインをブロックし、ユーザーに通知しません。

d.

[Adaptive authentication] (アダプティブ認証) で、 [Custom] (カスタム) アクションを選択した場合、重要度レベルに基づいて検出されたリスクに対して、Amazon Cognito で実行する [Automatic risk response] (自動リスク対応) アクションを選択します。リスクのレベルに応じて対応を割り当てる場合、より高いレベルのリスクに対して、より制限の少ない対応を割り当てることはできません。リスクレベルには、次の対応を割り当てることができます。
i.

サインインを許可する - 予防策をとりません。

ii.

オプション MFA - ユーザーが MFAを設定している場合、Amazon Cognito はサイン
イン時に常に追加SMSまたは時間ベースのワンタイムパスワード (TOTP) 要素の入力を要求します。ユーザーが MFAを設定していない場合は、通常どおりサインインを続行できます。

iii.

必須 MFA - ユーザーが MFAを設定している場合、Amazon Cognito はサインイン時に常にユーザーに追加 SMSまたは TOTP要素を提供するよう要求します。ユーザー
が MFAを設定していない場合、Amazon Cognito は を設定するよう促すプロンプトを表示しますMFA。ユーザーMFAに自動的に を要求する前に、 の電話番号をキャ
プチャするMFAメカニズム、または SMS の認証アプリを登録するメカニズムをアプリで設定しますTOTPMFA。

iv.

サインインをブロックする - ユーザーがサインインできないようにします。

高度なセキュリティ機能

847

Amazon Cognito

開発者ガイドv.

ユーザーに通知する - Amazon Cognito が検出したリスクと応答に関する情報を E
メールでユーザーに送信します。送信するメッセージの E メールメッセージテンプ
レートをカスタマイズできます。

9.

前の手順で [Notify user] (ユーザーに通知する) を選択した場合、アダプティブ認証に使用する E メール配信設定と E メールメッセージテンプレートをカスタマイズできます。
a.

E メール設定 でSES、アダプティブ認証で使用するリージョン 、FROME メールアド
レス FROM 、送信者名 、および REPLY-TO E メールアドレスを選択します。ユーザー
プールの E メールメッセージを Amazon Simple Email Service の統合方法の詳細については、「Amazon Cognito ユーザープールに使用する E メールの設定」を参照してください。

高度なセキュリティ機能

848

Amazon Cognitob.

開発者ガイドE メールテンプレートを拡張して、 HTMLとプレーンテキストの両方の E メールメッ
セージで適応型認証通知をカスタマイズします。E メールメッセージテンプレートの詳細については、「メッセージテンプレート」を参照してください。

10. IP アドレスの例外を展開して、高度なセキュリティリスク評価に関係なく、常に許可またはブロックされる IPv4 またはIPv6アドレス範囲の常時許可または常時ブロックリストを作成します。IP アドレス範囲をCIDR表記で指定します (192.168.100.0/24 など）。
11. [Save changes] (変更の保存) をクリックします。

高度なセキュリティ機能

849

Amazon Cognito

開発者ガイドAPI (user pool)
ユーザープールの高度なセキュリティ設定を設定するには、 UserPoolId パラメータを含む
が、 ClientIdパラメータを含まないSetRiskConfigurationAPIリクエストを送信します。以下
は、ユーザープールのリクエスト本文の例です。このリスク設定は、リスクの重大度に基づいて一連のアクションをエスカレートし、すべてのリスクレベルでユーザーに通知します。これは、侵害された認証情報ブロックをサインアップオペレーションに適用します。
この設定を適用するには、別の CreateUserPoolまたは UpdateUserPoolAPIリクエス
トENFORCEDで AdvancedSecurityMode を に設定する必要があります。この例のようなプ
レースホルダーテンプレートの詳細については、{username}「」を参照してくださいSMS と E
メール検証メッセージおよびユーザー招待メッセージの設定。
{"AccountTakeoverRiskConfiguration": {"Actions": {"HighAction": {"EventAction": "MFA_REQUIRED","Notify": true},
"LowAction": {"EventAction": "NO_ACTION","Notify": true},
"MediumAction": {"EventAction": "MFA_IF_CONFIGURED","Notify": true}},
"NotifyConfiguration": {"BlockEmail": {"Subject": "You have been blocked for suspicious activity","TextBody": "We blocked {username} at {login-time} from {ip-address}."},"From": "admin@example.com","MfaEmail": {"Subject": "Suspicious activity detected, MFA required","TextBody": "Unexpected sign-in from {username} on device {device-name}.
You must use MFA."},"NoActionEmail": {"Subject": "Suspicious activity detected, secure your user account",
高度なセキュリティ機能

850

Amazon Cognito

開発者ガイド"TextBody": "We noticed suspicious sign-in activity by {username} from{city}, {country} at {login-time}. If this was not you, reset your password."},"ReplyTo": "admin@example.com","SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/
admin@example.com"}},"CompromisedCredentialsRiskConfiguration": {"Actions": {"EventAction": "BLOCK"},"EventFilter": [ "SIGN_UP" ]},"RiskExceptionConfiguration": {"BlockedIPRangeList": [ "192.0.2.0/24","198.51.100.0/24" ],"SkippedIPRangeList": [ "203.0.113.0/24" ]},"UserPoolId": "us-west-2_EXAMPLE"}

API (app client)
アプリケーションクライアントの高度なセキュリティ設定を設定するには、 UserPoolIdパラ
メータと ClientIdパラメータを含むSetRiskConfigurationAPIリクエストを送信します。以下
は、アプリケーションクライアントのリクエスト本文の例です。このリスク設定は、ユーザープール設定よりも深刻で、高リスクのエントリをブロックします。また、侵害された認証情報ブ
ロックをサインアップ、サインイン、パスワードリセットオペレーションにも適用します。
この設定を適用するには、別の CreateUserPoolまたは UpdateUserPoolAPIリクエス
トENFORCEDで AdvancedSecurityMode を に設定する必要があります。この例のようなプ
レースホルダーテンプレートの詳細については、{username}「」を参照してくださいSMS と E
メール検証メッセージおよびユーザー招待メッセージの設定。
{"AccountTakeoverRiskConfiguration": {"Actions": {"HighAction": {"EventAction": "BLOCK","Notify": true},
"LowAction": {高度なセキュリティ機能

851

Amazon Cognito

開発者ガイド"EventAction": "NO_ACTION","Notify": true},
"MediumAction": {"EventAction": "MFA_REQUIRED","Notify": true}},
"NotifyConfiguration": {"BlockEmail": {"Subject": "You have been blocked for suspicious activity","TextBody": "We blocked {username} at {login-time} from {ip-address}."},"From": "admin@example.com","MfaEmail": {"Subject": "Suspicious activity detected, MFA required","TextBody": "Unexpected sign-in from {username} on device {device-name}.
You must use MFA."},"NoActionEmail": {"Subject": "Suspicious activity detected, secure your user account","TextBody": "We noticed suspicious sign-in activity by {username} from{city}, {country} at {login-time}. If this was not you, reset your password."},"ReplyTo": "admin@example.com","SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/
admin@example.com"}},"ClientId": "1example23456789","CompromisedCredentialsRiskConfiguration": {"Actions": {"EventAction": "BLOCK"},"EventFilter": [ "SIGN_UP", "SIGN_IN", "PASSWORD_CHANGE" ]},"RiskExceptionConfiguration": {"BlockedIPRangeList": [ "192.0.2.1/32","192.0.2.2/32" ],"SkippedIPRangeList": [ "192.0.2.3/32","192.0.2.4/32" ]},"UserPoolId": "us-west-2_EXAMPLE"}

高度なセキュリティ機能

852

Amazon Cognito

開発者ガイド侵害された認証情報の検出の使用
Amazon Cognito は、ユーザーのユーザー名とパスワードが他の場所で侵害されたかどうかを検出できます。これは、ユーザーが複数のサイトで認証情報を再利用したり、安全でないパスワードを使用したりするときに発生します。Amazon Cognito は、ユーザー名とパスワード、ホストされた UI、および Amazon Cognito でサインインするローカルユーザーをチェックしますAPI。ローカルユーザー
は、外部 IdP を介したフェデレーションなしに、ユーザープールディレクトリにのみ存在します。
Amazon Cognito コンソールの高度なセキュリティタブから、侵害された認証情報 を設定できます。[Event detection] (イベント検出) を設定して、侵害された認証情報を監視するユーザーイベント
を選択します。[Compromised credentials responses] (侵害された認証情報の応答) を設定し、侵害された認証情報が検出された場合にユーザーを許可するかブロックするかを選択します。Amazon
Cognito は、サインイン時、サインアップ時、パスワード変更時に侵害された認証情報をチェックすることができます。
サインインを許可する を選択すると、Amazon CloudWatch Logs を確認して、Amazon Cognito
がユーザーイベントに対して行う評価をモニタリングできます。詳細については、「脅威保護メ
トリクスの表示」を参照してください。[Block sign-in] (サインインをブロックする) を選択する
場合、Amazon Cognito は、侵害された認証情報を使用するユーザーによるサインインを防止します。Amazon Cognito がユーザーのサインインをブロックすると、ユーザーの UserStatus が
RESET_REQUIRED に設定されます。RESET_REQUIRED ステータスのユーザーは、再度サインイン
する前にパスワードを変更する必要があります。
Note
現在、Amazon Cognito は、Secure Remote Password (SRP) フローによるサインインオペ
レーションで侵害された認証情報をチェックしません。SRP は、サインイン時にハッシュされたパスワードの証明を送信します。Amazon Cognito は内部でパスワードにアクセスできないため、クライアントがプレーンテキストで渡したパスワードのみを評価できます。
Amazon Cognito は、ADMIN_USER_PASSWORD_AUTHフローAdminInitiateAuthAPIで を使用
するサインインと、USER_PASSWORD_AUTHフローInitiateAuthAPIで を使用するサインイン
で、認証情報が侵害されていないかをチェックします。

漏洩した認証情報の保護をユーザープールに追加するには、「ユーザープールの高度なセキュリティ機能」を参照してください。

高度なセキュリティ機能

853

Amazon Cognito

開発者ガイドアダプティブ認証の使用
アダプティブ認証では、リスクレベルの上昇に対応して、疑わしいサインインをブロックする、または 2 番目の要素認証を追加するようにユーザープールを設定できます。Amazon Cognito はサインイ
ンの試行ごとに、サインインリクエストが侵害されたソースからのものである可能性についてリス
クスコアを生成します。このリスクスコアは、アプリケーションが提供するデバイスとユーザーの要因、および Amazon Cognito がリクエストから派生するその他の要因に基づいています。Amazon
Cognito によるリスク評価に寄与する要因には、IP アドレスとユーザーエージェント、ユーザーエー
ジェント、および他のサインイン試行からの地理的距離などがあります。Amazon Cognito がユー
ザーのセッションでリスクを検出し、ユーザーがMFAまだ方法を選択していない場合、アダプティブ認証はユーザープール内のユーザーに対して多要素認証 (MFA) を有効にしたり、要求したりできます。ユーザーMFAに対して をアクティブ化すると、アダプティブ認証の設定方法に関係なく、認証中に 2 番目の要素を提供または設定するというチャレンジが常に発生します。ユーザーの観点か
ら見ると、アプリは のセットアップに役立つように を提供しMFA、オプションで Amazon Cognito
は追加の要素を設定するまで再度サインインできないようにします。
Amazon Cognito は、サインイン試行、そのリスクレベル、失敗したチャレンジに関するメトリクス
を Amazon に公開します CloudWatch。詳細については、「脅威保護メトリクスの表示」を参照してください。
アダプティブ認証をユーザープールに追加するには、「ユーザープールの高度なセキュリティ機能」
を参照してください。
トピック• アダプティブ認証の概要• API リクエストへのユーザーデバイスおよびセッションデータの追加• ユーザーイベント履歴の表示とエクスポート• イベントフィードバックを提供します• 通知メッセージの送信
アダプティブ認証の概要
Amazon Cognito コンソールのアドバンストセキュリティタブから、さまざまなリスクレベルで実行するアクションやユーザーへの通知メッセージのカスタマイズなど、アダプティブ認証の設定を選択できます。すべてのアプリクライアントにグローバルな高度なセキュリティ設定を割り当てることができますが、個々のアプリクライアントにはクライアントレベルの設定を適用できます。
高度なセキュリティ機能

854

Amazon Cognito

開発者ガイドAmazon Cognito アダプティブ認証は、各ユーザーセッションに「高」、「中」、「低」、「リスクなし」のいずれかのリスクレベルを割り当てます。
[Enforcement method] (強制実行メソッド) を [Audit-only] (監査専用) から [Full-function] (完全な機能) に変更する場合は、選択肢を慎重に検討してください。リスクレベルに適用する自動応答
は、Amazon Cognito が同じ特性を持つ後続のユーザーセッションに割り当てるリスクレベルに影響します。例えば、Amazon Cognito が最初にリスクが高いと評価したユーザーセッションに何もしな
いか、[Allow] (許可) を選択すると、Amazon Cognito では同様のセッションのリスクが低いと見なします。
リスクレベルごとに、以下のオプションから選択できます。
オプション

アクション

許可

ユーザーは、追加要素なしでサインインできます。

オプション MFA

第 2 要素を設定しているユーザーは、サインインするために第 2 要素のチャレンジを完了する必要があります。の電話番号SMSとTOTPソ
フトウェアトークンは、利用可能な 2 番目の要素です。2 番目の要素が設定されていないユー
ザーは、1 つの認証情報のみでサインインできます。

必須 MFA

第 2 要素を設定しているユーザーは、サインインするために第 2 要素のチャレンジを完了する必要があります。Amazon Cognito は、第 2 要素が設定されていないユーザーのサインインをブロックします。

ブロック

Amazon Cognito は、指定されたリスクレベル
ですべてのサインイン試行をブロックします。

Note
電話番号を 2 番目の認証要素SMSとして使用するために、電話番号を検証する必要はありません。

高度なセキュリティ機能

855

Amazon Cognito

開発者ガイドAPI リクエストへのユーザーデバイスおよびセッションデータの追加を使用してユーザーのAPIサインアップ、サインイン、パスワードのリセットを行うと、ユーザーのセッションに関する情報を収集して Amazon Cognito の高度なセキュリティに渡すことができます。
この情報には、ユーザーの IP アドレスと一意のデバイス識別子が含まれます。
ユーザーと Amazon Cognito の間に、プロキシサービスやアプリケーションサーバーなど、中間
ネットワークデバイスがある場合があります。ユーザーのコンテキストデータを収集して Amazon
Cognito に渡すことで、アダプティブ認証がサーバーやプロキシではなく、ユーザーエンドポイントの特性に基づいてリスクを計算できます。クライアント側のアプリが Amazon Cognito APIオペレー
ションを直接呼び出すと、アダプティブ認証は自動的に送信元 IP アドレスを記録します。ただし、デバイスのフィンガープリントも収集しない限り、user-agent などの他のデバイス情報は記録されません。
Amazon Cognito コンテキストデータ収集ライブラリを使用してこのデータを生成し、 ContextData
および UserContextDataパラメータを使用して Amazon Cognito の高度なセキュリティに送信します。コンテキストデータ収集ライブラリは に含まれています AWS SDKs。詳細について
は、「Amazon Cognito のウェブアプリケーションとモバイルアプリケーションとの統合」を参照してください。ユーザープールでアドバンストセキュリティ機能をアクティブ化している場
合、ContextData を送信できます。詳細については、「アドバンストセキュリティ機能を設定する」を参照してください。
アプリケーションサーバーから次の Amazon Cognito 認証APIオペレーションを呼び出すときは、ContextDataパラメータでユーザーのデバイスの IP を渡します。また、サーバー名、サーバーパス、およびエンコードされたデバイスフィンガープリントデータを渡します。
• AdminInitiateAuth• AdminRespondToAuthChallenge
Amazon Cognito の認証されていないAPIオペレーションを呼び出すと、Amazon Cognito
UserContextDataの高度なセキュリティ機能に送信できます。このデータには、EncodedData
パラメータのデバイスフィンガープリントが含まれます。また、次の条件を満たす場
合、UserContextData に IpAddress パラメータを送信できます。
• ユーザープールでアドバンストセキュリティ機能をアクティブ化しました。詳細については、「アドバンストセキュリティ機能を設定する」を参照してください。
• アプリクライアントにはクライアントシークレットがあります。詳細については、「ユーザープー
ルのアプリクライアントの設定」を参照してください。
高度なセキュリティ機能

856

Amazon Cognito

開発者ガイド• アプリクライアントで [Accept additional user context data] (追加のユーザーコンテキストデータを受け入れる) をアクティブ化しました。詳細については、「 追加のユーザーコンテキストデータの受け入れ (AWS Management Console)」を参照してください。
アプリケーションは、次の Amazon Cognito の認証されていないAPIオペレーションで、エ
ンコードされたデバイスフィンガープリントデータとユーザーのデバイスの IP アドレスを
UserContextDataパラメータに入力できます。
• InitiateAuth• RespondToAuthChallenge• SignUp• ConfirmSignUp• ForgotPassword• ConfirmForgotPassword• ResendConfirmationCode
追加のユーザーコンテキストデータの受け入れ (AWS Management Console)
ユーザープールは [Accept additional user context data] (追加のユーザーコンテキストデータを受け入れる) 機能をアクティブ化すると、UserContextData パラメータで IP アドレスを受け入れます。
次の場合は、この機能をアクティブ化する必要はありません。
• ユーザーは などの認証されたAPIオペレーションでのみサインインしAdminInitiateAuth 、ContextDataパラメータを使用します。
• 認証されていないAPIオペレーションのみが Amazon Cognito の高度なセキュリティ機能にデバ
イスのフィンガープリントを送信できるようにする必要がありますが、IP アドレスは送信しません。
Amazon Cognito コンソールでアプリクライアントを次のように更新し、追加のユーザーコンテキス
トデータのサポートを追加します。
1.

Amazon Cognito コンソールにサインインします。

2.

ナビゲーションペインで [ユーザープールの管理] を選択してから、編集するユーザープールを選択します。

3.

[App integration] (アプリケーションの統合) タブを選択します。

高度なセキュリティ機能

857

Amazon Cognito

4.

開発者ガイド[App clients and analytics] (アプリクライアントと分析) で、アプリクライアントを選択または作成します。詳細については、「ユーザープールのアプリクライアントの設定」を参照してください。

5.

[App client information] (アプリのクライアント情報) コンテナから [Edit] (編集) を選択します。

6.

アプリクライアントの [Advanced authentication settings] (詳細な認証設定) で、[Accept
additional user context data] (追加のユーザーコンテキストデータを受け入れる) を選択します。

7.

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

Amazon Cognito でユーザーコンテキストデータを受け入れるようにアプリクライアントを設定するにはAPI、 CreateUserPoolClientまたは UpdateUserPoolClientリクエストtrueでEnablePropagateAdditionalUserContextDataを に設定します。ウェブまたはモバイルア
プリからアドバンストセキュリティをアクティブ化する方法の詳細については、「アプリからユー
ザープールのアドバンストセキュリティを有効化する」を参照してください。アプリがサーバーから Amazon Cognito を呼び出すときに、クライアント側からユーザーコンテキストデータを収集します。メソッド を使用する例を JavaScript SDK次に示しますgetData。
var EncodedData =AmazonCognitoAdvancedSecurityData.getData(username, userPoolId, clientId);

アダプティブ認証を使用するようにアプリを設計する場合は、最新の Amazon Cognito SDKをアプリに組み込むことをお勧めします。の最新バージョンはSDK、デバイス ID、モデル、タイム
ゾーンなどのデバイスフィンガープリント情報を収集します。Amazon Cognito の詳細については
SDKs、「ユーザープールのインストールSDK」を参照してください。Amazon Cognito アドバンス
トセキュリティでは、アプリが正しい形式で送信したイベントにのみ保存され、リスクスコアが割り当てられます。Amazon Cognito がエラーレスポンスを返す場合は、リクエストに有効なシークレッ
トハッシュが含まれていること、および IPaddressパラメータが有効な IPv4または IPv6 アドレスであることを確認します。
ContextData および UserContextData リソース
• AWS Amplify SDK Android 用: GetUserContextData• AWS Amplify SDK iOS 用: userContextData• JavaScript: amazon-cognito-advanced-security-data.min.js

高度なセキュリティ機能

858

Amazon Cognito

開発者ガイドユーザーイベント履歴の表示とエクスポート
Amazon Cognito は、高度なセキュリティ脅威保護を有効にすると、ユーザーによって各認証イベ
ントのログを生成します。デフォルトでは、Amazon Cognito コンソールのユーザータブまたはAdminListUserAuthEventsAPIオペレーションを使用してユーザーログを表示できます。これらのイベントを CloudWatch Logs、Amazon S3、Amazon Data Firehose などの外部システムにエクスポー
トすることもできます。エクスポート機能を使用すると、アプリケーション内のユーザーアクティビ
ティに関するセキュリティ情報を、独自のセキュリティ分析システムによりアクセスしやすくすることができます。
トピック• ユーザーイベント履歴の表示 (AWS Management Console）• ユーザーイベント履歴の表示 (API/CLI）• ユーザー認証イベントのエクスポート
ユーザーイベント履歴の表示 (AWS Management Console）
ユーザーのサインイン履歴を表示するには、Amazon Cognito コンソールの [Users] (ユーザー) タブ
でユーザーを選択できます。Amazon Cognito は、ユーザーイベント履歴を 2 年間保持します。

各サインインイベントにはイベント ID があります。イベントには、場所、デバイスの詳細、およびリスク検出結果など、対応するコンテキストデータもあります。

高度なセキュリティ機能

859

Amazon Cognito

開発者ガイドまた、イベント ID を Amazon Cognito がイベントを記録した時点で発行したトークンと関連付けることができます。ID とアクセストークンには、ペイロードにこのイベント ID が含まれます。Amazon Cognito はまた、更新トークンの使用を元のイベント ID に関連付けます。元のイベン
ト ID は、Amazon Cognito トークンの発行につながったサインインイベントのイベント ID まで追跡できます。システム内のトークンの使用は、特定の認証イベントまで追跡できます。詳細について
は、「ユーザープールでのトークンの使用」を参照してください。
ユーザーイベント履歴の表示 (API/CLI）
Amazon Cognito APIオペレーションAdminListUserAuthEventsまたは -admin-list-user-authevents のAWS Command Line Interface （AWS CLI) を使用して、ユーザーイベント履歴をクエリできます。
AdminListUserAuthEvents requestの次のリクエスト本文は、1 人のユーザーの最新のアクティビティロ
グAdminListUserAuthEventsを返します。
{"UserPoolId": "us-west-2_EXAMPLE","Username": "myexampleuser","MaxResults": 1}

admin-list-user-auth-events requestの次のリクエストは、1 人のユーザーの最新のアクティビティログadmin-list-user-autheventsを返します。
aws cognito-idp admin-list-user-auth-events --max-results 1 --username myexampleuser--user-pool-id us-west-2_EXAMPLE

Response
Amazon Cognito は、両方のリクエストに同じJSONレスポンス本文を返します。以下は、リスク要因が含まれていないホストされた UI サインインイベントに対するレスポンスの例です。
{"AuthEvents": [{"EventId": "[event ID]","EventType": "SignIn","CreationDate": "[Timestamp]",
高度なセキュリティ機能

860

Amazon Cognito

開発者ガイド"EventResponse": "Pass","EventRisk": {"RiskDecision": "NoRisk","CompromisedCredentialsDetected": false},"ChallengeResponses": [{"ChallengeName": "Password","ChallengeResponse": "Success"}],"EventContextData": {"IpAddress": "192.168.2.1","DeviceName": "Chrome 125, Windows 10",
"Timezone": "-07:00","City": "Bellevue","Country": "United States"}}],"NextToken": "[event ID]#[Timestamp]"}

ユーザー認証イベントのエクスポート
ユーザープールを設定して、ユーザーイベントを高度なセキュリティ脅威保護から外部システ
ムにエクスポートします。サポートされている外部システムである Amazon S3、 CloudWatch
Logs、Amazon Data Firehose は、送信または取得するデータの AWS 請求にコストを追加する可能性があります。詳細については、「高度なセキュリティユーザーアクティビティログのエクスポート」を参照してください。
AWS Management Console
1.

Amazon Cognito コンソールにサインインします。

2.

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

3.

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

4.

高度なセキュリティタブを選択します。ユーザーアクティビティログのエクスポートを見つ
けて編集を選択します。

5.

ログ記録ステータス で、ユーザーアクティビティログのエクスポートを有効にする の横にあるチェックボックスをオンにします。

高度なセキュリティ機能

861

Amazon Cognito

6.

開発者ガイドログ記録先 で、ログCloudWatch グループ 、Amazon Data Firehose ストリーム 、またはS3 バケット のログを処理する を選択します AWS サービス 。

7.

選択すると、対応するリソースタイプがリソースセレクタに入力されます。リストからログ
グループ、ストリーム、またはバケットを選択します。作成ボタンを選択して、選択したサービスの AWS Management Console に移動し、新しいリソースを作成することもできます。

8.

[変更を保存] を選択します。

API
ユーザーアクティビティログの送信先のタイプを 1 つ選択します。
以下は、Firehose ストリームをログの送信先として設定するSetLogDeliveryConfigurationリクエスト本文の例です。
{"LogConfigurations": [{"EventSource": "userAuthEvents","FirehoseConfiguration": {"StreamArn": "arn:aws:firehose:us-west-2:123456789012:deliverystream/
example-user-pool-activity-exported"},"LogLevel": "INFO"}],"UserPoolId": "us-west-2_EXAMPLE"}

以下は、Amazon S3 バケットをログの送信先として設定するSetLogDeliveryConfigurationリクエスト本文の例です。
{"LogConfigurations": [{"EventSource": "userAuthEvents","S3Configuration": {"BucketArn": "arn:aws:s3:::DOC-EXAMPLE-LOGGING-BUCKET"},"LogLevel": "INFO"
高度なセキュリティ機能

862

Amazon Cognito

開発者ガイド}],"UserPoolId": "us-west-2_EXAMPLE"}

以下は、 CloudWatch ロググループをログの送信先として設定するSetLogDeliveryConfigurationリクエスト本文の例です。
{"LogConfigurations": [{"EventSource": "userAuthEvents","CloudWatchLogsConfiguration": {"LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:DOCEXAMPLE-LOG-GROUP"},"LogLevel": "INFO"}],"UserPoolId": "us-west-2_EXAMPLE"}

イベントフィードバックを提供します
イベントフィードバックは、リアルタイムでリスクの評価に反映され、リスク評価アルゴリズムを経
時的に向上させます。Amazon Cognito コンソールと APIオペレーションを使用して、サインイン試
行の有効性に関するフィードバックを提供できます。
Note
イベントフィードバックは、Amazon Cognito が同じ特性を持つ後続のユーザーセッションに割り当てるリスクレベルに影響します。

Amazon Cognito コンソールで、[Users] (ユーザー) タブからユーザーを選択し、[Provide event
feedback] (イベントフィードバックを送信) を選択します。イベントの詳細を確認して、[Set as
valid] (有効として設定) または [Set as invalid] (無効として設定) できます。
コンソールでは、[Users and groups] (ユーザーとグループ) タブにサインイン履歴が表示されます。
エントリを選択すると、イベントを有効または無効としてマークできます。また、ユーザープール
高度なセキュリティ機能

863

Amazon Cognito

開発者ガイドAPIオペレーション AdminUpdateAuthEventFeedbackおよび AWS CLI コマンド admin-update-authevent-feedback を通じてフィードバックを提供することもできます。
Amazon Cognito コンソールで有効として設定を選択するか、 validで FeedbackValueの値を指定するとAPI、Amazon Cognito がある程度のリスクを評価したユーザーセッションを信頼することを Amazon Cognito に伝えます。Amazon Cognito コンソールで無効として設定を選択するかAPI、
invalidで FeedbackValueの値を指定すると、ユーザーセッションを信頼していないこと、または Amazon Cognito が十分なリスクレベルを評価していないと思われることを Amazon Cognito に伝えます。
通知メッセージの送信
アドバンスドセキュリティ保護により、Amazon Cognito はユーザーにリスクの高いサインイン試
行を通知できます。Amazon Cognito では、サインインが有効か無効かを示すリンクを選択するようユーザーに促すこともできます。Amazon Cognito はこのフィードバックを使用して、ユーザープー
ルのリスク検出精度を向上させます。
[Automatic risk response] (自動リスク対応) セクションで、低、中、高のリスクケースに応じて[Notify Users] (ユーザーに通知) を選択します。

Amazon Cognito は、ユーザーが E メールアドレスを検証したかどうかに関係なく、E メール通知をユーザーに送信します。
通知 E メールメッセージをカスタマイズし、プレーンテキストとこれらのメッセージのHTMLバー
ジョンの両方を提供できます。E メール通知をカスタマイズするには、高度なセキュリティ設定の[Adaptive authentication messages] (アダプティブ認証メッセージ) から E メールテンプレートを開きます。E メールテンプレートの詳細については、「メッセージテンプレート」を参照してください。

高度なセキュリティ機能

864

Amazon Cognito

開発者ガイド

脅威保護メトリクスの表示
Amazon Cognito は、脅威保護機能のメトリクスを Amazon のアカウントに公開します
CloudWatch。Amazon Cognito はアドバンストセキュリティのメトリクスを、リスクレベル別およびリクエストレベル別にグループ化します。
CloudWatch コンソールでメトリクスを表示するには
1.

で CloudWatch コンソールを開きますhttps://console.aws.amazon.com/cloudwatch/。

2.

ナビゲーションペインで [Metrics (メトリクス)] を選択します。

3.

Amazon Cognito を選択します。

4.

[By Risk Classification] (リスク分類別) などの集約されたメトリクスのグループを選択します。

5.

[All metrics] (すべてのメトリクス) タブに、選択したグループのメトリクスが一覧表示されます。以下の操作を行うことができます。
• テーブルを並べ替えるには、列見出しを使用します。
• メトリクスをグラフ表示するには、メトリクスの横にあるチェックボックスを選択します。すべてのメトリクスを選択するには、テーブルの見出し行にあるチェックボックスを選択します。
• リソースでフィルターするには、リソース ID を選択し、[Add to search] (検索に追加) を選択します。
• メトリクスでフィルターするには、メトリクス名を選択し、[Add to search] (検索に追加) を選
択します。

メトリクス

説明

メトリクスディメンション

CompromisedCredentialRisk

Amazon Cognito が侵害された認証情報を検知したリクエス
ト。

操作: ディメンショ
ンは PasswordC
hange 、SignIn、またはSignUp タイプの操作のみです。
UserPoolId: ユーザープールの識別子。

高度なセキュリティ機能

865

Amazon Cognito

メトリクス

開発者ガイド説明

メトリクスディメンション
RiskLevel: high (デフォルト）、medium、または low。

AccountTakeoverRisk

Amazon Cognito がアカウントの乗っ取りリスクを検知した
リクエスト。

操作: ディメンショ
ンは PasswordC
hange 、SignIn、またはSignUp タイプの操作のみです。
UserPoolId: ユーザープールの識別子。
RiskLevel: high、medium、または low。

OverrideBlock

Amazon Cognito がデベロッ
パーから提供された設定を理由にブロックしたリクエス
ト。

操作: ディメンショ
ンは PasswordC
hange 、SignIn、またはSignUp タイプの操作のみです。
UserPoolId: ユーザープールの識別子。
RiskLevel: high、medium、または low。

Risk

Amazon Cognito がリスクありとしてマークしたリクエス
ト。

操作: PasswordC
hange 、SignIn、またはSignUp などの操作タイプ。
UserPoolId: ユーザープールの識別子。

高度なセキュリティ機能

866

Amazon Cognito

開発者ガイドメトリクス

説明

メトリクスディメンション

NoRiskAmazon Cognito がリスクを識別しなかったリクエスト。

操作: PasswordC
hange 、SignIn、またはSignUp などの操作タイプ。
UserPoolId: ユーザープールの識別子。

Amazon Cognito では、 ですぐに分析できるように、事前定義された 2 つのメトリクスグループが用意されています CloudWatch。By Risk Classification は、リスクがあるとして Amazon Cognito が識別したリクエストのリスクレベルの詳細を示します。By Request Classification リクエストレベル
で集計されたメトリクスを反映します。
集約されたメトリクスグループ

説明

リスク分類別Amazon Cognito でリスクありとして識別されたリクエスト。

リクエスト分類別

リクエスト別に集約されたメトリクス。

アプリケーションの脅威保護のためのデータの収集
Amazon Cognito アダプティブ認証は、ユーザーのサインイン試行のコンテキスト詳細からアカウン
ト乗っ取りを試みた場合のリスクレベルを評価します。Amazon Cognito の高度なセキュリティでリスクをより正確に評価できるように、アプリケーションはAPIリクエストにコンテキストデータを追加する必要があります。コンテキストデータは、IP アドレス、ブラウザエージェント、デバイス情報、リクエストヘッダーなどの情報で、ユーザーがユーザープールにどのように接続したかに関する
コンテキスト情報を提供します。
このコンテキストを Amazon Cognito に送信するアプリケーションの主な責任は、ユーザープールへの認証リクエストの EncodedData パラメータです。このデータをリクエストに追加するには、この情報を自動的に生成SDKする を使用して Amazon Cognito を実装するか、このデータを収集する
JavaScript、iOS、または Android 用のモジュールを実装できます。Amazon Cognito に直接リクエス
トを行うクライアント専用アプリケーションは、 を実装する必要があります AWS Amplify SDKs。
中間サーバーまたはAPIコンポーネントを持つクライアントサーバーアプリケーションは、別のSDKモジュールを実装する必要があります。
高度なセキュリティ機能

867

Amazon Cognito

開発者ガイド以下のシナリオでは、認証フロントエンドが追加の設定なしでユーザーコンテキストデータ収集を管理します。
• ホストされた UI はコンテキストデータを自動的に収集し、高度なセキュリティ機能に送信します。
• すべての AWS Amplify ライブラリには、認証方法に組み込まれたコンテキストデータ収集があります。
Amplify を使用したクライアント専用アプリケーションでのユーザーコンテキストデータの送信

Amplify は、Amazon Cognito で直接認証するモバイルクライアントSDKsをサポートしています。この種のクライアントは、Amazon Cognito パブリックAPIオペレーションに直接APIリクエストを行います。Amplify クライアントは、デフォルトで高度なセキュリティ機能のコンテキストデータを自動的に収集します。
を使用した Amplify アプリケーションは例外 JavaScript です。ユーザーコンテキストデータを収集するJavaScript モジュールを追加する必要があります。
通常、この設定のアプリケーションは、 InitiateAuthや などの認証されていないAPIオペレーションを使用しますRespondToAuthChallenge。UserContextData オブジェクトは、これらのオペレー
ションのリスクをより正確に評価するのに役立ちます。Amplify は、デバイスとセッション情報をのEncodedDataパラメータSDKsに追加しますUserContextData。

高度なセキュリティ機能

868

Amazon Cognito

開発者ガイドクライアント/サーバーアプリケーションでのコンテキストデータの収集
一部のアプリケーションには、ユーザー認証データを収集するフロントエンド層と、Amazon
Cognito に認証リクエストを送信するアプリケーションのバックエンド層があります。これは、マイクロサービスにバックアップされたウェブサーバーとアプリケーションの一般的なアーキテクチャです。これらのアプリケーションでは、パブリックコンテキストデータコレクションライブラリをインポートする必要があります。

通常、この設定のアプリケーションサーバーは、 AdminInitiateAuthや などの認証されたAPIオペ
レーションを使用しますAdminRespondToAuthChallenge。ContextData オブジェクトはAmazon
Cognito がこれらのオペレーションのリスクをより正確に評価するのに役立ちます。のコンテンツContextDataは、フロントエンドがサーバーに渡したエンコードされたデータと、ユーザーのサーバーへのHTTPリクエストからの追加の詳細です。HTTP ヘッダーや IP アドレスなどのこれらの追加のコンテキストの詳細は、ユーザーの環境の特性をアプリケーションサーバーに提供します。
アプリケーションサーバーは、 InitiateAuthや などの認証されていないAPIオペレーションでサインインすることもありますRespondToAuthChallenge。UserContextData オブジェクトは、これらのオ
ペレーションで高度なセキュリティリスク分析を通知します。使用可能なパブリックコンテキスト
データ収集ライブラリのオペレーションは、認証リクエストの EncodedDataパラメータにセキュリ
ティ情報を追加します。さらに、追加のコンテキストデータを受け入れるようにユーザープールを設定し、ユーザーのソース IP を の IpAddressパラメータに追加しますUserContextData。
クライアント/サーバーアプリケーションにコンテキストデータを追加するには
1.

フロントエンドアプリケーションで、iOS、Android、または JavaScript モジュール を使用して、エンコードされたコンテキストデータをクライアントから収集します。

2.

エンコードされたデータと認証リクエストの詳細をアプリケーションサーバーに渡します。

高度なセキュリティ機能

869

Amazon Cognito

3.

開発者ガイドアプリケーションサーバーで、ユーザーの IP アドレス、関連するHTTPヘッダー、リクエスト
されたサーバー名、リクエストされたパスをHTTPリクエストから抽出します。これらの値をAmazon Cognito へのAPIリクエストの ContextDataパラメータに入力します。

4.

SDK モジュールが収集したエンコードされたデバイスデータをAPIリクエストContextDataにの EncodedData パラメータに入力します。このコンテキストデータを認証リクエストに追加します。

クライアント/サーバーアプリケーション用のコンテキストデータライブラリ
JavaScript
amazon-cognito-advanced-security-data.min.js モジュールはEncodedData、アプリ
ケーションサーバーに渡すことができる を収集します。
amazon-cognito-advanced-security-data.min.js モジュールを設定に追加します
JavaScript 。を、、us-east-1、us-east-2、、us-west-2、eu-west-2または のリストから
eu-west-1<region>に置き換え AWS リージョン ますeu-central-1。
<script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognitoadvanced-security-data.min.js"></script>

EncodedData パラメータで使用できるencodedContextDataオブジェクトを生成するには、
JavaScript アプリケーションソースに以下を追加します。
var encodedContextData = AmazonCognitoAdvancedSecurityData.getData(_username,_userpoolId, _userPoolClientId);

iOS/Swift
コンテキストデータを生成するために、iOS アプリケーションは Mobile SDK for iOS モジュール を
統合できますAWSCognitoIdentityProviderASF。
高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、アプリケーショ
ンに次のスニペットを追加します。
import AWSCognitoIdentityProviderASF
let deviceId = getDeviceId()
高度なセキュリティ機能

870

Amazon Cognito

開発者ガイドlet encodedContextData = AWSCognitoIdentityProviderASF.userContextData(
userPoolId,
username: username,deviceId: deviceId,
userPoolClientId: userPoolClientId)/*** Reuse DeviceId from keychain or generate one for the first time.
*/
func getDeviceId() -> String {let deviceIdKey = getKeyChainKey(namespace: userPoolId, key:
"AWSCognitoAuthAsfDeviceId")
if let existingDeviceId = self.keychain.string(forKey: deviceIdKey) {return existingDeviceId}
let newDeviceId = UUID().uuidString
self.keychain.setString(newDeviceId, forKey: deviceIdKey)
return newDeviceId}/*** Get a namespaced keychain key given a namespace and key*/
func getKeyChainKey(namespace: String, key: String) -> String {return "\(namespace).\(key)"}

Android
コンテキストデータを生成するために、Android アプリケーションは Mobile SDK for Android モ
ジュールを aws-android-sdk-cognitoidentityproviderとして統合できます。
高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、アプリケーショ
ンに次のスニペットを追加します。
UserContextDataProvider provider = UserContextDataProvider.getInstance();// context here is android application context.
String encodedContextData = provider.getEncodedContextData(context, username,
userPoolId, userPoolClientId);

高度なセキュリティ機能

871

Amazon Cognito

開発者ガイドパスワードの再利用の防止
Note
このページでは、Amazon Cognito ユーザープールの高度なセキュリティ機能がパスワード
ポリシーに追加する追加機能について説明します。パスワードポリシーの完全な概要については、「」を参照してくださいユーザープールのパスワードの追加要件。

デフォルトでは、Amazon Cognito ユーザープールのパスワードポリシーは、パスワードの長さと文字タイプの要件、および一時パスワードの有効期限を設定します。高度なセキュリティ機能によって、パスワード履歴を強制する機能が追加されました。ユーザーがパスワードのリセットを試みると、ユーザープールによって以前のパスワードに設定できなくなる可能性があります。パスワードポ
リシーの設定の詳細については、「」を参照してくださいユーザープールのパスワードの追加要件。
以下は、パスワード履歴ポリシーを使用してユーザープールを設定する方法の概要です。
パスワード履歴を設定するには
1.

高度なセキュリティ機能をアクティブ化します。

2.

ユーザープールのサインインエクスペリエンスタブで、パスワードポリシーを見つけ、編集を選
択します。

3.

使用可能な他のオプションを設定し、以前のパスワードの使用を禁止する の値を設定します。

4.

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

高度なセキュリティ機能の無効化
高度なセキュリティ機能により、ユーザープールに設定オプションが追加されます。これらの機能の少なくとも 1 つが使用されている場合、高度なセキュリティがアクティブになります。これらの機能を非アクティブ化するには、アクティブな各コンポーネントを非アクティブ化する必要があります。Amazon Cognito コンソールの高度なセキュリティタブの非アクティブ化オプションは、これらの各機能をオフにします。この章では、非アクティブ化によってユーザープール設定に加えられる変
更と、これらの機能を個別に無効にする方法について説明します。
アクセストークンのカスタマイズ
アドバンストセキュリティタブからアドバンストセキュリティを非アクティブ化すると、Amazon Cognito はユーザープールからトークン生成前の Lambda トリガーを削除します。
アクセストークンをカスタマイズせずに新しいトークン生成前トリガーを追加するには、トリ
高度なセキュリティ機能

872

Amazon Cognito

開発者ガイドガーに新しい関数を割り当てて、V1_0イベント用に設定します。これらのバージョン 1 のトリ
ガーイベントは、ID トークンの変更のみを処理できます。
アクセストークンのカスタマイズを手動で非アクティブ化するには、トークン生成前のトリガーを削除し、新しいバージョン 1 トリガーを追加します。
脅威からの保護アドバンストセキュリティタブからアドバンストセキュリティを非アクティブ化すると、Amazon Cognito はすべての脅威防止機能を非アクティブ化します。ユーザープールは、コンテキストデータの処理、認証情報の侵害の監視、またはセキュリティリスクに関するユーザー
アクティビティの評価を行いなくなりました。
脅威保護を非アクティブ化するための手動アクションはありません。高度なセキュリティ機能のアクティブ化と非アクティブ化は、脅威保護を有効または無効にします。
ログのエクスポート
アドバンストセキュリティタブからアドバンストセキュリティを非アクティブ化すると、Amazon Cognito はログのエクスポートを非アクティブ化します。ユーザープールは、ローカルまたはエクスポートされたユーザーアクティビティログを生成しなくなりました。
ログのエクスポートを無効にするには、コンソールのアドバンストセキュリティタブのユー
ザーアクティビティログのエクスポートの横にある編集を選択します。また、 EventSourceの値を持つ設定を削除するSetLogDeliveryConfigurationAPIリクエストを送信することもできますUserActivity。

AWS WAF ウェブとユーザープールACLの関連付け
AWS WAF はウェブアプリケーションファイアウォールです。 AWS WAF ウェブアクセスコント
ロールリスト (ウェブ ACL) を使用すると、ホストされた UI および Amazon Cognito APIサービス
エンドポイントへの不要なリクエストからユーザープールを保護できます。ウェブACLを使用すると、ユーザープールが応答するすべてのHTTPSウェブリクエストをきめ細かく制御できます。 AWSWAF ウェブ の詳細についてはACLs、「 AWS WAF デベロッパーガイド」の「ウェブアクセスコン
トロールリスト (ウェブACL) の管理と使用」を参照してください。
ユーザープールに AWS WAF ウェブACLが関連付けられている場合、Amazon Cognito は、選択した
非機密ヘッダーとユーザーからのリクエストの内容を に転送します AWS WAF。 は、リクエストの内容を AWS WAF ウェブ で指定したルールと比較しACL、Amazon Cognito にレスポンスを返します。
AWS WAF ウェブ ACLs

873

Amazon Cognito

開発者ガイドAWS WAF ウェブACLsと Amazon Cognito について知っておくべきこと• によってブロックされたリクエスト AWS WAF は、どのリクエストタイプのリクエストレート
クォータにもカウントされません。 AWS WAF ハンドラーは、 APIレベルのスロットリングハン
ドラーの前に呼び出されます。
• ウェブ を作成するとACL、ウェブACLが完全に伝播され、Amazon Cognito で使用できるようになるまでに少し時間がかかります。伝播時間は、数秒から数分までです。 は、ウェブが完全に伝播されるACL前にウェブを関連付けようとWAFUnavailableEntityExceptionすると、 AWS
WAF を返します。
• 1 つのウェブACLをユーザープールに関連付けることができます。
• リクエストは、 AWS WAF が検査できる範囲を超えたペイロードになる可能性があります がAmazon Cognito からのオーバーサイズリクエストを処理する方法を設定する方法については、「 デベロッパーガイド」の「オーバーサイズリクエストコンポーネントの処理」を参照してくだ
さい。 AWS WAF AWS WAF• AWS WAF Fraud Control アカウント乗っ取り防止 (ATP） ACLを使用するウェブを Amazon
Cognito ユーザープールに関連付けることはできません。AWS-AWSManagedRulesATPRuleSet
マネージドルールグループを追加するときにATP、この機能を実装します。ユーザープールに関連付ける前に、ウェブがこのマネージドルールグループを使用しACLないようにしてください。
• ユーザープールACLに関連付けられた AWS WAF ウェブがあり、ウェブ内のルールが ACLを提示するとCAPTCHA、ホストされた UI TOTP登録で回復不可能なエラーが発生する可能性があります。CAPTCHA アクションがあり、ホストされた UI に影響を与えないルールを作成するにはTOTP、「」を参照してくださいホストされた UI ACL用に AWS WAF ウェブを設定する TOTP
MFA。
AWS WAF は、次のエンドポイントへのリクエストを検査します。
ホストされた UI
ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス 内のすべてのエンドポイントへのリクエスト。
パブリックAPIオペレーション
認証に AWS 認証情報を使用しない Amazon Cognito API へのアプリケーションからのリクエスト。これには、InitiateAuth、、 などのAPIオペレーションが含まれますRespondToAuthChallengeGetUser。の範囲内のAPIオペレーションでは、 AWS 認証情報による認証 AWS WAF は必要ありません。これらは、認証されていないか、セッション文字列またはAWS WAF ウェブ ACLs

874

Amazon Cognito

開発者ガイドアクセストークンで承認されています。詳細については、「Amazon Cognito ユーザープールの認証されたオペレーションと認証されていないAPIオペレーション」を参照してください。
ウェブ内のルールは、ルールに一致するリクエストCAPTCHAに応答して、カウント、許可、ブロック、または を提示するルールアクションACLで設定できます。詳細については、AWS WAF
デベロッパーガイドの「AWS WAF のルール」を参照してください。ルールアクションに応じて、Amazon Cognito からユーザーに返す応答をカスタマイズできます。
Important
エラーレスポンスをカスタマイズするオプションは、APIリクエストを行う方法によって異なります。
• ホストされた UI リクエストのエラーコードと応答本文をカスタマイズできます。ユー
ザーが解決できる は、ホストされた UI でのみ提示CAPTCHAできます。
• Amazon Cognito ユーザープール APIを使用して行うリクエストの場合、ブロックレスポ
ンスを受信するリクエストのレスポンス本文をカスタマイズできます。カスタムエラー
コードを 400～499 の範囲で指定することもできます。
• AWS Command Line Interface （AWS CLI) と は AWS SDKs、ブロックまた
はCAPTCHAレスポンスを生成するリクエストにForbiddenExceptionエラーを返します。

ウェブとユーザープールACLの関連付け
ユーザープールACL内のウェブを操作するには、 AWS Identity and Access Management （IAM) プ
リンシパルに次の Amazon Cognito アクセス許可が必要です。アクセス AWS WAF 許可の詳細については、「 AWS WAF デベロッパーガイド」の「 アクセスAWS WAF API許可」を参照してください。
• cognito-idp:AssociateWebACL• cognito-idp:DisassociateWebACL• cognito-idp:GetWebACLForResource• cognito-idp:ListResourcesForWebACL

AWS WAF ウェブ ACLs

875

Amazon Cognito

開発者ガイドアクセスIAM許可を付与する必要がありますが、リストされているアクションはアクセス許可のみであり、APIオペレーション に対応していません。
ユーザープール AWS WAF に対して をアクティブ化し、ウェブを関連付けるには ACL
1.

Amazon Cognito コンソールにサインインします。

2.

ナビゲーションペインで [User Pools] (ユーザープール) を選択してから、編集するユーザープー
ルを選択します。

3.

[User pool properties] (ユーザープールのプロパティ) タブを選択します。

4.

[AWS WAF] の隣にある [Edit] (編集) を選択します。

5.

でAWS WAF、ユーザープール AWS WAF で を使用する を選択します。

6.

既に作成したAWS WAF ウェブACLを選択するか、ACL「 でウェブを作成する AWS WAF」
を選択して、 で新しい AWS WAF セッションにウェブを作成します AWS Management
Console。

7.

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

ウェブを AWS Command Line Interface または のユーザープールにプログラムで関連付けACLるに
はSDK、 AssociateWebACLから を使用します AWS WAF API。Amazon Cognito には、ウェブ を関連付ける個別のAPIオペレーションはありませんACL。

AWS WAF ウェブのテストとログ記録 ACLs
ウェブ でルールアクションをカウントに設定するとACL、 はルールに一致するリクエストの数にリクエスト AWS WAF を追加します。ユーザープールACLでウェブをテストするには、ルールアクAWS WAF ウェブ ACLs

876

Amazon Cognito

開発者ガイドションをカウントに設定し、各ルールに一致するリクエストの量を考慮します。例えば、ルールをブ
ロックアクションに設定した場合に、通常のユーザートラフィックと判断される多数のリクエストと一致するときは、ルールの再設定が必要になる場合があります。詳細については、「 デベロッパー
ガイド」の「保護のテストとチューニング AWS WAF」を参照してください。 AWS WAF
リクエストヘッダー AWS WAF を Amazon CloudWatch Logs ロググループ、Amazon Simple
Storage Service (Amazon S3) バケット、または Amazon Data Firehose に記録するように を設定することもできます。ユーザープールに対して行う Amazon Cognito リクエストは、 x-amzncognito-client-idおよび APIで識別できますx-amzn-cognito-operation-name。ホストされた UI リクエストには、x-amzn-cognito-client-id ヘッダーのみが含まれます。詳細については、「 AWS WAF デベロッパーガイド」の「ウェブACLトラフィックのログ記録」を参照してください。
AWS WAF ウェブACLsには、Amazon Cognito の高度なセキュリティ機能 の料金は適用されません。のセキュリティ機能は、Amazon Cognito の高度なセキュリティ機能を AWS WAF 補完します。
ユーザープールリクエストの検査のために、ユーザー pool. AWS WAF bills 内の両方の機能を個別にアクティブ化できます。詳細については、「AWS WAF 料金」を参照してください。
ログ記録 AWS WAF リクエストデータは、ログをターゲットとするサービスによって追加料金が請求されます。詳細については、「 AWS WAF デベロッパーガイド」の「ウェブACLトラフィック情報のログ記録の料金」を参照してください。

ユーザープールの大文字と小文字の区別で作成した Amazon Cognito ユーザープール AWS Management Console では、デフォル
トで大文字と小文字は区別されません。ユーザープールが大文字と小文字を区別しない場
合、user@example.com と User@example.com は同じユーザーを参照します。ユーザープール内のユーザー名が大文字と小文字が区別しない場合、preferred_username と email 属性でも大文字と小文字が区別されません。
ユーザープールの大文字と小文字の区別の設定を考慮するには、代替のユーザー属性に基づいてアプ
リコードでユーザーを識別します。ユーザー名、優先ユーザー名、または E メールアドレス属性の大文字と小文字はユーザープロファイルによって異なる場合があるため、代わりに sub 属性を参照
してください。また、ユーザープールにイミュータブルカスタム属性を作成し、各新規ユーザープロ
ファイルの属性に独自の一意の識別子値を割り当てることもできます。最初にユーザーを作成するときに、作成したイミュータブルカスタム属性に値を書き込むことができます。

大文字と小文字の区別

877

Amazon Cognito

開発者ガイドNote
ユーザープールの大文字と小文字の区別設定に関係なく、Amazon Cognito では、 SAMLま
たは OIDC ID プロバイダー (IdP) のフェデレーティッドユーザーが、大文字と小文字を区別する一意の NameId または subクレームを渡す必要があります。一意の識別子の大文字と小文字の区別と の詳細についてはSAML IdPs、「」を参照してくださいSP 開始SAMLサイン
インの使用。

大文字と小文字を区別するユーザープールの作成
AWS Command Line Interface （AWS CLI) や などのAPIオペレーションでリソースを作成する場合はCreateUserPool、ブールCaseSensitiveパラメータを に設定する必要がありますfalse。この設定では、大文字と小文字を区別しないユーザープールが作成されます。値を指定しないと、CaseSensitive はデフォルトで true に従います。このデフォルトは、 AWSManagement Consoleで作成するユーザープールのデフォルト動作とは反対です。2020 年 2 月
12 日以前のユーザープールでは、プラットフォームに関係なく、大文字と小文字が区別されていました。
AWS Management Console または DescribeUserPoolAPIオペレーションのサインインエクスペ
リエンスタブを使用して、アカウント内の各ユーザープールの大文字と小文字の区別設定を確認できます。
新しいユーザープールに移行する
ユーザープロファイル間で競合が発生する可能性があるため、Amazon Cognito ユーザープール
で大文字と小文字を区別するから大文字と小文字を区別しないに変更することはできません。代
わりに、ユーザーを新しいユーザープールに移行します。ケース関連の競合を解決するには、移行コードをビルドする必要があります。このコードは、競合を検出したときに一意の新しいユーザーを返すか、サインイン試行を拒否する必要があります。大文字と小文字を区別しない新しい
ユーザープールで、ユーザー移行の Lambda トリガー を割り当てます。 AWS Lambda 関数は、
大文字と小文字を区別しない新しいユーザープールにユーザーを作成できます。ユーザーが大文
字小文字を区別しないユーザープールでサインインに失敗した場合、Lambda 関数は大文字小文
字を区別するユーザープールからユーザーを見つけて、複製します。ForgotPassword イベント
でユーザーの Lambda 移行トリガーをアクティブ化することもできます。Amazon Cognito は、
サインインやパスワード回復アクションからユーザー情報とイベントメタデータを Lambda 関
数に渡します。関数が大文字と小文字を区別しないユーザープールに新しいユーザーを作成する
際、イベントデータを使用してユーザー名とメールアドレス間で発生する競合を管理することができます。これらの競合は、大文字小文字を区別しないユーザープールでは一意ですが、大文字大文字と小文字の区別

878

Amazon Cognito

開発者ガイド小文字を区別するユーザープールでは同一のユーザー名と E メールアドレスの間で発生する競合です。
Amazon Cognito ユーザープール間でユーザー移行 Lambda トリガーを使用する方法の詳細については、 AWS ブログの「Migrating Users to Amazon Cognito user pools」を参照してください。

ユーザープールの削除保護
管理者が誤ってユーザープールを削除しないようにするには、削除保護を有効にします。削除保護が有効になっている場合は、ユーザープールを削除する前に削除の確認を行う必要があります。AWSManagement Console でユーザープールを削除すると、同時に削除保護を無効化できます。次の画像に示すように、削除保護を無効にするプロンプトに応じて削除の意思を確認すると、Amazon
Cognito がユーザープールを削除します。

Amazon Cognito API リクエストを使用してユーザープールを削除する場合は、まずUpdateUserPool リクエストで DeletionProtection を Inactive に変更する必要があります。
削除保護を無効にしないと、Amazon Cognito は InvalidParameterException エラーを返します。削除保護を無効にすると、DeleteUserPool リクエストでユーザープールを削除できます。
Amazon Cognito は、AWS Management Console で新しいユーザープールの作成時に、デフォルト
で削除保護を有効にします。CreateUserPool API を使用してユーザープールを作成すると、削除
削除保護

879

Amazon Cognito

開発者ガイド保護はデフォルトで無効になります。AWS CLI または AWS SDK で作成したユーザープールでこの機能を使用するには、DeletionProtection パラメータを True に設定します。
Amazon Cognito コンソールの [User pool settings] (ユーザープール設定) タブにある [Deletion
protection] (削除保護) コンテナで、削除保護ステータスを有効または無効にすることができます。
削除保護を設定するには
1.

Amazon Cognito コンソールに移動します。AWS 認証情報を求められる場合があります。

2.

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

3.

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

4.

[User pool settings] (ユーザープール設定) タブを選択します。[Deletion Protection] (削除保護) を見つけ、[Activate] (有効化) または [Deactivate] (無効化) を選択します5.

次のダイアログで選択を確定します。

ユーザー存在エラー応答の管理
Amazon Cognito は、ユーザープールから返されるエラーレスポンスのカスタマイズをサポートしています。カスタムエラーレスポンスは、ユーザーの作成と認証、パスワードリカバリ、および確認操作に利用できます。
ユーザープールアプリクライアントの PreventUserExistenceErrors 設定を使用して、ユーザーの存在に関連するエラーを有効または無効にします。Amazon Cognito ユーザープール を使用して新しいアプリケーションクライアントを作成するとAPI、 PreventUserExistenceErrorsはデフォルトで 、LEGACYまたは無効になります。Amazon Cognito コンソールでは、デフォルトでユー
ザー存在エラーの防止 - ENABLED for の 設定 PreventUserExistenceErrors- オプションが選択されています。PreventUserExistenceErrors 設定を更新するには、次のいずれかを実行します。
• UpdateUserPoolClient API リクエストで と ENABLED LEGACY
PreventUserExistenceErrorsの間で の値を変更します。
• Amazon Cognito コンソールでアプリクライアントを編集し、選択した (ENABLED) と選択解除された () の間でユーザー存在エラーの防止の状態を変更しますLEGACY。
このプロパティの値が の場合LEGACY、ユーザーがユーザープールに存在しないユーザー名でサインインしようとすると、アプリケーションクライアントはUserNotFoundExceptionエラーレスポン
スを返します。
ユーザー開示の管理

880

Amazon Cognito

開発者ガイドこのプロパティの値が の場合ENABLED、アプリケーションクライアントはユーザープールにユーザーアカウントが存在しないことをUserNotFoundExceptionエラーで公開しません。PreventUserExistenceErrors の設定ENABLEDには次の効果があります。
• Amazon Cognito は、応答によって有効なユーザーが存在することが開示される可能性のあるAPI
リクエストに対して、非固有の情報で応答します。
• Amazon Cognito サインインとパスワードを忘れた場合、一般的な認証失敗レスポンスAPIsが返されます。エラーレスポンスは、ユーザー名またはパスワードが正しくないことを伝えます。
• Amazon Cognito アカウントの確認とパスワードの復旧は、ユーザーの連絡先情報の一部を表すのではなく、シミュレートされた配信メディアにコードが送信されたことを示すレスポンスAPIsを返します。
次の情報は、 が PreventUserExistenceErrorsに設定されている場合のユーザープールオペ
レーションの動作の詳細を示していますENABLED。

認証およびユーザー作成オペレーション
エラーレスポンスは、Username-password 認証と Secure Remote Password (SRP） 認証の両方で設定できます。カスタム認証で返すエラーをカスタマイズすることもできます。以下の認証オペレー
ションAPIsを実行します。
• AdminInitiateAuth• AdminRespondToAuthChallenge• InitiateAuth• RespondToAuthChallenge
次のリストは、ユーザー認証オペレーションのエラーレスポンスをカスタマイズする方法を示しています。
ユーザー名およびパスワード認証
ADMIN_USER_PASSWORD_AUTH と でユーザーをサインインさせるにはUSER_PASSWORD_AUTH、 AdminInitiateAuthまたは InitiateAuthAPIリクエストにユー
ザー名とパスワードを含めます。Amazon Cognito は、ユーザー名またはパスワードが正しくない場合、汎用 NotAuthorizedException エラーを返します。

ユーザー開示の管理881

Amazon Cognito

開発者ガイドセキュアリモートパスワード (SRP) ベースの認証でユーザーをサインインさせるにはUSER_SRP_AUTH、ユーザー名と SRP_Aパラメータを AdminInitiateAuthまたは InitiateAuthAPIリクエストに含めます。それに応じて、Amazon Cognito はユーザーの SRP_Bと ソルトを返します。ユーザーが見つからない場
合、Amazon Cognito は RFC5054 で説明されているように、最初のステップでシミュレートされたレスポンスを返します。Amazon Cognito は、同じユーザー名とユーザープールの組み合わせに対して、同じソルトと内部ユーザー ID を UUID 形式で返します。パスワードの証明を使用してRespondToAuthChallengeAPIリクエストを送信すると、ユーザー名またはパスワードが正しくない場合、Amazon Cognito は一般的なNotAuthorizedExceptionエラーを返します。
Note
検証ベースのエイリアス属性を使用していて、変更不可能なユーザー名が としてフォーマットされていない場合は、ユーザー名とパスワード認証を使用して一般的なレスポンス
をシミュレートできますUUID。

カスタム認証チャレンジの Lambda トリガー
カスタム認証チャレンジの Lambda トリガーを使用しており、エラーレスポンスを有効にする場合は、LambdaChallenge が UserNotFound という名前のブールパラメータを返します。その後、それが DefineAuthChallenge、VerifyAuthChallenge、およびCreateAuthChallenge Lambda トリガーのリクエストに渡されます。このトリガーを使用して、存在しないユーザーのカスタム認証チャレンジをシミュレートできます。存在しないユー
ザーに対して事前認証の Lambda トリガーを呼び出す場合、Amazon Cognito は UserNotFoundを返します。
次のリストは、ユーザー作成オペレーションのエラーレスポンスをカスタマイズする方法を示しています。
SignUp
ユーザー名が既に取得UsernameExistsExceptionされている場合、 SignUpオペレーション
は常に を返します。アプリケーションでユーザーをサインアップするときに Amazon Cognito がE メールアドレスと電話番号の UsernameExistsException エラーを返さないようにするには、検証ベースのエイリアス属性を使用してください。エイリアスの詳細については、「ログイン属性のカスタマイズ」を参照してください。
ユーザー開示の管理882

Amazon Cognito

開発者ガイドAmazon Cognito がユーザープール内のユーザーを検出するためのSignUpAPIリクエストの使用を防ぐ方法の例については、「」を参照してくださいサインアップ時のメールアドレスと電話番
号の UsernameExistsException エラーの防止。
インポート済みユーザー
PreventUserExistenceErrors が有効になっている場合は、インポートされたユーザーの認証中、PasswordResetRequiredException を返す代わりに、ユーザー名またはパスワードが正しくなかったことを示す NotAuthorizedException エラーが返されます。詳細について
は、「インポートされたユーザーに対するパスワードのリセットの要求」を参照してください。
ユーザー移行の Lambda トリガー
Lambda トリガーによって元のイベントコンテキストに空のレスポンスが設定された場
合、Amazon Cognito は存在しないユーザーについてシミュレートされたレスポンスを返します。詳細については、「ユーザー移行の Lambda トリガー」を参照してください。
サインアップ時のメールアドレスと電話番号の UsernameExistsException エラーの防止
次の例は、ユーザープールでエイリアス属性を設定するときに、重複する E メールアドレスと電話番号がSignUpAPIリクエストに応答してUsernameExistsExceptionエラーを生成しないようにする方法を示しています。E メールアドレスまたは電話番号をエイリアス属性として使用してユー
ザープールを作成しておく必要があります。詳細については、ユーザープール属性の「エイリアス」
セクションを参照してください。
1. Jie は新しいユーザー名にサインアップし、E メールアドレス jie@example.com も提供します。Amazon Cognito がユーザーの E メールアドレスにコードを送信します。
AWS CLI コマンドの例
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password
PASSWORD --user-attributes Name="email",Value="jie@example.com"

レスポンスの例{"UserConfirmed": false,"UserSub": "<subId>","CodeDeliveryDetails": {"AttributeName": "email","Destination": "j****@e****",
ユーザー開示の管理883

Amazon Cognito

開発者ガイド"DeliveryMedium": "EMAIL"}}

2. Jie は、E メールアドレスの所有権を確認するために送信されたコードを提供します。これで、ユーザーとしての登録は完了です。
AWS CLI コマンドの例
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie -confirmation-code xxxxxx

3. Shirley は新しいユーザーアカウントを登録し、E メールアドレス jie@example.com を提供します。Amazon Cognito は UsernameExistsException エラーを返さず、確認コードを Jie の E
メールアドレスに送信します。
AWS CLI コマンドの例
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password
PASSWORD --user-attributes Name="email",Value="jie@example.com"

レスポンスの例{"UserConfirmed": false,"UserSub": "<new subId>","CodeDeliveryDetails": {"AttributeName": "email","Destination": "j****@e****","DeliveryMedium": "EMAIL"}}

4. 別のシナリオでは、Shirley が jie@example.com の所有権を持っています。Shirley は Amazon
Cognito が Jie の E メールアドレスに送信したコードを取得し、アカウントの確認を試みます。
AWS CLI コマンドの例
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley -confirmation-code xxxxxx

ユーザー開示の管理884

Amazon Cognito

開発者ガイドレスポンスの例
An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An
account with the email already exists.

jie@example.com が既存のユーザーに割り当てられているにもかかわらず、Amazon Cognito はShirley の aws cognito-idp sign-up リクエストにエラーを返しません。Amazon Cognito がエラーレスポンスを返す前に、Shirley は E メールアドレスの所有権を証明する必要があります。エイ
リアス属性を持つユーザープールでは、この動作により、パブリック を使用して、特定の E メール
アドレスまたは電話番号を持つユーザーが存在するかどうかSignUpAPIをチェックできなくなります。
この動作は、次の例に示すように、Amazon Cognito が既存のユーザー名の SignUp リクエストに対して返すレスポンスとは異なります。Shirley はこのレスポンスから、そのユーザー名 jie を持つユーザーが既に存在することを知っていますが、そのユーザーに関連する E メールアドレスや電話番号については知りません。
CLI コマンドの例
aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD--user-attributes Name="email",Value="shirley@example.com"

レスポンスの例
An error occurred (UsernameExistsException) when calling the SignUp operation: User
already exists

パスワードのリセットオペレーション
ユーザー存在エラーを防ぐと、Amazon Cognito は、ユーザーパスワードのリセット操作に対して以下の応答を返します。
ForgotPassword
ユーザーが見つからない、非アクティブ化されている、またはパスワードを回復するための検証済みの配信メカニズムがない場合、Amazon Cognito はそのユーザーについてシミュレート済
みの配信ミディアムを用いた CodeDeliveryDetails を返します。シミュレートされた配信メ
ディアは、入力ユーザー名形式とユーザープールの検証設定によって決まります。

ユーザー開示の管理885

Amazon Cognito

開発者ガイドConfirmForgotPassword
Amazon Cognito は、存在しない、または無効になっているユーザーについて
CodeMismatchException エラーを返します。ForgotPassword の使用時にコードが要求されない場合、Amazon Cognito は ExpiredCodeException エラーを返します。

確認オペレーション
ユーザー存在エラーを防ぐと、Amazon Cognito は、ユーザーの確認および検証の操作に対して以下の応答を返します。
ResendConfirmationCode
Amazon Cognito は、無効化されたユーザー、または存在しないユーザーについて
CodeDeliveryDetails を返します。Amazon Cognito は、既存ユーザーの E メールまたは電話番号に確認コードを送信します。
ConfirmSignUp
コードの有効期限が切れている場合は、ExpiredCodeException が返されます。Amazon
Cognito は、ユーザーが承認されていない場合に NotAuthorizedException を返します。コードがサーバーが期待するものと一致しない場合、Amazon Cognito は
CodeMismatchException を返します。

ユーザー開示の管理886

Amazon Cognito

開発者ガイドAmazon Cognito アイデンティティプール
Amazon Cognito アイデンティティプールは、 AWS 認証情報と交換できるフェデレーションアイデ
ンティティのディレクトリです。ID プールは、サインインしているか、まだ識別していないかにか
かわらず、アプリケーションのユーザーに一時的な AWS 認証情報を生成します。 AWS Identity andAccess Management (IAM) ロールとポリシーを使用すると、ユーザーに付与するアクセス許可のレベルを選択できます。ユーザーはゲストとしてスタートし、 AWS サービス で保管しているアセットを取得できます。その後、サードパーティー ID プロバイダーにサインインして、登録メンバーに提供したアセットへのアクセスをロック解除できます。サードパーティーの ID プロバイダーには、Apple や Google などのコンシューマー (ソーシャル) OAuth 2.0 プロバイダー、カスタム SAML
または OIDC ID プロバイダー、またはお客様が独自に設計したカスタム認証スキーム (開発者プロバ
イダーとも呼ばれます) があります。
Amazon Cognito アイデンティティプールの機能のリクエストに署名する AWS サービス
Amazon Simple Storage Service (Amazon S3) や Amazon DynamoDB AWS サービス などの に
API リクエストに署名します。Amazon Pinpoint や Amazon などのサービスでユーザーアクティ
ビティを分析します CloudWatch。
リソースベースのポリシーを使用してリクエストをフィルタリングするリソースへのユーザーアクセスをきめ細かに制御します。ユーザークレームを IAMセッションタ
グに変換し、ユーザーの個別のサブセットにリソースアクセスを許可する IAM ポリシーを構築します。
ゲストアクセスを割り当てる
まだサインインしていないユーザーの場合は、アクセス範囲の狭い AWS 認証情報を生成するよ
うにアイデンティティプールを設定します。シングルサインオンプロバイダーを通じてユーザーを認証し、アクセスを強化します。
ユーザーの特性に基づいて IAM ロールを割り当てる認証されたすべてのユーザーに 1 つの IAM ロールを割り当てるか、各ユーザーのリクエストに基づいてロールを選択します。
さまざまな ID プロバイダーを受け入れる
ID またはアクセストークン、ユーザープールトークン、SAML アサーション、またはソーシャル
プロバイダーの OAuth トークンを AWS 認証情報と交換します。
887

Amazon Cognito

開発者ガイド

自分のアイデンティティを検証する
独自のユーザー検証を実行し、デベロッパーの AWS 認証情報を使用してユーザーの認証情報を発行します。
アプリに認証および承認サービスを提供する Amazon Cognito ユーザープールがすでにある場合があります。ユーザープールは ID プロバイダー (IdP) としてユーザープールに設定できます。これを行うと、ユーザーはユーザープール を介して認証し IdPs、クレームを共通の OIDC ID トークンに統合し、そのトークンを AWS 認証情報と交換できます。その後、ユーザーは署名付きのリクエストで認証情報を AWS サービス に提示できます。
また、任意の ID プロバイダーからの認証済みクレームをアイデンティティプールに直接提示することもできます。Amazon Cognito は、SAML、OAuth、および OIDC プロバイダーからのユーザーク
レームを短期認証情報の AssumeRoleWithWebIdentity API リクエストにカスタマイズします。
Amazon Cognito ユーザープールは、SSO 対応アプリケーションの OIDC ID プロバイダーのようなものです。アイデンティティプールは、IAM 認証に最も適したリソース依存関係を持つすべてのアプリの AWS ID プロバイダーとして機能します。
Amazon Cognito ID プールは、以下の ID プロバイダーをサポートします。
• パブリックプロバイダー:Login with Amazon を ID プール IdP としてセットアップする、アイデン
ティティプール IdP として Facebook を設定する、Google を ID プール IdP としてセットアップ
する、アイデンティティプール IdP として Apple でサインインを設定する、Twitter。
• Amazon Cognito ユーザープール• OIDC プロバイダーを ID プール IdP としてセットアップする• SAML プロバイダーを ID プール IdP としてセットアップする• デベロッパーが認証したアイデンティティ (アイデンティティプール)Amazon Cognito ID プールを利用できるリージョンの詳細については、「AWS リージョン別のサービス」を参照してください。
Amazon Cognito ID プールの詳細については、以下のトピックを参照してください。
トピック• ID プール (フェデレーティッド ID) の使用• ID プールの概念
888

Amazon Cognito

開発者ガイド• Amazon Cognito ID プールのセキュリティのベストプラクティス• アクセスコントロールへの属性の使用• ロールベースアクセスコントロールの使用• 認証情報の取得• AWS サービスへのアクセス• ID プール外部 ID プロバイダー• デベロッパーが認証したアイデンティティ (アイデンティティプール)• 認証されていないユーザーから認証されたユーザー (ID プール) への切り替え

ID プール (フェデレーティッド ID) の使用
Amazon Cognito ID プールは、ゲストであるユーザー (認証されていないユーザー) と、認証されてトークンを受け取ったユーザーに一時的な AWS 認証情報を提供します。ID プールはアカウントに固有のユーザー ID データのストアです。
コンソールで新しい ID プールを作成する
1.

Amazon Cognito コンソールにサインインし、アイデンティティプールを選択します。

2.

[ID プールを作成] を選択します。

3.

[ID プールの信頼を設定] で、アイデンティティプールを認証アクセス、ゲストアクセス、またはその両方に設定することを選択します。
•

4.

[認証アクセス] を選択した場合、アイデンティティプールの認証済み ID のソースとして設定する ID タイプを 1 つ以上選択します。[カスタムデベロッパープロバイダー] を設定した
場合、アイデンティティプールの作成後にそのプロバイダーを変更したり削除したりすることはできません。

[許可を設定] で、アイデンティティプール内の認証済みユーザーまたはゲストユーザーのデフォ
ルトの IAM ロールを選択します。
a.

Amazon Cognito に、基本的な権限とアイデンティティプールとの信頼関係を持つ新しいロールを作成する場合は、[新しい IAM ロールを作成] を選択します。新しいロールを識別するための IAM ロール名を入力します (たとえば myidentitypool_authenticatedrole)。[ポリシードキュメントを表示] を選択して、Amazon Cognito が新しい IAM ロールに割り当てるアクセス権限を確認します。

ID プールの使用

889

Amazon Cognitob.

開発者ガイド使用する にロールが既にある場合は、既存の IAM ロール AWS アカウント を使用することを選択できます。cognito-identity.amazonaws.com を含めるように IAM ロールの信頼ポリシーを設定する必要があります。リクエストが特定のアイデンティティプール内の認証されたユーザーから送信されたという証拠を提示した場合にのみ、Amazon Cognito がロールを引き継ぐことを許可するようにロールの信頼ポリシーを設定します。詳細について
は、「ロールの信頼とアクセス権限」を参照してください。

5.

ID プロバイダーの接続 で、ID プールの信頼を設定する で選択した ID プロバイダー (IdPs) の詳細を入力します。OAuth アプリケーションクライアント情報の提供、Amazon Cognito ユーザー
プールの選択、IAM IdP の選択、またはディベロッパープロバイダーのカスタム識別子の入力を求められる場合があります。
a.

各 IdP の [ロール設定] を選択します。その IdP のユーザーに、認証済みロールを設定した
ときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。Amazon Cognito ユーザープール IdP では、トークンに preferred_role を含む
ロールを選択することもできます。cognito:preferred_role クレームの詳細について
は、「グループへの優先順位の値の割り当て」を参照してください。

b.

6.

i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

アクセスコントロールの属性は、IdP ごとに個別に設定できます。アクセスコントロールの属性は、Amazon Cognito がユーザーの一時セッションに適用するプリンシパルタグにユー
ザーのクレームをマッピングします。セッションに適用するタグに基づいてユーザーアクセ
スをフィルタリングするIAMポリシーを作成できます。
i.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

ii.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルト
マッピングを使用] を選択します。

iii.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッ
ピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[プロパティの設定] の [ID プール名] に [名前] を入力します。

ID プールの使用

890

Amazon Cognito

7.

開発者ガイド[基本 (クラシック) 認証] で、ベーシックフローを有効にするかどうかを選択します。基本
的なフローをアクティブにすると、 に対して行ったロールの選択をバイパス IdPs して、AssumeRoleWithWebIdentity を直接呼び出すことができます。詳細については、「ID プール(フェデレーティッドアイデンティティ) の認証フロー」を参照してください。

8.

アイデンティティプールにタグを適用する場合は、[タグ] で [タグの追加] を選択します。

9.

[確認および作成] で、新しいアイデンティティプールに対して行った選択を確認します。[編集] を選択してウィザードに戻り、設定を変更します。終了したら、[ID プールの作成] を選択します。

ユーザー IAM ロール
IAM ロールは、ユーザーが などの AWS リソースにアクセスするためのアクセス許可を定義しま
すAmazon Cognito Sync。アプリケーションのユーザーは、作成されたロールを引き受けます。認証されたユーザーと認証されていないユーザー用に、異なるロールを指定できます。IAM ロールの詳細については、「IAM ロール」を参照してください。

認証された ID と認証されていない ID
Amazon Cognito ID プールは、認証された ID と認証されていない ID の両方をサポートします。認証された ID は任意のサポートされている認証プロバイダーで認証されたユーザーに属します。通常、認証されていない ID はゲストユーザーに属します。
• パブリックログインプロバイダーに対して、認証された ID を設定する方法については、「ID プール外部 ID プロバイダー」を参照してください。
• 独自のバックエンド認証プロセスを設定するには、「デベロッパーが認証したアイデンティティ(アイデンティティプール)」を参照してください。

ゲストアクセスをアクティブ化/非アクティブ化する
Amazon Cognito ID プールのゲストアクセス (認証されていない ID) は、ID プロバイダーで認証しないユーザーに一意の識別子と AWS 認証情報を提供します。アプリケーションで、ログインしな
いユーザーを許可している場合、認証されていない ID 用にアクセスを許可できます。詳細について
は、「Amazon Cognito ID プールの開始方法」を参照してください。

ユーザー IAM ロール

891

Amazon Cognito

開発者ガイドアイデンティティプールのゲストアクセスを更新するには1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

ゲストアクセスを検索します。現在ゲストアクセスをサポートしていないアイデンティティプー
ルでは、ステータスが非アクティブです。
a.

ゲストアクセスがアクティブで、非アクティブ化したい場合は、[非アクティブ化] を選択します。

b.

ゲストアクセスが非アクティブで、アクティブにしたい場合は、[編集] を選択します。
•

アイデンティティプールのゲストユーザーのデフォルトの IAM ロールを選択します。
A.

Amazon Cognito に、基本的な権限とアイデンティティプールとの信頼関係を持つ新しいロールを作成する場合は、[新しい IAM ロールを作成] を選択します。新しいロールを識別するための IAM ロール名を入力します (たとえば myidentitypool_authenticatedrole)。[ポリシードキュメントを表示] を選択して、Amazon Cognito が新しい IAM ロールに割り当てるアクセス権限を確認
します。

B.

使用する にロールがすでにある場合は、既存の IAM ロール AWS アカウント を使用するように選択できます。cognito-identity.amazonaws.com を含めるよ
うに IAM ロールの信頼ポリシーを設定する必要があります。リクエストが特定のアイデンティティプール内の認証されたユーザーから送信されたという証拠を提示した場合にのみ、Amazon Cognito がロールを引き継ぐことを許可するようにロールの信頼ポリシーを設定します。詳細については、「ロールの信頼とアクセス権限」を参照してください。

C.

[変更を保存] を選択します。

D.

ゲストアクセスを有効にするには、[ユーザーアクセス] タブで [アクティブ化] を選択します。

ID の種類に関連付けられたロールを変更する
ID プールのすべての ID は、認証されているか、認証されていないかのいずれかです。認証された
ID は、パブリックログインプロバイダー (Amazon Cognito ユーザープール、Login with Amazon、「Apple でサインイン」、Facebook、Google、SAML、または任意の OpenID Connect プロバイ
ID の種類に関連付けられたロールを変更する

892

Amazon Cognito

開発者ガイドダー)、またはデベロッパープロバイダー (独自のバックエンド認証プロセス) によって認証されたユーザーに属します。通常、認証されていない ID はゲストユーザーに属します。
各 ID の種類について、割り当てられたロールがあります。このロールには、 AWS サービス そのロールがアクセスできるロールを指定するポリシーがアタッチされています。リクエストを受け取った Amazon Cognito は、ID タイプとその ID タイプに割り当てられたロールを判別し、そのロールにアタッチされたポリシーを使用して応答を返します。ポリシーを変更するか、アイデンティティタ
イプに別のロールを割り当てることで、どのアイデンティティタイプにアクセスできる AWS サービ
ス かを制御できます。ID プールのロールに関連付けられたポリシーの表示または変更については、「AWS IAM コンソール」を参照してください。
アイデンティティプールのデフォルトの認証済みロールまたは非認証ロールを変更するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ゲストアクセス] または [認証されたアクセス] を見つけます。現在そのアクセスタイプに設定されていないアイデンティティプールでは、ステータスが非アクティブです。[Edit] (編集) を選択
します。

4.

アイデンティティプールのゲストまたは認証されたユーザーのデフォルトの IAM ロールを選択します。
a.

Amazon Cognito に、基本的な権限とアイデンティティプールとの信頼関係を持つ新しいロールを作成する場合は、[新しい IAM ロールを作成] を選択します。新しいロールを識別するための IAM ロール名を入力します (たとえば myidentitypool_authenticatedrole)。[ポリシードキュメントを表示] を選択して、Amazon Cognito が新しい IAM ロールに割り当てるアクセス権限を確認します。

b.

使用する にロールが既にある場合は、既存の IAM ロール AWS アカウント を使用することを選択できます。cognito-identity.amazonaws.com を含めるように IAM ロールの信頼ポリシーを設定する必要があります。リクエストが特定のアイデンティティプール内の認証されたユーザーから送信されたという証拠を提示した場合にのみ、Amazon Cognito がロールを引き継ぐことを許可するようにロールの信頼ポリシーを設定します。詳細について
は、「ロールの信頼とアクセス権限」を参照してください。

5.

[変更を保存] を選択します。

ID の種類に関連付けられたロールを変更する

893

Amazon Cognito

開発者ガイドID プロバイダーを編集する
コンシューマー ID プロバイダー (Amazon Cognito ユーザープール、Login with Amazon、Apple で
サインイン、Facebook、Google など) を使用した認証をユーザーに許可している場合は、Amazon
Cognito ID プール (フェデレーテッドアイデンティティ) のコンソールでアプリケーション識別子を指定できます。これにより、アプリケーション ID (パブリックログインプロバイダーによって提供)
が ID プールに関連付けられます。
このページからプロバイダーごとの認証ルールを設定することもできます。プロバイダーごとに、最大 25 個のルールを割り当てることができます。ルールは、プロバイダーごとに保存した順序で適用されます。詳細については、「ロールベースアクセスコントロールの使用」を参照してください。
Warning
アイデンティティプールでリンクされた IdP アプリケーション ID を変更すると、そのアイ
デンティティプールによる既存ユーザーの認証ができなくなります。詳細については、「IDプール外部 ID プロバイダー」を参照してください。

アイデンティティプール ID プロバイダー (IdP) を更新するには1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

ID プロバイダーを見つけます。編集する ID プロバイダーを選択します。新しい IdP を追加する
場合は、[ID プロバイダーを追加] を選択します。
•

4.

[ID プロバイダーを追加] を選択した場合は、追加する ID タイプのいずれかを選択します。

アプリケーション ID を変更するには、[アイデンティティプロバイダーに関する情報] で [編集]を選択します。

5.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを変更するには、[ロール設定] で [編集] を選択します。
•

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。Amazon Cognito ユー
ザープール IdP では、トークンに preferred_role を含むロールを選択することもできます。cognito:preferred_role クレームの詳細については、「グループへの優先順位の値の割り当て」を参照してください。

ID プロバイダーを編集する

894

Amazon Cognitoi.

開発者ガイド[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.
6.

7.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] で [編集] を選択します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

アイデンティティプールを削除する
アイデンティティプールの削除は元に戻すことができません。アイデンティティプールを削除すると、そのプールに依存するすべてのアプリとユーザーは機能しなくなります。
ID プールを削除するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。削除するアイデンティ
ティプールの横にあるラジオボタンをオンにします。

2.

[削除] を選択します。

3.

アイデンティティプールの名前を入力または貼り付けて、[削除] を選択します。

Warning[Delete] (削除) ボタンをクリックすると、ID プールと、それに含まれているすべてのユー
ザーデータが完全に削除されます。アイデンティティプールを削除すると、そのアイデン
ティティプールを使用しているアプリケーションや他のサービスは動作を停止します。

アイデンティティプールを削除する

895

Amazon Cognito

開発者ガイドID プールから ID を削除する
アイデンティティプールから ID を削除すると、Amazon Cognito がそのフェデレーティッドユー
ザーについて保存した識別情報が削除されます。ユーザーが再度認証情報をリクエストすると、アイ
デンティティプールが依然として ID プロバイダーを信頼していれば、そのユーザーは新しい ID を受け取ります。このオペレーションは元に戻すことができません。
ID を削除するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ID ブラウザー] タブを選択します。

3.

削除する ID プロバイダーの横にあるチェックボックスを選択してから、[削除] を選択します。ID を削除することを確認し、[削除] を選択します。

Amazon Cognito Sync を ID プールで使用する
Amazon Cognito Sync は、アプリケーション関連のユーザーデータをデバイス間で同期できるようにする AWS サービス および クライアントライブラリです。Amazon Cognito Sync は、独自のバックエンドを使用せずに、モバイルデバイスとウェブ間でユーザープロファイルデータを同期できます。クライアントライブラリはローカルにデータをキャッシュするため、アプリはデバイスの接続状
態にかかわらず、データを読み書きすることができます。デバイスがオンラインになると、データを同期できます。プッシュ同期を設定すると、更新が利用できることが他のデバイスにすぐに通知されます。

データセットの管理
アプリケーションに Amazon Cognito Sync 機能を実装している場合、Amazon Cognito ID プールコ
ンソールで、個々のアイデンティティ用のデータセットとレコードを手動で作成したり、削除した
りできます。Amazon Cognito ID プールコンソールで、アイデンティティ用のデータセットまたはレ
コードに対して行った変更は、コンソールの [Synchronize] (同期) をクリックするまで保存されません。この変更は、Synchronize が呼び出され、ID が同期されるでは、エンドユーザーに表示されません。特定のアイデンティティのデータセット一覧ページを更新すると、個別のアイデンティティについて他のデバイスから同期されたデータが表示されます。

ID プールから ID を削除する

896

Amazon Cognito

開発者ガイドアイデンティティのデータセットを作成する
Amazon Cognito Sync は、データセットを 1 つの ID に関連付けます。ID が表すユーザーに関する識別情報をデータセットに入力し、その情報をユーザーのすべてのデバイスに同期できます。
データセットとデータセットレコードを ID に追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ID ブラウザー] タブを選択します。

3.

編集する ID を選択します。

4.

[データセット] で、[データセットの作成] を選択します。

5.

データセット名を入力し、[データセットの作成] を選択します。

6.

データセットにレコードを追加する場合は、ID の詳細からデータセットを選択します。[レコード] で、[レコードの作成] を選択します。

7.

レコードの [キー] と [値] を入力します。[確認] を選択します。同じ手順を繰り返して、さらにレコードを追加します。

ID に関連付けられたデータセットを削除する
ID からデータセットとそのレコードを削除するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ID ブラウザー] タブを選択します。

3.

削除するデータセットを含む ID を選択します。

4.

[データセット] で、削除するデータセットの横にあるラジオボタンを選択します。

5.

[削除] を選択します。選択内容を確認して、もう一度 [削除] を選択します。

データの一括発行
一括発行を使用すると、既に Amazon Cognito Sync ストアに保存されているデータを、Amazon
Kinesis ストリームにエクスポートできます。すべてのストリームを一括発行する手順については、「Amazon Cognito ストリーム」を参照してください。
Amazon Cognito Sync を ID プールで使用する

897

Amazon Cognito

開発者ガイドプッシュ同期を有効にする
Amazon Cognito は自動的にアイデンティティとデバイス間の関係を追跡します。プッシュ同期機能を使用すると、ID データが変更されたときに、特定の ID のすべてのインスタンスに確実に通知されます。プッシュ同期は、ID のデータセットが変更されるたびに、その ID に関連付けられているすべてのデバイスが、この変更を伝えるサイレントプッシュ通知を受け取ることを確実にします。
プッシュ同期は Amazon Cognito コンソールでアクティブ化できます。
プッシュ同期をアクティブ化するには1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザープールのプロパティ] タブを選択します。

3.

[プッシュ同期] で [編集] を選択します4.

[ID プールとのプッシュ同期を有効にする] を選択します。

5.

現在 AWS リージョン で作成した Amazon Simple Notification Service (Amazon SNS) プラット
フォームアプリケーションから 1 つを選択します。Amazon Cognito はプッシュ通知をプラット
フォームアプリケーションに公開します。[プラットフォームアプリケーションの作成] を選択して Amazon SNS コンソールに移動し、新しいコンソールを作成します。

6.

プラットフォームアプリケーションにパブリッシュするには、Amazon Cognito が AWS
アカウント で IAM ロールを引き受けます。Amazon Cognito に、基本的な権限とアイデン
ティティプールとの信頼関係を持つ新しいロールを作成する場合は、[新しい IAM ロールを作成] を選択します。新しいロールを識別するための IAM ロール名を入力します (たとえば myidentitypool_authenticatedrole)。[ポリシードキュメントを表示] を選択して、Amazon Cognito が新しい IAM ロールに割り当てるアクセス権限を確認します。

7.

使用する にロールが既にある場合は、既存の IAM ロール AWS アカウント の使用を選択できます。cognito-identity.amazonaws.com を含めるように IAM ロールの信頼ポリシーを設定する必要があります。リクエストが特定のアイデンティティプール内の認証されたユーザーから送信されたという証拠を提示した場合にのみ、Amazon Cognito がロールを引き継ぐことを許可するようにロールの信頼ポリシーを設定します。詳細については、「ロールの信頼とアクセス権限」を参照してください。

8.

[変更を保存] を選択します。

Amazon Cognito Sync を ID プールで使用する

898

Amazon Cognito

開発者ガイドAmazon Cognito Streams をセットアップする
Amazon Cognito Streams は、Amazon Cognito Sync に保存されているデータに対する制御と洞察をデベロッパーに提供します。これで、デベロッパーはイベントをデータとして受け取るために Kinesis ストリームを設定できるようになります。Amazon Cognito は、所有する Kinesis スト
リームに各データセットの変更をリアルタイムでプッシュできます。Amazon Cognito コンソールで
Amazon Cognito Streams をセットアップする方法の手順については、「Amazon Cognito ストリーム」を参照してください。

Amazon Cognito Events をセットアップする
Amazon Cognito Events では、Amazon Cognito Sync の重要なイベントに応じて AWS Lambda 関数を実行できます。Amazon Cognito Sync は、データセットが同期されるときに Sync Trigger イベン
トを生成します。Sync Trigger イベントを使用して、ユーザーがデータを更新するときにアクションを実行できます。コンソールから Amazon Cognito Events をセットアップする手順については、「Amazon Cognito イベント」を参照してください。
の詳細については、 AWS Lambda「」を参照してくださいAWS Lambda。

ID プールの概念
Amazon Cognito ID プールを使用して、ユーザーのために一意のアイデンティティを作成し、ID
プロバイダーでそれらを認証することができます。ID を使用すると、権限が制限された一時的なAWS 認証情報を取得して、他の にアクセスできます AWS サービス。Amazon Cognito ID プール
は、Amazon、Apple、Facebook、および Google などのパブリック ID プロバイダーだけでなく、認証されていない ID もサポートします。また、独自のバックエンド認証プロセスを通じてユーザーを登録し、認証することができる、開発者が認証した ID をサポートします。
Amazon Cognito ID プールを利用できるリージョンの詳細については、「AWS リージョン別のサービス」を参照してください。Amazon Cognito ID プールの概念に関する詳細については、以下のト
ピックを参照してください。
トピック• ID プール (フェデレーティッドアイデンティティ) の認証フロー• IAM ロール
• ロールの信頼とアクセス権限
ID プールの概念

899

Amazon Cognito

開発者ガイドID プール (フェデレーティッドアイデンティティ) の認証フロー
Amazon Cognito は、エンドユーザーのために、デバイスおよびプラットフォーム全体で整合性が維持される一意の識別子を作成するために役立ちます。また、Amazon Cognito は、 AWS リソースにアクセスするために、一時的な権限が制限された認証情報をアプリケーションに配信します。このページでは、Amazon Cognito での認証の基礎と、ID プール内のアイデンティティのライフサイクル
について説明します。
外部プロバイダーの認証フロー
Amazon Cognito で認証されるユーザーは、その認証情報をブートストラップするために複数ステップのプロセスを経由します。Amazon Cognito には、パブリックプロバイダーでの認証に、拡張認証と基本認証の 2 つの異なるフローがあります。
これらのフローのいずれかを完了すると、ロールのアクセスポリシーで定義されている AWS サー
ビス 他の にアクセスできます。デフォルトでは、Amazon Cognito コンソールは、Amazon Cognito
Sync ストアと Amazon Mobile Analytics へのアクセス権を持つロールを作成します。その他のアクセス権を付与する方法の詳細については、「IAM ロール」を参照してください。
ID プールは、プロバイダーからの次のアーティファクトを受け入れます。
プロバイダー

認証アーティファクト

Amazon Cognito ユーザープール

ID トークン

OpenID Connect (OIDC）

ID トークン

SAML 2.0

SAML アサーション

ソーシャルプロバイダー

アクセストークン

拡張 (簡略化) 認証フロー
拡張認証フローを使用する場合、アプリケーションはまず、承認された Amazon Cognito ユーザー
プールまたはサードパーティー ID プロバイダーからの認証の証明をGetIdリクエストで提示します。
1. アプリケーションは、GetIDリクエストで、承認された Amazon Cognito ユーザープールまたは
サードパーティー ID プロバイダーからのJSONウェブトークンまたはSAMLアサーションなどの認証の証明を提示します。
ID プールの認証フロー

900

Amazon Cognito

開発者ガイド2. ID プールは ID を返します。
3. アプリケーションは、ID をGetCredentialsForIdentityリクエスト内の同じ認証証明と組み合わせます。
4. ID プールは AWS 認証情報を返します。
5. アプリケーションは、一時的な認証情報を使用してリクエストに署名 AWS APIします。
拡張認証は、ID プール設定でのIAMロールの選択と認証情報の取得のロジックを管理します。デ
フォルトのロールを選択するように ID プールを設定して、属性ベースのアクセスコントロール(ABAC) またはロールベースのアクセスコントロール (RBAC) の原則をロールの選択に適用できます。拡張認証の AWS 認証情報は 1 時間有効です。
拡張認証でのオペレーションの順序
1. GetId
2. GetCredentialsForIdentity

基本 (Classic) 認証フロー
基本的な認証フローを使用する場合、
ID プールの認証フロー

901

Amazon Cognito

開発者ガイド1. アプリケーションは、GetIDリクエストで、承認された Amazon Cognito ユーザープールまたは
サードパーティー ID プロバイダーからのJSONウェブトークンまたはSAMLアサーションなどの認証の証明を提示します。
2. ID プールは ID を返します。
3. アプリケーションは、ID をGetOpenIdTokenリクエスト内の同じ認証証明と組み合わせます。
4. GetOpenIdToken は、ID プールによって発行された新しい OAuth 2.0 トークンを返します。
5. アプリケーションは新しいトークンを AssumeRoleWithWebIdentity リクエストに提示します。
6. AWS Security Token Service AWS STS) は AWS 認証情報を返します。
7. アプリケーションは、一時的な認証情報を使用してリクエストに署名 AWS APIします。
基本ワークフローでは、ユーザーに配布する認証情報をより細かく制御できます。拡張認証フローの
GetCredentialsForIdentity リクエストは、アクセストークンの内容に基づいてロールをリク
エストします。クラシックワークフローのAssumeRoleWithWebIdentityリクエストにより、十分な信頼ポリシーで設定した AWS Identity and Access Management ロールの認証情報をリクエストする機能がアプリに付与されます。カスタムロールセッション期間をリクエストすることもできます。
基本認証でのオペレーションの順序
1. GetId
2. GetOpenIdToken
3. AssumeRoleWithWebIdentity

ID プールの認証フロー

902

Amazon Cognito

開発者ガイドデベロッパーが認証した ID の認証フロー
デベロッパーが認証したアイデンティティ (アイデンティティプール) を使用する場合、クライアン
トは独自の認証システムでユーザーを検証するために、Amazon Cognito 外部のコードが含まれる異なる認証フローを使用します。Amazon Cognito 外部のコードは、外部のものであることが示されます。
拡張認証フロー
デベロッパープロバイダーによる拡張認証でのオペレーションの順序
1. デベロッパープロバイダー経由でのログイン (Amazon Cognito 外部のコード)
2. ユーザーログインの検証 (Amazon Cognito 外部のコード)
3. GetOpenIdTokenForDeveloperIdentity
4. GetCredentialsForIdentity

ID プールの認証フロー

903

Amazon Cognito

開発者ガイドデベロッパープロバイダーによる基本認証でのオペレーションの順序
1. ID プールの外部にロジックを実装してサインインし、デベロッパーとプロバイダーの識別子を生成します。
2. 保存されたサーバー側の AWS 認証情報を取得します。
3. 承認された AWS 認証情報で署名されたGetOpenIdTokenForDeveloperIdentityAPIリクエストでデベロッパープロバイダー識別子を送信します。
4. でアプリケーション認証情報をリクエストしますAssumeRoleWithWebIdentity。

ID プールの認証フロー

904

Amazon Cognito

開発者ガイド使用するべき認証フロー
拡張フローは、デベロッパーの労力が最も低い、最も安全な選択肢です。
• 拡張フローにより、APIリクエストの複雑さ、サイズ、レートが軽減されます。
• アプリケーションは、 に追加のAPIリクエストを行う必要はありません AWS STS。
• ID プールは、ユーザーを受信する必要があるIAMロール認証情報についてユーザーを評価します。クライアントでロールを選択するためにロジックを埋め込む必要はありません。

Important
新しい ID プールを作成するときは、ベストプラクティスとして、基本 (クラシック) 認証を
デフォルトでアクティブ化しないでください。基本認証を実装するには、まずIAMロールの信頼関係を評価してウェブ ID を確認します。次に、クライアントにロール選択のロジックを構築し、ユーザーによる変更からクライアントを保護します。

基本的な認証フローは、IAMロール選択のロジックをアプリケーションに委任します。このフローでは、Amazon Cognito はユーザーの認証されたセッションまたは認証されていないセッションを検証
し、 と認証情報と交換できるトークンを発行します AWS STS。ユーザーは、基本認証のトークン
を、ID プールと を信頼する任意のIAMロールamr、または認証済み/認証されていない状態に交換できます。
ID プールの認証フロー

905

Amazon Cognito

開発者ガイド同様に、デベロッパー認証は ID プロバイダー認証の検証に関するショートカットであることを理解してください。Amazon Cognito は、GetOpenIdTokenForDeveloperIdentityリクエストの内容をさらに検証することなく、リクエストを承認する AWS 認証情報を信頼します。ユーザーによるアクセス
からデベロッパー認証を許可するシークレットを保護します。
API 概要GetId
GetId API 呼び出しは、Amazon Cognito で新しい ID を確立するために必要な最初の呼び出しです。
非認証アクセス
Amazon Cognito には、アプリケーションで認証されていないゲストアクセスを許可できます。ID プールでこの機能が有効になっている場合、ユーザーは を介していつでも新しい ID
GetId をリクエストできますAPI。Amazon Cognito に後続のコールを実行するため、アプリ
ケーションにはこのアイデンティティ ID をキャッシュすることが期待されます。ブラウザ
JavaScript の Mobile AWS SDKsと AWS SDK for には、このキャッシュを処理する認証情報
プロバイダーがあります。
認証されたアクセス
パブリックログインプロバイダー (Facebook、Google+、Login with Amazon、または Sign inwith Apple) をサポートするようにアプリケーションを設定すると、ユーザーはそれらのプロバイダーでそれらを識別するトークン (OAuth または OpenID Connect) を指定することもできます。GetId の呼び出しで使用されると、Amazon Cognito は新しい認証されたアイデン
ティティを作成するか、その特定のログインに既に関連付けられているアイデンティティを返します。Amazon Cognito は、プロバイダーでトークンを検証し、以下を確実にすることでこれを行います。
• トークンは有効で、設定されたプロバイダーからのものである。
• トークンの有効期限が切れていない。
• トークンがそのプロバイダーで作成されたアプリケーション識別子 (例えば、Facebook ア
プリ ID) と一致する。
• トークンがユーザー識別子と一致する。
GetCredentialsForIdentity
は、ID を確立した後に呼び出すGetCredentialsForIdentityAPIことができます。このオ
ペレーションは、機能的には を呼び出しGetOpenIdToken、次に を呼び出すのと同等ですAssumeRoleWithWebIdentity。
ID プールの認証フロー

906

Amazon Cognito

開発者ガイドAmazon Cognito がユーザーAssumeRoleWithWebIdentityに代わって を呼び出すには、ID
プールにIAMロールが関連付けられている必要があります。これは、Amazon Cognito コンソール
または SetIdentityPoolRolesオペレーションを使用して手動で実行できます。
GetOpenIdToken
ID を確立した後にGetOpenIdTokenAPIリクエストを行います。最初のリクエストIDs後にアイデンティティをキャッシュし、そのアイデンティティのその後の基本 (クラシック) セッションを で開始しますGetOpenIdToken。
GetOpenIdToken API リクエストへのレスポンスは、Amazon Cognito が生成するトークンです。このトークンは、 AssumeRoleWithWebIdentityリクエストの WebIdentityTokenパラメー
タとして送信できます。
OpenID トークンを送信する前に、アプリで検証してください。のOIDCライブラリSDKまたはなどのライブラリを使用してaws-jwt-verify、Amazon Cognito がトークンを発行したことを確認できます。OpenID トークンの署名キー ID または kid は、Amazon Cognito ID jwks_uriドキュ
メント† にリストされているもののいずれかです。これらのキーは変更される可能性があります。Amazon Cognito ID トークンを検証する関数は、jwks_uri ドキュメントからキーのリストを定期的に更新する必要があります。Amazon Cognito は、jwks_uri キャッシュコントロールレスポ
ンスヘッダーで更新期間を設定しており、現在 max-age の 30 日間に設定されています。
認証されていないアクセス
認証されていない ID のトークンを取得するには、アイデンティティ ID そのもののみが必要です。認証された ID または無効にした ID の認証されていないトークンを取得することはできません。
認証されたアクセス
認証済みの ID がある場合、その ID に既に関連付けられたログイン用に、少なくとも 1 つのトークンを渡す必要があります。GetOpenIdToken の呼び出し中に渡されるすべてのトーク
ンは、前に説明したのと同じ検証を渡す必要があります。いずれかのトークンが失敗すると、呼び出し全体が失敗します。GetOpenIdToken 呼び出しからの応答に、アイデンティティ IDが含まれることもあります。これは、渡すアイデンティティ ID が、返される ID とは限らないためです。
ログインのリンク
既に任意の ID と関連付けられていないログインのトークンを送信すると、そのログインは関連付けられた ID に「リンクしている」と見なされます。パブリックプロバイダーごとに、1つのログインのみをリンクできます。複数のログインをパブリックプロバイダーにリンクしよID プールの認証フロー

907

Amazon Cognito

開発者ガイドうとすると、応答として ResourceConflictException エラーが発生します。ログインが単純に既存の アイデンティティ にリンクされている場合、GetOpenIdToken から返される
アイデンティティ ID は、渡された ID と同じになります。
ID の結合現在、特定の ID にリンクされていないが、別の ID にリンクされているログインに対してトークンを渡すと、2 つの ID が結合されます。いったん結合されると、1 つの ID は、すべての関連ログインの親/所有者になり、もう 1 つは無視されます。この場合、親/所有者のアイデ
ンティティ ID が返されます。この値が異なる場合は、ローカルキャッシュを更新する必要があります。 AWS Mobile のプロバイダーSDKs、または AWS SDKブラウザの のプロバイダー
JavaScript が、このオペレーションを実行します。
GetOpenIdTokenForDeveloperIdentity
GetOpenIdTokenForDeveloperIdentity オペレーションは、デベロッパーGetOpenIdTokenが認証した ID を使用する場合の、デバイスから GetIdおよび の使用を置き換えます。アプリケーショ
ンは AWS 認証情報を使用してこのAPIオペレーションへのリクエストに署名するため、Amazon
Cognito はリクエストで指定されたユーザー識別子が有効であると信頼します。デベロッパー認
証は、Amazon Cognito が実行するトークン検証を外部プロバイダーに置き換えます。
このペイロードにはloginsマップAPIが含まれます。このマップには、デベロッパープロバイ
ダーのキーと、システム内のユーザーの識別子としての 値が含まれている必要があります。ユー
ザー識別子がまだ既存のアイデンティティに既にリンクされていない場合は、Amazon Cognito
が新しいアイデンティティを作成して、新しいアイデンティティ ID と、そのアイデンティティの OpenID Connect を返します。ユーザー識別子が既にリンクされている場合は、Amazon
Cognito が既存のアイデンティティ ID と OpenID Connect トークンを返します。デベロッパー
ID を最初のリクエストIDs後にキャッシュし、その ID のその後の基本 (クラシック) セッションを で開始しますGetOpenIdTokenForDeveloperIdentity。
GetOpenIdTokenForDeveloperIdentity API リクエストへのレスポンスは、Amazon
Cognito が生成するトークンです。このトークンは、AssumeRoleWithWebIdentity リクエス
トの WebIdentityToken パラメータとして送信できます。
OpenID Connect トークンを送信する前に、アプリで検証してください。のOIDCライブラリSDK
または などのライブラリを使用してaws-jwt-verify、Amazon Cognito がトークンを発行したことを確認できます。OpenID Connect トークンの署名キー ID または kid は、Amazon Cognito
ID jwks_uri ドキュメント† にリストされているもののいずれかです。これらのキーは変更される可能性があります。Amazon Cognito ID トークンを検証する関数は、jwks_uri ドキュメント
からキーのリストを定期的に更新する必要があります。Amazon Cognito は、jwks_uri cacheID プールの認証フロー

908

Amazon Cognito

開発者ガイドcontrol レスポンスヘッダーで更新期間を設定しており、現在 max-age の 30 日間に設定されています。
ログインのリンク
外部プロバイダーと同様に、既に ID に関連付けられていない追加のログインを指定すると、それらのログインがその ID に暗黙的にリンクされます。外部プロバイダーのログインを IDにリンクする場合、ユーザーはそのプロバイダーで外部プロバイダーの認証フローを使用できます。ただし、GetId または GetOpenIdToken を呼び出すときに、ログインマップで開発者プロバイダ名を使用することはできません。
ID の結合デベロッパーが認証した ID では、Amazon Cognito は を介した暗黙的なマージと明示的なマージの両方をサポートしますMergeDeveloperIdentitiesAPI。明示的なマージにより、システ
ムでユーザー識別子を持つ 2 つのアイデンティティを、1 つのアイデンティティとしてマークできます。ソースと宛先のユーザー識別子を指定すると、Amazon Cognito がそれらをマージします。次回にいずれかのユーザー識別子に対して OpenID Connect トークンをリクエストすると、同じアイデンティティ ID が返されます。
AssumeRoleWithWebIdentity
OpenID Connect トークンを取得したら、 () へのAssumeRoleWithWebIdentityAPI AWS Security
Token Service リクエストを通じて、これを一時的な AWS 認証情報と交換できますAWS STS。
作成できる ID の数には制限がないため、ユーザーに付与するアクセス権限を理解することが重要です。アプリケーションにさまざまなIAMロールを設定します。1 つは認証されていないユー
ザー用、もう 1 つは認証されたユーザー用です。Amazon Cognito コンソールでは、アイデン
ティティプールを初めてセットアップするときにデフォルトのロールを作成できます。これらのロールには、実質的にアクセス許可が付与されていません。ニーズに合わせて変更します。
ロールの信頼とアクセス権限 の詳細を確認してください。
† デフォルトの Amazon Cognito ID の jwks_uri ドキュメントには、ほとんどの AWS リージョンでID プールのトークンに署名するキーに関する情報が含まれています。以下のリージョンには異なる
jwks_uri ドキュメントがあります。

ID プールの認証フロー909

Amazon Cognito

開発者ガイドAmazon Cognito Identity JSON web key URIs in other AWS リージョン
AWS リージョン

jwks_uri ドキュメントへのパス

AWS GovCloud （米国西部）

https://cognito-identity.us-govwest-1.amazonaws.com/.well-know
n/jwks_uri

中国 (北京)https://cognito-identity.cnnorth-1.amazonaws.com.cn/.wellknown/jwks_uri

欧州 (ミラノ) やアフリカ (ケープタウン) などのオプトインリージョン

https://cognito-id
entity. Region.amazonaws.com/.we
ll-known/jwks_uri

また、発行者から jwks_uri を推定することも、Amazon Cognito から OpenID トークンで受け取った iss を推定することもできます。OIDC標準検出エンドポイントは、トークンの jwks_uri へのパス
を<issuer>/.well-known/openid-configuration一覧表示します。

IAM ロール
ID プールの作成中に、ユーザーが引き受けるIAMロールを更新するように求められます。IAM ロー
ルは次のように動作します。ユーザーがアプリケーションにログインすると、Amazon Cognito はユーザーの一時的な AWS 認証情報を生成します。これらの一時的な認証情報は、特定のIAMロールに関連付けられています。IAM ロールを使用すると、 AWS リソースにアクセスするための一連のア
クセス許可を定義できます。
認証されたユーザーと認証されていないユーザーのデフォルトIAMロールを指定できます。また、ユーザーの ID トークンのクレームに基づいて、各ユーザーのロールを選択するルールを定義できます。詳細については、「ロールベースアクセスコントロールの使用」を参照してください。
デフォルトでは、Amazon Cognito コンソールは、Amazon Mobile Analytics および Amazon Cognito
Sync へのアクセスを提供するIAMロールを作成します。または、既存のIAMロールを使用することを選択することもできます。
IAM ロールを変更して、他の サービスへのアクセスを許可または制限します。そのためには、IAM
コンソール にログインします。次に、[Roles] (ロール) を選択し、ロールを選択します。選択された
ロールにアタッチされたポリシーが、[Permissions] (アクセス許可) タブに表示されます。対応する
IAM ロール

910

Amazon Cognito

開発者ガイド[Manage Policy] (ポリシーの管理) リンクを選択してアクセスポリシーをカスタマイズできます。ポリシーの使用と定義の詳細については、「ポリシーの概要IAM」を参照してください。
Note
ベストプラクティスとして、最小権限の付与の原則に準拠したポリシーを定義します。つまり、ポリシーには、ユーザーがタスクを実行するために必要なアクセス権限のみを含めます。詳細については、「 ユーザーガイド」の「最小特権の付与IAM」を参照してください。
認証されていない ID は、アプリにログインしていないユーザーが引き受けることに注意してください。通常、認証されていない ID に割り当てるアクセス権限は、認証された ID に割り当てるアクセス権限よりも制限が厳しいものである必要があります。

トピック• 信頼ポリシーのセットアップ• アクセスポリシー

信頼ポリシーのセットアップ
Amazon Cognito は、IAMロールを使用してアプリケーションのユーザーの一時的な認証情報を生成します。アクセス権限へのアクセスは、ロールの信頼関係によって制御されます。詳細情報 ロールの信頼とアクセス権限。
に提示されるトークン AWS STS は、ユーザープール、ソーシャルトークン、OIDCプロバイダー
トークン、またはSAMLアサーションを独自のトークンに変換する ID プールによって生成されます。アイデンティティプールトークンには、アイデンティティプール ID として aud クレームが含まれています。
次のロール信頼ポリシーの例では、フェデレーティッドサービスプリンシパルが
AWS STS API cognito-identity.amazonaws.comを呼び出すことを許可しま
すAssumeRoleWithWebIdentity。リクエストは、APIリクエスト内の ID プールトークンに次のクレームがある場合にのみ成功します。
1. アイデンティティプール ID aud の us-west-2:abcdefg-1234-5678-910a-0e8443553f95
クレーム。
2. ユーザーがログインしていて、ゲストユーザーではない場合に追加される authenticated の
amr クレーム。
IAM ロール

911

Amazon Cognito

開発者ガイド{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Federated": "cognito-identity.amazonaws.com"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "uswest-2:abcdefg-1234-5678-910a-0e8443553f95"},"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}

基本 (クラシック) 認証におけるIAMロールの信頼ポリシー
ID プールで使用するロールの信頼ポリシーを制限する条件を少なくとも 1 つ適用する必要があります。ID プールのロール信頼ポリシーを作成または更新するときに、ソース ID を制限する条件キーを少なくとも 1 つ使用せずに変更を保存しようとすると、 AWS STS はエラーIAMを返します。ID
プールからこのタイプの条件がないIAMロールへのクロスアカウントAssumeRoleWithWebIdentityオ
ペレーションは許可されません。
このトピックには、ID プールのソース ID を制限するいくつかの条件が含まれています。詳細なリス
トについては、AWS 「ウェブ ID フェデレーションで使用できるキー」を参照してください。
ID プールによる基本またはクラシックの認証では、適切な信頼ポリシー AWS STS があれば、 で任意のIAMロールを引き受けることができます。IAM Amazon Cognito ID プールの ロールは、サービ
スプリンシパルを信頼cognito-identity.amazonaws.comしてロールを引き受けます。この設定では、 リソースへの意図しないアクセスからIAMロールを保護するには不十分です。このタイプのロールは、ロール信頼ポリシーに追加の条件を適用する必要があります。ID プールのロールを作成
または変更するには、次のいずれかの条件が必要です。

IAM ロール

912

Amazon Cognito

開発者ガイドcognito-identity.amazonaws.com:aud
ロールを 1 つ以上の ID プールからのオペレーションに制限します。Amazon Cognito は、ID
プールトークンの audクレーム内のソース ID プールを示します。
cognito-identity.amazonaws.com:amr
ロールを authenticatedまたは unauthenticated (ゲスト) ユーザーに制限します。Amazon
Cognito は、アイデンティティプールトークンの amrクレームの認証状態を示します。
cognito-identity.amazonaws.com:sub
によってロールを 1 人以上のユーザーに制限しますUUID。UUID これは、ID プール内のユー
ザーの ID です。この値は、ユーザーの元の ID プロバイダーsubの値ではありません。Amazon
Cognito は、アイデンティティプールトークンUUIDの subクレームでこれを示します。
拡張フロー認証では、IAMロールが ID プール AWS アカウント と同じ にある必要がありますが、基本認証ではそうではありません。
クロスアカウントIAMロールを引き受ける Amazon Cognito ID プールには、追加の考慮事項が適用されます。これらのロールの信頼ポリシーは、cognito-identity.amazonaws.comサービスプリン
シパルを受け入れ、特定のcognito-identity.amazonaws.com:aud条件を含める必要があります。 AWS リソースへの意図しないアクセスを防ぐため、 aud条件キーは、 条件値の ID プールからユーザーにロールを制限します。
ID プールが ID に対して発行するトークンには、ID プール AWS アカウント の送信元に関する情報が含まれます。AssumeRoleWithWebIdentity API リクエストで ID プールトークンを提示すると、は、発信元の ID プールがIAMロール AWS アカウント と同じ にある AWS STS かどうかを確認します。は、リクエストがクロスアカウントである AWS STS と判断すると、ロール信頼ポリシーに
aud条件があるかどうかをチェックします。このような条件がロール信頼ポリシーに存在しない場
合、継承ロール呼び出しは失敗します。リクエストがクロスアカウントでない場合は、この制限を適用 AWS STS しないでください。ベストプラクティスとして、常にこのタイプの条件を ID プール
ロールの信頼ポリシーに適用します。
追加の信頼ポリシー条件
ID プール間でのロールの再利用
複数の ID プール間でロールを再利用するには、ロールが共通のアクセス権限のセットを共有するた
め、次のように複数の ID プールを含めることができます。
IAM ロール

913

Amazon Cognito

開発者ガイド"StringEquals": {"cognito-identity.amazonaws.com:aud": ["us-east-1:12345678-abcd-abcd-abcd-123456790ab","us-east-1:98765432-dcba-dcba-dcba-123456790ab"]}

特定の ID へのアクセスの制限
特定のアプリユーザーに限定されたポリシーを作成するには、cognitoidentity.amazonaws.com:sub の値を確認します。
"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcdabcd-123456790ab","cognito-identity.amazonaws.com:sub": ["us-east-1:12345678-1234-1234-1234-123456790ab","us-east-1:98765432-1234-1234-1243-123456790ab"]}

特定のプロバイダーへのアクセスの制限
特定のプロバイダー (おそらくはユーザー独自のログインプロバイダー) でログインしたユーザーに制限されたポリシーを作成するには、cognito-identity.amazonaws.com:amr の値を確認します。
"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "login.myprovider.myapp"}

たとえば、Facebook のみを信頼するアプリに、次の amr 句があるとします。
"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "graph.facebook.com"}

アクセスポリシー
ロールにアタッチするアクセス許可は、そのロールを引き受けるすべてのユーザーに適用されます。
ユーザーのアクセスをパーティション化するには、ポリシー条件と変数を使用します。詳細についIAM ロール

914

Amazon Cognito

開発者ガイドては、IAM「ポリシー要素: 変数とタグ」を参照してください。sub 条件を使用して、アクセスポリ
シーIDsの Amazon Cognito ID にアクションを制限できます。このオプションは注意して使用してください。特に、一貫したユーザー ID を持たない認証されていない ID には注意が必要です。Amazon
Cognito とのウェブフェデレーションのIAMポリシー変数の詳細については、「 ユーザーガイド」の「 IAMおよび AWS STS 条件コンテキストキーAWS Identity and Access Management 」を参照してください。 Amazon Cognito
セキュリティ保護を向上させるために、Amazon Cognito は GetCredentialsForIdentity を使用して、拡張フローで認証されていないユーザーを割り当てる認証情報にスコープダウンポリシーを適用します。スコープダウンポリシーは、認証されていないロールに適用するIAMポリシーAWS マ
ネージドセッションポリシーに インラインセッションポリシーと を追加します。ロールのIAMポリ
シーとセッションポリシーの両方でアクセスを許可する必要があるため、スコープダウンポリシー
は、次のリストにあるサービス以外のサービスへのユーザーのアクセスを制限します。
Note
基本 (クラシック) フローでは、独自のAssumeRoleWithWebIdentityAPIリクエストを行い、これらの制限をリクエストに適用できます。セキュリティのベストプラクティスとして、このスコープダウンポリシーを超えるアクセス許可を認証されていないユーザーに割り当てな
いでください。

また、Amazon Cognito は、認証されたユーザーと認証されていないユーザーが Amazon Cognito
ID プールと Amazon Cognito Sync にAPIリクエストを行うことを防ぎます。他の AWS サービス では、ウェブ ID からのサービスアクセスに制限が課される場合があります。
拡張フローを使用したリクエストが成功すると、Amazon Cognito はバックグラウンド
でAssumeRoleWithWebIdentityAPIリクエストを行います。このリクエストのパラメータとしては、Amazon Cognito に次のものが含まれます。
1. ユーザーのアイデンティティ ID。
2. ユーザーが引き受けるIAMロールARNの 。
3. インラインセッションポリシーを追加する policy パラメータ。
4. 値が Amazon で追加のアクセス許可を付与する AWS マネージドポリシーであるPolicyArns.member.Nパラメータ CloudWatch。

IAM ロール

915

Amazon Cognito

開発者ガイド認証されていないユーザーがアクセスできるサービス
拡張フローを使用すると、Amazon Cognito がユーザーセッションに適用するスコープダウンポリシーにより、次の表に記載されている以外のサービスを使用できなくなります。一部のサービスでは、特定のアクションのみが許可されます。
カテゴリ

サービス

分析

Amazon Data Firehose
Amazon Managed Service for Apache Flink

アプリケーション統合

Amazon Simple Queue Service

AR とバーチャルリアリティ

Amazon Sumerian¹

ビジネスアプリケーション

Amazon Mobile Analytics
Amazon Simple Email Service

コンピューティング

AWS Lambda

暗号化と PKIAWS Key Management Service 1

データベースAmazon DynamoDB
Amazon SimpleDB

フロントエンドウェブおよびモバイル

AWS AppSync
Amazon Location Service
Amazon Simple Notification Service
Amazon Pinpoint
Amazon Location Service

ゲーム開発

Amazon GameLift

IoT

AWS IoT

IAM ロール

916

Amazon Cognito

開発者ガイド

カテゴリ

サービス

機械学習

Amazon CodeWhisperer
Amazon Comprehend
Amazon Lex
Amazon Machine Learning
Amazon Personalize
Amazon Polly
Amazon Rekognition
Amazon SageMaker1
Amazon Textract¹
Amazon Transcribe
Amazon Translate

管理とガバナンス

Amazon CloudWatch
Amazon CloudWatch Logs

ネットワーキングとコンテンツ配信

Amazon API Gateway

セキュリティ、アイデンティティ、コンプライ
アンス

Amazon Cognito ユーザープール[Storage (ストレージ)]

Amazon Simple Storage Service

1 次の表の AWS サービス の場合、インラインポリシーはアクションのサブセットを付与します。表には、それぞれで実行可能なアクションが表示されています。

IAM ロール

917

Amazon Cognito

開発者ガイドAWS サービス

認証されていない拡張フローユーザーの最大アクセス許可

AWS Key Management
Service

Encrypt
Decrypt
ReEncrypt
GenerateDataKey

Amazon SageMaker

InvokeEndpoint

Amazon Textract

DetectDocumentText
AnalyzeDocument

Amazon Sumerian

View*

Amazon Location Service

SearchPlaceIndex*
GetPlace
CalculateRoute**Geofence*Geofences*DevicePosition*

このリスト AWS サービス 以外の へのアクセスを許可するには、ID プールで基本 (クラシック) 認
証フローを有効にします。認証されていないユーザーのIAMロールに割り当てられたポリシーで許可されている からのNotAuthorizedExceptionエラー AWS サービス がユーザーに表示された場合
は、そのサービスをユースケースから削除できるかどうかを評価します。できない場合は、基本フローに切り替えてください。
ゲストユーザーのインラインセッションポリシー
Amazon Cognito はまずIAM、認証情報のリクエストにインラインポリシーを適用します。インライ
ンセッションポリシーは、ユーザーの有効なアクセス許可に、次のリストの AWS サービス 外部へのアクセスを含めることを制限します。また、ユーザーのIAMロールに適用するポリシー AWS サー
IAM ロール

918

Amazon Cognito

開発者ガイドビス で、これらにアクセス許可を付与する必要があります。ロールを引き受けたセッションにおけるユーザーの有効なアクセス許可は、そのユーザーのロールに割り当てられたポリシーとセッション
ポリシーが交差したものです。詳細については、AWS Identity and Access Management ユーザーガ
イドの「セッションポリシー」を参照してください。
Amazon Cognito は、デフォルトで有効になっている AWS リージョン ユーザーのセッションに次のインラインポリシーを追加します。インラインポリシーおよびその他のセッションポリシーの正味の効果の概要については、「」を参照してください認証されていないユーザーがアクセスできるサー
ビス。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["cloudwatch:*","logs:*","dynamodb:*","kinesis:*","mobileanalytics:*","s3:*","ses:*","sns:*","sqs:*","lambda:*","machinelearning:*","execute-api:*","iot:*","gamelift:*","scs:*","cognito-identity:*","cognito-idp:*","lex:*","polly:*","comprehend:*","translate:*","transcribe:*","rekognition:*","mobiletargeting:*","firehose:*","appsync:*","personalize:*",IAM ロール

919

Amazon Cognito

開発者ガイド"kms:Encrypt","kms:Decrypt","kms:ReEncrypt*","kms:GenerateDataKey*","sagemaker:InvokeEndpoint","cognito-sync:*","sumerian:View*","codewhisperer:*","textract:DetectDocumentText","textract:AnalyzeDocument","sdb:*"],"Resource": [
"*"
]
}
]
}

他のすべてのリージョンの場合、インラインスコープダウンポリシーには、次の Action ステート
メントを除いて、デフォルトのリージョンにリストされているものがすべて含まれます。
"cognito-sync:*","sumerian:View*","codewhisperer:*","textract:DetectDocumentText","textract:AnalyzeDocument","sdb:*"

ゲストの AWS マネージドセッションポリシー
また、Amazon Cognito は、認証されていないゲストの拡張フローセッションにセッションポリシー
として AWS 管理ポリシーを適用します。このポリシーは、認証されていないユーザーのアクセス許可の範囲をポリシー で制限しますAmazonCognitoUnAuthedIdentitiesSessionPolicy。
また、認証されていないIAMロールにアタッチするポリシーでこのアクセス許可を付与する必要があります。引き受けたロールセッションに対するユーザーの有効なアクセス許可は、ロールに割り当てられたIAMポリシーとセッションポリシーの共通部分です。詳細については、AWS Identity andAccess Management ユーザーガイドの「セッションポリシー」を参照してください。
この AWS 管理ポリシーおよびその他のセッションポリシーの正味の効果の概要については、「」を参照してください認証されていないユーザーがアクセスできるサービス。
IAM ロール

920

Amazon Cognito

開発者ガイドAmazonCognitoUnAuthedIdentitiesSessionPolicy 管理ポリシーには以下のアクセス許可が記載されています。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["rum:PutRumEvents","polly:*","comprehend:*","translate:*","transcribe:*","rekognition:*","mobiletargeting:*","firehose:*","personalize:*","sagemaker:InvokeEndpoint","geo:GetMap*","geo:SearchPlaceIndex*","geo:GetPlace","geo:CalculateRoute*","geo:*Geofence","geo:*Geofences","geo:*DevicePosition*"],"Resource": "*"}]}アクセスポリシーの例
このセクションでは、特定のオペレーションの実行に必要な最小限のアクセス許可を付与す
る Amazon Cognito アクセスポリシーの例を示します。可能な場合は、ポリシー変数を使用して特定のアイデンティティ ID のアクセス権限をさらに制限できます。たとえば、${cognitoidentity.amazonaws.com:sub} を使用します。詳細については、AWS モバイルブログで「Understanding Amazon Cognito Authentication Part 3: Roles and Policies」を参照してください。

IAM ロール

921

Amazon Cognito

開発者ガイドNote
セキュリティのベストプラクティスとして、ポリシーには、ユーザーがタスクを実行するために必要なアクセス権限のみを含めてください。つまり、可能であれば必ずオブジェクトの
個々の ID ごとにアクセスを設定するようにしてください。

ID に Amazon S3 内の単一のオブジェクトへの読み取りアクセスを許可する
次のアクセスポリシーは、特定の S3 バケットから 1 つのオブジェクトを取得するための読み取りア
クセス権限を ID に付与します。
{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject"],"Effect": "Allow","Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"]}]}

ID に Amazon S3 の ID 固有のパスへの読み取りおよび書き込みアクセスを許可する
次のアクセスポリシーは、プレフィックスを ${cognito-identity.amazonaws.com:sub} 変数にマッピングすることで、S3 バケット内の特定のプレフィックス「folder」にアクセスする読み取り
および書き込みアクセス権限を付与します。
このポリシーでは、${cognito-identity.amazonaws.com:sub} を使用して挿入された
us-east-1:12345678-1234-1234-1234-123456790ab などの ID は、オブジェクトを取得
し、arn:aws:s3:::mybucket/us-east-1:12345678-1234-1234-1234-123456790ab に配置およびリストできます。ただし、この ID には arn:aws:s3:::mybucket の他のオブジェクトへのアクセスは許可されません。
{"Version": "2012-10-17","Statement": [{IAM ロール

922

Amazon Cognito

開発者ガイド"Action": ["s3:ListBucket"],"Effect": "Allow","Resource": ["arn:aws:s3:::mybucket"],"Condition": {"StringLike": {"s3:prefix": ["${cognitoidentity.amazonaws.com:sub}/*"]}}},{"Action": ["s3:GetObject","s3:PutObject"],"Effect": "Allow","Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"]}]}

ID に Amazon DynamoDB への詳細に設定されたアクセスを割り当てる
次のアクセスポリシーは、Amazon Cognito 環境変数を使用して、Amazon DynamoDB リソースへの詳細に設定されたアクセスコントロールを行います。これらの変数は、アイデンティティ ID によって DynamoDB のアイテムへのアクセス権限を付与します。詳細については、「Amazon DynamoDB
デベロッパーガイド」の「きめ細かなアクセスコントロールのIAMポリシー条件の使用」を参照してください。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["dynamodb:GetItem","dynamodb:BatchGetItem","dynamodb:Query","dynamodb:PutItem","dynamodb:UpdateItem","dynamodb:DeleteItem","dynamodb:BatchWriteItem"],"Resource": ["arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"],"Condition": {IAM ロール

923

Amazon Cognito

開発者ガイド"ForAllValues:StringEquals": {"dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"]
}
}
}
]
}

Lambda 関数を呼び出すためのアクセス権限を ID に与えます。
次のアクセスポリシーは、Lambda 関数を呼び出すアクセス権限を ID に付与します。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "lambda:InvokeFunction","Resource": ["arn:aws:lambda:us-west-2:123456789012:function:MyFunction"]}]}

Amazon Kinesis Data Stream へのレコードを発行するアクセス権限を ID に付与する
次のアクセスポリシーでは、ID が任意の Kinesis Data Streams で PutRecord オペレーションを使用することを許可します。これは、アカウント内のすべてのストリームにデータレコードを追加する必要があるユーザーに適用できます。詳細については、Amazon KinesisStreams デベロッパー
ガイド」の「 を使用した Amazon Kinesis Data Streams リソースへのアクセスの制御IAMAmazon
Kinesis」を参照してください。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "kinesis:PutRecord","Resource": ["arn:aws:kinesis:us-east-1:111122223333:stream/stream1"]
IAM ロール

924

Amazon Cognito

開発者ガイド}]}ID に Amazon Cognito Sync ストアのデータへのアクセス権を付与する
以下のアクセスポリシーは、アイデンティティに Amazon Cognito Sync ストア内のデータのみに対するアクセス権限を付与します。
{"Version": "2012-10-17","Statement":[{"Effect":"Allow","Action":"cognito-sync:*","Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognitoidentity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"]}]}

ロールの信頼とアクセス権限
これらのロールが異なる点は、それらの信頼関係です。未認証ロールの信頼ポリシーの例を次に示します。
{"Version": "2012-10-17","Statement": [{"Sid": "","Effect": "Allow","Principal": {"Federated": "cognito-identity.amazonaws.com"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-1:12345678-cornercafe-123456790ab"},"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "unauthenticated"}
ロールの信頼とアクセス権限

925

Amazon Cognito

開発者ガイド}}]}

このポリシーは、cognito-identity.amazonaws.com (OpenID Connect トークンの発行者) のフェデレーティッドユーザーに、このロールを引き受ける許可を与えます。さらに、ポリシーでは、ID プールに一致させるためにトークンの aud が制限されます (この場合は ID プール ID)。最後に、ポリシーは、Amazon Cognito GetOpenIdTokenAPIオペレーションによって発行されたトークンの複数値amrクレームの配列メンバーの 1 つに値 があることを指定しますunauthenticated。
Amazon Cognito がトークンを作成すると、トークンの amr を unauthenticated またはauthenticated のいずれかに設定します。amr が authenticated の場合、トークンには、認証中に使用されるすべてのプロバイダーが含まれます。これにより、amr 条件を次のように変更するだけで、Facebook 経由でログインしたユーザーのみを信頼するロールを作成できます。
"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "graph.facebook.com"}

ロールで信頼関係を変更するときや、ID プール間でロールの使用を試みるときは注意が必要です。ID プールを信頼するようにロールを正しく設定しない場合、次のようなSTS結果の例外が発生します。
AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity

このメッセージが表示された場合は、ID プールと認証タイプに適切なロールがあることを確認します。

Amazon Cognito ID プールのセキュリティのベストプラクティス
Amazon Cognito ID プールは、アプリケーションの一時的な AWS 認証情報を提供します。 には、
アプリケーションユーザーが必要とするリソースとプライベートバックエンドリソースの両方が含まれている AWS アカウント ことがよくあります。 AWS 認証情報を構成する IAM ロールとポリシー
は、これらのリソースへのアクセスを許可できます。
ID プール設定の主なベストプラクティスは、アプリケーションが過剰な権限や意図しない権限なし
でジョブを完了できるようにすることです。セキュリティの設定ミスを防ぐには、本番環境にリリー
スする各アプリケーションを起動する前に、これらの推奨事項を確認してください。
セキュリティに関するベストプラクティス

926

Amazon Cognito

開発者ガイドトピック• IAM 設定のベストプラクティス• ID プール設定のベストプラクティス

IAM 設定のベストプラクティス
ゲストまたは認証されたユーザーが、アイデンティティプールの認証情報を必要とするセッションを
アプリケーションで開始すると、アプリケーションは IAM ロールの一時的な AWS 認証情報を取得します。認証情報は、デフォルトのロール、ID プール設定のルールによって選択されたロール、またはアプリによって選択されたカスタムロールの場合があります。各ロールに割り当てられているア
クセス許可により、ユーザーは リソースにアクセスできます AWS 。
一般的な IAM のベストプラクティスの詳細については、「 ユーザーガイド」の「IAM のベストプラ
クティス AWS Identity and Access Management 」を参照してください。

IAM ロールで信頼ポリシー条件を使用する
IAM では、ID プールのロールに少なくとも 1 つの信頼ポリシー条件が必要です。この条件は、例えば、ロールの範囲を認証されたユーザーのみに設定することができます。 では、クロスアカウントの基本認証リクエストに cognito-identity.amazonaws.com:audと の 2 つの特定の条件があること AWS STS も必要ですcognito-identity.amazonaws.com:amr。ベストプラクティスとして、ID プールサービスプリンシパル を信頼するすべての IAM ロールにこれらの条件の両方を適用しますcognito-identity.amazonaws.com。
• cognito-identity.amazonaws.com:aud: ID プールトークンの aud クレームは、信頼できる
ID プール ID と一致する必要があります。
• cognito-identity.amazonaws.com:amr: ID プールトークンの amr クレームは、認証済みまたは未認証の である必要があります。この条件では、認証されていないゲストのみ、または認証されたユーザーのみにロールへのアクセスを予約できます。この条件の値をさらに絞り込んで、ロールを特定のプロバイダーのユーザー、例えば に制限できますgraph.facebook.com。
次のロール信頼ポリシーの例では、以下の条件でロールへのアクセスを許可します。
{"Version": "2012-10-17","Statement": [{IAM 設定のベストプラクティス

927

Amazon Cognito

開発者ガイド"Sid": "","Effect": "Allow","Principal": {"Federated": "cognito-identity.amazonaws.com"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-1:a1b2c3d4-5678-90ab-cdefEXAMPLE11111"},"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}

ID プールに関連する要素• "Federated": "cognito-identity.amazonaws.com": ユーザーは ID プールから取得する必要があります。
• "cognito-identity.amazonaws.com:aud": "us-east-1:a1b2c3d4-5678-90abcdef-example11111": ユーザーは特定の ID プール から取得する必要がありますuseast-1:a1b2c3d4-5678-90ab-cdef-example11111。
• "cognito-identity.amazonaws.com:amr": "authenticated": ユーザーは認証されている必要があります。ゲストユーザーはロールを引き受けることができません。

最小特権のアクセス許可を適用する認証されたアクセスまたはゲストアクセスの IAM ポリシーでアクセス許可を設定する場合は、特定のタスクの実行に必要な特定のアクセス許可、または最小権限のアクセス許可のみを付与します。次の IAM ポリシーの例では、ロールに適用すると、Amazon S3 バケット内の 1 つのイメージファイル
への読み取り専用アクセスを許可します。
{"Version": "2012-10-17","Statement": [{IAM 設定のベストプラクティス

928

Amazon Cognito

開発者ガイド"Action": ["s3:GetObject"],"Effect": "Allow","Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"]}]}

ID プール設定のベストプラクティス
ID プールには、 AWS 認証情報を生成するための柔軟なオプションがあります。アプリケーションが最も安全な方法で動作できる場合は、設計ショートカットを使用しないでください。

ゲストアクセスの影響を理解する認証されていないゲストアクセスにより、ユーザーはサインイン AWS アカウント する前に からデータを取得できます。ID プール ID を知っているユーザーは誰でも、認証されていない認証情報をリクエストできます。ID プール ID は機密情報ではありません。ゲストアクセスをアクティブ化すると、認証されていないセッションに付与する AWS アクセス許可は、すべてのユーザーが利用できます。
ベストプラクティスとして、ゲストアクセスを非アクティブ化したままにし、ユーザーが認証された後にのみ必要なリソースを取得します。アプリケーションがサインイン前に リソースにアクセスする必要がある場合は、次の予防措置を講じてください。
• 認証されていないロールに適用される自動制限について理解します。
• アプリケーションの特定のニーズに合わせて、認証されていない IAM ロールのアクセス許可をモ
ニタリングおよび調整します。
• 特定のリソースへのアクセスを許可します。
• デフォルトの認証されていない IAM ロールの信頼ポリシーを保護します。
• インターネット上のすべてのユーザーに IAM ロールのアクセス許可を付与すると確信できる場合にのみ、ゲストアクセスを有効にします。

拡張認証をデフォルトで使用する
基本 (クラシック) 認証では、Amazon Cognito は IAM ロールの選択をアプリケーションに委任します。これとは対照的に、拡張フローでは、アイデンティティプール内の一元化されたロジックを使ID プール設定のベストプラクティス

929

Amazon Cognito

開発者ガイド用して IAM ロールを決定します。また、IAM アクセス許可の上限を設定するスコープダウンポリシーにより、認証されていない ID のセキュリティも強化されます。拡張フローは、デベロッパーの労力が最も少ない、最も安全な選択肢です。これらのオプションの詳細については、ID プール (フェデレーティッドアイデンティティ) の認証フロー「」を参照してください。
基本的なフローでは、認証情報の AWS STS API リクエストのロール選択とアセンブリに入るクライ
アント側のロジックを公開できます。拡張フローでは、ID プールの自動化の背後にあるロジックとassume-role リクエストの両方が非表示になります。
基本認証を設定するときは、IAM ロールとそのアクセス許可に IAM ベストプラクティスを適用します。

デベロッパープロバイダーを安全に使用するデベロッパーが認証した ID は、サーバー側のアプリケーションの ID プールの機能です。ID プール
がデベロッパー認証に必要とする認証の唯一の証拠は、ID プールデベロッパーの AWS 認証情報です。ID プールは、この認証フローで提示するデベロッパーとプロバイダーの識別子の有効性に制限を課しません。
ベストプラクティスとして、開発者プロバイダーは、以下の条件でのみ実装してください。
• デベロッパーが認証した認証情報の使用に関する説明責任を作成するには、デベロッパープロバイ
ダー名と識別子を設計して認証ソースを示します。例: "Logins" : {"MyCorp provider" :"[provider application ID]"}。
• 存続期間の長いユーザー認証情報は避けてください。EC2 インスタンスプロファイルや Lambda
実行ロール などのサービスにリンクされたロールを使用して ID をリクエストするようにサーバー側のクライアントを設定します。
• 内部と外部の信頼ソースを同じ ID プールに混在させないようにしてください。デベロッパープロ
バイダーとシングルサインオン (SSO) プロバイダーを別々の ID プールに追加します。

アクセスコントロールへの属性の使用
アクセスコントロールの属性は、属性ベースのアクセスコントロール () の Amazon Cognito ID プール実装ですABAC。IAM ポリシーを使用して、ユーザー属性に基づいて Amazon Cognito ID プールを介してリソースへのアクセス AWS を制御できます。これらの属性は、ソーシャル ID プロバイダー
および企業 ID プロバイダーから収集できます。プロバイダーのアクセスおよび ID トークンまたは
SAMLアサーション内の属性を、アクセスIAM許可ポリシーで参照できるタグにマッピングできます。
アクセスコントロールへの属性の使用

930

Amazon Cognito

開発者ガイドAmazon Cognito ID プールでは、デフォルトのマッピングを選択する、または独自のカスタムマッピ
ングを作成することが可能です。デフォルトのマッピングでは、固定されたユーザー属性のセットに基づいてIAMポリシーを記述できます。カスタムマッピングを使用すると、IAMアクセス許可ポリシーで参照されるユーザー属性のカスタムセットを選択できます。Amazon Cognito コンソールの属
性名は、アクセスIAM許可ポリシーで参照されるタグであるプリンシパル のタグキーにマッピング
されます。
例えば、無料と有料のメンバーシップがあるメディアストリーミングサービスを所有しているとしま
しょう。メディアファイルを Amazon S3 に保存し、無料タグまたはプレミアムタグでそれらをタグ付けします。アクセスコントロールの属性を使用して、ユーザーのプロファイルの一部であるユー
ザーメンバーシップレベルに基づいて、無料コンテンツと有料コンテンツへのアクセスを許可できます。プリンシパルがIAMアクセス許可ポリシーに渡すタグキーにメンバーシップ属性をマッピング
できます。そうすることで、単一の許可ポリシーを作成し、メンバーシップレベルの値とコンテンツ
ファイルのタグに基づいて、プレミアムコンテンツへのアクセスを条件的に許可することができます。
トピック• Amazon Cognito の ID プールを用いたアクセスコントロールへの属性の使用• アクセスコントロールポリシーへの属性の使用例• アクセスコントロールの属性をオフにする (コンソール)• デフォルトのプロバイダーマッピング
属性を使用したアクセスの制御には、いくつかのメリットがあります。
• アクセスコントロールに属性を使用すると、許可の管理がより効率的になります。異なるジョブ機
能のために複数のポリシーを作成するのではなく、ユーザー属性を使用する基本的な許可ポリシーを作成できます。
• アプリケーションのリソースやユーザーを追加または削除するたびにポリシーを更新する必要がな
くなる。許可ポリシーは、一致するユーザー属性を持つユーザーのみにアクセス権を付与します。
例えば、ユーザーの役職に基づいて、特定の S3 バケットへのアクセスを制御する必要がある場合があります。この場合、定義された役職のユーザーのみにこれらのファイルへのアクセスを許可す
る許可ポリシーを作成できます。詳細については、IAM「チュートリアル: のSAMLセッションタ
グを使用するABAC」を参照してください。
• 属性の値に基づいて許可を許可または拒否するポリシーに、プリンシパルタグとしてこれらの属性を渡すことができる。
アクセスコントロールへの属性の使用

931

Amazon Cognito

開発者ガイドAmazon Cognito の ID プールを用いたアクセスコントロールへの属性の使用
アクセスコントロールに属性を使用する前に、以下の前提条件を満たしていることを確認します。
• AWS アカウント• ユーザープール• ID プール• SDK のセットアップ• 統合された ID プロバイダー• 認証情報アクセスコントロールに属性を使用するには、データソースとして設定したクレームによって、選択したタグキーの値が設定されます。Amazon Cognito はタグキーと値をユーザーのセッションに適用します。IAM ポリシーは、 ${aws:PrincipalTag/tagkey}条件からユーザーのアクセスを評価できます。IAM は、ポリシーに対してユーザーのタグの値を評価します。
認証情報をユーザーに渡すIAMロールを準備する必要があります。これらのロールの信頼ポリシー
で、Amazon Cognito がユーザーのロールを引き継ぐことを許可されている必要があります。アクセスコントロール用の属性については、Amazon Cognito がユーザーの一時セッションにプリンシ
パルタグを適用することも許可しなければなりません。アクション でロールを引き受けるアクセス
許可を付与しますAssumeRoleWithWebIdentity。権限のみのアクション sts:TagSession を使って、ユーザーのセッションにタグを付ける権限を付与します。詳細については、「AWS Identity andAccess Management ユーザーガイド」の「 AWS Security Token Service でのタグ付けの規則」を参照してください。たとえば、sts:AssumeRoleWithWebIdentity とsts:TagSession 権限を
Amazon Cognito サービスプリンシパル cognito-identity.amazonaws.com に付与する信頼ポリシーの例については、「アクセスコントロールポリシーへの属性の使用例」を参照してください。
コンソールでアクセスコントロールの属性を無効にするには1.

Amazon Cognito コンソールにサインインし、アイデンティティプールを選択します。アイデン
ティティプールを選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

ID プロバイダーを見つけます。編集する ID プロバイダーを選択します。新しい IdP を追加する
場合は、[ID プロバイダーを追加] を選択します。

Amazon Cognito の ID プールを用いたアクセスコントロールへの属性の使用

932

Amazon Cognito

4.

開発者ガイドAmazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] で [編集] を選択します。

5.

a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

アクセスコントロールポリシーへの属性の使用例
ある企業の法務部門の従業員が、その部門に属しており、セキュリティレベルで分類されているバケット内のすべてのファイルをリストする必要があるというシナリオを考えてみましょう。この従業員が ID プロバイダーから取得するトークンには、以下のクレームが含まれているとします。
クレーム

{ .
.
"sub" : "57e7b692-4f66-480d-98b8-45a6729b4c88","department" : "legal","clearance" : "confidential",.
.
}

これらの属性はタグにマッピングでき、アクセスIAM許可ポリシーでプリンシパルタグとして参照できます。これで、ID プロバイダー側でユーザープロファイルを変更することによって、アクセスを管理できるようになります。または、ポリシー自体を変更せずに、名前またはタグを使用することによって、リソース側の属性を変更することもできます。
以下の許可ポリシーは、以下の 2 つを行います。
• ユーザーの部門名に一致するプレフィックスで終わるすべての S3 バケットへのリストアクセスを許可します。
アクセスコントロールポリシーへの属性の使用例

933

Amazon Cognito

開発者ガイド• ファイルのクリアランスタグがユーザーのクリアランス属性と一致している限り、これらのバケッ
ト内のファイルに対する読み取りアクセスを許可する。
アクセス許可ポリシー{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "s3:List*","Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}"},{"Effect": "Allow","Action": "s3:GetObject*","Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}/*","Condition": {"StringEquals": {"s3:ExistingObjectTag/clearance": "${aws:PrincipalTag/clearance}"
}
}
}
]
}

信頼ポリシーは、誰がこのロールを引き受けられるのかを決定します。信頼関係ポリシーは、アクセスを許可するための sts:AssumeRoleWithWebIdentity と sts:TagSession の使用を可能にします。これは、ポリシーをユーザーが作成したアイデンティティプールに制限する条件を追加し、それが認証されたロール用であることを確実にします。
信頼ポリシー{"Version": "2012-10-17","Statement": [{アクセスコントロールポリシーへの属性の使用例

934

Amazon Cognito

開発者ガイド"Effect": "Allow","Principal": {"Federated": "cognito-identity.amazonaws.com"},"Action": ["sts:AssumeRoleWithWebIdentity","sts:TagSession"],"Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "IDENTITY-POOL-ID"},"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}

アクセスコントロールの属性をオフにする (コンソール)
アクセスコントロールの属性を非アクティブにするには、以下の手順に従います。
コンソールでアクセスコントロールの属性を非アクティブにするには1.

Amazon Cognito コンソールにサインインし、アイデンティティプールを選択します。アイデン
ティティプールを選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

ID プロバイダーを見つけます。編集する ID プロバイダーを選択します。

4.

[アクセスコントロールの属性] で、[編集] を選択します。

5.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

6.

[変更を保存] を選択します。

デフォルトのプロバイダーマッピング
以下の表には、Amazon Cognito がサポートする認証プロバイダーのデフォルトマッピング情報が記載されています。
アクセスコントロールの属性をオフにする

935

Amazon Cognito

開発者ガイドプロバイダー

トークンタイプ

プリンシパルタグの値

例

Amazon Cognito ユー
ザープール

ID トークン

aud (クライアント ID)
および sub (ユーザーID)"6jk8ltokc7ac9es6j
rtg9q572f"、"57e7b6
92-4f66-480d-98b845a6729b4c88"

Facebook

アクセストークン

aud(app_id)、sub(user_id)「49284471
8097981」、「11217721
6992379」

GoogleID トークン

aud (クライアント ID)
および sub (ユーザーID)「620493171733eebk7c0hcp5lj
3e1tlqp1gntt3k0rnc
v.apps.googleuserc
ontent.com」、「10922006345240
4746097」

SAML

アサーション「http://schemas.xm
lsoap.org/ws/2005/
05/identity/claims/
nameidentifier」、「
http://schemas.xml
soap.org/ws/2005/0
5/identity/claims/
name」"auth0|5e28d196f8f
55a0eaaa9
5de3"、"user123@gmail.com"

Apple

ID トークン

aud (クライアント ID)
および sub (ユーザーID)「com.amaz
onaws.ec2-54-80-17
2-243.compute-1.client」、「001968.a6ca34e9c1e742458a26cf8005854be
9.0733」

デフォルトのプロバイダーマッピング

936

Amazon Cognito

開発者ガイドプロバイダー

トークンタイプ

プリンシパルタグの値

例

Amazon

アクセストークン

aud (Amzn Dev AcのクライアントID)、user_id (ユーザー ID)「amzn1.ap
plication-oa2-clie
nt.9d70d9382d34461
08aaee3dd
763a0fa6」、「amzn1.accountAGH
NIFJQMFSB
G3G6XCPVB
35ORQAA」

標準OIDCプロバイダー

ID トークンとアクセ
ストークン

aud (client_id として)、sub (ユーザー ID
として)「620493171733eebk7c0hcp5lj
3e1tlqp1gntt3k0rnc
v.apps.googleuserc
ontent.com」、「10922006345240
4746097」

Twitter

アクセストークン

aud (アプリID; アプリ
シークレット)、サブ(ユーザー ID)

"DfwifTtKEX1FiIBRn
OTlR0CFK;
Xgj5xb8xIrIVCPjXgL
IdkW7fXmw
cJJrFvnoK9gwZkLexo
1y5z1", "12690038
84292222976"

DevAuthマップ

該当なし「tag1」、「tag2」

Note
デフォルト属性マッピングオプションは、[Tag Key for Principal] (プリンシパルのタグキー)と [Attribute] (属性) の名前に自動で入力されます。デフォルトマッピングを変更することはできません。

デフォルトのプロバイダーマッピング

937

Amazon Cognito

開発者ガイドロールベースアクセスコントロールの使用
Amazon Cognito ID プールは、認証されたユーザーに、 AWS リソースにアクセスするための権限が制限された一時的な認証情報のセットを割り当てます。各ユーザーの許可は、作成された IAM ロー
ルを介して制御されます。ユーザーの ID トークンのクレームに基づいて、各ユーザーのロールを選択するルールを定義できます。認証されたユーザー用のデフォルトのロールを定義できます。また、認証されていないゲストユーザーに対して、権限が制限された個別の IAM ロールを定義することもできます。

ロールマッピング用のロールの作成
各ロールに適切な信頼ポリシーを追加し、Amazon Cognito が ID プール内の認証されたユーザー限定でそのポリシーを引き受けるようにすることが重要です。このような信頼ポリシーの例を示します。
{"Version": "2012-10-17","Statement": [{"Sid": "","Effect": "Allow","Principal": {"Federated": "cognito-identity.amazonaws.com"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"cognito-identity.amazonaws.com:aud": "us-east-1:12345678-cornercafe-123456790ab"},"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}

このポリシーでは、cognito-identity.amazonaws.com のフェデレーティッドユーザー(OpenID Connect トークンの発行者) が、このロールを引き受けることができます。さらに、ポリシーでは、ID プールに一致させるためにトークンの aud が制限されます (この場合は ID プー
ロールベースアクセスコントロールの使用

938

Amazon Cognito

開発者ガイドル ID)。最後に、このポリシーは、Amazon Cognito によって発行されたトークンの複数の値からなる amr クレームの配列メンバーの 1 つを指定します。GetOpenIdToken API アクションはauthenticated 値を含みます。

pass-role 許可の付与
ユーザーが、ID プールでユーザーの既存のアクセス許可を超えるアクセス許可でロールを設定できるようにするには、set-identity-pool-roles API にロールを渡すための iam:PassRole アクセス許可をそのユーザーに付与します。例えば、ユーザーが Amazon S3 に書き込むことはできなくても、ID プールでユーザーが設定する IAM ロールが Amazon S3 への書き込み許可を付与するという場合、ユーザーは iam:PassRole 許可がそのロールに付与されている場合にのみ、このロールを設定できます。次のサンプルポリシー例は、iam:PassRole 権限を付与する方法を示しています。
{"Version": "2012-10-17","Statement": [{"Sid": "Stmt1","Effect": "Allow","Action": ["iam:PassRole"],"Resource": ["arn:aws:iam::123456789012:role/myS3WriteAccessRole"]}]}

このサンプルポリシーでは、iam:PassRole ロールに myS3WriteAccessRole アクセス権限を付与します。このロールは、それ自体の Amazon リソースネーム (ARN) を使用して指定します。また、このポリシーをユーザーにアタッチする必要があります。詳細については、「管理ポリシーの使用」を参照してください。
Note
Lambda 関数はリソースベースのポリシーを使用し、このポリシーは Lambda 関数自体に直接アタッチされます。Lambda 関数を呼び出すルールを作成するときはロールを渡さないた
め、ルールを作成するユーザーに iam:PassRole 許可は必要ありません。Lambda 関数の
pass-role 許可の付与

939

Amazon Cognito

開発者ガイド認証に関する詳細については、「アクセス許可の管理: Lambda 関数ポリシーを使用する」を参照してください。

ユーザーにロールを割り当てるためのトークンの使用
Amazon Cognito ユーザープール経由でログインするユーザーの場合、ユーザープールによって割り当てられた ID トークンにロールを渡すことができます。これらのロールは、ID トークンの以下のクレームに表示されます。
• cognito:preferred_role クレームはロール ARN です。
• cognito:roles クレームは、許可されたロール ARN のセットを含むカンマ区切りの文字列です。
クレームは以下のように設定されます。
• cognito:preferred_role クレームは、最高 (最も低い) Precedence 値のグループのロールに設定されます。許可されているロールが 1 つだけである場合、cognito:preferred_role はそのロールに設定されます。複数のロールがあり、いずれの単一のロールにも最良の優先順位がない場合、このクレームは設定されません。
• cognito:roles クレームは、少なくとも 1 つのロールがある場合に設定されます。
ロールの割り当てにトークンを使用するときに、ユーザーに割り当てることができる複数のロールがある場合は、Amazon Cognito ID プール (フェデレーティッド ID) が以下のようにロールを選択します。
• パラメータが設定されていて、cognito:rolesクレーム内のロールと一致する場合は、
GetCredentialsForIdentityCustomRoleArnパラメータを使用します。このパラメータがcognito:roles のロールと一致しない場合は、アクセスを拒否します。
• cognito:preferred_role クレームが設定されている場合は、それを使用します。
• cognito:preferred_role クレームが設定されていない場合、cognito:rolesク
レームが設定され、 の呼び出しで指定CustomRoleArnされていない場
合GetCredentialsForIdentity、コンソールのロール解決設定またはAmbiguousRoleResolutionフィールド (SetIdentityPoolRolesAPI の RoleMappingsパラメータ) を使用して、割り当てるロールを決定します。

ユーザーにロールを割り当てるためのトークンの使用

940

Amazon Cognito

開発者ガイドルールベースのマッピングを使用してユーザーにロールを割り当てる
ルールは、IAM ロールに ID プロバイダートークンからのクレームをマップすることを許可します。
各ルールは、トークンクレーム (Amazon Cognito ユーザープールからの ID トークンのユーザー属性など)、一致タイプ、値、および IAM ロールを指定します。一致タイプ
は、Equals、NotEqual、StartsWith、または Contains となります。クレームに一致する値をユーザーが持っている場合、そのユーザーは、認証情報を取得するときにそのロールを引き受けることができます。例えば、custom:dept カスタム属性値が Sales のユーザーに特定の IAM ロールを割り当てるルールを作成できます。
Note
ルールの設定で、カスタム属性は標準属性と区別するために、custom: プレフィックスを必要とします。

CustomRoleArn が順序を上書きするように指定されている場合を除き、ルールは順序に従って評価され、一致する最初のルールの IAM ロールが使用されます。Amazon Cognito ユーザープールでのユーザー属性の詳細については、「ユーザープール属性」を参照してください。
ID プール (フェデレーティッド ID) コンソールでは、認証プロバイダー用に複数のルールを設定できます。ルールは順序に従って適用されます。ルールをドラッグして、それらの順序を変更できます。
一致する最初のルールが優先されます。一致タイプが NotEqual で、クレームが存在しない場合、ルールは評価されません。一致するルールがない場合は、[ロールの解決] 設定が [デフォルトの認証されたロールを使用する] または [リクエストの拒否] に適用されます。
API および CLI では、SetIdentityPoolRolesAPI の RoleMappingsパラメータで指定されている
RoleMappingタイプの AmbiguousRoleResolutionフィールドでルールが一致しない場合に割り当
てるロールを指定できます。
OpenID Connect (OIDC) および SAML ID プロバイダーのルールベースのマッピングは、 AWS CLIまたは API で RoleMapping タイプの RulesConfigurationフィールドを使用して設定できます。
このフィールドは、 SetIdentityPoolRoles API の RoleMappingsパラメータで指定できます。 AWSManagement Console 現在、 では、OIDC または SAML プロバイダーのルールを追加することはできません。

ルールベースのマッピングを使用してユーザーにロールを割り当てる

941

Amazon Cognito

開発者ガイド

例えば、次の AWS CLI コマンドは、OIDC IdP によって認証された Sacramento ロケーションのarn:aws:iam::123456789012:role/Sacramento_team_S3_adminユーザーにロールを割り当てるルールを追加しますarn:aws:iam::123456789012:oidc-provider/myOIDCIdP。
aws cognito-identity set-identity-pool-roles --region us-east-1 --cli-input-json
file://role-mapping.json

role-mapping.json の内容:{
"IdentityPoolId": "us-east-1:12345678-corner-cafe-123456790ab","Roles": {"authenticated": "arn:aws:iam::123456789012:role/myS3WriteAccessRole","unauthenticated": "arn:aws:iam::123456789012:role/myS3ReadAccessRole"},"RoleMappings": {"arn:aws:iam::123456789012:oidc-provider/myOIDCIdP": {"Type": "Rules","AmbiguousRoleResolution": "AuthenticatedRole","RulesConfiguration": {"Rules": [{"Claim": "locale","MatchType": "Equals","Value": "Sacramento","RoleARN": "arn:aws:iam::123456789012:role/
Sacramento_team_S3_admin"
}
]
}
}
}
}

ID プールに対して設定された各ユーザープールまたはその他の認証プロバイダーの場合、最大 25 のルールを作成できます。この制限は調整できません。詳細については、「Amazon Cognito のクォータ」を参照してください。

ルールベースのマッピングで使用するトークンクレーム
Amazon Cognito
ルールベースのマッピングで使用するトークンクレーム

942

Amazon Cognito

開発者ガイドAmazon Cognito ID トークンは JSON Web トークン (JWT) として表されます。トークンには、認証
ユーザーの ID に関するクレームが含まれます。たとえば、name、family_name、phone_numberなどです。標準クレームに関する詳細については、「OpenID Connect 仕様」を参照してください。
標準クレームとは別に、以下のような Amazon Cognito に固有の追加のクレームがあります。
• cognito:groups• cognito:roles• cognito:preferred_role
Amazon以下のクレームとそのクレームに使用できる値を、Login with Amazon で使用できます。
• iss: www.amazon.com• aud: App Id• sub: Login with Amazon トークンからの sub
Facebook
以下のクレームとそのクレームに使用できる値を、Facebook で使用できます。
• iss: graph.facebook.com• aud: App Id• sub: Facebook トークンからの sub
GoogleGoogle トークンには、OpenID Connect 仕様からの標準クレームが含まれます。OpenID トークンのクレームはすべて、ルールベースのマッピングに使用できます。Google トークンで使用できるク
レームについては、Google の OpenID Connect サイトを参照してください。
Apple
Apple トークンには、OpenID Connect specification からの標準クレームが含まれます。Apple トー
クンから入手できるクレームの詳細については、Apple のドキュメントの「Apple でサインインを使用してユーザーを認証する」を参照してください。email は Apple のトークンには必ずしも含まれているわけではありません。
ルールベースのマッピングで使用するトークンクレーム

943

Amazon Cognito

開発者ガイドOpenID
Open ID トークンのクレームはすべて、ルールベースのマッピングに使用できます。標準クレームに関する詳細については、「OpenID Connect 仕様」を参照してください。使用できる追加クレームについては、ご使用の OpenID プロバイダーのドキュメントを参照してください。
SAML
クレームは受信した SAML アサーションから分析されます。SAML アサーションで利用可能なすべてのクレームは、ルールベースのマッピングで使用できます。

ロールベースのアクセスコントロールのベストプラクティス
Important
ロールにマッピングするクレームがエンドユーザーによって変更できる場合、いずれのエンドユーザーもロールを引き受け、それに応じてポリシーを設定できます。エンドユーザーによって直接設定できないクレームのみを、昇格されたアクセス権限のあるロールにマッピングします。Amazon Cognito ユーザープールで、各ユーザー属性にアプリごとの読み取りおよび書き込み許可を設定できます。

ImportantAmazon Cognito ユーザープールのグループにロールを設定する場合、これらのロールはユーザーの ID トークンを通じて渡されます。これらのロールを使用するには、ID プールの認証ロールの選択に対して [トークンからロールを選択する] を設定する必要があります。
コンソールのロール解決設定と SetIdentityPoolRoles API の RoleMappingsパラメータを使用して、トークンから正しいロールを特定できない場合のデフォルトの動作を指定できます。

認証情報の取得
Amazon Cognito を使用して、権限が制限された一時的な認証情報をアプリケーションに配信し、ユーザーが AWS リソースにアクセスできるようにします。このセクションでは、認証情報を取得する方法と、ID プールから Amazon Cognito ID を取得する方法について説明します。
ロールベースのアクセスコントロールのベストプラクティス

944

Amazon Cognito

開発者ガイドAmazon Cognito は、認証されている ID と認証されていない ID の両方をサポートします。認証されていないユーザーは ID が検証されないため、このロールはアプリケーションのゲストユーザーに適切です。または、ユーザーの ID が検証されているかどうかが重要ではない場合に適切です。認証されているユーザーは、アプリケーションにログイン際にサードパーティーの ID プロバイダーまたは
ユーザープールを通じて ID が検証されます。リソースの許可の範囲を適切に設定し、認証されていないユーザーからのアクセスを許可しないようにします。
Amazon Cognito ID は認証情報ではありません。これらは、 AWS Security Token Service () のウェ
ブ ID フェデレーションサポートを使用して認証情報と交換されますAWS STS。アプリケーション
ユーザーによる AWS 認証情報の取得に推奨される方法は、AWS.CognitoIdentityCredentialsの使用です。認証情報オブジェクトの ID は、 を使用して認証情報と交換されます AWS STS。
Note2015 年 2 月より前に作成したアイデンティティプールの場合で、ロールをパラメータとせずに AWS.CognitoIdentityCredentials コンストラクターを使用するには、再度そのロールと ID プールの関連付けを行う必要があります。これを実行するには、Amazon
Cognito コンソールを開き、[Manage identity pools] (ID プールの管理) をクリックしてからID プールを選択し、[Edit identity Pool] (ID プールの編集) をクリックします。さらに、認証済みと認証済みでないロールを指定した上で変更を保存します。

ウェブ ID 認証情報プロバイダーは、 AWS SDK のデフォルトの認証情報プロバイダーチェーンの一部です。SDK または の AWS ローカルconfigファイルに ID プールトークンを設定するには AWS
CLI、web_identity_token_fileプロファイルエントリを追加します。「 SDK とツールのリファ
レンスガイド」の「ロール認証情報プロバイダーを引き受ける AWS SDKs 」を参照してください。
SDK にウェブ ID 認証情報を入力する方法の詳細については、SDK ディベロッパーガイドを参照してください。最良の結果を得るには、 に組み込まれている ID プール統合からプロジェクトを開始します AWS Amplify。
AWS ID プールで認証情報を取得および設定するための SDK リソース
• Amplify Dev Center のアイデンティティプールフェデレーション (Android)• Amplify Dev Center のアイデンティティプールフェデレーション (iOS)• デ AWS SDK for JavaScript ベロッパーガイドのAmazon Cognito Identity を使用したユーザーの認証」• AWS SDK for .NET デベロッパーガイドのAmazon Cognito 認証情報プロバイダー」
認証情報の取得

945

Amazon Cognito

開発者ガイド• デ AWS SDK for Go ベロッパーガイドの「認証情報をプログラムで指定する」• 「 デベロッパーガイド」の「コードに一時的な認証情報を指定する AWS SDK for Java 2.x 」• assumeRoleWithWebIdentityCredentialProvider AWS SDK for PHP デベロッパーガイドの プロバ
イダー• AWS SDK for Python (Boto3) ドキュメントの「ウェブ ID プロバイダーの役割を引き受ける」• 「 デベロッパーガイド」の「認証情報とデフォルトのリージョンの指定 AWS SDK for Rust 」
以下のセクションでは、いくつかのレガシー AWS SDKs。

AndroidAmazon Cognito を使用して、権限が制限された一時的な認証情報をアプリケーションに配信し、ユーザーが AWS リソースにアクセスできるようにします。Amazon Cognito は、認証されている IDと認証されていない ID の両方をサポートします。アプリに AWS 認証情報を提供するには、以下の手順に従います。
Android アプリケーションで Amazon Cognito ID プールを使用するには、 をセットアップします
AWS Amplify。詳細については、Amplify Dev Center の「認証」を参照してください。
Amazon Cognito アイデンティティの取得
認証されていないユーザーを許可している場合は、エンドユーザーの固有 Amazon Cognito 識別子(アイデンティティ ID) をただちに取得できます。ユーザーを認証している場合は、認証情報プロバ
イダーでログイントークンを設定した後で、アイデンティティ ID を取得できます。
String identityId = credentialsProvider.getIdentityId();
Log.d("LogTag", "my ID is " + identityId);

Note
アプリケーションのメインスレッドで、getIdentityId()、refresh()、または getCredentials() を呼び出さないでください。Android 3.0 (API レベル 11)
NetworkOnMainThreadException以降、メインアプリケーションスレッドでネットワーク I/
O を実行すると、アプリケーションは自動的に失敗し、 をスローします。AsyncTask を使用して、バックグラウンドスレッドにコードを移動する必要があります。詳細については、「Android のドキュメント」を参照してください。getCachedIdentityId() を呼び出し
認証情報の取得

946

Amazon Cognito

開発者ガイドて ID を取得することもできますが、この操作が可能なのは、既に ID がローカルにキャッシュされている場合のみです。それ以外の場合、メソッドは null を返します。

iOS - Objective-C
Amazon Cognito を使用して、権限が制限された一時的な認証情報をアプリケーションに配信し、ユーザーが AWS リソースにアクセスできるようにします。Amazon Cognito ID プールは、認証された ID と認証されていない ID の両方をサポートします。アプリに AWS 認証情報を提供するには、次のステップを実行します。
iOS アプリケーションで Amazon Cognito ID プールを使用するには、 をセットアップします AWS
Amplify。詳細については、Amplify Dev Center の「Swift 認証」と「Flutter 認証」を参照してください。
Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユー
ザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイ
ダーでログイントークンを設定した後で取得することができます。
// Retrieve your Amazon Cognito ID[[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) {if (task.error) {NSLog(@"Error: %@", task.error);}else {// the task result will contain the identity id
NSString *cognitoId = task.result;}
return nil;
}];

Note
getIdentityId は非同期呼び出しです。アイデンティティ ID が既にプロバイダーで設定されている場合は、credentialsProvider.identityId を呼び出して (ローカルにキャッシュされた) その ID を取得できます。ただし、プロバイダーでアイデンティティ ID

認証情報の取得

947

Amazon Cognito

開発者ガイドが設定されていない場合、credentialsProvider.identityId を呼び出すと nil が返されます。詳細については、Amplify iOS SDK リファレンスを参照してください。

iOS - Swift
Amazon Cognito を使用して、権限が制限された一時的な認証情報をアプリケーションに配信し、ユーザーが AWS リソースにアクセスできるようにします。Amazon Cognito は、認証されている IDと認証されていない ID の両方をサポートします。アプリに AWS 認証情報を提供するには、以下の手順に従います。
iOS アプリケーションで Amazon Cognito ID プールを使用するには、 をセットアップします AWS
Amplify。詳細については、Amplify Dev Center の「Swift 認証」を参照してください。
Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユー
ザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイ
ダーでログイントークンを設定した後で取得することができます。
// Retrieve your Amazon Cognito ID
credentialsProvider.getIdentityId().continueWith(block: { (task) -> AnyObject? in
if (task.error != nil) {print("Error: " + task.error!.localizedDescription)}else {// the task result will contain the identity id
let cognitoId = task.result!
print("Cognito id: \(cognitoId)")}
return task;})

Note
getIdentityId は非同期呼び出しです。アイデンティティ ID が既にプロバイダーで設定されている場合は、credentialsProvider.identityId を呼び出して (ローカルにキャッシュされた) その ID を取得できます。ただし、プロバイダーでアイデンティティ IDが設定されていない場合、credentialsProvider.identityId を呼び出すと nil が返されます。詳細については、Amplify iOS SDK リファレンスを参照してください。

認証情報の取得

948

Amazon Cognito

開発者ガイドJavaScript
ID プールをまだ作成して AWS.CognitoIdentityCredentials を使用する前に Amazon Cognito
コンソールで ID プールを作成してください。
ID プロバイダーで ID プールを設定すると、AWS.CognitoIdentityCredentials を使用してユーザーを認証できます。AWS.CognitoIdentityCredentials を使用するようにアプリケー
ションを設定するには、credentials またはサービス別の設定の AWS.Config プロパティを設定します。次の例では AWS.Config を使用しています。
// Set the region where your identity pool exists (us-east-1, eu-west-1)
AWS.config.region = 'us-east-1';// Configure the credentials provider to use your identity pool
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: { // optional tokens, used for authenticated login'graph.facebook.com': 'FBTOKEN','www.amazon.com': 'AMAZONTOKEN','accounts.google.com': 'GOOGLETOKEN','appleid.apple.com': 'APPLETOKEN'}});// Make the call to obtain credentials
AWS.config.credentials.get(function(){// Credentials will be available when this function is called.
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey = AWS.config.credentials.secretAccessKey;
var sessionToken = AWS.config.credentials.sessionToken;});

オプションの Logins プロパティは、ID プロバイダー名の ID トークンへのマッピングです。ID
プロバイダーからのトークンの取得方法は、使用するプロバイダーによって異なります。たとえば、Facebook を ID プロバイダーとして使用する場合は、FB.loginFacebook SDK の 関数を使用
して ID プロバイダートークンを取得します。
FB.login(function (response) {if (response.authResponse) { // logged in
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
認証情報の取得949

Amazon Cognito

開発者ガイドIdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',
Logins: {'graph.facebook.com': response.authResponse.accessToken}});
console.log('You are now logged in.');} else {console.log('There was a problem logging you in.');}});Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユー
ザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイ
ダーでログイントークンを設定した後で取得することができます。
var identityId = AWS.config.credentials.identityId;

Unity
Amazon Cognito を使用して、権限が制限された一時的な認証情報をアプリケーションに配信し、ユーザーが AWS リソースにアクセスできるようにします。Amazon Cognito は、認証されている IDと認証されていない ID の両方をサポートします。アプリに AWS 認証情報を提供するには、以下の手順に従います。
AWS SDK for Unity も、AWS SDK for .NET の一部になりました。で Amazon Cognito の使用を開始
するには AWS SDK for .NET、「 AWS SDK for .NET デベロッパーガイド」のAmazon Cognito 認証
情報プロバイダー」を参照してください。または、 でアプリケーションを構築するためのオプションについては、「Amplify Dev Center」を参照してください AWS Amplify。
Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユー
ザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイ
ダーでログイントークンを設定した後で取得することができます。
credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> result) {if (result.Exception != null) {//Exception!
認証情報の取得

950

Amazon Cognito

開発者ガイド}string identityId = result.Response;});

XamarinAmazon Cognito を使用して、権限が制限された一時的な認証情報をアプリケーションに配信し、ユーザーが AWS リソースにアクセスできるようにします。Amazon Cognito は、認証されている IDと認証されていない ID の両方をサポートします。アプリに AWS 認証情報を提供するには、以下の手順に従います。
AWS SDK for Xamarin も、AWS SDK for .NET の一部になりました。で Amazon Cognito の使用を開始するには AWS SDK for .NET、「 AWS SDK for .NET デベロッパーガイド」のAmazon Cognito
認証情報プロバイダー」を参照してください。または、 でアプリケーションを構築するためのオプ
ションについては、「Amplify Dev Center」を参照してください AWS Amplify。
Note
注: 2015 年 2 月より前に作成した ID プールで、ロールをパラメータとせずに、このコンストラクターを使用するには、再度そのロールと ID プールの関連付けを行う必要があります。これを実行するには、Amazon Cognito コンソールを開き、[Manage identity pools] (ID
プールの管理) をクリックしてから ID プールを選択し、[Edit identity Pool] (ID プールの編集)をクリックします。さらに、認証済みと認証済みでないロールを指定した上で変更を保存します。

Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユー
ザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイ
ダーでログイントークンを設定した後で取得することができます。
var identityId = await credentials.GetIdentityIdAsync();

AWS サービスへのアクセス
Amazon Cognito 認証情報プロバイダーを設定し、 AWS 認証情報を取得したら、 AWS サービス ク
ライアントを作成できます。
AWS サービスへのアクセス

951

Amazon Cognito

開発者ガイドAWS クライアントを作成するための SDK リソース
• AWS SDK for C++ デベロッパーガイドのAWS クライアント設定• デ AWS SDK for Go ベロッパーガイドの「 での AWS SDK for Go V2 の使用 AWS サービス」• デ AWS SDK for Java 2.x ベロッパーガイドの「HTTP クライアントの設定」• デ AWS SDK for JavaScript ベロッパーガイドの「サービスオブジェクトの作成と呼び出し」• AWS SDK for Python (Boto3) ドキュメント内のクライアントの作成• 「 デベロッパーガイド」の「サービスクライアントの作成 AWS SDK for Rust 」• AWS SDK for Swift デベロッパーガイドのクライアントの使用
以下のスニペットは Amazon DynamoDB クライアントを初期化します。

Android
Android アプリケーションで Amazon Cognito ID プールを使用するには、 をセットアップします
AWS Amplify。詳細については、Amplify Dev Center の「認証」を参照してください。
// Create a service client with the provider
AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);

認証情報プロバイダーは Amazon Cognito と通信し、認証されたユーザーと認証されていないユー
ザーの一意の識別子と Mobile AWS SDK の一時的な制限付き特権 AWS 認証情報の両方を取得します。取得された認証情報は 1 時間有効で、有効期限が切れるとプロバイダーによって更新されます。

iOS - Objective-C
iOS アプリケーションで Amazon Cognito ID プールを使用するには、 をセットアップします AWS
Amplify。詳細については、Amplify Dev Center の「Swift 認証」と「Flutter 認証」を参照してください。
// create a configuration that uses the provider
AWSServiceConfiguration *configuration = [AWSServiceConfiguration
configurationWithRegion:AWSRegionUSEast1 provider:credentialsProvider];// get a client with the default service configuration
AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];AWS サービスへのアクセス

952

Amazon Cognito

開発者ガイド

認証情報プロバイダーは Amazon Cognito と通信し、認証されたユーザーと認証されていないユー
ザーの一意の識別子と Mobile AWS SDK の一時的な制限付き特権 AWS 認証情報の両方を取得します。取得された認証情報は 1 時間有効で、有効期限が切れるとプロバイダーによって更新されます。

iOS - SwiftiOS アプリケーションで Amazon Cognito ID プールを使用するには、 をセットアップします AWS
Amplify。詳細については、Amplify Dev Center の「Swift 認証」を参照してください。
// get a client with the default service configuration
let dynamoDB = AWSDynamoDB.default()// get a client with a custom configuration
AWSDynamoDB.register(with: configuration!, forKey: "USWest2DynamoDB");
let dynamoDBCustom = AWSDynamoDB(forKey: "USWest2DynamoDB")

認証情報プロバイダーは Amazon Cognito と通信し、認証されたユーザーと認証されていないユー
ザーの一意の識別子と Mobile AWS SDK の一時的な制限付き特権 AWS 認証情報の両方を取得します。取得された認証情報は 1 時間有効で、有効期限が切れるとプロバイダーによって更新されます。

JavaScript// Create a service client with the provider
var dynamodb = new AWS.DynamoDB({region: 'us-west-2'});

認証情報プロバイダーは Amazon Cognito と通信し、認証されたユーザーと認証されていないユー
ザーの一意の識別子と、 AWS Mobile SDK の権限が制限された一時的な AWS 認証情報の両方を取得します。取得された認証情報は 1 時間有効で、有効期限が切れるとプロバイダーによって更新さ
れます。

Unity
AWS SDK for Unity も、AWS SDK for .NET の一部になりました。で Amazon Cognito の使用を開始
するには AWS SDK for .NET、「 AWS SDK for .NET デベロッパーガイド」のAmazon Cognito 認証
情報プロバイダー」を参照してください。または、 でアプリケーションを構築するためのオプションについては、「Amplify Dev Center」を参照してください AWS Amplify。
AWS サービスへのアクセス

953

Amazon Cognito

開発者ガイド// create a service client that uses credentials provided by Cognito
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials, REGION);

認証情報プロバイダーは Amazon Cognito と通信し、認証されたユーザーと認証されていないユー
ザーの一意の識別子と、 AWS Mobile SDK の権限が制限された一時的な AWS 認証情報の両方を取得します。取得された認証情報は 1 時間有効で、有効期限が切れるとプロバイダーによって更新されます。

XamarinAWS SDK for Xamarin も、AWS SDK for .NET の一部になりました。で Amazon Cognito の使用を開始するには AWS SDK for .NET、「 AWS SDK for .NET デベロッパーガイド」のAmazon Cognito
認証情報プロバイダー」を参照してください。または、 でアプリケーションを構築するためのオプ
ションについては、「Amplify Dev Center」を参照してください AWS Amplify。
// create a service client that uses credentials provided by Cognito
var client = new AmazonDynamoDBClient(credentials, REGION)

認証情報プロバイダーは Amazon Cognito と通信し、認証されたユーザーと認証されていないユー
ザーの一意の識別子と、 AWS Mobile SDK の権限が制限された一時的な AWS 認証情報の両方を取得します。取得された認証情報は 1 時間有効で、有効期限が切れるとプロバイダーによって更新されます。

ID プール外部 ID プロバイダー
logins プロパティを使用すると、ID プロバイダー (IdP) から受信した認証情報を設定できます。さらに、ID プールを複数の に関連付けることができます IdPs。例えば、Facebook と Google の両方のトークンを logins プロパティに設定して、一意の Amazon Cognito アイデンティティが両方の
IdP のログインに関連付けられるようにすることができます。ユーザーはどちらのアカウントでも認証できますが、Amazon Cognito は同じユーザー ID を返します。
次の手順では、Amazon Cognito ID プールがサポート IdPs する による認証について説明します。
トピック• アイデンティティプール IdP として Facebook を設定する• Login with Amazon を ID プール IdP としてセットアップする• Google を ID プール IdP としてセットアップする
ID プール外部 ID プロバイダー

954

Amazon Cognito

開発者ガイド• アイデンティティプール IdP として Apple でサインインを設定する• OIDC プロバイダーを ID プール IdP としてセットアップする• SAML プロバイダーを ID プール IdP としてセットアップする

アイデンティティプール IdP として Facebook を設定する
Amazon Cognito ID プールは、モバイルアプリケーションユーザーにフェデレートされた認証を提供するために Facebook と統合します。このセクションでは、IdP として Facebook に対してアプリ
ケーションを登録し、セットアップする方法について説明します。

Facebook のセットアップ
Facebook ユーザーを認証し、Facebook を操作する前に、アプリケーションを Facebook に登録しますAPIs。
Facebook デベロッパーポータルは、アプリケーションのセットアップに役立ちます。Amazon
Cognito アイデンティティプールに Facebook を統合する前に、次の手順を実行してください。
Note
Amazon Cognito ID プールフェデレーションは、Facebook の制限付きログイン と互換性がありません。制限付きログインのアクセス許可セットを超えずに iOS 用 Facebook ログイ
ンを設定する方法の詳細については、「 Meta for Developers での Facebook Login for iOS Quickstart」を参照してください。

Facebook のセットアップ
1.

Facebook デベロッパーポータルで、Facebook 認証情報を使用してログインします。

2.

アプリ メニューの Add a New App (新しいアプリを追加する)を選択します。

3.

プラットフォームを選択し、クイックスタートプロセスを完了します。

Android
Android アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。
Facebook955

Amazon Cognito

開発者ガイドiOS - Objective-C
iOS Objective-C アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。
iOS - SwiftiOS Swift アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。
JavaScript
JavaScript ウェブアプリを Facebook ログインと統合する方法の詳細については、「Facebook 入門ガイド」を参照してください。
Unity
Unity アプリと Facebook ログインとの統合に関する詳細情報については、Facebook 入門ガイドを参照してください。
Xamarin
Facebook 認証を追加するには、まず以下の適切なフローに従って Facebook をアプリケーションに
統合SDKします。Amazon Cognito ID プールは、Amazon Cognito アイデンティティに関連付けられた一意のユーザー識別子を生成するために Facebook アクセストークンを使用します。
• Xamarin SDKによる Facebook iOS• Xamarin SDKによる Facebook Android

Amazon Cognito アイデンティティプールコンソールでアイデンティティプロバイ
ダーを設定する
以下の手順を使用して、ID プロバイダーを設定します。
Facebook ID プロバイダー (IdP) を追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Facebook] を選択します。

Facebook956

Amazon Cognito

5.

開発者ガイド

Meta for Developers で作成したOAuthプロジェクトのアプリケーション ID を入力します。詳細
については、Meta for Developers ドキュメントの「Facebook ログイン」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

7.

8.

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Facebook の使用
Android
Facebook 認証を追加するには、まず Facebook ガイドに従って Facebook をアプリケーションに
統合SDKします。次に、[Login with Facebook] ボタンを Android ユーザーインターフェイスに追加します。Facebook SDKはセッションオブジェクトを使用して状態を追跡します。Amazon Cognito
は、このセッションオブジェクトのアクセストークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。
Facebook でユーザーを認証したらSDK、セッショントークンを Amazon Cognito 認証情報プロバイ
ダーに追加します。
Facebook957

Amazon Cognito

開発者ガイドFacebook SDK 4.0 以降：
Map<String, String> logins = new HashMap<String, String>();logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);

4.0 SDKより前の Facebook:
Map<String, String> logins = new HashMap<String, String>();logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken());
credentialsProvider.setLogins(logins);

Facebook ログインプロセスは、 でシングルトンセッションを初期化しますSDK。Facebook セッ
ションオブジェクトには、Amazon Cognito が認証されたエンドユーザーの AWS 認証情報を生成するために使用するOAuthトークンが含まれています。Amazon Cognito は、この特定の Facebook ア
イデンティティに一致するユーザーの存在についてユーザーデータベースをチェックするためにもこのトークンを使用します。ユーザーがすでに存在する場合、 は既存の識別子APIを返します。それ以外の場合、 は新しい識別子APIを返します。クライアントはローカルデバイスに識別子SDKを自動的にキャッシュします。
Note
ログインマップを設定したら、 refreshまたは を呼び出しgetて AWS 認証情報を取得します。

iOS - Objective-C
Facebook 認証を追加するには、まず Facebook ガイドに従って Facebook をアプリケーションに
統合SDKします。次に、[Login with Facebook (Facebook でログイン)] ボタンを ユーザーインター
フェイスに追加します。Facebook SDKはセッションオブジェクトを使用してその状態を追跡します。Amazon Cognito は、このセッションオブジェクトからのアクセストークンを使用してユーザーを認証し、一意の Amazon Cognito ID プール (フェデレーティッド ID) にバインドします。
Amazon Cognito に Facebook アクセストークンを提供するには、AWSIdentityProviderManager プ
ロトコルを実装します。
logins メソッドを実装するときは、AWSIdentityProviderFacebook を含むディクショナリを返します。以下のコード例にあるように、このディクショナリはキーとして機能し、認証されたFacebook ユーザーからの現在のアクセストークンが値として機能します。
Facebook958

Amazon Cognito

開発者ガイド- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken];if(fbToken){
NSString *token = fbToken.tokenString;
return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }];}else{
return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login"
code:-1
userInfo:@{@"error":@"No current
Facebook access token"}]];}}AWSCognitoCredentialsProvider をインスタンス化するときに、コンストラクターで
AWSIdentityProviderManager の値として identityProviderManager を実装するクラスを渡します。詳細については、AWSCognitoCredentialsProviderリファレンスページに移動
し、initWithRegionタイプ：identityPoolId：identityProviderManager を選択します。
iOS - Swift
Facebook 認証を追加するには、まず Facebook ガイドに従って Facebook をアプリケーションに
統合SDKします。次に、[Login with Facebook (Facebook でログイン)] ボタンを ユーザーインター
フェイスに追加します。Facebook SDKはセッションオブジェクトを使用してその状態を追跡します。Amazon Cognito は、このセッションオブジェクトからのアクセストークンを使用してユーザーを認証し、一意の Amazon Cognito ID プール (フェデレーティッド ID) にバインドします。
Note
Amazon Cognito ID プールフェデレーションは、Facebook の制限付きログイン と互換性がありません。制限付きログインのアクセス許可セットを超えないで iOS 用 Facebook ログイ
ンを設定する方法の詳細については、「 Meta for Developers の」の「iOS 用 Facebook ログ
イン - クイックスタート」を参照してください。

Amazon Cognito に Facebook アクセストークンを提供するには、AWSIdentityProviderManager プ
ロトコルを実装します。
logins メソッドを実装するときは、AWSIdentityProviderFacebook を含むディクショナリを返します。以下のコード例にあるように、このディクショナリはキーとして機能し、認証されたFacebook ユーザーからの現在のアクセストークンが値として機能します。
Facebook959

Amazon Cognito

開発者ガイドclass FacebookProvider: NSObject, AWSIdentityProviderManager {func logins() -> AWSTask<NSDictionary> {if let token = AccessToken.current?.authenticationToken {return AWSTask(result: [AWSIdentityProviderFacebook:token])}return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo:["Facebook" : "No current Facebook access token"]))}}AWSCognitoCredentialsProvider をインスタンス化するときに、コンストラクターで
AWSIdentityProviderManager の値として identityProviderManager を実装するクラスを渡します。詳細については、AWSCognitoCredentialsProviderリファレンスページに移動
し、initWithRegionタイプ：identityPoolId：identityProviderManager を選択します。
JavaScript
Facebook 認証を追加するには、「ウェブ用の Facebook ログイン」に従って、ウェブサイトに「Facebook でログイン」ボタンを追加します。Facebook SDKはセッションオブジェクトを使用して状態を追跡します。Amazon Cognito は、このセッションオブジェクトのアクセストークンを使用
してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのア
クセスを許可します。
Facebook でユーザーを認証したらSDK、セッショントークンを Amazon Cognito 認証情報プロバイ
ダーに追加します。
FB.login(function (response) {// Check if the user logged in successfully.
if (response.authResponse) {console.log('You are now logged in.');// Add the Facebook access token to the Amazon Cognito credentials login map.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: {'graph.facebook.com': response.authResponse.accessToken}});// Obtain AWS credentials
Facebook960

Amazon Cognito

開発者ガイドAWS.config.credentials.get(function(){// Access AWS resources here.
});} else {console.log('There was a problem logging you in.');}});Facebook は、Amazon Cognito が認証されたエンドユーザーの AWS 認証情報を生成するために使用するOAuthトークンSDKを取得します。Amazon Cognito は、この特定の Facebook アイデンティ
ティに一致するユーザーの存在についてユーザーデータベースをチェックするためにもこのトークンを使用します。ユーザーがすでに存在する場合、 は既存の識別子APIを返します。それ以外の場合、
新しい ID が返されます。識別子は、クライアントによってローカルデバイスSDKに自動的にキャッシュされます。
Note
ログインマップを設定した後、refresh または get を呼び出して、認証情報を取得します。コード例については、 JavaScript README ファイル の「ユースケース 17、ユーザープールと Cognito ID の統合」を参照してください。

Unity
Facebook 認証を追加するには、まず Facebook ガイドに従って Facebook をアプリケーションに
統合SDKします。Amazon Cognito は FB オブジェクトからの Facebook アクセストークンを使用して、Amazon Cognito アイデンティティに関連付けられた一意のユーザー 識別子を生成します。
Facebook でユーザーを認証したらSDK、セッショントークンを Amazon Cognito 認証情報プロバイ
ダーに追加します。
void Start(){
FB.Init(delegate() {if (FB.IsLoggedIn) { //User already logged in from a previous session
AddFacebookTokenToCognito();} else {FB.Login ("email", FacebookLoginCallback);}
Facebook961

Amazon Cognito

開発者ガイド});}void FacebookLoginCallback(FBResult result){if (FB.IsLoggedIn){
AddFacebookTokenToCognito();}else{
Debug.Log("FB Login error");}}void AddFacebookTokenToCognito(){
credentials.AddLogin ("graph.facebook.com",
AccessToken.CurrentAccessToken.TokenString);}

FB.AccessToken を使用する前に、FB.Login() を呼び出し、FB.IsLoggedIn が true であることを確認してください。
XamarinXamarin for Android:
public void InitializeFacebook() {FacebookSdk.SdkInitialize(this.ApplicationContext);
callbackManager = CallbackManagerFactory.Create();LoginManager.Instance.RegisterCallback(callbackManager, new FacebookCallback &lt;
LoginResult &gt; () {HandleSuccess = loginResult = &gt; {var accessToken = loginResult.AccessToken;
credentials.AddLogin("graph.facebook.com", accessToken.Token);//open new activity},
HandleCancel = () = &gt; {//throw error message},
HandleError = loginError = &gt; {//throw error message
Facebook962

Amazon Cognito

開発者ガイド}});
LoginManager.Instance.LogInWithReadPermissions(this, new List &lt; string &gt; {"public_profile"});}

Xamarin for iOS:
public void InitializeFacebook() {LoginManager login = new LoginManager();login.LogInWithReadPermissions(readPermissions.ToArray(),delegate(LoginManagerLoginResult result, NSError error) {if (error != null) {//throw error message} else if (result.IsCancelled) {//throw error message} else {var accessToken = loginResult.AccessToken;
credentials.AddLogin("graph.facebook.com", accessToken.Token);//open new view controller}});}

Login with Amazon を ID プール IdP としてセットアップする
Amazon Cognito は Login with Amazon と統合して、モバイルアプリケーションとウェブアプリケー
ションのユーザーにフェデレートされた認証を提供します。このセクションでは、ID プロバイダー(IdP) として Login with Amazon を使用してアプリケーションを登録し、セットアップする方法について説明します。
デベロッパーポータルで Amazon Cognito を使用するための Login with Amazon を設定します。詳細
については、「Login with Amazon」の「Login with Amazon のセットアップ」を参照してください
FAQ。
Note
Login with Amazon を Xamarin アプリケーションに統合するには、Xamarin 入門ガイドに従ってください。

Login with Amazon

963

Amazon Cognito

開発者ガイド

Note
Login with Amazon を Unity プラットフォームでネイティブに統合することはできません。
代わりに、ウェブビューを使用して、ブラウザのサインインフローに従います。

Login with Amazon のセットアップ
Login with Amazon の実装
Amazon デベロッパーポータル では、アイデンティティプールと統合するOAuthアプリケーションを設定し、Login with Amazon ドキュメントを検索して、 をダウンロードすることができます
SDKs。[Developer console] (デベロッパーコンソール) を選択し、デベロッパーポータルで Loginwith Amazon を選択します。アプリケーションのセキュリティプロファイルを作成し、Login with
Amazon 認証メカニズムをアプリにビルドできます。Login with Amazon 認証をアプリに統合する方法の詳細については、「認証情報の取得」を参照してください。
Amazon OAuth は、新しいセキュリティプロファイルの 2.0 クライアント ID を発行します。クライ
アント ID は、セキュリティプロファイルの [Web Settings] (ウェブ設定) タブにあります。アイデン
ティティプールの Login with Amazon IdP の [アプリケーション ID] フィールドにセキュリティプロ
ファイル ID を入力します。
Note
アイデンティティプールの Login with Amazon IdP の [アプリケーション ID] フィールドにセキュリティプロファイル ID を入力します。これは、クライアント ID を使用するユーザー
プールとは異なります。

Amazon Cognito コンソールで外部プロバイダーを設定する
Amazon アイデンティティプロバイダー (IdP) を使ってログインを追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Login with Amazon] を選択します。

Login with Amazon

964

Amazon Cognito

5.

開発者ガイド

Login with Amazon で作成したOAuthプロジェクトのアプリケーション ID を入力します。
https://developer.amazon.com/apps-and-games/login-with-amazon詳細については、「Loginwith Amazon のドキュメント」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

7.

8.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Login with Amazon の使用: Android
Amazon ログインを認証したら、 TokenListener インターフェイスの onSuccess メソッドでトーク
ンを Amazon Cognito 認証情報プロバイダーに渡すことができます。コードは次のようになります。
@Override
public void onSuccess(Bundle response) {String token = response.getString(AuthzConstants.BUNDLE_KEY.TOKEN.val);
Map<String, String> logins = new HashMap<String, String>();logins.put("www.amazon.com", token);credentialsProvider.setLogins(logins);
Login with Amazon

965

Amazon Cognito

開発者ガイド}

Login with Amazon の使用: iOS - Objective-C
Amazon ログインを認証したら、 の requestDidSucceed メソッドでトークンを Amazon Cognito 認
証情報プロバイダーに渡すことができますAMZNAccessTokenDelegate。
- (void)requestDidSucceed:(APIResult \*)apiResult {if (apiResult.api == kAPIAuthorizeUser) {[AIMobileLib getAccessTokenForScopes:[NSArray arrayWithObject:@"profile"]
withOverrideParams:nil delegate:self];}
else if (apiResult.api == kAPIGetAccessToken) {credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyLoginWithAmazon):
apiResult.result };}}}Login with Amazon の使用: iOS - Swift
Amazon のログインを認証したら、AMZNAccessTokenDelegate の requestDidSucceed メソッ
ドで Amazon Cognito 認証情報プロバイダーにトークンを渡すことができます。
func requestDidSucceed(apiResult: APIResult!) {if apiResult.api == API.AuthorizeUser {AIMobileLib.getAccessTokenForScopes(["profile"], withOverrideParams: nil,delegate: self)} else if apiResult.api == API.GetAccessToken {credentialsProvider.logins =[AWSCognitoLoginProviderKey.LoginWithAmazon.rawValue: apiResult.result]}}

Login with Amazon を使用する： JavaScript
ユーザーが Login with Amazon と認証し、ウェブサイトにリダイレクトされると、Login with
Amazon access_token がクエリ文字列で提供されます。このトークンを認証情報ログインマップに渡します。
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Login with Amazon

966

Amazon Cognito

開発者ガイド

Logins: {'www.amazon.com': 'Amazon Access Token'}});

Login with Amazon の使用: Xamarin
Xamarin for Android
AmazonAuthorizationManager manager = new AmazonAuthorizationManager(this,Bundle.Empty);
var tokenListener = new APIListener {Success = response => {// Get the auth token
var token = response.GetString(AuthzConstants.BUNDLE_KEY.Token.Val);credentials.AddLogin("www.amazon.com", token);}};// Try and get existing login
manager.GetToken(new[] {"profile"}, tokenListener);

Xamarin for iOS
AppDelegate.cs で、次のコードを挿入します。
public override bool OpenUrl (UIApplication application, NSUrl url, string
sourceApplication, NSObject annotation){// Pass on the url to the SDK to parse authorization code from the urlbool isValidRedirectSignInURL = AIMobileLib.HandleOpenUrl (url, sourceApplication);if(!isValidRedirectSignInURL)
return false;// App may also want to handle url
return true;}

次に、ViewController.cs で、以下の作業を行います。
Login with Amazon

967

Amazon Cognito

開発者ガイドpublic override void ViewDidLoad (){base.LoadView ();// Here we create the Amazon Login Button
btnLogin = UIButton.FromType (UIButtonType.RoundedRect);btnLogin.Frame = new RectangleF (55, 206, 209, 48);
btnLogin.SetTitle ("Login using Amazon", UIControlState.Normal);btnLogin.TouchUpInside += (sender, e) => {AIMobileLib.AuthorizeUser (new [] { "profile"}, new AMZNAuthorizationDelegate());};
View.AddSubview (btnLogin);}// Class that handles Authentication Success/Failure
public class AMZNAuthorizationDelegate : AIAuthenticationDelegate{
public override void RequestDidSucceed(ApiResult apiResult){// Your code after the user authorizes application for requested scopes
var token = apiResult["access_token"];credentials.AddLogin("www.amazon.com",token);}public override void RequestDidFail(ApiError errorResponse){// Your code when the authorization fails
InvokeOnMainThread(() => new UIAlertView("User Authorization Failed",
errorResponse.Error.Message, null, "Ok", null).Show());}}

Google を ID プール IdP としてセットアップする
Amazon Cognito は Google と統合して、モバイルアプリケーションユーザーにフェデレーションされた認証を提供します。このセクションでは、ID プロバイダーとして Google に対してアプリケー
ションを登録し、セットアップする方法について説明します。

Google968

Amazon Cognito

開発者ガイドAndroid
Note
アプリが Google を使用していて、複数のモバイルプラットフォームで利用可能になる場合
は、OpenID Connect プロバイダーとして設定する必要があります。作成されたすべてのクライアントを追加オーディエンス値IDsとして追加して、統合を改善します。Google のクライアント間の ID モデルの詳細については、「クライアント間の ID」を参照してください。

Google のセットアップ
Android 用 Google サインインを有効化するには、アプリケーション用の Google デベロッパーコン
ソールプロジェクトを作成する必要があります。
1.

Google 開発者コンソールに移動して、新しいプロジェクトを作成します。

2.

APIs サービス を選択し、OAuth同意画面 を選択します。Google がプロフィールデータをアプリと共有するための同意を求められたときに、Google がユーザーに表示する情報をカスタマイ
ズします。

3.

[Credentials] (認証情報) を選択し、次に[Create credentials] (認証情報の作成) を選択しま
す。OAuth クライアント ID を選択します。アプリケーションタイプとして [Android] を選択します。アプリを開発するプラットフォームごとに個別のクライアント ID を作成します。

4.

[Credentials] (認証情報) で、[Manage service accounts] (サービスアカウントの管理) を選択します。[Create service account] (サービスアカウントの作成) を選択します。サービスアカウントの詳細を入力し、[Create and continue] (作成して続ける) を選択します。

5.

サービスアカウントにプロジェクトへのアクセス権を付与します。アプリが必要とするサービス
アカウントへのアクセス権をユーザーに付与します。

6.

新しいサービスアカウントを選択し、[Keys] (キー)、および [Add key] (キーを追加する) を選択します。新しいJSONキーを作成してダウンロードします。

Google デベロッパーコンソールの使用方法の詳細については、Google Cloud ドキュメントの「プロジェクトの作成と管理」を参照してください。
Google を Android アプリに統合する方法の詳細については、Google Identity ドキュメントの「Google でサインインしてユーザーを認証する」を参照してください。

Google969

Amazon Cognito

開発者ガイドGoogle ID プロバイダー (IdP) を追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Google] を選択します。

5.

Google クラウドプラットフォーム で作成したOAuthプロジェクトのクライアント ID を入力します。 https://console.cloud.google.com/詳細については、「Google クラウドプラットフォーム
コンソールOAuthのヘルプ」の「Setting up 2.0」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

7.

8.

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Google の使用

Google970

Amazon Cognito

開発者ガイドアプリケーションで Google を使用したログインを有効にするには、Android に関する Google のドキュメントに従います。ユーザーがサインインすると、Google に OpenID Connect 認証トークンを要求します。Amazon Cognito はこのトークンを使用してユーザーを認証し、一意の ID を生成します。
次のサンプルコードは、Google Play サービスから認証トークンを取得する方法を示しています。
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name,"audience:server:client_id:YOUR_GOOGLE_CLIENT_ID");
Map<String, String> logins = new HashMap<String, String>();logins.put("accounts.google.com", token);credentialsProvider.setLogins(logins);

iOS - Objective-C
Note
アプリが Google を使用していて、複数のモバイルプラットフォームで利用可能になる場合
は、Google を OpenID Connect プロバイダーとします。作成されたすべてのクライアントを追加オーディエンス値IDsとして追加して、統合を改善します。Google のクライアント間のID モデルの詳細については、「クライアント間の ID」を参照してください。

Google のセットアップ
iOS 用 Google サインインを有効にするには、アプリケーション用の Google デベロッパーコンソー
ルプロジェクトを作成します。
1.

Google 開発者コンソールに移動して、新しいプロジェクトを作成します。

2.

APIs サービス を選択し、OAuth同意画面 を選択します。Google がプロフィールデータをアプリと共有するための同意を求められたときに、Google がユーザーに表示する情報をカスタマイ
ズします。

3.

[Credentials] (認証情報) を選択し、次に[Create credentials] (認証情報の作成) を選択しま
す。OAuth クライアント ID を選択します。アプリケーションタイプとして [iOS] を選択します。アプリを開発するプラットフォームごとに個別のクライアント ID を作成します。

Google971

Amazon Cognito

4.

開発者ガイド[Credentials] (認証情報) で、[Manage service accounts] (サービスアカウントの管理) を選択します。[Create service account] (サービスアカウントの作成) を選択します。サービスアカウントの詳細を入力し、[Create and continue] (作成して続ける) を選択します。

5.

サービスアカウントにプロジェクトへのアクセス権を付与します。アプリが必要とするサービス
アカウントへのアクセス権をユーザーに付与します。

6.

新しいサービスアカウントを選択します。[Keys] (キー) タブを選択し、[Add key] (キーを追加する) を選択します。新しいJSONキーを作成してダウンロードします。

Google デベロッパーコンソールの使用方法の詳細については、Google Cloud ドキュメントの「プロジェクトの作成と管理」を参照してください。
iOS アプリへの Google の統合に関する詳細については、Google ID に関するドキュメントの「iOS用 Google サインイン」を参照してください。
Google ID プロバイダー (IdP) を追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Google] を選択します。

5.

Google クラウドプラットフォーム で作成したOAuthプロジェクトのクライアント ID を入力します。 https://console.cloud.google.com/詳細については、「Google クラウドプラットフォーム
コンソールOAuthのヘルプ」の「Setting up 2.0」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

Googleその IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。
972

Amazon Cognito

7.

開発者ガイドAmazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

8.

a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Google の使用
アプリケーションで Google を使用したログインを有効にするには、iOS に関する Google のドキュメントに従います。認証に成功すると、OpenID Connect 認証トークンが取得されます。Amazon
Cognito はこのトークンを使用してユーザーを認証し、固有識別子を生成します。
認証に成功すると、id_token が含まれる GTMOAuth2Authentication オブジェクトが取得されます。Amazon Cognito はこのオブジェクトを使用してユーザーを認証し、固有識別子を生成します。
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error {NSString *idToken = [auth.parameters objectForKey:@"id_token"];credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyGoogle): idToken };}iOS - Swift
Note
アプリが Google を使用していて、複数のモバイルプラットフォームで利用可能になる場合
は、Google を OpenID Connect プロバイダーとします。作成されたすべてのクライアントを追加オーディエンス値IDsとして追加して、統合を改善します。Google のクライアント間のID モデルの詳細については、「クライアント間の ID」を参照してください。

Google973

Amazon Cognito

開発者ガイドGoogle のセットアップ
iOS 用 Google サインインを有効にするには、アプリケーション用の Google デベロッパーコンソー
ルプロジェクトを作成します。
1.

Google 開発者コンソールに移動して、新しいプロジェクトを作成します。

2.

APIs サービス を選択し、OAuth同意画面 を選択します。Google がプロフィールデータをアプリと共有するための同意を求められたときに、Google がユーザーに表示する情報をカスタマイ
ズします。

3.

[Credentials] (認証情報) を選択し、次に[Create credentials] (認証情報の作成) を選択しま
す。OAuth クライアント ID を選択します。アプリケーションタイプとして [iOS] を選択します。アプリを開発するプラットフォームごとに個別のクライアント ID を作成します。

4.

[Credentials] (認証情報) で、[Manage service accounts] (サービスアカウントの管理) を選択します。[Create service account] (サービスアカウントの作成) を選択します。サービスアカウントの詳細を入力し、[Create and continue] (作成して続ける) を選択します。

5.

サービスアカウントにプロジェクトへのアクセス権を付与します。アプリが必要とするサービス
アカウントへのアクセス権をユーザーに付与します。

6.

新しいサービスアカウントを選択し、[Keys] (キー)、および [Add key] (キーを追加する) を選択します。新しいJSONキーを作成してダウンロードします。

Google デベロッパーコンソールの使用方法の詳細については、Google Cloud ドキュメントの「プロジェクトの作成と管理」を参照してください。
iOS アプリへの Google の統合に関する詳細については、Google ID に関するドキュメントの「iOS用 Google サインイン」を参照してください。
Amazon Cognito コンソールのホームページで [Manage Identity Pools] (ID プールの管理) をクリックします。
Amazon Cognito コンソールで外部プロバイダーを設定する
1.

外部プロバイダーとして Google を有効にする ID プールの名前を選択します。アイデンティ
ティプールの [Dashboard] (ダッシュボード) ページが表示されます。

2.

[ダッシュボード] ページの右上にある、[ID プールの編集] を選択します。[Edit identity pool] (ID
プールの編集) ページが表示されます。

3.

下にスクロールし、[Authentication providers] (認証プロバイダー) を選択してセクションを展開します。

Google974

Amazon Cognito

開発者ガイド4.

[Google] タブを選択します。

5.

[ロック解除] を選択します。

6.

Google から入手した Google Client ID を入力し、[Save Changes] (変更の保存) を選択します。

Google の使用
アプリケーションで Google を使用したログインを有効にするには、iOS に関する Google のドキュメントに従います。認証に成功すると、OpenID Connect 認証トークンが取得されます。Amazon
Cognito はこのトークンを使用してユーザーを認証し、一意の識別子を生成します。
認証が成功すると、id_token を含む GTMOAuth2Authentication オブジェクトが生成されます。Amazon Cognito はこのトークンを使用してユーザーを認証し、一意の ID を生成します。
func finishedWithAuth(auth: GTMOAuth2Authentication!, error: NSError!) {if error != nil {print(error.localizedDescription)}else {
let idToken = auth.parameters.objectForKey("id_token")credentialsProvider.logins = [AWSCognitoLoginProviderKey.Google.rawValue:
idToken!]}}JavaScript
Note
アプリが Google を使用していて、複数のモバイルプラットフォームで利用可能になる場
合は、Google を OpenID Connect プロバイダーとして設定する必要があります。作成されたすべてのクライアントを追加オーディエンス値IDsとして追加して、統合を改善します。Google のクライアント間の ID モデルの詳細については、「クライアント間の ID」を参照してください。

Google のセットアップ
JavaScript ウェブアプリケーションの Google サインインを有効にするには、アプリケーション用のGoogle Developers コンソールプロジェクトを作成します。
Google975

Amazon Cognito

開発者ガイド1.

Google 開発者コンソールに移動して、新しいプロジェクトを作成します。

2.

APIs サービス を選択し、OAuth同意画面 を選択します。Google がプロフィールデータをアプリと共有するための同意を求められたときに、Google がユーザーに表示する情報をカスタマイ
ズします。

3.

[Credentials] (認証情報) を選択し、次に[Create credentials] (認証情報の作成) を選択しま
す。OAuth クライアント ID を選択します。アプリケーションタイプとして [Web application](ウェブアプリケーション) を選択します。アプリを開発するプラットフォームごとに個別のクライアント ID を作成します。

4.

[Credentials] (認証情報) で、[Manage service accounts] (サービスアカウントの管理) を選択します。[Create service account] (サービスアカウントの作成) を選択します。サービスアカウントの詳細を入力し、[Create and continue] (作成して続ける) を選択します。

5.

サービスアカウントにプロジェクトへのアクセス権を付与します。アプリが必要とするサービス
アカウントへのアクセス権をユーザーに付与します。

6.

新しいサービスアカウントを選択し、[Keys] (キー)、および [Add key] (キーを追加する) を選択します。新しいJSONキーを作成してダウンロードします。

Google デベロッパーコンソールの使用方法の詳細については、Google Cloud ドキュメントの「プロジェクトの作成と管理」を参照してください。
Google をウェブアプリに統合する方法の詳細については、Google ID に関するドキュメントの「Google でサインインする」を参照してください。
Amazon Cognito コンソールで外部プロバイダーを設定する
Google ID プロバイダー (IdP) を追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Google] を選択します。

5.

Google クラウドプラットフォーム で作成したOAuthプロジェクトのクライアント ID を入力します。 https://console.cloud.google.com/詳細については、「Google クラウドプラットフォーム
コンソールOAuthのヘルプ」の「Setting up 2.0」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。

Google976

Amazon Cognito•

開発者ガイドその IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。

7.

i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

8.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Google の使用
アプリケーションで Google を使用したログインを有効にするには、「ウェブに関する Google のドキュメント」に従います。
認証に成功すると、id_token が含まれるレスポンスオブジェクトが取得されます。Amazon
Cognito はこのオブジェクトを使用してユーザーを認証し、固有識別子を生成します。
function signinCallback(authResult) {if (authResult['status']['signed_in']) {// Add the Google access token to the Amazon Cognito credentials login map.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: {'accounts.google.com': authResult['id_token']}});

Google977

Amazon Cognito

開発者ガイド// Obtain AWS credentials
AWS.config.credentials.get(function(){// Access AWS resources here.
});
}
}

Unity
Google のセットアップ
Unity アプリ用 Google サインインを有効にするには、アプリケーション用の Google デベロッパー
コンソールプロジェクトを作成します。
1.

Google 開発者コンソールに移動して、新しいプロジェクトを作成します。

2.

APIs サービス を選択し、OAuth同意画面 を選択します。Google がプロフィールデータをアプリと共有するための同意を求められたときに、Google がユーザーに表示する情報をカスタマイ
ズします。

3.

[Credentials] (認証情報) を選択し、次に[Create credentials] (認証情報の作成) を選択しま
す。OAuth クライアント ID を選択します。アプリケーションタイプとして [Web application](ウェブアプリケーション) を選択します。アプリを開発するプラットフォームごとに個別のクライアント ID を作成します。

4.

Unity の場合は、Android の場合は追加のOAuthクライアント ID を作成し、iOS の場合は別のク
ライアント ID を作成します。

5.

[Credentials] (認証情報) で、[Manage service accounts] (サービスアカウントの管理) を選択します。[Create service account] (サービスアカウントの作成) を選択します。サービスアカウントの詳細を入力し、[Create and continue] (作成して続ける) を選択します。

6.

サービスアカウントにプロジェクトへのアクセス権を付与します。アプリが必要とするサービス
アカウントへのアクセス権をユーザーに付与します。

7.

新しいサービスアカウントを選択し、[Keys] (キー)、および [Add key] (キーを追加する) を選択します。新しいJSONキーを作成してダウンロードします。

Google デベロッパーコンソールの使用方法の詳細については、Google Cloud ドキュメントの「プロジェクトの作成と管理」を参照してください。
IAMコンソールで OpenID プロバイダーを作成する
Google978

Amazon Cognito

開発者ガイド

1. IAM コンソールで OpenID プロバイダーを作成します。OpenID プロバイダーをセットアップする
方法の詳細については、「OpenID Connect ID プロバイダーの使用」を参照してください。
2. プロバイダー の入力を求められたらURL、 と入力します"https://accounts.google.com"。
3. 対象者フィールドに値を入力するように求められたら、前のステップでIDs作成した 3 つのクライ
アントのいずれかを入力します。
4. プロバイダー名を選択し、他の 2 つのクライアント でさらに 2 人のオーディエンスを追加します
IDs。
Amazon Cognito コンソールで外部プロバイダーを設定する
Amazon Cognito コンソールのホームページで [Manage Identity Pools] (ID プールの管理) をクリックします。
Google ID プロバイダー (IdP) を追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Google] を選択します。

5.

Google クラウドプラットフォーム で作成したOAuthプロジェクトのクライアント ID を入力します。 https://console.cloud.google.com/詳細については、「Google Cloud Platform OAuth コン
ソールのヘルプ」の「Setting up 2.0」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

Googleその IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。
979

Amazon Cognito

7.

開発者ガイドAmazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

8.

a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Unity Google プラグインのインストール
1. Unity プロジェクトに、Google Play Games plugin for Unity を追加します。
2. Unity では、Windows メニューから、Android および iOS プラットフォームIDs用の 3 つの を使用
してプラグインを設定します。
Google の使用
次のサンプルコードは、Google Play サービスから認証トークンを取得する方法を示しています。
void Start(){
PlayGamesClientConfiguration config = new
PlayGamesClientConfiguration.Builder().Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();Social.localUser.Authenticate(GoogleLoginCallback);}void GoogleLoginCallback(bool success){if (success){string token = PlayGamesPlatform.Instance.GetIdToken();credentials.AddLogin("accounts.google.com", token);}else
Google980

Amazon Cognito

開発者ガイド{Debug.LogError("Google login failed. If you are not running in an actual Android/
iOS device, this is expected.");}}XamarinNote
Amazon Cognito は、Xamarin プラットフォームで Google をネイティブにサポートしていません。現在、この統合では、ウェブビューを使用してブラウザのサインインの流れに従う必要があります。Google 統合が他の とどのように連携するかについてはSDKs、別のプラットフォームを選択してください。

アプリケーションで Google を使用したログインを有効にするには、ユーザーを認証し、ユーザー
から OpenID Connect トークンを取得します。Amazon Cognito は、Amazon Cognito アイデンティ
ティに関連付けられた一意のユーザー識別子を生成するためにこのトークンを使用します。残念ながら、Google SDK for Xamarin では OpenID Connect トークンを取得できないため、ウェブビューで代替クライアントまたはウェブフローを使用してください。
トークンを取得したら、CognitoAWSCredentials で設定できます。
credentials.AddLogin("accounts.google.com", token);

Note
アプリが Google を使用していて、複数のモバイルプラットフォームで利用可能になる場
合は、Google を OpenID Connect プロバイダーとして設定する必要があります。作成されたすべてのクライアントを追加オーディエンス値IDsとして追加して、統合を改善します。Google のクライアント間の ID モデルの詳細については、「クライアント間の ID」を参照してください。

アイデンティティプール IdP として Apple でサインインを設定する
Amazon Cognito は「Apple でサインイン」と統合して、モバイルアプリケーションとウェブアプリ
ケーションのユーザーにフェデレートされた認証を提供します。このセクションでは、ID プロバイ
Apple でのサインイン

981

Amazon Cognito

開発者ガイドダー (IdP) として「Apple でサインイン」を使用してアプリケーションを登録し、セットアップする
方法について説明します。
認証プロバイダーとして「Apple でサインイン」を ID プールに追加するには、2 つのステップが必要です。まず、アプリケーションで「Apple でサインイン」を統合し、次に ID プールで「Apple でサインイン」を設定します。「Apple でサインイン」の設定 up-to-date の詳
細については、Apple デベロッパードキュメントの「Apple でサインインするための環境の設定」を参照してください。 https://developer.apple.com/documentation/sign_in_with_apple/
configuring_your_environment_for_sign_in_with_apple「Apple でサインイン」を設定する
IdP として「Apple でサインイン」を設定するには、クライアント ID を受け取るためにアプリケー
ションを Apple に登録する必要があります。
1.

Apple の開発者アカウントを作成します。

2.

Apple 認証情報を使用してサインインします。

3.

左側のナビゲーションペインで、証明書、IDsおよびプロファイル を選択します。

4.

左のナビゲーションペインで、[Identifiers (識別子)] を選択します。

5.

[Identifiers (識別子)] ページで、[+] アイコンを選択します。

6.

「新しい識別子の登録」ページで「アプリIDs」を選択し、「続行」を選択します。

7.

[Register an App ID] ページで、次の操作を行います。
a.

[説明] に、説明を入力します。

b.

[Bundle ID (バンドル ID)] に、識別子を入力します。このバンドル ID を書き留めておきます。Apple を ID プールのプロバイダーとして設定するには、この値が必要になります。

c.

[Capabilities] (機能) で、[Sign In with Apple] (Apple でサインイン) を選択してから [Edit] (編集) を選択します。

d.

[Sign in with Apple: App ID Configuration] (Apple でサインイン: アプリ ID の設定) ページ
で、アプリの適切な設定を選択します。次に、[Save] (保存) を選択します。

e.

[Continue] (続行) をクリックします。

8.

[Confirm your App ID] ページで、[登録] を選択します。

9.

「Apple でサインイン」をネイティブ iOS アプリケーションと統合する場合は、ステップ 10 に進みます。ステップ 11 は、「Apple JS でサインイン」と統合するアプリケーション用です。

10. 識別子ページで、アプリIDsメニュー、サービスを選択しますIDs。[+] アイコンを選択します。
Apple でのサインイン

982

Amazon Cognito

開発者ガイド11. 「新しい識別子の登録」ページで「サービスIDs」を選択し、「続行」を選択します。
12. [Register a Services ID] ページで、次の操作を行います。
a.

[説明] に、説明を入力します。

b.

[Identifier] に、識別子を入力します。このサービス ID を書き留めておきます。Apple を ID
プールのプロバイダーとして設定するには、この値が必要になります。

c.

[Apple でサインイン] を選択後、[Configure (設定)] を選択します。

d.

[Web Authentication Configuration] ページで、[Primary App ID] を選択します。ウェブサイ
ト URLsで、+ アイコンを選択します。[Domains and Subdomains (ドメインとサブドメイン)] で、アプリのドメイン名を入力します。Return にURLs、Apple でサインインで認証した後に認証URLによってユーザーをリダイレクトするコールバックを入力します。

e.

[次へ] をクリックします。

f.

[Continue] (続行) を選択し、[Register] (登録) を選択します。

13. 左のナビゲーションペインで [Keys (キー)] を選択します。
14. [Keys (キー)] ページで、[+] アイコンを選択します。
15. [Register a New Key] ページで、次の操作を行います。
a.

[Key Name] に、キー名を入力します。

b.

[Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。

c.

[Configure Key (キーの設定)] ページで、[Primary App ID (プライマリアプリ ID)]、[Save (保存)] の順に選択します。

d.

[Continue] (続行) を選択し、[Register] (登録) を選択します。

NoteApple でサインインをネイティブ iOS アプリケーションに統合するには、「Apple でサインインしてユーザー認証を実装する」を参照してください。
ネイティブ iOS 以外のプラットフォームで「Apple でサインイン」を統合する方法について
は、「Apple JS でサインイン」を参照してください。

Amazon Cognito フェデレーティッド ID コンソールで外部プロバイダーを設定する
以下の手順を使用して、外部プロバイダーを設定します。
Apple でのサインイン

983

Amazon Cognito

開発者ガイドApple ID プロバイダー (IdP) を使ってサインインを追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

[Apple でサインイン] を選択します。

5.

Apple Developer で作成したOAuthプロジェクトのサービス ID を入力します。 https://developer.apple.com詳細については、Apple でサインインのドキュメントの「Apple でサインインを使用してユーザーを認証する」を参照してください。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

7.

8.

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

Apple でのサインイン

984

Amazon Cognito

開発者ガイドAmazon Cognito フェデレーティッド ID CLIの例のプロバイダーとして Apple でサインインする
この例では、IdP として Apple でサインインする MyIdentityPool という名前の ID プールを作成します。
aws cognito-identity create-identity-pool --identitypool-name MyIdentityPool --supported-login-providers
appleid.apple.com="sameple.apple.clientid"
詳細については、「ID プールの作成」を参照してください。
Amazon Cognito アイデンティティ ID を生成する
この例では、Amazon Cognito ID を生成 (または取得) します。これはパブリックAPIであるため、この を呼び出すための認証情報は必要ありませんAPI。
aws cognito-identity get-id --identity-pool-id SampleIdentityPoolId -logins appleid.apple.com="SignInWithAppleIdToken"
詳細については、「get-id」を参照してください。
Amazon Cognito アイデンティティ ID の認証情報を取得する
この例では、指定された ID および 「Apple でサインイン」のログインの認証情報を返します。これはパブリックAPIであるため、この を呼び出すための認証情報は必要ありませんAPI。
aws cognito-identity get-credentials-for-identity --identity-id
SampleIdentityId --logins appleid.apple.com="SignInWithAppleIdToken"
詳細については、「」を参照してください。 get-credentials-for-identity

Apple でサインインを使用する: Android
Apple は、Android 用 Apple でサインインSDKをサポートする を提供していません。代わりにウェブ
ビューでウェブフローを使用できます。
• アプリケーションで「Apple でサインイン」を設定するには、Apple のドキュメントの「「Appleでサインイン」するためのウェブページの設定」を参照してください。
• Android ユーザーインターフェイスに [Apple でサインイン] ボタンを追加するには、Apple のドキュメントの「「Apple でサインイン」ボタンの表示と設定」に従ってください。
Apple でのサインイン

985

Amazon Cognito

開発者ガイド• 「Apple でサインイン」を使用してユーザーを安全に認証するには、Apple のドキュメントの「Apple でサインインするためのウェブページの設定」を参照してください。
「Apple でサインイン」は、その状態の追跡にセッションオブジェクトを使用します。Amazon
Cognito は、このセッションオブジェクトの ID トークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。
@Override
public void onSuccess(Bundle response) {String token = response.getString("id_token");
Map<String, String> logins = new HashMap<String, String>();logins.put("appleid.apple.com", token);credentialsProvider.setLogins(logins);}「Apple でサインインを使用する」: iOS-Objective-C
Apple は、ネイティブ iOS アプリケーションで「Apple でサインインSDK」のサポートを提供しました。ネイティブ iOS デバイスで「Apple でサインイン」を使用してユーザー認証を実装するには、Apple のドキュメントで「「Apple でサインイン」を使用したユーザー認証の実装」を参照してください。
Amazon Cognito は、ID トークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。
(void)finishedWithAuth: (ASAuthorizationAppleIDCredential *)auth error: (NSError *)error {
NSString *idToken = [ASAuthorizationAppleIDCredential
objectForKey:@"identityToken"];credentialsProvider.logins = @{ "appleid.apple.com": idToken };}「Apple でサインイン」: iOS - SwiftApple は、ネイティブ iOS アプリケーションで「Apple でサインインSDK」のサポートを提供しました。ネイティブ iOS デバイスで「Apple でサインイン」を使用してユーザー認証を実装するには、Apple のドキュメントで「「Apple でサインイン」を使用したユーザー認証の実装」を参照してください。
Apple でのサインイン

986

Amazon Cognito

開発者ガイドAmazon Cognito は、ID トークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。
iOS で「Apple でサインイン」を設定する方法についての詳細は、「Apple でサインインを設定する」を参照してください。
func finishedWithAuth(auth: ASAuthorizationAppleIDCredential!, error: NSError!) {if error != nil {print(error.localizedDescription)}else {
let idToken = auth.identityToken,
credentialsProvider.logins = ["appleid.apple.com": idToken!]}}「Apple でサインイン」を使用します。 JavaScriptApple は、 の「Apple でサインインSDK」をサポートする を提供していません JavaScript。代わりにウェブビューでウェブフローを使用できます。
• アプリケーションで「Apple でサインイン」を設定するには、Apple のドキュメントの「「Appleでサインイン」するためのウェブページの設定」を参照してください。
• JavaScript ユーザーインターフェイスに「Apple でサインイン」ボタンを追加するには、Apple ド
キュメントの「Apple でサインイン」ボタンの表示と設定を参照してください。
• 「Apple でサインイン」を介してユーザーを安全に認証するには、Apple のドキュメントの「「Apple でサインイン」するためのウェブページの設定」を参照してください。
「Apple でサインイン」は、その状態の追跡にセッションオブジェクトを使用します。Amazon
Cognito は、このセッションオブジェクトの ID トークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。
function signinCallback(authResult) {// Add the apple's id token to the Amazon Cognito credentials login map.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: {'appleid.apple.com': authResult['id_token']}});Apple でのサインイン

987

Amazon Cognito

開発者ガイド// Obtain AWS credentials
AWS.config.credentials.get(function(){// Access AWS resources here.
});}「Apple でサインイン」を使用する: XamarinApple for Xamarin でサインインSDKをサポートする はありません。代わりにウェブビューでウェブフローを使用できます。
• アプリケーションで「Apple でサインイン」を設定するには、Apple のドキュメントの「「Appleでサインイン」するためのウェブページの設定」を参照してください。
• Xamarin ユーザーインターフェイスに [Apple でサインイン] ボタンを追加するには、Apple のドキュメントの「「Apple でサインイン」ボタンの表示と設定」に従ってください。
• 「Apple でサインイン」を介してユーザーを安全に認証するには、Apple のドキュメントの「「Apple でサインイン」するためのウェブページの設定」を参照してください。
「Apple でサインイン」は、その状態の追跡にセッションオブジェクトを使用します。Amazon
Cognito は、このセッションオブジェクトの ID トークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。
トークンを取得したら、CognitoAWSCredentials で設定できます。
credentials.AddLogin("appleid.apple.com", token);

OIDC プロバイダーを ID プール IdP としてセットアップする
OpenID Connect は認証のためのオープン標準で、多数のログインプロバイダーでサポートされています。Amazon Cognito は、AWS Identity and Access Management を使用して設定した OpenID
Connect プロバイダーとアイデンティティをリンクすることをサポートしています。
OpenID Connect プロバイダーの追加
OpenID Connect プロバイダーを作成する方法については、 ユーザーガイドのOpenID Connect(OIDC) ID プロバイダーの作成AWS Identity and Access Management 」を参照してください。
Amazon Cognito とのプロバイダーの関連付け
Open ID Connect プロバイダー

988

Amazon Cognito

開発者ガイドOIDC ID プロバイダーを追加するには (IdP )1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

OpenID Connect (OIDC） を選択します。

5.

IAM IdPs の から OIDC ID プロバイダーを選択します AWS アカウント。新しいSAMLプロバイ
ダーを追加する場合は、新しいプロバイダーの作成を選択してIAMコンソールに移動します。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。

7.

8.

i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

c.

プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

[変更を保存] を選択します。

複数の OpenID Connect プロバイダーを、単一の ID プールと関連付けることができます。
OpenID Connect の使用Open ID Connect プロバイダー

989

Amazon Cognito

開発者ガイドログインして ID トークンを受け取る方法については、プロバイダーのドキュメントを参照してください。
トークンを取得したら、ログインマップにトークンを追加します。プロバイダーURIの をキーとして使用します。
OpenID Connect トークンの検証
初めて Amazon Cognito と統合するときは、InvalidToken 例外を受け取る場合があります。Amazon Cognito が OpenID Connect (OIDC) トークンを検証する方法を理解することが重要です。
Note
ここで指定されているように (https://tools.ietf.org/html/rfc7523）、Amazon Cognito はシステ
ム間のクロックスキューを処理するために 5 分の猶予期間を提供します。

1. iss パラメータは、ログインマップで使われるキー (login.provider.com など) と一致する必要があります。
2. 署名が有効である必要があります。署名はパブリックRSAキーで検証できる必要があります。
3. 証明書パブリックキーのフィンガープリントは、OIDCプロバイダーの作成IAM時に で設定したフィンガープリントと一致します。
4. azp パラメータが存在する場合は、OIDCプロバイダーIDsのリストされたクライアントに対してこの値を確認します。
5. azp パラメータが存在しない場合は、 aud パラメータをOIDCプロバイダーIDsのリストされたク
ライアントと照合します。
ウェブサイトの jwt.io は、これらの値を検証するためのトークンをデコードするための貴重なリソー
スです。

Android
Map<String, String> logins = new HashMap<String, String>();logins.put("login.provider.com", token);credentialsProvider.setLogins(logins);

Open ID Connect プロバイダー

990

Amazon Cognito

開発者ガイドiOS - Objective-C
credentialsProvider.logins = @{ "login.provider.com": token }iOS - Swift
OIDC ID トークンを Amazon Cognito に提供するには、 AWSIdentityProviderManagerプロトコルを実装します。
logins メソッドを実装するときは、設定したOIDCプロバイダー名を含むディクショナリを返します。次のコード例に示すように、このディクショナリはキーとして機能し、認証されたユーザーからの現在の ID トークンが値として機能します。
class OIDCProvider: NSObject, AWSIdentityProviderManager {func logins() -> AWSTask<NSDictionary> {let completion = AWSTaskCompletionSource<NSString>()
getToken(tokenCompletion: completion)
return completion.task.continueOnSuccessWith { (task) -> AWSTask<NSDictionary>?
in//login.provider.name is the name of the OIDC provider as setup in the
Amazon Cognito console
return AWSTask(result:["login.provider.name":task.result!])} as! AWSTask<NSDictionary>}func getToken(tokenCompletion: AWSTaskCompletionSource<NSString>) -> Void {//get a valid oidc token from your server, or if you have one that hasn't
expired cached, return it//TODO code to get token from your server//...
//if error getting token, set error appropriately
tokenCompletion.set(error:NSError(domain: "OIDC Login", code: -1 , userInfo:["Unable to get OIDC token" : "Details about your error"]))//elsetokenCompletion.set(result:"result from server id token")}}Open ID Connect プロバイダー

991

Amazon Cognito

開発者ガイドをインスタンス化するときはAWSCognitoCredentialsProvider、 が実装するクラスをコンストラクターの identityProviderManagerの値AWSIdentityProviderManagerとして渡します。詳細については、AWSCognitoCredentialsProviderリファレンスページに移動し、initWithRegionタイプ：
identityPoolId：identityProviderManager を選択します。

JavaScript
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: {'login.provider.com': token
}
});

Unity
credentials.AddLogin("login.provider.com", token);

Xamarincredentials.AddLogin("login.provider.com", token);

SAML プロバイダーを ID プール IdP としてセットアップする
Amazon Cognito は、Security Assertion Markup Language 2.0 ( 2.0IdPs) による ID プロバイダー(SAML) による認証をサポートしています。Amazon Cognito SAMLで をサポートする IdP を使用して、ユーザーに簡単なオンボーディングフローを提供できます。SAMLをサポートする IdP は、ユーザーが引き受けることができるIAMロールを指定します。このようにして、さまざまなユーザーがさ
まざまな権限のセットを受け取ることができます。

IdP SAML の ID プールの設定
次の手順では、 SAMLベースの IdP を使用するように ID プールを設定する方法について説明します。

SAML ID プロバイダー

992

Amazon Cognito

開発者ガイドNote
SAML プロバイダーをサポートするように ID プールを設定する前に、まずコンソール でSAML IdP IAM を設定します。詳細については、「 IAMユーザーガイド」の「サードパー
ティーSAMLソリューションプロバイダーと の統合 AWS」を参照してください。

SAML ID プロバイダーを追加するには (IdP )1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

を選択しますSAML。

5.

の から SAML ID プロバイダーIAM IdPs を選択します AWS アカウント。新しいSAMLプロバイ
ダーを追加する場合は、新しいプロバイダーの作成を選択してIAMコンソールに移動します。

6.

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエ
ストするロールを設定するには、[ロール設定] を設定します。
•

7.

その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。
i.

[ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースク
レーム、クレームを比較するオペレータ、このロール選択と一致する値、およびロール
割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

ii.

[ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当
てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。
a.

プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

b.

sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピ
ングを使用] を選択します。

SAML ID プロバイダー

993

Amazon Cognitoc.

開発者ガイドプリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピン
グを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力
します。

8.

[変更を保存] を選択します。

IdP SAML の設定
SAML プロバイダーを作成したら、IdP SAML と の間に証明書利用者の信頼を追加するように IdPを設定します AWS。多くの では IdPs、IdP URLが XMLドキュメントから証明書利用者の情報と証明書を読み取るために使用できる を指定できます。では AWS、https://signin.aws.amazon.com/
static/saml-metadata.xml を使用できます。次のステップでは、IdP からのSAMLアサーションレスポ
ンスを設定して、 AWS に必要なクレームを入力します。クレーム設定の詳細については、「認証レスポンスのSAMLアサーションの設定」を参照してください。
SAML IdP にSAMLメタデータに複数の署名証明書が含まれている場合、サインイン時にユーザー
プールは、SAMLアサーションがSAMLメタデータ内の証明書と一致する場合に有効であると判断します。

を使用したユーザーロールのカスタマイズ SAML
Amazon Cognito ID SAMLで を使用すると、エンドユーザーのロールをカスタマイズできま
す。Amazon Cognito は、 SAMLベースの IdP を使用した拡張フローのみをサポートします。SAML
ベースの IdP を使用するには、ID プールの認証済みまたは認証されていないロールを指定する必要はありません。claim https://aws.amazon.com/SAML/Attributes/Role 属性は、
カンマ区切りのロールとプロバイダー の 1 つ以上のペアを指定しますARN。これらは、ユーザーが引き受けることができるロールです。SAML IdP から入手できるユーザー属性情報に基づいてロール属性を入力するように IdP を設定できます。SAML アサーションで複数のロールを受け取った場合は、 を呼び出すときにオプションの customRoleArnパラメータを入力しま
すgetCredentialsForIdentity。ロールがアSAMLサーションの クレームのロールと一致す
るcustomRoleArn場合、ユーザーはこれを引き受けます。

IdP SAML を使用したユーザーの認証
SAMLベースの IdP とフェデレートするには、URLユーザーが login. AWS federation を開始する で
IdP 開始ログインを使用します。AD FS 2.0 では、 URLは の形式になりますhttps://<fqdn>/
adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices。

SAML ID プロバイダー

994

Amazon Cognito

開発者ガイドAmazon Cognito で SAML IdP のサポートを追加するには、まず iOS または Android アプリケーショ
ンから SAML ID プロバイダーでユーザーを認証します。 Amazon Cognito SAML IdP との統合と認証に使用するコードは、SAMLプロバイダーに固有です。ユーザーを認証したら、Amazon Cognito
を使用して、結果として生じるSAMLアサーションを Amazon Cognito Identity APIsに提供できます。
ID プールAPIリクエストのLoginsマップでSAMLアサーションを繰り返したり、再生したりすることはできません。リプレイされたSAMLアサーションには、以前のAPIリクエストの ID を複製するアサーション ID があります。API LoginsマップでSAMLアサーションを受け入れることができる オペレーションにはGetId、、GetCredentialsForIdentity、GetOpenIdToken、および が含
まれますGetOpenIDTokenForDeveloperIdentity。SAML アサーション ID は、アイデンティティ
プール認証フローのAPIリクエストごとに 1 回再生できます。例えば、GetIdリクエストと後続のGetCredentialsForIdentityリクエストで同じSAMLアサーションを指定できますが、2 番目のGetIdリクエストでは指定できません。

Android
Android を使用している場合はSDK、次のようにログインマップにSAMLアサーションを入力できます。
Map logins = new HashMap();logins.put("arn:aws:iam::aws account id:saml-provider/name", "base64 encoded assertion
response");// Now this should be set to CognitoCachingCredentialsProvider object.
CognitoCachingCredentialsProvider credentialsProvider = new
CognitoCachingCredentialsProvider(context, identity pool id, region);
credentialsProvider.setLogins(logins);// If SAML assertion contains multiple roles, resolve the role by setting the custom
role
credentialsProvider.setCustomRoleArn("arn:aws:iam::aws account id:role/customRoleName");// This should trigger a call to the Amazon Cognito service to get the credentials.
credentialsProvider.getCredentials();iOS
iOS を使用している場合はSDK、AWSIdentityProviderManager次のように でSAMLアサーショ
ンを指定できます。
- (AWSTask<NSDictionary<NSString*,NSString*> *> *) logins {SAML ID プロバイダー

995

Amazon Cognito

開発者ガイド//this is hardcoded for simplicity, normally you would asynchronously go to your
SAML provider//get the assertion and return the logins map using a AWSTaskCompletionSource
return [AWSTask taskWithResult:@{@"arn:aws:iam::aws account id:saml-provider/name":@"base64 encoded assertion response"}];}// If SAML assertion contains multiple roles, resolve the role by setting the custom
role.
// Implementing this is optional if there is only one role.
- (NSString *)customRoleArn {return @"arn:aws:iam::accountId:role/customRoleName";}

デベロッパーが認証したアイデンティティ (アイデンティティプー
ル)
Amazon Cognito は、アイデンティティプール IdP として Facebook を設定する、Google を ID プー
ル IdP としてセットアップする、Login with Amazon を ID プール IdP としてセットアップする、および アイデンティティプール IdP として Apple でサインインを設定する 経由でのウェブ ID フェデ
レーションに加えて、デベロッパーが認証したアイデンティティもサポートします。デベロッパーが認証した ID では、Amazon Cognito を使用してユーザーデータを同期し、 AWS リソースにアクセ
スしながら、独自の既存の認証プロセスを通じてユーザーを登録および認証できます。デベロッパー
が認証したアイデンティティの使用には、エンドユーザーのデバイス、認証のバックエンド、および
Amazon Cognito 間の対話が関連します。詳細については、 AWS ブログの「Understanding Amazon
Cognito Authentication Part 2: Developer Authenticated ID」を参照してください。

認証のフローについて
GetOpenIdTokenForDeveloperIdentity API オペレーションは、拡張認証と基本認証の両方に対してデベロッパー認証を開始できます。この API は、管理者認証情報を使用してリクエストを認証します。Logins マップは、カスタム識別子とlogin.mydevproviderペアになった のような ID プー
ルデベロッパープロバイダー名です。
例："Logins": {"login.mydevprovider": "my developer identifier"}

デベロッパーが認証した ID

996

Amazon Cognito

開発者ガイド

拡張認証
からのトークンの名前cognito-identity.amazonaws.comと値を含むLoginsマップを使用して GetCredentialsForIdentity API オペレーションを呼び出しますGetOpenIdTokenForDeveloperIdentity。
例："Logins": {"cognito-identity.amazonaws.com": "eyJra12345EXAMPLE"}

GetCredentialsForIdentity デベロッパーが認証した ID を持つ は、ID プールのデフォルトの認証されたロールの一時的な認証情報を返します。
基本認証
AssumeRoleWithWebIdentity API オペレーションを呼び出し、適切な信頼関係が定義されている IAM ロールRoleArnの をリクエストします。 ???の値を から取得したトーク
ンWebIdentityTokenに設定しますGetOpenIdTokenForDeveloperIdentity。
デベロッパーが認証した ID 認証フローと、外部プロバイダー ID との違いについては、「」を参照
してくださいID プール (フェデレーティッドアイデンティティ) の認証フロー。

デベロッパー名を指定して ID プールに関連付ける
デベロッパーが認証したアイデンティティを使用するには、デベロッパープロバイダーに関連付けられたアイデンティティプールが必要です。そのためには、以下の手順を実行します。
カスタムデベロッパープロバイダーを追加するには
1.

Amazon Cognito コンソールで [ID プールの管理] をクリックします。アイデンティティプール
を選択します。

2.

[ユーザーアクセス] タブを選択します。

3.

[ID プロバイダーを追加] を選択します。

4.

カスタムデベロッパープロバイダーを選択します。

5.

デベロッパープロバイダー名を入力します。デベロッパープロバイダーを追加した後は、変更または削除することはできません。

6.

[変更を保存] を選択します。

デベロッパー名を指定して ID プールに関連付ける

997

Amazon Cognito

開発者ガイド

注意: プロバイダー名を設定した場合、それを変更することはできません。
Amazon Cognito コンソールでの作業に関する追加の手順については、「Amazon Cognito コンソー
ルの使用」を参照してください。

ID プロバイダーの実装
Android
ディベロッパーが認証した ID を使用するには、AWSAbstractCognitoIdentityProvider を拡張する独自の ID プロバイダークラスを実装します。ID プロバイダークラスは、属性としてトークンを含むレスポンスオブジェクトを返す必要があります。
以下に示しているのは、ID プロバイダーの基本的な例です。
public class DeveloperAuthenticationProvider extends
AWSAbstractCognitoDeveloperIdentityProvider {private static final String developerProvider = "<Developer_provider_name>";public DeveloperAuthenticationProvider(String accountId, String identityPoolId,
Regions region) {super(accountId, identityPoolId, region);// Initialize any other objects needed here.
}// Return the developer provider name which you choose while setting up the// identity pool in the &COG; Console@Override
public String getProviderName() {return developerProvider;}// Use the refresh method to communicate with your backend to get an// identityId and token.
@Override
public String refresh() {// Override the existing token
setToken(null);

ID プロバイダーの実装

998

Amazon Cognito

開発者ガイド// Get the identityId and token by making a call to your backend// (Call to your backend)// Call the update method with updated identityId and token to make sure// these are ready to be used from Credentials Provider.
update(identityId, token);return token;}// If the app has a valid identityId return it, otherwise get a valid// identityId from your backend.
@Override
public String getIdentityId() {// Load the identityId from the cache
identityId = cachedIdentityId;
if (identityId == null) {// Call to your backend} else {return identityId;}}}

この ID プロバイダーを使用するには、これを CognitoCachingCredentialsProvider に渡す必要があります。例を示します。
DeveloperAuthenticationProvider developerProvider = newDeveloperAuthenticationProvider( null, "IDENTITYPOOLID", context, Regions.USEAST1);
CognitoCachingCredentialsProvider credentialsProvider = new
CognitoCachingCredentialsProvider( context, developerProvider, Regions.USEAST1);

iOS - Objective-C
ディベロッパーが認証した ID を使用するには、AWSCognitoCredentialsProviderHelper を拡張する
独自の ID プロバイダークラスを実装します。ID プロバイダークラスは、属性としてトークンを含む
レスポンスオブジェクトを返す必要があります。
ID プロバイダーの実装

999

Amazon Cognito

開発者ガイド@implementation DeveloperAuthenticatedIdentityProvider/** Use the token method to communicate with your backend to get an* identityId and token.
*/- (AWSTask <NSString*> *) token {//Write code to call your backend://Pass username/password to backend or some sort of token to authenticate user//If successful, from backend call getOpenIdTokenForDeveloperIdentity with logins
map//containing "your.provider.name":"enduser.username"//Return the identity id and token to client//You can use AWSTaskCompletionSource to do this asynchronously// Set the identity id and return the token
self.identityId = response.identityId;
return [AWSTask taskWithResult:response.token];}@end

この ID プロバイダーを使用するには、次の例に示すように、それを
AWSCognitoCredentialsProvider に渡します。
DeveloperAuthenticatedIdentityProvider * devAuth =[[DeveloperAuthenticatedIdentityProvider alloc]
initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION
identityPoolId:@"YOUR_IDENTITY_POOL_ID"
useEnhancedFlow:YES
identityProviderManager:nil];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider
alloc]
initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION
identityProvider:devAuth];

認証されていない ID と開発者が認証した ID の両方をサポートする場合
は、AWSCognitoCredentialsProviderHelper の実装で logins メソッドをオーバーライドします。
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {ID プロバイダーの実装

1000

Amazon Cognito

開発者ガイドif(/*logic to determine if user is unauthenticated*/) {return [AWSTask taskWithResult:nil];}else{
return [super logins];}}

開発者が認証した ID とソーシャルプロバイダーをサポートする場合
は、AWSCognitoCredentialsProviderHelper の logins 実装で現在のプロバイダーが誰であるかを管理する必要があります。
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
if(/*logic to determine if user is unauthenticated*/) {return [AWSTask taskWithResult:nil];}else if (/*logic to determine if user is Facebook*/){return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook :[FBSDKAccessToken currentAccessToken] }];}else {
return [super logins];}}

iOS - Swift
ディベロッパーが認証した ID を使用するには、AWSCognitoCredentialsProviderHelper を拡張する
独自の ID プロバイダークラスを実装します。ID プロバイダークラスは、属性としてトークンを含む
レスポンスオブジェクトを返す必要があります。
import AWSCore/** Use the token method to communicate with your backend to get an* identityId and token.
*/
class DeveloperAuthenticatedIdentityProvider : AWSCognitoCredentialsProviderHelper {override func token() -> AWSTask<NSString> {//Write code to call your backend://pass username/password to backend or some sort of token to authenticate user, if
successful,//from backend call getOpenIdTokenForDeveloperIdentity with logins map containing"your.provider.name":"enduser.username"//return the identity id and token to client//You can use AWSTaskCompletionSource to do this asynchronously
ID プロバイダーの実装

1001

Amazon Cognito

開発者ガイド// Set the identity id and return the token
self.identityId = resultFromAbove.identityId
return AWSTask(result: resultFromAbove.token)}

この ID プロバイダーを使用するには、次の例に示すように、それを
AWSCognitoCredentialsProvider に渡します。
let devAuth =DeveloperAuthenticatedIdentityProvider(regionType: .YOUR_IDENTITY_POOL_REGION,
identityPoolId: "YOUR_IDENTITY_POOL_ID", useEnhancedFlow: true,
identityProviderManager:nil)
let credentialsProvider =AWSCognitoCredentialsProvider(regionType: .YOUR_IDENTITY_POOL_REGION,
identityProvider:devAuth)let configuration = AWSServiceConfiguration(region: .YOUR_IDENTITY_POOL_REGION,
credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration

認証されていない ID と開発者が認証した ID の両方をサポートする場合
は、AWSCognitoCredentialsProviderHelper の実装で logins メソッドをオーバーライドします。
override func logins () -> AWSTask<NSDictionary> {if(/*logic to determine if user is unauthenticated*/) {return AWSTask(result:nil)}else {
return super.logins()}}

開発者が認証した ID とソーシャルプロバイダーをサポートする場合
は、AWSCognitoCredentialsProviderHelper の logins 実装で現在のプロバイダーが誰であるかを管理する必要があります。
override func logins () -> AWSTask<NSDictionary> {if(/*logic to determine if user is unauthenticated*/) {return AWSTask(result:nil)}else if (/*logic to determine if user is Facebook*/){if let token = AccessToken.current?.authenticationToken {ID プロバイダーの実装

1002

Amazon Cognito

開発者ガイドreturn AWSTask(result: [AWSIdentityProviderFacebook:token])}return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo:["Facebook" : "No current Facebook access token"]))}else {
return super.logins()}}

JavaScript
バックエンドからアイデンティティ ID とセッショントークンを取得したら、それらを
AWS.CognitoIdentityCredentials プロバイダーに渡します。以下に例を示します。
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
IdentityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER',
Logins: {'cognito-identity.amazonaws.com': 'TOKEN_RETURNED_FROM_YOUR_PROVIDER'
}
});

Unity
開発者が認証した ID を使用するには、CognitoAWSCredentials を拡張し、RefreshIdentity
メソッドを上書きして、ユーザー ID とトークンをバックエンドから取得して返す必要があります。
「example.com」という仮定のバックグランドに接続する ID プロバイダーの簡単な例を以下に示します。
using UnityEngine;using System.Collections;using Amazon.CognitoIdentity;using System.Collections.Generic;using ThirdParty.Json.LitJson;
using System;
using System.Threading;public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials{
const string PROVIDER_NAME = "example.com";const string IDENTITY_POOL = "IDENTITY_POOL_ID";
ID プロバイダーの実装

1003

Amazon Cognito

開発者ガイドstatic readonly RegionEndpoint REGION = RegionEndpoint.USEast1;
private string login = null;public DeveloperAuthenticatedCredentials(string loginAlias): base(IDENTITY_POOL, REGION){
login = loginAlias;}
protected override IdentityState RefreshIdentity(){
IdentityState state = null;
ManualResetEvent waitLock = new ManualResetEvent(false);
MainThreadDispatcher.ExecuteCoroutineOnMainThread(ContactProvider((s) =>{state = s;waitLock.Set();}));
waitLock.WaitOne();return state;}
IEnumerator ContactProvider(Action<IdentityState> callback){
WWW www = new WWW("http://example.com/?username="+login);yield return www;string response = www.text;
JsonData json = JsonMapper.ToObject(response);//The backend has to send us back an Identity and a OpenID token
string identityId = json["IdentityId"].ToString();string token = json["Token"].ToString();
IdentityState state = new IdentityState(identityId, PROVIDER_NAME, token,
false);
callback(state);}}

上記のコードでは、スレッドディスパッチャーオブジェクトを使用してコルーチンを呼び出します。
プロジェクトでこれを行う方法がない場合は、シーンで以下のスクリプトを使用できます。
ID プロバイダーの実装

1004

Amazon Cognito

開発者ガイドusing System;
using UnityEngine;using System.Collections;using System.Collections.Generic;public class MainThreadDispatcher : MonoBehaviour{
static Queue<IEnumerator> _coroutineQueue = new Queue<IEnumerator>();static object _lock = new object();
public void Update(){
while (_coroutineQueue.Count > 0){
StartCoroutine(_coroutineQueue.Dequeue());}}
public static void ExecuteCoroutineOnMainThread(IEnumerator coroutine){
lock (_lock) {_coroutineQueue.Enqueue(coroutine);}}}

Xamarin開発者が認証した ID を使用するには、CognitoAWSCredentials を拡張し、RefreshIdentity
メソッドを上書きして、ユーザー ID とトークンをバックエンドから取得して返す必要があります。
「example.com」という仮定のバックグランドに接続する ID プロバイダーの基本的な例を以下に示します。
public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials{
const string PROVIDER_NAME = "example.com";const string IDENTITY_POOL = "IDENTITY_POOL_ID";
static readonly RegionEndpoint REGION = RegionEndpoint.USEast1;
private string login = null;public DeveloperAuthenticatedCredentials(string loginAlias): base(IDENTITY_POOL, REGION)
ID プロバイダーの実装

1005

Amazon Cognito

開発者ガイド{login = loginAlias;}
protected override async Task<IdentityState> RefreshIdentityAsync(){
IdentityState state = null;//get your identity and set the state
return state;}}

ログインマップの更新 (Android および iOS のみ)
Android
ご使用の認証システムでユーザーが正常に認証されたら、デベロッパープロバイダー名と開発ユー
ザー ID を使用してログインマップを更新します。これは、認証システム内のユーザーを一意に識別する英数字の文字列です。refresh が変更されている可能性があるため、ログインマップを更新した後は、必ず identityId メソッドを呼び出してください。
HashMap<String, String> loginsMap = new HashMap<String, String>();loginsMap.put(developerAuthenticationProvider.getProviderName(),developerUserIdentifier);
credentialsProvider.setLogins(loginsMap);
credentialsProvider.refresh();iOS - Objective-C
認証情報がないか、または期限切れ場合、iOS SDK は logins メソッドを呼び出して最新のログイ
ンマップを取得するのみです。SDK で新しい認証情報の入手を強制する場合は (たとえば、エンド
ユーザーが認証されていない状態から認証され、認証されたユーザーに対して認証情報を必要とするなど)、clearCredentials で credentialsProvider を呼び出します。
[credentialsProvider clearCredentials];

iOS - Swift
認証情報がないか、または期限切れ場合、iOS SDK は logins メソッドを呼び出して最新のログイ
ンマップを取得するのみです。SDK で新しい認証情報の入手を強制する場合は (たとえば、エンド
ログインマップの更新 (Android および iOS のみ)

1006

Amazon Cognito

開発者ガイドユーザーが認証されていない状態から認証され、認証されたユーザーに対して認証情報を必要とするなど)、clearCredentials で credentialsProvider を呼び出します。
credentialsProvider.clearCredentials()

トークンの取得 (サーバー)
トークンを取得するには、 を呼び出しますGetOpenIdTokenForDeveloperIdentity。この API は、
AWS 開発者の認証情報を使用してバックエンドから呼び出す必要があります。クライアント SDKから呼び出すことはできません。API は Cognito アイデンティティプール ID (ID プロバイダー名をキーとして、識別子を値として含むログインマップ) と、オプションで Cognito アイデンティティ ID(認証されていないユーザーを認証する場合など) を受け取ります。識別子はユーザーのユーザー名、
メールアドレス、または数値の場合があります。API は、ユーザーの一意の Cognito ID と、エンドユーザーの OpenID Connect トークンを使用して呼び出しに応答します。
GetOpenIdTokenForDeveloperIdentity によって返されるトークンについては、以下の点に注意してください。
• トークンのカスタムの有効期限を指定して、トークンをキャッシュすることができます。カスタムの有効期限を指定しない場合、トークンは 15 分間有効です。
• 設定できる最大のトークンの期間は 24 時間です。
• トークンの期間を増やすことによるセキュリティへの影響について注意してください。攻撃者がこのトークンを取得した場合、そのトークンをエンドユーザーの AWS 認証情報とトークンの有効期間の間交換できます。
以下の Java スニペットは、Amazon Cognito クライアントを初期化して、デベロッパーが認証した
アイデンティティのトークンを取得する方法を示しています。
// authenticate your end user as appropriate// ....
// if authenticated, initialize a cognito client with your AWS developer credentials
AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
new BasicAWSCredentials("access_key_id", "secret_access_key"));// create a new request to retrieve the token for your end user
GetOpenIdTokenForDeveloperIdentityRequest request =new GetOpenIdTokenForDeveloperIdentityRequest();トークンの取得 (サーバー)

1007

Amazon Cognito

開発者ガイドrequest.setIdentityPoolId("YOUR_COGNITO_IDENTITY_POOL_ID");
request.setIdentityId("YOUR_COGNITO_IDENTITY_ID"); //optional, set this if your client
has an//identity ID that you want to linkto this//developer account// set up your logins map with the username of your end user
HashMap<String,String> logins = new HashMap<>();
logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER");
request.setLogins(logins);// optionally set token duration (in seconds)
request.setTokenDuration(60 * 15l);
GetOpenIdTokenForDeveloperIdentityResult response =identityClient.getOpenIdTokenForDeveloperIdentity(request);// obtain identity id and token to return to your client
String identityId = response.getIdentityId();
String token = response.getToken();//code to return identity id and token to client//...

前述の手順に従って、アプリでデベロッパーが認証したアイデンティティを統合できます。問題またはご質問がある場合は、お気軽にフォーラムに投稿してください。

既存のソーシャル ID への接続
デベロッパーが認証したアイデンティティを使用する際のプロバイダーのすべてのリンク作成
は、バックエンドから行う必要があります。カスタム ID をユーザーのソーシャル ID (Login with
Amazon、Sign in with Apple、Facebook、または Google) に接続するには、 を呼び出すときに ID プ
ロバイダートークンをログインマップに追加しますGetOpenIdTokenForDeveloperIdentity。これを可能にするため、クライアント SDK からバックエンドを呼び出してエンドユーザーを認証するとき
は、エンドユーザーのソーシャルプロバイダートークンを追加で渡します。
たとえば、カスタム ID の Facebook へのリンクを試みている場
合、GetOpenIdTokenForDeveloperIdentity を呼び出すときに、ID プロバイダー ID に加えてFacebook のトークンをログインマップに追加します。
logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER");
既存のソーシャル ID への接続

1008

Amazon Cognito

開発者ガイドlogins.put("graph.facebook.com","END_USERS_FACEBOOK_ACCESSTOKEN");

プロバイダー間の移行のサポート
Android
アプリケーションでは、デベロッパーが認証したアイデンティティとともに、パブリックプロバイ
ダー (Login with Amazon、「Apple でサインイン」、Facebook、または Google) を使用した、認証されていないアイデンティティまたは認証されたアイデンティティのサポートが必要になる場合があります。デベロッパーが認証したアイデンティティとその他のアイデンティティ (認証されていない
アイデンティティと、パブリックプロバイダーを使用して認証されたアイデンティティ) の重要な違いは、identityId およびトークンの取得方法にあります。他のアイデンティティについては、モバイ
ルアプリケーションが認証システムに接続する代わりに Amazon Cognito と直接やり取りします。そのため、モバイルアプリケーションは、アプリユーザーが行った選択に基づいて、2 つの明確の流れをサポートできる必要があります。そのためには、カスタム ID プロバイダーにいくつか変更を加える必要があります。
refresh メソッドはログインマップをチェックします。マップが空でなくデベロッパープロバイ
ダー名を含むキーがある場合は、バックエンドを呼び出します。それ以外の場合は、 メソッドを
getIdentityId呼び出して null を返します。
public String refresh() {setToken(null);// If the logins map is not empty make a call to your backend// to get the token and identityId
if (getProviderName() != null &&!this.loginsMap.isEmpty() &&this.loginsMap.containsKey(getProviderName())) {/*** This is where you would call your backend**/// now set the returned identity id and token in the provider
update(identityId, token);return token;} else {// Call getIdentityId method and return null
プロバイダー間の移行のサポート

1009

Amazon Cognito

開発者ガイドthis.getIdentityId();
return null;}}

同様に、getIdentityId メソッドにも、ログインマップの内容に応じて 2 つのフローがあります。
public String getIdentityId() {// Load the identityId from the cache
identityId = cachedIdentityId;
if (identityId == null) {// If the logins map is not empty make a call to your backend// to get the token and identityId
if (getProviderName() != null && !this.loginsMap.isEmpty()&& this.loginsMap.containsKey(getProviderName())) {/*** This is where you would call your backend**/// now set the returned identity id and token in the provider
update(identityId, token);return token;} else {// Otherwise call &COG; using getIdentityId of super classreturn super.getIdentityId();}} else {return identityId;}}

プロバイダー間の移行のサポート

1010

Amazon Cognito

開発者ガイドiOS - Objective-C
アプリケーションでは、デベロッパーが認証したアイデンティティとともに、パブリックプロバイ
ダー (Login with Amazon、「Apple でサインイン」、Facebook、または Google) を使用した、認証されていないアイデンティティまたは認証されたアイデンティティのサポートが必要になる場合があります。これを行うには、 AWSCognitoCredentialsProviderHelperloginsメソッドをオーバーライ
ドして、現在の ID プロバイダーに基づいて正しいログインマップを返せるようにします。この例では、非認証、Facebook 認証、デベロッパー認証を切り替える方法を示しています。
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
if(/*logic to determine if user is unauthenticated*/) {return [AWSTask taskWithResult:nil];}else if (/*logic to determine if user is Facebook*/){return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook :[FBSDKAccessToken currentAccessToken] }];}else {
return [super logins];}}

非認証から認証に移行するときは、[credentialsProvider clearCredentials]; を呼び出して、認証された新しい認証情報の取得を SDK に強制します。2 つの認証されたプロバイダーを切り替え、2 つのプロバイダーへのリンクを試みない (ログインディクショナリで複数のプロバイダー用のトークンを提供していない) 場合は、[credentialsProvider clearKeychain]; を呼び出します。これにより、認証情報とアイデンティティの両方がクリアされ、SDK は新しい認証を取得します。

iOS - Swift
アプリケーションでは、デベロッパーが認証したアイデンティティとともに、パブリックプロバイ
ダー (Login with Amazon、「Apple でサインイン」、Facebook、または Google) を使用した、認証されていないアイデンティティまたは認証されたアイデンティティのサポートが必要になる場合があります。これを行うには、 AWSCognitoCredentialsProviderHelperloginsメソッドをオーバーライ
ドして、現在の ID プロバイダーに基づいて正しいログインマップを返せるようにします。この例では、非認証、Facebook 認証、デベロッパー認証を切り替える方法を示しています。
override func logins () -> AWSTask<NSDictionary> {if(/*logic to determine if user is unauthenticated*/) {return AWSTask(result:nil)
プロバイダー間の移行のサポート

1011

Amazon Cognito

開発者ガイド}else if (/*logic to determine if user is Facebook*/){if let token = AccessToken.current?.authenticationToken {return AWSTask(result: [AWSIdentityProviderFacebook:token])}return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo:["Facebook" : "No current Facebook access token"]))}else {
return super.logins()}}

非認証から認証に移行するときは、credentialsProvider.clearCredentials() を呼び出して、認証された新しい認証情報の取得を SDK に強制します。2 つの認証されたプロバイダーを切り替え、2 つのプロバイダーへのリンクを試みない (ログインディクショナリで複数のプロバイダー用のトークンを提供していない) 場合は、credentialsProvider.clearKeychain() を呼び出します。これにより、認証情報とアイデンティティの両方がクリアされ、SDK は新しい認証を取得しま
す。

Unity
アプリケーションでは、デベロッパーが認証したアイデンティティとともに、パブリックプロバイ
ダー (Login with Amazon、「Apple でサインイン」、Facebook、または Google) を使用した、認証されていないアイデンティティまたは認証されたアイデンティティのサポートが必要になる場合があります。デベロッパーが認証したアイデンティティとその他のアイデンティティ (認証されていない
アイデンティティと、パブリックプロバイダーを使用して認証されたアイデンティティ) の重要な違いは、identityId およびトークンの取得方法にあります。他のアイデンティティについては、モバイ
ルアプリケーションが認証システムに接続する代わりに Amazon Cognito と直接やり取りします。モ
バイルアプリケーションは、アプリユーザーが行った選択に基づいて、2 つの明確の流れをサポートできる必要があります。そのためには、カスタム ID プロバイダーにいくつか変更を加える必要があります。
Unity で実行する推奨方法は、ID プロバイダーを AmazonCognitoEnhancedIdentityProvide ではなくから拡張し AbstractCognitoIdentityProvider、ユーザーが独自のバックエンドで認証されない場合に備えて、親 RefreshAsync メソッドを呼び出します。ユーザーが認証されている場合、前に説明したのと同じ流れを使用できます。

Xamarinアプリケーションでは、デベロッパーが認証したアイデンティティとともに、パブリックプロバイ
ダー (Login with Amazon、「Apple でサインイン」、Facebook、または Google) を使用した、認証
プロバイダー間の移行のサポート

1012

Amazon Cognito

開発者ガイドされていないアイデンティティまたは認証されたアイデンティティのサポートが必要になる場合があります。デベロッパーが認証したアイデンティティとその他のアイデンティティ (認証されていない
アイデンティティと、パブリックプロバイダーを使用して認証されたアイデンティティ) の重要な違いは、identityId およびトークンの取得方法にあります。他のアイデンティティについては、モバイ
ルアプリケーションが認証システムに接続する代わりに Amazon Cognito と直接やり取りします。モ
バイルアプリケーションは、アプリユーザーが行った選択に基づいて、2 つの明確の流れをサポートできる必要があります。そのためには、カスタム ID プロバイダーにいくつか変更を加える必要があります。

認証されていないユーザーから認証されたユーザー (ID プール) への切り替え
Amazon Cognito ID プールは、認証されたユーザーと認証されていないユーザーの両方をサポートします。認証されていないユーザーは、ID プロバイダー (IdP) を使用してログインしていない場合でも、AWS リソースへのアクセス権を受け取ります。このレベルのアクセスは、ユーザーがログインする前にユーザーにコンテンツを表示する場合に便利です。認証されていない各ユーザーは、個別にログインして認証していない場合でも、ID プールに一意の ID があります。
このセクションでは、ユーザーがログインに使用する ID を、認証されていない ID から認証された
ID に切り替える方法について説明します。

Android
ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユー
ザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。
アプリケーションに、プロファイルの結合が IdentityChangedListener インターフェイスを通じて通知されます。インターフェイスで identityChanged メソッドを実装して、これらのメッセージを受け取ります。
@override
public void identityChanged(String oldIdentityId, String newIdentityId) {// handle the change}

ID の切り替え

1013

Amazon Cognito

開発者ガイドiOS - Objective-C
ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユー
ザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。
NSNotificationCenter はプロファイルの結合をアプリケーションに通知します。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(identityIdDidChange:)
name:AWSCognitoIdentityIdChangedNotification
object:nil];-(void)identityDidChange:(NSNotification*)notification {NSDictionary *userInfo = notification.userInfo;
NSLog(@"identity changed from %@ to %@",
[userInfo objectForKey:AWSCognitoNotificationPreviousId],[userInfo objectForKey:AWSCognitoNotificationNewId]);}

iOS - Swift
ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユー
ザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。
NSNotificationCenter はプロファイルの結合をアプリケーションに通知します。
[NSNotificationCenter.defaultCenter().addObserver(observer: self
selector:"identityDidChange"
name:AWSCognitoIdentityIdChangedNotification
object:nil)func identityDidChange(notification: NSNotification!) {if let userInfo = notification.userInfo as? [String: AnyObject] {print("identity changed from: \(userInfo[AWSCognitoNotificationPreviousId])
to: \(userInfo[AWSCognitoNotificationNewId])")}}iOS - Objective-C1014

Amazon Cognito

開発者ガイドJavaScript
認証されていないユーザーとしての開始
通常、ユーザーは認証されていないロールから開始します。このロールでは、Logins プロパティを使用しないで設定オブジェクトの認証情報プロパティを設定します。この場合、デフォルト設定は次のようになります。

// set the default config object
var creds = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030'});
AWS.config.credentials = creds;

認証されたユーザーへの切り替え認証されていないユーザーが IdP にログインしたときに、トークンがあれば、カスタム関数を呼び出して認証情報オブジェクトを更新し Logins トークンを追加することで、認証されていないユー
ザーを認証されたユーザーに切り替えることができます。

// Called when an identity provider has a token for a logged in userfunction userLoggedIn(providerName, token) {creds.params.Logins = creds.params.Logins || {};creds.params.Logins[providerName] = token;// Expire credentials to refresh them on the next request
creds.expired = true;}

また、CognitoIdentityCredentials オブジェクトを作成することもできます。作成する場合
は、既存のサービスオブジェクトの認証情報プロパティをリセットして、更新された認証情報の設定
内容を反映する必要があります。「グローバル設定オブジェクトの使用」を参照してください。
CognitoIdentityCredentials オブジェクトの詳細については、AWS SDK for JavaScript API
リファレンスの「AWS.CognitoIdentityCredentials」を参照してください。

JavaScript1015

Amazon Cognito

開発者ガイドUnity
ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユー
ザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。
プロファイルの結合の通知を受け取るには、IdentityChangedEvent にサブスクライブできます。
credentialsProvider.IdentityChangedEvent += delegate(object sender,
CognitoAWSCredentials.IdentityChangedArgs e){// handle the change
Debug.log("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId);};

Xamarinユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユー
ザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古い ID の一意の識別子を新しい ID に継承して、プロファイルデータが自動的に結合されるようにします。
credentialsProvider.IdentityChangedEvent += delegate(object sender,
CognitoAWSCredentials.IdentityChangedArgs e){// handle the change
Console.WriteLine("Identity changed from " + e.OldIdentityId + " to " +e.NewIdentityId);
};

Unity

1016

Amazon Cognito

開発者ガイドAmazon Cognito Sync
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

Amazon Cognito Sync は、アプリケーションに関連するユーザーデータをデバイス間で同期を可能にする AWS サービス およびクライアントライブラリです。Amazon Cognito Sync は、独自のバックエンドを使用せずに、モバイルデバイスとウェブ間でユーザープロファイルデータを同期できます。クライアントライブラリはローカルにデータをキャッシュするため、アプリはデバイスの接続状
態にかかわらず、データを読み書きすることができます。デバイスがオンラインになると、データを同期できます。プッシュ同期を設定すると、更新が利用できることが他のデバイスにすぐに通知されます。
Amazon Cognito ID を使用できるリージョンの詳細については、「AWS リージョン別のサービス」
を参照してください。
Amazon Cognito Sync の詳細については、以下のトピックを参照してください。
トピック• Amazon Cognito Sync の使用開始方法• データの同期• コールバックの処理• プッシュ同期• Amazon Cognito ストリーム• Amazon Cognito イベント

1017

Amazon Cognito

開発者ガイドAmazon Cognito Sync の使用開始方法
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

AWS のサービスである Amazon Cognito Sync は、アプリケーション関連のユーザーデータのデバイ
ス間での同期を可能にするクライアントライブラリです。これは、モバイルデバイスとウェブの全体
でユーザープロファイルデータを同期させるために使用できます。クライアントライブラリはローカ
ルにデータをキャッシュするため、アプリはデバイスの接続状態にかかわらず、データを読み書きすることができます。デバイスがオンラインのときは、データを同期し、プッシュ同期を設定すると、更新が利用できることが他のデバイスにすぐに通知されます。

Amazon Cognito で ID プールをセットアップする
Amazon Cognito Sync では、ユーザー ID を提供するための Amazon Cognito ID プールが必要です。
最初にアイデンティティプールをセットアップしてから Amazon Cognito Sync を使用する必要があります。ID プールを作成し、SDKをインストールするには、Amazon Cognito ID プールの開始方法
を参照してください。

データを保存し、同期する
ID プールを設定して SDK をインストールしたら、デバイス間でデータを保存して同期を開始できます。詳細については、「データの同期」を参照してください。

データの同期
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
Amazon Cognito Sync の使用開始方法

1018

Amazon Cognito

開発者ガイドこのサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

Amazon Cognito では、キーバリューペアが含まれるデータセットにユーザーデータを保存することができます。Amazon Cognito は、このデータを ID プールの ID と関連付け、アプリがログインやデバイス全体でアクセスできるようにします。このデータを Amazon Cognito サービスとエンドユー
ザーのデバイス間で同期するには、同期メソッドを呼び出します。ｑ 各データセットは、最大 1 MBのサイズにすることができます。ID には、最大 20 個のデータセットを関連付けることができます。
Amazon Cognito Sync クライアントは、ID データ用のローカルキャッシュを作成します。アプリ
は、キーを読み取るか書き込むときに、このローカルキャッシュとやり取りします。このやり取りにより、オフラインの状態でも、デバイス上で行われたすべての変更がすぐに利用できるようになることが保証されます。同期メソッドが呼び出された場合、サービスからの変更はデバイスにプルされ、ローカルの変更はサービスにプッシュされます。この時点で、他のデバイスが変更を利用して同期できるようになります。

Amazon Cognito Sync クライアントの初期化
Amazon Cognito Sync クライアントを初期化するには、まず認証情報プロバイダーを作成する必要があります。認証情報プロバイダーは、アプリケーションによる AWS リソースへのアクセスを可能にするために、一時的な AWS 認証情報を取得します。また、必要なヘッダーファイルをインポートする必要があります。以下のステップを使用して、Amazon Cognito Sync クライアントを初期化します。

Android
1. 「認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。
2. Amazon Cognito パッケージを以下のようにインポートします: importcom.amazonaws.mobileconnectors.cognito.*;3. Amazon Cognito Sync を初期化 以下のように、Android アプリのコンテキスト、ID プールの
ID、AWS リージョン、および初期化された Amazon Cognito の認証情報プロバイダーを渡します。
CognitoSyncManager client = new CognitoSyncManager(
getApplicationContext(),
Amazon Cognito Sync クライアントの初期化

1019

Amazon Cognito

開発者ガイドRegions.YOUR_REGION,
credentialsProvider);iOS - Objective-C
1.

「認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。

2.

以下のように、AWSCore および Cognito をインポートし、AWSCognito を初期化します。
#import <AWSiOSSDKv2/AWSCore.h>#import <AWSCognitoSync/Cognito.h>
AWSCognito *syncClient = [AWSCognito defaultCognito];3.

CocoaPods を使用している場合は、<AWSiOSSDKv2/AWSCore.h> を AWSCore.h と置き換えてください。Amazon Cognito のインポートにも同じ構文に従います。

iOS - Swift1.

「認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。

2.

以下のように AWSCognito をインポートし、初期化します。
import AWSCognito
let syncClient = AWSCognito.default()!

JavaScript
1. Amazon Cognito Sync Manager for JavaScript をダウンロードします。
2. プロジェクトに Sync Manager ライブラリを含めます。
3. 「認証情報の取得」の指示に従って、認証情報プロバイダーを作成します。
4. Sync Manager を以下のように初期化します。
var syncManager = new AWS.CognitoSyncManager();

Amazon Cognito Sync クライアントの初期化

1020

Amazon Cognito

開発者ガイドUnity
1. 「認証情報の取得」の指示に従って、CognitoAWSCredentials のインスタンスを作成します。
2. CognitoSyncManager のインスタンスを作成します。以下のように、CognitoAwsCredentials オブジェクトと AmazonCognitoSyncConfig を渡し、少なくともリージョン・セットを含めます。
AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint =REGION };CognitoSyncManager syncManager = new CognitoSyncManager(credentials, clientConfig);

Xamarin
1. 「認証情報の取得」の指示に従って、CognitoAWSCredentials のインスタンスを作成します。
2. CognitoSyncManager のインスタンスを作成します。以下のように、CognitoAwsCredentials オブジェクトと AmazonCognitoSyncConfig を渡し、少なくともリージョン・セットを含めます。
AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint =REGION };CognitoSyncManager syncManager = new CognitoSyncManager(credentials, clientConfig);

データセットについて
Amazon Cognito は、ユーザーのプロファイルデータをデータセットに編成します。各データセット
はキーバリューペアの形式で、最大 1 MB のデータを含むことができます。データセットは、同期することができる最も細かいエンティティです。データセットで実行される読み取りと書き込みのオ
ペレーションは、同期メソッドが呼び出されるまでしか、ローカルストアに影響しません。Amazon
Cognito は一意の文字列によってデータセットを識別します。以下のように新しいデータセットを作成するか、既存のデータセットを開くことができます。

データセットについて

1021

Amazon Cognito

開発者ガイドAndroid
Dataset dataset = client.openOrCreateDataset("datasetname");

データセットを削除するには、以下のように、最初にそれをローカルストレージから削除するためのメソッドを呼び出し、次に synchronize メソッドを呼び出して Amazon Cognito からそのデータセットを削除します。
dataset.delete();dataset.synchronize(syncCallback);

iOS - Objective-C
AWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"myDataSet"];データセットを削除するには、以下のように、最初にそれをローカルストレージから削除するためのメソッドを呼び出し、次に synchronize メソッドを呼び出して Amazon Cognito からそのデータセットを削除します。
[dataset clear];[dataset synchronize];

iOS - Swiftlet dataset = syncClient.openOrCreateDataset("myDataSet")!

データセットを削除するには、最初にそれをローカルストレージから削除するためのメソッドを呼び出し、次に synchronize メソッドを呼び出して Amazon Cognito からそのデータセットを削除します。
dataset.clear()dataset.synchronize()

JavaScript
syncManager.openOrCreateDataset('myDatasetName', function(err, dataset) {// ...
データセットについて

1022

Amazon Cognito

開発者ガイド});Unity
string myValue = dataset.Get("myKey");
dataset.Put("myKey", "newValue");

データセットからキーを削除するには、以下のように Remove を設定します。
dataset.Remove("myKey");

Xamarin
Dataset dataset = syncManager.OpenOrCreateDataset("myDatasetName");

データセットを削除するには、以下のように、最初にそれをローカルストレージから削除するためのメソッドを呼び出し、次に synchronize メソッドを呼び出して Amazon Cognito からそのデータセットを削除します。
dataset.Delete();dataset.SynchronizeAsync();

データセットのデータの読み取りと書き込み
Amazon Cognito データセットはディクショナリとして機能し、値はキーでアクセスできます。デー
タセットのキーと値は、データセットがディクショナリであるかのように読み取り、追加、または変更できます。
データセットに書き込む値は、同期メソッドを呼び出すまで、データのローカルにキャッシュされたコピーのみに影響することに注意してください。

Android
String value = dataset.get("myKey");
dataset.put("myKey", "my value");

iOS - Objective-C[dataset setString:@"my value" forKey:@"myKey"];
データセットのデータの読み取りと書き込み

1023

Amazon Cognito

開発者ガイドNSString *value = [dataset stringForKey:@"myKey"];

iOS - Swiftdataset.setString("my value", forKey:"myKey")let value = dataset.stringForKey("myKey")JavaScript
dataset.get('myKey', function(err, value) {console.log('myRecord: ' + value);});dataset.put('newKey', 'newValue', function(err, record) {console.log(record);});dataset.remove('oldKey', function(err, record) {console.log(success);
});

Unity
string myValue = dataset.Get("myKey");
dataset.Put("myKey", "newValue");

Xamarin//obtain a value
string myValue = dataset.Get("myKey");// Create a record in a dataset and synchronize with the server
dataset.OnSyncSuccess += SyncSuccessCallback;dataset.Put("myKey", "myValue");
dataset.SynchronizeAsync();void SyncSuccessCallback(object sender, SyncSuccessEventArgs e) {// Your handler code here}

データセットのデータの読み取りと書き込み

1024

Amazon Cognito

開発者ガイドAndroid
以下のように、remove メソッドを使用して、データセットからキーを削除できます。
dataset.remove("myKey");

iOS - Objective-C
データセットからキーを削除するには、以下のように removeObjectForKey を設定します。
[dataset removeObjectForKey:@"myKey"];

iOS - Swift
データセットからキーを削除するには、以下のように removeObjectForKey を設定します。
dataset.removeObjectForKey("myKey")

Unity
データセットからキーを削除するには、以下のように Remove を設定します。
dataset.Remove("myKey");

Xamarin
Remove を使用して、データセットからキーを削除できます。
dataset.Remove("myKey");

同期ストアでのローカルデータの同期
Androidsynchronize メソッドは、ローカルキャッシュデータと Amazon Cognito Sync ストアに格納されたデータを比較します。リモート変更は Amazon Cognito Sync ストアからプルされ、競合が発生した場合は競合解決が呼び出されます。そして、デバイス上の更新された値がサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。
同期ストアでのローカルデータの同期1025

Amazon Cognito

開発者ガイドdataset.synchronize(syncCallback);

synchronize メソッドは、以下に説明する SyncCallback インターフェイスの実装を受け取ります。
synchronizeOnConnectivity() メソッドは、接続が利用可能な場合に同期を試みます。接続が直ちに利用可能な場合、synchronizeOnConnectivity() は synchronize() のように動作します。それ以外の場合、接続の変更をモニタリングし、接続が利用可能になると同期を実行します。synchronizeOnConnectivity() が複数回呼び出された場合、最後の同期リクエストのみが保持され、最後のコールバックのみが実行されます。データセットまたはコールバックがガーベー
ジコレクションの対象になった場合、このメソッドは同期を実行せず、コールバックは実行されません。
データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」
を参照してください。

iOS - Objective-C
synchronize メソッドは、ローカルキャッシュデータと Amazon Cognito Sync ストアに格納されたデータを比較します。リモート変更は Amazon Cognito Sync ストアからプルされ、競合が発生した場合は競合解決が呼び出されます。そして、デバイス上の更新された値がサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。
synchronize メソッドは非同期で、応答を処理するために AWSTask オブジェクトを返します。
[[dataset synchronize] continueWithBlock:^id(AWSTask *task) {if (task.isCancelled) {// Task cancelled.
} else if (task.error) {// Error while executing task.
} else {// Task succeeded. The data was saved in the sync store.
}
return nil;}];synchronizeOnConnectivity メソッドは、デバイスが接続されているときに同期を試みます。
最初に、synchronizeOnConnectivity は接続を確認し、デバイスがオンラインである場合、すぐに synchronize を呼び出して、試行に関連付けられた AWSTask オブジェクトを返します。
同期ストアでのローカルデータの同期1026

Amazon Cognito

開発者ガイドデバイスがオフラインの場合、synchronizeOnConnectivity は、1) 次回にデバイスがオンラインになったときに同期をスケジュールし、2) 結果が nil の AWSTask を返します。スケジュールされた同期が有効なのは、データセットオブジェクトのライフサイクルの間のみです。接続が回復する前にアプリが終了された場合、データは同期されません。予定された同期中にイベントが発生した場合に通知を受けるようにする場合は、AWSCognito で見つかった通知のオブザーバーを追加する必要があります。
データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」
を参照してください。

iOS - Swiftsynchronize メソッドは、ローカルキャッシュデータと Amazon Cognito Sync ストアに格納されたデータを比較します。リモート変更は Amazon Cognito Sync ストアからプルされ、競合が発生した場合は競合解決が呼び出されます。そして、デバイス上の更新された値がサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。
synchronize メソッドは非同期で、応答を処理するために AWSTask オブジェクトを返します。
dataset.synchronize().continueWith(block: { (task) -> AnyObject? in
if task.isCancelled {// Task cancelled.
} else if task.error != nil {// Error while executing task
} else {// Task succeeded. The data was saved in the sync store.
}
return task})

synchronizeOnConnectivity メソッドは、デバイスが接続されているときに同期を試みます。
最初に、synchronizeOnConnectivity は接続を確認し、デバイスがオンラインである場合、すぐに synchronize を呼び出して、試行に関連付けられた AWSTask オブジェクトを返します。
デバイスがオフラインの場合、synchronizeOnConnectivity は、1) 次回にデバイスがオンラインになったときに同期をスケジュールし、2) 結果が nil の AWSTask オブジェクトを返します。スケ
ジュールされた同期が有効なのは、データセットオブジェクトのライフサイクルの間のみです。接続が回復する前にアプリが終了された場合、データは同期されません。予定された同期中にイベントが同期ストアでのローカルデータの同期

1027

Amazon Cognito

開発者ガイド発生した場合に通知を受けるようにする場合は、AWSCognito で見つかった通知のオブザーバーを追加する必要があります。
データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」
を参照してください。

JavaScript
synchronize メソッドは、ローカルキャッシュデータと Amazon Cognito Sync ストアに格納されたデータを比較します。リモート変更は Amazon Cognito Sync ストアからプルされ、競合が発生した場合は競合解決が呼び出されます。そして、デバイス上の更新された値がサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。
dataset.synchronize();

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」
を参照してください。

Unity
同期メソッドは、ローカルキャッシュデータと Amazon Cognito Sync ストアに格納されたデータを比較します。リモート変更は Amazon Cognito Sync ストアからプルされ、競合が発生した場合は競合解決が呼び出されます。そして、デバイス上の更新された値がサービスにプッシュされます。デー
タセットを同期するには、その synchronize メソッドを呼び出します。
dataset.Synchronize();

同期は非同期で実行され、データセット内で指定できる複数のコールバックの 1 つを呼び出します。
データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」
を参照してください。

Xamarinsynchronize メソッドは、ローカルキャッシュデータと Amazon Cognito Sync ストアに格納されたデータを比較します。リモート変更は Amazon Cognito Sync ストアからプルされ、競合が発生した場合は競合解決が呼び出されます。そして、デバイス上の更新された値がサービスにプッシュされます。データセットを同期するには、その synchronize メソッドを呼び出します。
同期ストアでのローカルデータの同期

1028

Amazon Cognito

開発者ガイドdataset.SynchronizeAsync();

データセットの同期と、さまざまなコールバックに関する詳細については、「コールバックの処理」
を参照してください。

コールバックの処理
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

このセクションでは、コールバックを処理する方法について説明します。

Android
SyncCallback インターフェイス
SyncCallback インターフェイスを実装することで、データセットの同期に関するアプリの通知を受け取ることができます。これによりアプリは、ローカルデータの削除、認証されていないプロファ
イルや認証されたプロファイルの結合、同期の競合の解決に関するアクティブな決定ができます。インターフェイスで必要となる次のメソッドを実装する必要があります。
• onSuccess()• onFailure()• onConflict()• onDatasetDeleted()• onDatasetsMerged()
すべてのコールバックを指定しない場合は、すべてのコールバックに対して空のデフォルト実装を提供する、DefaultSyncCallback クラスを使用することもできます。
コールバックの処理

1029

Amazon Cognito

開発者ガイドonSuccessonSuccess() コールバックは、同期ストアから正常にデータセットをダウンロードしたときにトリガーされます。
@Override
public void onSuccess(Dataset dataset, List<Record> newRecords) {}onFailure
onFailure() は、同期中に例外が発生した場合に呼び出されます。
@Override
public void onFailure(DataStorageException dse) {}onConflict
ローカルストアと同期ストアで同じキーが変更された場合に、競合が発生する可能性があります。onConflict() メソッドは、競合の解決を処理します。このメソッドを実装しない場
合、Amazon Cognito Sync クライアントはデフォルトで最新の変更を使用します。
@Override
public boolean onConflict(Dataset dataset, final List<SyncConflict> conflicts) {List<Record> resolvedRecords = new ArrayList<Record>();for (SyncConflict conflict : conflicts) {/* resolved by taking remote records */resolvedRecords.add(conflict.resolveWithRemoteRecord());/* alternately take the local records */// resolvedRecords.add(conflict.resolveWithLocalRecord());/* or customer logic, say concatenate strings */// String newValue = conflict.getRemoteRecord().getValue()//+ conflict.getLocalRecord().getValue();// resolvedRecords.add(conflict.resolveWithValue(newValue);}dataset.resolve(resolvedRecords);// return true so that synchronize() is retried after conflicts are resolved
return true;
Android1030

Amazon Cognito

開発者ガイド}onDatasetDeleted
データセットが削除されると、Amazon Cognito クライアントは SyncCallback インターフェイスを使用して、データセットのローカルキャッシュコピーも削除されるべきかどうかを確認します。onDatasetDeleted() メソッドを実装して、クライアント SDK にローカルデータの処理方法を指定します。
@Override
public boolean onDatasetDeleted(Dataset dataset, String datasetName) {// return true to delete the local copy of the dataset
return true;}

onDatasetMerged
以前に接続されていない 2 つの ID がリンクされ、すべてのデータセットが結合されます。アプリ
ケーションは、onDatasetsMerged() メソッドを通じて結合について通知されます。
@Override
public boolean onDatasetsMerged(Dataset dataset, List<String> datasetNames) {// return false to handle Dataset merge outside the synchronization callback
return false;}

iOS - Objective-C
同期の通知
Amazon Cognito クライアントは、同期コール中に多数の NSNotification イベントを生成します。標準の NSNotificationCenter を通じて、これらの通知をモニタリングするよう登録できます。
[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(myNotificationHandler:)
name:NOTIFICATION_TYPE
object:nil];

iOS - Objective-C

1031

Amazon Cognito

開発者ガイドAmazon Cognito は、以下にリストされている 5 つの通知タイプをサポートします。
AWSCognitoDidStartSynchronizeNotification
同期操作の開始中に呼び出されます。userInfo は、同期されているデータセットの名前である
キーデータセットを含みます。
AWSCognitoDidEndSynchronizeNotification
同期操作が完了した (正常またはその反対) ときに呼び出されます。userInfo は、同期されている
データセットの名前であるキーデータセットを含みます。
AWSCognitoDidFailToSynchronizeNotification
同期操作が失敗すると呼び出されます。userInfo は、同期されているデータセットの名前である
キーデータセットと、失敗の原因となったエラーを含むキーエラーを含みます。
AWSCognitoDidChangeRemoteValueNotification
ローカル変更が Amazon Cognito に正常にプッシュされたときに呼び出されます。userInfo は、同期されているデータセットの名前であるキーデータセットと、プッシュされたレコードキーのNSArray を含むキーを含みます。
AWSCognitoDidChangeLocalValueFromRemoteNotification
ローカルの値が同期操作が原因で変更されたときに呼び出されます。userInfo は、同期されているデータセットの名前であるキーデータセットと、変更されたレコードキーの NSArray を含むキーを含みます。
競合解決ハンドラ
同期操作中に、ローカルストアと同期ストアで同じキーが変更された場合、競合が発生する可能性があります。競合解決ハンドラを設定していない場合、Amazon Cognito はデフォルトで最新の更新を選択します。
AWSCognitoRecordConflictHandler を実装して割り当てることで、デフォルトの競合解決は変更できます。AWSCognitoConflict 入力パラメータには、ローカルにキャッシュされたデータと、同期ストアの競合するレコードの両方の AWSCognitoRecord オブジェクトが含まれています。AWSCognitoConflict を使用すると、ローカルレコード [conflict resolveWithLocalRecord]、
リモートレコード [conflict resolveWithRemoteRecord]、またはまったく新しい値 [conflict
resolveWithValue:value] との競合を解決できます。このメソッドから nil が返されると、同期は続行できなくなり、次回に同期処理が開始されると、競合が再び発生します。
iOS - Objective-C

1032

Amazon Cognito

開発者ガイドクライアントレベルで競合解決ハンドラを設定できます。
client.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName,AWSCognitoConflict *conflict) {// always choose local changes
return [conflict resolveWithLocalRecord];};

または、データセットレベルで設定できます。
dataset.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName,AWSCognitoConflict *conflict) {// override and always choose remote changes
return [conflict resolveWithRemoteRecord];};

データセットが削除されたハンドラ
データセットが削除されると、Amazon Cognito クライアントは
AWSCognitoDatasetDeletedHandler を使用して、データセットのローカルキャッシュコピーも削除されるべきかどうかを確認します。AWSCognitoDatasetDeletedHandler が実装されていな
い場合、ローカルデータは自動的に消去されます。消去する前にローカルデータのコピーを維持する
か、ローカルデータを維持する場合は、AWSCognitoDatasetDeletedHandler を実装します。
クライアントレベルでデータセットが削除されたハンドラを設定することができます。
client.datasetDeletedHandler = ^BOOL (NSString *datasetName) {// make a backup of the data if you choose...
// delete the local data (default behavior)
return YES;};

または、データセットレベルで設定できます。
dataset.datasetDeletedHandler = ^BOOL (NSString *datasetName) {// override default and keep the local data
return NO;};

データセットの結合ハンドラ
iOS - Objective-C1033

Amazon Cognito

開発者ガイド以前に接続されていない 2 つの ID がリンクされ、すべてのデータセットが結合されます。アプリ
ケーションは、DatasetMergeHandler メソッドを通じて結合について通知されます。ハンドラ
は、ルートデータセットの名前と、ルートデータセットの結合としてマーキングされているデータ
セット名の配列を受け取ります。
DatasetMergeHandler が実装されていない場合、これらのデータセットは無視されますが、ID の最大 20 個の合計データセットで引き続き領域を占有します。
クライアントレベルでデータセット結合ハンドラをセットアップすることもできます。
client.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) {// Blindly delete the datasetsfor (NSString *name in datasets) {AWSCognitoDataset *merged = [[AWSCognito defaultCognito]
openOrCreateDataset:name];[merged clear];[merged synchronize];}};

または、データセットレベルで設定できます。
dataset.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) {// Blindly delete the datasetsfor (NSString *name in datasets) {AWSCognitoDataset *merged = [[AWSCognito defaultCognito]
openOrCreateDataset:name];// do something with the data if it differs from existing dataset...
// now delete it[merged clear];[merged synchronize];}};

iOS - Swift
同期の通知
Amazon Cognito クライアントは、同期コール中に多数の NSNotification イベントを生成します。標準の NSNotificationCenter を通じて、これらの通知をモニタリングするよう登録できます。
iOS - Swift1034

Amazon Cognito

開発者ガイドNSNotificationCenter.defaultCenter().addObserver(observer: self,
selector: "myNotificationHandler",
name:NOTIFICATION_TYPE,
object:nil)

Amazon Cognito は、以下にリストされている 5 つの通知タイプをサポートします。
AWSCognitoDidStartSynchronizeNotification
同期操作の開始中に呼び出されます。userInfo は、同期されているデータセットの名前である
キーデータセットを含みます。
AWSCognitoDidEndSynchronizeNotification
同期操作が完了した (正常またはその反対) ときに呼び出されます。userInfo は、同期されている
データセットの名前であるキーデータセットを含みます。
AWSCognitoDidFailToSynchronizeNotification
同期操作が失敗すると呼び出されます。userInfo は、同期されているデータセットの名前である
キーデータセットと、失敗の原因となったエラーを含むキーエラーを含みます。
AWSCognitoDidChangeRemoteValueNotification
ローカル変更が Amazon Cognito に正常にプッシュされたときに呼び出されます。userInfo は、同期されているデータセットの名前であるキーデータセットと、プッシュされたレコードキーのNSArray を含むキーを含みます。
AWSCognitoDidChangeLocalValueFromRemoteNotification
ローカルの値が同期操作が原因で変更されたときに呼び出されます。userInfo は、同期されているデータセットの名前であるキーデータセットと、変更されたレコードキーの NSArray を含むキーを含みます。
競合解決ハンドラ
同期操作中に、ローカルストアと同期ストアで同じキーが変更された場合、競合が発生する可能性があります。競合解決ハンドラを設定していない場合、Amazon Cognito はデフォルトで最新の更新を選択します。
AWSCognitoRecordConflictHandler を実装して割り当てることで、デフォルトの競合解決は変更できます。AWSCognitoConflict 入力パラメータには、ローカルにキャッシュされたデータ
iOS - Swift1035

Amazon Cognito

開発者ガイドと、同期ストアの競合するレコードの両方の AWSCognitoRecord オブジェクトが含まれています。AWSCognitoConflict を使用すると、ローカルレコード [conflict resolveWithLocalRecord]、
リモートレコード [conflict resolveWithRemoteRecord]、またはまったく新しい値 [conflict
resolveWithValue:value] との競合を解決できます。このメソッドから nil が返されると、同期は続行できなくなり、次回に同期処理が開始されると、競合が再び発生します。
クライアントレベルで競合解決ハンドラを設定できます。
client.conflictHandler = {(datasetName: String?, conflict: AWSCognitoConflict?) ->AWSCognitoResolvedConflict? inreturn conflict.resolveWithLocalRecord()}

または、データセットレベルで設定できます。
dataset.conflictHandler = {(datasetName: String?, conflict: AWSCognitoConflict?) ->AWSCognitoResolvedConflict? inreturn conflict.resolveWithLocalRecord()}

データセットが削除されたハンドラ
データセットが削除されると、Amazon Cognito クライアントは
AWSCognitoDatasetDeletedHandler を使用して、データセットのローカルキャッシュコピーも削除されるべきかどうかを確認します。AWSCognitoDatasetDeletedHandler が実装されていな
い場合、ローカルデータは自動的に消去されます。消去する前にローカルデータのコピーを維持する
か、ローカルデータを維持する場合は、AWSCognitoDatasetDeletedHandler を実装します。
クライアントレベルでデータセットが削除されたハンドラを設定することができます。
client.datasetDeletedHandler = {(datasetName: String!) -> Bool in// make a backup of the data if you choose...
// delete the local data (default behaviour)
return true}

または、データセットレベルで設定できます。
iOS - Swift1036

Amazon Cognito

開発者ガイドdataset.datasetDeletedHandler = {(datasetName: String!) -> Bool in// make a backup of the data if you choose...
// delete the local data (default behaviour)
return true}

データセットの結合ハンドラ
以前に接続されていない 2 つの ID がリンクされ、すべてのデータセットが結合されます。アプリ
ケーションは、DatasetMergeHandler メソッドを通じて結合について通知されます。ハンドラ
は、ルートデータセットの名前と、ルートデータセットの結合としてマーキングされているデータ
セット名の配列を受け取ります。
DatasetMergeHandler が実装されていない場合、これらのデータセットは無視されますが、ID の最大 20 個の合計データセットで引き続き領域を占有します。
クライアントレベルでデータセット結合ハンドラをセットアップすることもできます。
client.datasetMergedHandler = {(datasetName: String!, datasets: [AnyObject]!) -> Void infor nameObject in datasets {if let name = nameObject as? String {let merged = AWSCognito.defaultCognito().openOrCreateDataset(name)merged.clear()merged.synchronize()}}}

または、データセットレベルで設定できます。
dataset.datasetMergedHandler = {(datasetName: String!, datasets: [AnyObject]!) -> Void infor nameObject in datasets {if let name = nameObject as? String {let merged = AWSCognito.defaultCognito().openOrCreateDataset(name)// do something with the data if it differs from existing dataset...
// now delete it
merged.clear()iOS - Swift1037

Amazon Cognito

開発者ガイドmerged.synchronize()}}}

JavaScript
同期のコールバック
データセットで synchronize() を実行するときに、オプションで次の各状態を処理するコールバックを指定できます。
dataset.synchronize({
onSuccess: function(dataset, newRecords) {//...
},onFailure: function(err) {//...
},onConflict: function(dataset, conflicts, callback) {//...
},onDatasetDeleted: function(dataset, datasetName, callback) {//...
},onDatasetMerged: function(dataset, datasetNames, callback) {
//...
}
});

onSuccess()
onSuccess() コールバックは、同期ストアから正常にデータセットを更新したときにトリガーされます。コールバックを定義しない場合、同期はユーザーの操作なしに成功します。
onSuccess: function(dataset, newRecords) {console.log('Successfully synchronized ' + newRecords.length + ' new records.');JavaScript1038

Amazon Cognito

開発者ガイド}onFailure()
onFailure()は、同期中に例外が発生した場合に呼び出されます。コールバックを定義しない場合、同期はユーザーの操作なしに失敗します。
onFailure: function(err) {console.log('Synchronization failed.');console.log(err);}

onConflict()
ローカルストアと同期ストアで同じキーが変更された場合に、競合が発生する可能性があります。onConflict() メソッドは、競合の解決を処理します。このメソッドを実行しない場合、競合があると同期は破棄されます。
onConflict: function(dataset, conflicts, callback) {var resolved = [];for (var i=0; i<conflicts.length; i++) {// Take remote version.
resolved.push(conflicts[i].resolveWithRemoteRecord());// Or... take local version.
// resolved.push(conflicts[i].resolveWithLocalRecord());// Or... use custom logic.
// var newValue = conflicts[i].getRemoteRecord().getValue() +conflicts[i].getLocalRecord().getValue();// resolved.push(conflicts[i].resovleWithValue(newValue);}dataset.resolve(resolved, function() {return callback(true);});// Or... callback false to stop the synchronization process.
// return callback(false);
JavaScript1039

Amazon Cognito

開発者ガイド}onDatasetDeleted()
データセットが削除されると、Amazon Cognito クライアントは onDatasetDeleted() コール
バックを使用して、データセットのローカルキャッシュコピーも削除されるべきかどうかを確認します。デフォルトでは、データセットは削除されません。
onDatasetDeleted: function(dataset, datasetName, callback) {// Return true to delete the local copy of the dataset.
// Return false to handle deleted datasets outside the synchronization callback.
return callback(true);}

onDatasetMerged()
以前に接続されていない 2 つの ID がリンクされ、すべてのデータセットが結合されます。アプリ
ケーションは、onDatasetsMerged() コールバックを通じて結合について通知されます。
onDatasetMerged: function(dataset, datasetNames, callback) {// Return true to continue the synchronization process.
// Return false to handle dataset merges outside the synchronization callback.
return callback(false);}

Unity
データセットを開くか作成した後は、別のコールバックを設定できます。これは、Synchronize メ
ソッドを使用したときにトリガーされます。この方法により、コールバックを登録することができます。
dataset.OnSyncSuccess += this.HandleSyncSuccess;dataset.OnSyncFailure += this.HandleSyncFailure;dataset.OnSyncConflict = this.HandleSyncConflict;
Unity

1040

Amazon Cognito

開発者ガイドdataset.OnDatasetMerged = this.HandleDatasetMerged;
dataset.OnDatasetDeleted = this.HandleDatasetDeleted;

SyncSuccess と SyncFailure は、+= を = の代わりに使用し、複数のコールバックをサブスクラ
イブできるようにします。
OnSyncSuccess
OnSyncSuccess コールバックは、クラウドから正常にデータセットを更新したときにトリガーされます。コールバックを定義しない場合、同期はユーザーの操作なしに成功します。
private void HandleSyncSuccess(object sender, SyncSuccessEvent e){// Continue with your game flow, display the loaded data, etc.
}

OnSyncFailure
OnSyncFailureは、同期中に例外が発生した場合に呼び出されます。コールバックを定義しない場合、同期はユーザーの操作なしに失敗します。
private void HandleSyncFailure(object sender, SyncFailureEvent e){
Dataset dataset = sender as Dataset;if (dataset.Metadata != null) {Debug.Log("Sync failed for dataset : " + dataset.Metadata.DatasetName);} else {Debug.Log("Sync failed");}// Handle the error
Debug.LogException(e.Exception);}

OnSyncConflict
ローカルストアと同期ストアで同じキーが変更された場合に、競合が発生する可能性があります。OnSyncConflict コールバックは競合の解決を処理します。このメソッドを実行しない場合、競合があると同期は破棄されます。
private bool HandleSyncConflict(Dataset dataset, List < SyncConflict > conflicts){
if (dataset.Metadata != null) {
Unity

1041

Amazon Cognito

開発者ガイドDebug.LogWarning("Sync conflict " + dataset.Metadata.DatasetName);} else {Debug.LogWarning("Sync conflict");}
List < Amazon.CognitoSync.SyncManager.Record > resolvedRecords = new List <Amazon.CognitoSync.SyncManager.Record > ();foreach(SyncConflict conflictRecord in conflicts) {// SyncManager provides the following default conflict resolution methods://
ResolveWithRemoteRecord - overwrites the local with remote records//
ResolveWithLocalRecord - overwrites the remote with local records//
ResolveWithValue - to implement your own logic
resolvedRecords.Add(conflictRecord.ResolveWithRemoteRecord());}// resolves the conflicts in local storage
dataset.Resolve(resolvedRecords);// on return true the synchronize operation continues where it left,//
returning false cancels the synchronize operation
return true;}

OnDatasetDeleted
データセットが削除されると、Amazon Cognito クライアントは OnDatasetDeleted コールバックを使用して、データセットのローカルキャッシュコピーも削除されるべきかどうかを確認します。デ
フォルトでは、データセットは削除されません。
private bool HandleDatasetDeleted(Dataset dataset){
Debug.Log(dataset.Metadata.DatasetName + " Dataset has been deleted");// Do clean up if necessary// returning true informs the corresponding dataset can be purged in the local
storage and return false retains the local dataset
return true;}

OnDatasetMerged
以前に接続されていない 2 つの ID がリンクされ、すべてのデータセットが結合されます。アプリ
ケーションは、OnDatasetsMerged コールバックを通じて結合について通知されます。
public bool HandleDatasetMerged(Dataset localDataset, List<string> mergedDatasetNames){
foreach (string name in mergedDatasetNames)
Unity

1042

Amazon Cognito

開発者ガイド{Dataset mergedDataset = syncManager.OpenOrCreateDataset(name);//Lambda function to delete the dataset after fetching it
EventHandler<SyncSuccessEvent> lambda;
lambda = (object sender, SyncSuccessEvent e) => {ICollection<string> existingValues = localDataset.GetAll().Values;
ICollection<string> newValues = mergedDataset.GetAll().Values;//Implement your merge logic here
mergedDataset.Delete(); //Delete the dataset locallymergedDataset.OnSyncSuccess -= lambda; //We don't want this callback to be
fired again
mergedDataset.OnSyncSuccess += (object s2, SyncSuccessEvent e2) => {localDataset.Synchronize(); //Continue the sync operation that wasinterrupted by the merge};
mergedDataset.Synchronize(); //Synchronize it as deleted, failing to do sowill leave us in an inconsistent state};
mergedDataset.OnSyncSuccess += lambda;
mergedDataset.Synchronize(); //Asnchronously fetch the dataset}// returning true allows the Synchronize to continue and false stops it
return false;}

Xamarin
データセットを開くか作成した後は、別のコールバックを設定できます。これは、Synchronize メ
ソッドを使用したときにトリガーされます。この方法により、コールバックを登録することができます。
dataset.OnSyncSuccess += this.HandleSyncSuccess;dataset.OnSyncFailure += this.HandleSyncFailure;dataset.OnSyncConflict = this.HandleSyncConflict;dataset.OnDatasetMerged = this.HandleDatasetMerged;
dataset.OnDatasetDeleted = this.HandleDatasetDeleted;

SyncSuccess と SyncFailure は、+= を = の代わりに使用し、複数のコールバックをサブスクラ
イブできるようにします。
Xamarin1043

Amazon Cognito

開発者ガイドOnSyncSuccess
OnSyncSuccess コールバックは、クラウドから正常にデータセットを更新したときにトリガーされます。コールバックを定義しない場合、同期はユーザーの操作なしに成功します。
private void HandleSyncSuccess(object sender, SyncSuccessEventArgs e){// Continue with your game flow, display the loaded data, etc.
}

OnSyncFailure
OnSyncFailureは、同期中に例外が発生した場合に呼び出されます。コールバックを定義しない場合、同期はユーザーの操作なしに失敗します。
private void HandleSyncFailure(object sender, SyncFailureEventArgs e){
Dataset dataset = sender as Dataset;if (dataset.Metadata != null) {Console.WriteLine("Sync failed for dataset : " + dataset.Metadata.DatasetName);} else {Console.WriteLine("Sync failed");}}OnSyncConflict
ローカルストアと同期ストアで同じキーが変更された場合に、競合が発生する可能性があります。OnSyncConflict コールバックは競合の解決を処理します。このメソッドを実行しない場合、競合があると同期は破棄されます。
private bool HandleSyncConflict(Dataset dataset, List < SyncConflict > conflicts){
if (dataset.Metadata != null) {Console.WriteLine("Sync conflict " + dataset.Metadata.DatasetName);} else {Console.WriteLine("Sync conflict");}
List < Amazon.CognitoSync.SyncManager.Record > resolvedRecords = new List <Amazon.CognitoSync.SyncManager.Record > ();foreach(SyncConflict conflictRecord in conflicts) {Xamarin1044

Amazon Cognito

開発者ガイド// SyncManager provides the following default conflict resolution methods://
ResolveWithRemoteRecord - overwrites the local with remote records//
ResolveWithLocalRecord - overwrites the remote with local records//
ResolveWithValue - to implement your own logic
resolvedRecords.Add(conflictRecord.ResolveWithRemoteRecord());}// resolves the conflicts in local storage
dataset.Resolve(resolvedRecords);// on return true the synchronize operation continues where it left,//
returning false cancels the synchronize operation
return true;}

OnDatasetDeleted
データセットが削除されると、Amazon Cognito クライアントは OnDatasetDeleted コールバックを使用して、データセットのローカルキャッシュコピーも削除されるべきかどうかを確認します。デ
フォルトでは、データセットは削除されません。
private bool HandleDatasetDeleted(Dataset dataset){
Console.WriteLine(dataset.Metadata.DatasetName + " Dataset has been deleted");// Do clean up if necessary// returning true informs the corresponding dataset can be purged in the local
storage and return false retains the local dataset
return true;}

OnDatasetMerged
以前に接続されていない 2 つの ID がリンクされ、すべてのデータセットが結合されます。アプリ
ケーションは、OnDatasetsMerged コールバックを通じて結合について通知されます。
public bool HandleDatasetMerged(Dataset localDataset, List<string> mergedDatasetNames){
foreach (string name in mergedDatasetNames){
Dataset mergedDataset = syncManager.OpenOrCreateDataset(name);//Implement your merge logic here
mergedDataset.OnSyncSuccess += lambda;
Xamarin1045

Amazon Cognito

開発者ガイドmergedDataset.SynchronizeAsync(); //Asnchronously fetch the dataset}// returning true allows the Synchronize to continue and false stops it
return false;}

プッシュ同期
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

Amazon Cognito は自動的にアイデンティティとデバイス間の関係を追跡します。プッシュ同期機能を使用すると、ID データが変更されたときに、特定の ID のすべてのインスタンスに確実に通知されます。プッシュ同期は、特定のアイデンティティの同期ストアデータが変更されるたびに、そのアイ
デンティティに関連付けられているすべてのデバイスが、この変更を伝えるサイレントプッシュ通知を受け取ることを確実にします。
Note
プッシュ同期は JavaScript、Unity、Xamarin ではサポートされません。

プッシュ同期を使用する前に、まずプッシュ同期用にアカウントをセットアップし、Amazon
Cognito コンソールでプッシュ同期を有効にする必要があります。

Amazon Simple Notification Service (Amazon SNS) アプリケーションを作成する
SNS デベロッパーガイドの説明に従って、サポートされているプラットフォーム用の Amazon SNS
アプリを作成し、設定します。
プッシュ同期

1046

Amazon Cognito

開発者ガイドAmazon Cognito コンソールでプッシュ同期を有効にする
プッシュ同期は Amazon Cognito コンソールを使って有効にできます。コンソールのホームページから、次の操作を行います。
1. プッシュ同期を有効にする ID プールの名前をクリックします。アイデンティティプールの[Dashboard] (ダッシュボード) ページが表示されます。
2. [ダッシュボード] ページの右上にある、[ID プールの管理] をクリックします。[フェデレーティッ
ドアイデンティティ] ページが表示されます。
3. 下にスクロールし、同期をプッシュしますをクリックして展開します。
4. [Service role] (サービスロール) ドロップダウンメニューで、SNS 通知を送信するアクセス許可を Cognito に付与する IAM ロールを選択します。[Create role] (ロールの作成) をクリックして、AWS IAM コンソールで ID プールに関連付けられたロールを作成または変更します。
5. プラットフォームアプリケーションを選択し、[Save Changes] (変更の保存) をクリックします。
6. アプリケーションへの SNS アクセスの許可
AWS Identity and Access Management コンソールで、完全な Amazon SNS アクセス権を持つよ
うに IAM ロールを設定するか、完全な Amazon SNS アクセス権を持つ新しいロールを作成します。次のロール信頼ポリシーの例では、Amazon Cognito Sync に IAM ロールを引き受ける制限付
きの機能を付与しています。Amazon Cognito Sync は、条件 aws:SourceArn の ID プールと条件
aws:SourceAccount のアカウントの両方に代わり行う場合にのみ、その役割を担うことができます。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "cognito-sync.amazonaws.com"},"Action": "sts:AssumeRole","Condition": {"StringEquals": {"AWS:SourceAccount": "123456789012"},"ArnLike": {Amazon Cognito コンソールでプッシュ同期を有効にする

1047

Amazon Cognito

開発者ガイド"AWS:SourceArn": "arn:aws:cognito-identity:useast-1:123456789012:identitypool/us-east-1:177a950c-2c08-43f0-9983-28727EXAMPLE"
}
}
}
]
}

IAM ロールの詳細については、「ロール (委任とフェデレーション) 」を参照してください。

アプリケーションでのプッシュ同期の使用: Android
アプリケーションは、Google Play サービスをインポートする必要があります。Android SDK マネージャーから、最新バージョンの Google Play SDK をダウンロードできます。Android のドキュメン
トの「Android Implementation」に従ってアプリを登録し、GCM から登録 ID を受け取ります。登録ID を取得したら、以下のスニペットにあるように、デバイスを Amazon Cognito に登録する必要があります。
String registrationId = "MY_GCM_REGISTRATION_ID";try {client.registerDevice("GCM", registrationId);} catch (RegistrationFailedException rfe) {Log.e(TAG, "Failed to register device for silent sync", rfe);} catch (AmazonClientException ace) {Log.e(TAG, "An unknown error caused registration for silent sync to fail", ace);}

これで、デバイスをサブスクライブして、特定のデータセットから更新を受け取ることができます。
Dataset trackedDataset = client.openOrCreateDataset("myDataset");if (client.isDeviceRegistered()) {try {trackedDataset.subscribe();} catch (SubscribeFailedException sfe) {Log.e(TAG, "Failed to subscribe to datasets", sfe);} catch (AmazonClientException ace) {Log.e(TAG, "An unknown error caused the subscription to fail", ace);}}

アプリケーションでのプッシュ同期の使用: Android

1048

Amazon Cognito

開発者ガイドデータセットからプッシュ通知の受け取りを中止するには、unsubscribe メソッドを呼び出します。CognitoSyncManager オブジェクトのすべてのデータセット (または特定のサブセット) にサ
ブスクライブするには、subscribeAll() を使用します。
if (client.isDeviceRegistered()) {try {client.subscribeAll();} catch (SubscribeFailedException sfe) {Log.e(TAG, "Failed to subscribe to datasets", sfe);} catch (AmazonClientException ace) {Log.e(TAG, "An unknown error caused the subscription to fail", ace);}}

Android BroadcastReceiver オブジェクトの実装で、最新バージョンの変更されたデータセットを確認して、アプリをもう一度同期する必要があるかどうか判断できます。
@Override
public void onReceive(Context context, Intent intent) {PushSyncUpdate update = client.getPushSyncUpdate(intent);// The update has the source (cognito-sync here), identityId of the// user, identityPoolId in question, the non-local sync count of the// data set and the name of the dataset. All are accessible through// relevant getters.
String source = update.getSource();
String identityPoolId = update.getIdentityPoolId();
String identityId = update.getIdentityId();
String datasetName = update.getDatasetName;long syncCount = update.getSyncCount;
Dataset dataset = client.openOrCreateDataset(datasetName);// need to access last sync count. If sync count is less or equal to// last sync count of the dataset, no sync is required.
long lastSyncCount = dataset.getLastSyncCount();
if (lastSyncCount < syncCount) {dataset.synchronize(new SyncCallback() {// ...
アプリケーションでのプッシュ同期の使用: Android

1049

Amazon Cognito

開発者ガイド});}}プッシュ通知のペイロードでは、次のキーを利用できます。
• source: cognito-sync。これは、通知間の差別化要素として機能します。
• identityPoolId: ID プールの ID。これは検証や追加の情報用に使用できますが、レシーバーの観点からは不可欠ではありません。
• identityId: プール内のアイデンティティ ID。
• datasetName: 更新されたデータセットの名前。これは openOrCreateDataset 呼び出しの目的で利用できます。
• syncCount: リモートデータセットの同期カウント。これは、ローカルデータセットが古くなっていないこと、および入力同期が新しいことを確認する方法として使用できます。

アプリケーションでプッシュ同期を使用する: iOS - Objective-C
アプリ用のデバイストークンを取得するには、Apple ドキュメントの「Registering for Remote
Notifications」を参照してください。APN から NSData オブジェクトとしてデバイストークンを受け取ったら、以下のように、Sync クライアントの registerDevice: メソッドを使用して、デバイスを Amazon Cognito に登録する必要があります。
AWSCognito *syncClient = [AWSCognito defaultCognito];[[syncClient registerDevice: devToken] continueWithBlock:^id(AWSTask *task) {if(task.error){
NSLog(@"Unable to registerDevice: %@", task.error);} else {NSLog(@"Successfully registered device with id: %@", task.result);}
return nil;}];

デバッグモードでは、デバイスは APN サンドボックスで登録されます。リリースモードでは、APNで登録されます。特定のデータセットからアップデートを受けるには、subscribe メソッドを使用します。
アプリケーションでプッシュ同期を使用する: iOS - Objective-C

1050

Amazon Cognito

開発者ガイド[[[syncClient openOrCreateDataset:@"MyDataset"] subscribe]
continueWithBlock:^id(AWSTask *task) {if(task.error){
NSLog(@"Unable to subscribe to dataset: %@", task.error);} else {NSLog(@"Successfully subscribed to dataset: %@", task.result);}
return nil;}];

データセットからプッシュ通知の受け取りを中止するには、unsubscribe メソッドを呼び出します。
[[[syncClient openOrCreateDataset:@”MyDataset”] unsubscribe]
continueWithBlock:^id(AWSTask *task) {if(task.error){
NSLog(@"Unable to unsubscribe from dataset: %@", task.error);} else {NSLog(@"Successfully unsubscribed from dataset: %@", task.result);}
return nil;}];

AWSCognito オブジェクトのすべてのデータセットをサブスクライブするには、subscribeAll を
呼び出します。
[[syncClient subscribeAll] continueWithBlock:^id(AWSTask *task) {if(task.error){
NSLog(@"Unable to subscribe to all datasets: %@", task.error);} else {NSLog(@"Successfully subscribed to all datasets: %@", task.result);}
return nil;}];subscribeAll を呼び出す前に、少なくとも各データセットで 1 回同期を行い、データセットがサーバー上に存在するようにします。
アプリケーションでプッシュ同期を使用する: iOS - Objective-C

1051

Amazon Cognito

開発者ガイドプッシュ通知に応答するには、アプリの代理で didReceiveRemoteNotification メソッドを実装する必要があります。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{[[NSNotificationCenter defaultCenter]
postNotificationName:@"CognitoPushNotification" object:userInfo];}

通知ハンドラを使用して通知を投稿する場合は、データセットへのハンドルがある、アプリケーショ
ンの他の場所で通知に応答することができます。次のように通知にサブスクライブしているとします。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didReceivePushSync:)
name: :@"CognitoPushNotification" object:nil];

その場合は、次のように通知に応答できます。
- (void)didReceivePushSync:(NSNotification*)notification{
NSDictionary * data = [(NSDictionary *)[notification object]
objectForKey:@"data"];
NSString * identityId = [data objectForKey:@"identityId"];
NSString * datasetName = [data objectForKey:@"datasetName"];if([self.dataset.name isEqualToString:datasetName] && [self.identityId
isEqualToString:identityId]){[[self.dataset synchronize] continueWithBlock:^id(AWSTask *task) {if(!task.error){
NSLog(@"Successfully synced dataset");}return nil;}];}}

プッシュ通知のペイロードでは、次のキーを利用できます。
• source: cognito-sync。これは、通知間の差別化要素として機能します。
アプリケーションでプッシュ同期を使用する: iOS - Objective-C

1052

Amazon Cognito

開発者ガイド• identityPoolId: ID プールの ID。これは検証や追加の情報用に使用できますが、レシーバーの観点からは不可欠ではありません。
• identityId: プール内のアイデンティティ ID。
• datasetName: 更新されたデータセットの名前。これは openOrCreateDataset 呼び出しの目的で利用できます。
• syncCount: リモートデータセットの同期カウント。これは、ローカルデータセットが古くなっていないこと、および入力同期が新しいことを確認する方法として使用できます。

アプリケーションでプッシュ同期を使用する: iOS - Swift
アプリ用のデバイストークンを取得するには、Apple ドキュメントの「Registering for Remote
Notifications」を参照してください。APN から NSData オブジェクトとしてデバイストークンを受け取ったら、以下の のように、Sync クライアントの registerDevice: メソッドを使用して、デバイスをAmazon Cognito に登録する必要があります。
let syncClient = AWSCognito.default()
syncClient.registerDevice(devToken).continueWith(block: { (task: AWSTask!) ->AnyObject! inif (task.error != nil) {print("Unable to register device: " + task.error.localizedDescription)} else {print("Successfully registered device with id: \(task.result)")}
return task})

デバッグモードでは、デバイスは APN サンドボックスで登録されます。リリースモードでは、APNで登録されます。特定のデータセットからアップデートを受けるには、subscribe メソッドを使用します。
syncClient.openOrCreateDataset("MyDataset").subscribe().continueWith(block: { (task:
AWSTask!) -> AnyObject! inif (task.error != nil) {print("Unable to subscribe to dataset: " + task.error.localizedDescription)} else {print("Successfully subscribed to dataset: \(task.result)")
アプリケーションでプッシュ同期を使用する: iOS - Swift

1053

Amazon Cognito

開発者ガイド}return task})

データセットからプッシュ通知の受け取りを中止するには、unsubscribe メソッドを呼び出します。
syncClient.openOrCreateDataset("MyDataset").unsubscribe().continueWith(block: { (task:
AWSTask!) -> AnyObject! inif (task.error != nil) {print("Unable to unsubscribe to dataset: " + task.error.localizedDescription)} else {print("Successfully unsubscribed to dataset: \(task.result)")}
return task})

AWSCognito オブジェクトのすべてのデータセットをサブスクライブするには、subscribeAll を
呼び出します。
syncClient.openOrCreateDataset("MyDataset").subscribeAll().continueWith(block: { (task:
AWSTask!) -> AnyObject! inif (task.error != nil) {print("Unable to subscribe to all datasets: " + task.error.localizedDescription)} else {print("Successfully subscribed to all datasets: \(task.result)")}
return task})

subscribeAll を呼び出す前に、少なくとも各データセットで 1 回同期を行い、データセットがサーバー上に存在するようにします。
プッシュ通知に応答するには、アプリの代理で didReceiveRemoteNotification メソッドを実装する必要があります。
func application(application: UIApplication, didReceiveRemoteNotification userInfo:[NSObject : AnyObject],
fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {アプリケーションでプッシュ同期を使用する: iOS - Swift

1054

Amazon Cognito

開発者ガイドNSNotificationCenter.defaultCenter().postNotificationName("CognitoPushNotification",
object: userInfo)})

通知ハンドラを使用して通知を投稿する場合は、データセットへのハンドルがある、アプリケーショ
ンの他の場所で通知に応答することができます。次のように通知にサブスクライブしているとします。
NSNotificationCenter.defaultCenter().addObserver(observer:self,
selector:"didReceivePushSync:",
name:"CognitoPushNotification",
object:nil)

その場合は、次のように通知に応答できます。
func didReceivePushSync(notification: NSNotification) {if let data = (notification.object as! [String: AnyObject])["data"] as? [String:
AnyObject] {let identityId = data["identityId"] as! String
let datasetName = data["datasetName"] as! String
if self.dataset.name == datasetName && self.identityId == identityId {dataset.synchronize().continueWithBlock {(task) -> AnyObject! in
if task.error == nil {print("Successfully synced dataset")}
return nil}}}}

プッシュ通知のペイロードでは、次のキーを利用できます。
• source: cognito-sync。これは、通知間の差別化要素として機能します。
• identityPoolId: ID プールの ID。これは検証や追加の情報用に使用できますが、レシーバーの観点からは不可欠ではありません。
• identityId: プール内のアイデンティティ ID。

アプリケーションでプッシュ同期を使用する: iOS - Swift

1055

Amazon Cognito

開発者ガイド• datasetName: 更新されたデータセットの名前。これは openOrCreateDataset 呼び出しの目的で利用できます。
• syncCount: リモートデータセットの同期カウント。これは、ローカルデータセットが古くなっていないこと、および入力同期が新しいことを確認する方法として使用できます。

Amazon Cognito ストリーム
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

Amazon Cognito ストリームは、Amazon Cognito に保存されているデータに対する制御と洞察をデベロッパーに提供します。これで、デベロッパーはデータが更新および同期されるたびにイベントを受け取るように Kinesis ストリームを設定できるようになります。Amazon Cognito は、所有するKinesis ストリームに各データセットの変更をリアルタイムでプッシュできます。
Amazon Cognito ストリームを使用すると、すべての Sync データを Kinesis に移動することができます。その後、これらをさらなる分析のために Amazon Redshift などのデータウェアハウスツールにストリーミングできます。Kinesis の詳細については、「Amazon Kinesis の使用開始方法」を参照
してください。
ストリームの設定
Amazon Cognito ストリームは、Amazon Cognito コンソールで設定できます。Amazon Cognito コン
ソールで Amazon Cognito ストリームを有効にするには、パブリッシュ先の Kinesis ストリームと、選択されたストリームにイベントを配置するためのアクセス許可を Amazon Cognito に付与する IAM
ロールを選択する必要があります。
コンソールのホームページから、次の操作を行います。
1. Amazon Cognito ストリームをセットアップする ID プールの名前をクリックします。アイデン
ティティプールの [Dashboard] (ダッシュボード) ページが表示されます。
Amazon Cognito ストリーム

1056

Amazon Cognito

開発者ガイド2. [ダッシュボード] ページの右上にある、[ID プールの管理] をクリックします。[Manage Federated
Identities] (フェデレーティッド ID の管理) ページが表示されます。
3. 下にスクロールし、[Cognito ストリーム] をクリックして展開します。
4. [ストリーム名] ドロップダウンメニューで、既存の Kinesis ストリームの名前を選択します。または、[ストリームの作成] をクリックしてストリームを作成し、ストリーム名とシャード数を入力します。シャードに関する情報、およびストリームに必要なシャード数の見積りに関するヘルプについては、Kinesis デベロッパーガイドを参照してください。
5. [Publish role] (パブリッシュロール) ドロップダウンメニューで、ストリームをパブリッシュするためアクセス権限を Amazon Cognito に付与する IAM ロールを選択します。[Create role] (ロールの作成) をクリックして、AWS IAM コンソールで ID プールに関連付けられたロールを作成または変更します。
6. [ストリームの状態] ドロップダウンメニューで、[有効] を選択してストリームの更新を有効にします。[Save Changes] (変更の保存) をクリックします。
Amazon Cognito ストリームが正常に設定されると、この ID プール内のデータセットに対する後続の更新がすべてストリームに送信されるようになります。
ストリームのコンテンツ
ストリームに送信される各レコードは、単一の同期を表します。ストリームに送信されるレコードの例を次に示します。
{"identityPoolId": "Pool Id",
"identityId": "Identity Id",
"dataSetName": "Dataset Name","operation": "(replace|remove)","kinesisSyncRecords": [{"key": "Key","value": "Value","syncCount": 1,"lastModifiedDate": 1424801824343,"deviceLastModifiedDate": 1424801824343,"op": "(replace|remove)"
},
...
],
"lastModifiedDate": 1424801824343,
Amazon Cognito ストリーム

1057

Amazon Cognito

開発者ガイド"kinesisSyncRecordsURL": "S3Url","payloadType": "(S3Url|Inline)","syncCount": 1}

Kinesis の最大ペイロードサイズである 1 MB を超える更新については、Amazon Cognito にその更新の完全なコンテンツが格納されている事前署名済みの Amazon S3 の URL が含まれます。
Amazon Cognito ストリームを設定した後で Kinesis ストリームを削除する、または Amazon
Cognito Sync がロールを引き受けられないようにロール信頼のアクセス許可を変更する場
合、Amazon Cognito ストリームを無効にします。Kinesis ストリームを再作成するか、ロールを修正してから、ストリームを再有効化する必要があります。
一括パブリッシュ
Amazon Cognito ストリームが設定されると、ID プール内の既存のデータに対して一括パブリッシュ
操作を実行できるようになります。一括パブリッシュ操作をコンソール経由で開始する、または API
経由で直接開始すると、Amazon Cognito が、更新を受信しているものと同じストリームに対してこのデータのパブリッシュを開始します。
Amazon Cognito は、一括パブリッシュ操作の使用時にストリームに送信されるデータの一意性を保証しません。更新については、更新としてだけではなく、一括パブリッシュの一部として同じものを受け取る場合があります。ストリームからレコードを処理する際は、このことを念頭に置いてください。
すべてのストリームを一括パブリッシュするには、「ストリームの設定」の手順 1～6 に従ってから、[Start bulk publish] (一括パブリッシュを開始) をクリックします。一括パブリッシュ操作は、常に 1 つの進行中操作に制限され、24 時間ごとに 1 つの正常な一括パブリッシュリクエストに制限されます。

Amazon Cognito イベント
Amazon Cognito Sync を初めて使用する場合は、AWS AppSync を使用してください。Amazon Cognito Sync と同様に、AWS AppSync はデバイス間でアプリケーションデー
タを同期化するためのサービスです。
このサービスは、アプリの設定やゲームステートといったユーザーデータの同期化を可能にします。また、複数のユーザーが同期し、共有されたデータでリアルタイムにコラボレート
できるようにすることで、これらの機能を拡張します。

Amazon Cognito イベント

1058

Amazon Cognito

開発者ガイドAmazon Cognito Events は、Amazon Cognito Sync での重要なイベントへの対応として AWS
Lambda 関数を実行することを可能にします。Amazon Cognito は、データセットが同期されるときに Sync Trigger イベントを生成します。Sync Trigger イベントを使用して、ユーザーがデータを更新するときにアクションを実行できます。この関数は、クラウド内に保存し、ユーザーの他のデバイスに同期する前にデータを評価して、オプションで操作できます。これは、ユーザーの他のデバイスに対して同期する前に、デバイスから受信するデータを検証したり、プレーヤーが新しいレベルに達したときに賞を与えるなど、受信データに基づいてデータセットの他の値を更新する場合に役立ちます。
以下のステップでは、Amazon Cognito のデータセットが同期されるたびに実行される Lambda 関数のセットアップ手順を説明します。
Note
Amazon Cognito イベントを使用するときは、Amazon Cognito ID から取得した認証情報しか使用できません。関連付けられた Lambda 関数があっても、AWS アカウントの認証情報(デベロッパー認証情報) を使用して UpdateRecords を呼び出すと、Lambda 関数は呼び出されません。

AWS Lambda で関数の作成
Lambda を Amazon Cognito と統合するには、最初に Lambda で関数を作成する必要があります。これを行うには、以下の手順を実行します。
Amazon Cognito での Lambda 関数の選択
1. Lambda コンソールを開きます。
2. [Create a Lambda function] (Lambda 関数の作成) をクリックします。
3. [Select blueprint] (設計図の選択) 画面で、「cognito-sync-trigger」を検索して選択します。
4. [Configure event sources] (イベントソースの設定) 画面で、イベントソースのタイプを [Cognito
Sync Trigger] に設定し、ID プールを選択します。[Next] (次へ) をクリックします。
Note
Amazon Cognito Sync トリガーをコンソール外で設定する場合、Amazon Cognito が関数を呼び出せるように、Lambda リソースベースの権限を追加する必要があります。この許可は、Lambda コンソール（「Using resource-based policies for AWS Lambda」を参照）
から追加するか、Lambda AddPermission オペレーションを使用して追加できます。
Amazon Cognito イベント

1059

Amazon Cognito

開発者ガイドLambda リソースベースのポリシーの例
次の AWS Lambda リソースベースのポリシーは、Amazon Cognito に Lambda 関数を呼び出す制限付きの機能を付与します。Amazon Cognitoは、条件 aws:SourceArn のID
プールと条件 aws:SourceAccount のアカウントに代わりに関数を呼び出すことができます。
{"Version": "2012-10-17","Id": "default","Statement": [{"Sid": "lambda-allow-cognito-my-function","Effect": "Allow","Principal": {"Service": "cognito-sync.amazonaws.com"},"Action": "lambda:InvokeFunction","Resource": "<your Lambda function ARN>","Condition": {"StringEquals": {"AWS:SourceAccount": "<your account number>"},"ArnLike": {"AWS:SourceArn": "<your identity pool ARN>"
}
}
}
]
}

5. [Configure function] (関数の設定) 画面で、関数の名前と説明を入力します。[Runtime] (ランタイム) を「Node.js」に設定したままにします。コードは、例では変更しないまま使用
します。デフォルトの例では、同期中のデータに変更を加えません。コードは、Amazon
Cognito Sync Trigger イベントが発生したことのみを記録します。[Handler] (ハンドラ) の名前は「index.handler」設定のままにしておきます。[Role] (ロール) については、AWS Lambda にアクセスするためのコード許可を付与する IAM ロールを選択します。ロールを変更する方法について
は、「IAM コンソール」を参照してください。[Advanced settings] (詳細設定) は変更しないまま使用します。[Next] (次へ) をクリックします。
6. [Review] (確認) 画面で詳細を確認し、[Create function] (関数の作成) をクリックします。次のページに新しい Lambda 関数が表示されます。
Amazon Cognito イベント

1060

Amazon Cognito

開発者ガイドLambda で適切な関数を作成したところで、この関数を Amazon Cognito Sync Trigger イベントのハンドラとして選択する必要があります。以下のステップで、このプロセスについて説明します。
コンソールのホームページから、以下の操作を行います。
1. Amazon Cognito イベントをセットアップする ID プールの名前をクリックします。ID プールのダッシュボードページが表示されます。
2. ダッシュボードページの右上にある [Manage Federated Identities] (フェデレーティッド ID の管理) をクリックします。[Manage Federated Identities] (フェデレーティッド ID の管理) ページが表示されます。
3. スクロールダウンし、[Cognito Events] (Cognito イベント) をクリックして展開します。
4. [Sync Trigger] ドロップダウンメニューで、Sync イベントが発生したときにトリガーする
Lambda 関数を選択します。
5. [Save Changes] (変更の保存) をクリックします。
これで、データセットが同期されるたびに Lambda 関数が実行されるようになります。次のセクションでは、同期中に関数のデータの読み取りと修正を行う方法について説明します。
Sync trigger 用の Lambda 関数の記述
Sync Trigger は、サービスプロバイダインタフェースが使用するプログラミングパラダイムに従います。Amazon Cognito は、Lambda 関数に対して以下の JSON 形式の入力を提供します。
{"version": 2,"eventType": "SyncTrigger","region": "us-east-1","identityPoolId": "identityPoolId","identityId": "identityId","datasetName": "datasetName","datasetRecords": {"SampleKey1": {"oldValue": "oldValue1","newValue": "newValue1","op": "replace"},"SampleKey2": {"oldValue": "oldValue2","newValue": "newValue2","op": "replace"
Amazon Cognito イベント

1061

Amazon Cognito

開発者ガイド},..
}}Amazon Cognito では、関数の戻り値が入力と同じ形式であることが想定されています。
Sync Trigger イベント用の関数を記述するときは、次の点に注意してください。
• Amazon Cognito が、UpdateRecords の実行時に Lambda 関数を呼び出すと、関数は 5秒以内に応答する必要があります。応答しない場合、Amazon Cognito Sync サービスがLambdaSocketTimeoutException 例外をスローします。このタイムアウト値を大きくすることはできません。
• LambdaThrottledException 例外を取得した場合は、同期オペレーションをもう一度実行して、レコードを更新します。
• Amazon Cognito は、データセットに存在するすべてのレコードを関数に提供します。
• アプリユーザーが更新するレコードには、op フィールドが replace として設定されています。
削除されたレコードには、op フィールドが remove として設定されています。
• アプリユーザーがレコードを更新していない場合でも、任意のレコードを変更できます。
• datasetRecords を除くすべてのフィールドは読み取り専用です。それらを変更しないでください。これらのフィールドを変更すると、レコードを更新することはできません。
• レコードの値を変更するには、値を更新し、op を replace に設定します。
• レコードを削除するには、op を remove に設定するか、値を null に設定します。
• レコードを追加するには、datasetRecords 配列に新しいレコードを追加します。
• Amazon Cognito は、Amazon Cognito がレコードを更新するときに、レスポンス内の省略されたレコードを無視します。
サンプル Lambda 関数
以下の Lambda 関数のサンプルでは、データへのアクセス、変更、削除の方法を示しています。
console.log('Loading function');exports.handler = function(event, context) {console.log(JSON.stringify(event, null, 2));//Check for the event typeif (event.eventType === 'SyncTrigger') {Amazon Cognito イベント

1062

Amazon Cognito

開発者ガイド//Modify value for a key
if('SampleKey1' in event.datasetRecords){
event.datasetRecords.SampleKey1.newValue = 'ModifyValue1';
event.datasetRecords.SampleKey1.op = 'replace';}//Remove a key
if('SampleKey2' in event.datasetRecords){
event.datasetRecords.SampleKey2.op = 'remove';}//Add a key
if(!('SampleKey3' in event.datasetRecords)){
event.datasetRecords.SampleKey3={'newValue':'ModifyValue3', 'op' :'replace'};}}context.done(null, event);};

Amazon Cognito イベント

1063

Amazon Cognito

開発者ガイドAmazon Cognito コンソールの使用
Amazon Cognito コンソール を使用して、ユーザープールと ID プールを作成し、管理することができます。
このガイドでは、Amazon Cognito コンソールで一般的な Amazon Cognito ユーザープールタスクの
step-by-step チュートリアルを提供します。
Amazon Cognito コンソールを使用するには
1.

Amazon Cognito を使用するには、AWS アカウント にサインアップする必要があります。

2.

Amazon Cognito コンソールに移動します。 AWS 認証情報の入力を求められる場合があります。

3.

ユーザープールを作成または編集するには、左のナビゲーションペインから [User Pools] (ユーザープール) を選択します。
詳細については、「ユーザープールの開始方法」を参照してください。

4.

ID プールを作成または編集するには、[ID プール] を選択します。Amazon Cognito アイデン
ティティプールの元のコンソールが表示されます。
詳細については、「Amazon Cognito ID プールの開始方法」を参照してください。

Amazon Cognito コンソールは の一部であり AWS Management Console、アカウントと請求に関する情報を提供します。詳細については、「AWS Management Consoleの操作」を参照してください。

トピック• ユーザープールコンソール
1064

Amazon Cognito

開発者ガイド• アイデンティティプールコンソール

ユーザープールコンソール
Amazon Cognito コンソールのユーザープールビューで、リストからユーザープールを選択して詳細を表示します。詳細ビューの、コンソールの上部にある [ユーザープールの概要] には、ユーザープールの基本情報が表示されます。以下のタブでは、ユーザープールの設定を関連関数別に整理しています。
[ユーザー][ユーザー] タブには、CSV ファイルからのユーザーおよびユーザーインポートに関する情報が含
まれています。このタブでは、ユーザーを追加、削除、編集できます。
リファレンス• ユーザープール内のユーザーを管理する• CSV ファイルからユーザープールへのユーザーのインポートグループ[グループ] タブには、ユーザーグループに関する情報が含まれています。グループのメンバー
シップを追加、変更、変更したり、アイデンティティプールを統合するためにグループに関連付けられている IAM ロールを変更したりできます。
リファレンス• ユーザープールにグループを追加する
サインインエクスペリエンス[サインインエクスペリエンス] タブには、ユーザーがユーザープールにサインインする方法に関する情報が含まれています。このタブには、サードパーティ ID プロバイダー、ユーザー名オプション、パスワードポリシー、多要素認証 (MFA) 設定、パスワードを忘れたときの動作、デバイスの記憶などが表示されています。ID プロバイダーを追加および変更したり、ユーザープールの全体的なサインイン動作を変更したりできます。
リファレンス• サードパーティー経由のユーザープールへのサインインの追加• ログイン属性のカスタマイズ
ユーザープールコンソール

1065

Amazon Cognito

開発者ガイド• ユーザープールのパスワードの追加要件• ユーザープールMFAへの の追加• ユーザーアカウントの復旧• ユーザープール内のユーザーデバイスの使用
サインインエクスペリエンス[サインアップエクスペリエンス] タブには、セルフサービスサインアップ、必須属性、電話番号とメールアドレスの確認、カスタム属性に関する情報が含まれています。
リファレンス• ユーザーアカウントのサインアップと確認• ユーザープール属性• サインアップ時に連絡先情報を検証する
メッセージング[メッセージング] タブには、ユーザーへの e メールや SMS メッセージの送信に使用する AWSサービス 、および送信に使うメッセージ形式に関する情報が含まれています。
リファレンス• Amazon Cognito ユーザープールの E メール設定• SMS Amazon Cognito ユーザープールのメッセージ設定• SMS と E メール検証メッセージおよびユーザー招待メッセージの設定
アプリ統合[アプリ統合] タブには、ユーザープールアプリクライアント、ユーザープールサービスエンドポ
イントに割り当てるドメイン、API リソースサーバー、ホストされた UI、および高度なセキュリ
ティに関する情報が含まれています。各アプリケーションクライアントをドリルダウンして以下を設定できます。
1. トークン設定
2. コールバック URL
3. 認証のフロー
4. 属性権限
5. アプリ固有の高度なセキュリティとホストされた UI 設定
6. Amazon Pinpoint 分析
ユーザープールコンソール

1066

Amazon Cognito

開発者ガイドリファレンス• ユーザープールアプリクライアント• Amazon Cognito でホストされた UI およびフェデレーションエンドポイントの設定と使用• ユーザープールのドメインを設定する• スコープ、M2M 、リソースサーバーによるAPI認可• ユーザープール分析に Amazon Pinpoint を使用する
アドバンスドセキュリティ
アドバンストセキュリティタブには、アドバンストセキュリティ脅威保護およびその他のアドバ
ンストセキュリティ機能に関する情報が含まれています。
リファレンス• ユーザープールの高度なセキュリティ機能
ユーザープールのプロパティ
ユーザープールのプロパティタブには、Lambda トリガー、 AWS WAF ウェブ ACL 保護、削除
保護、リソースタグなど、ユーザーに直接関係しないユーザープール設定に関する情報が含まれています。
リファレンス• Lambda トリガーを使用したユーザープールワークフローのカスタマイズ• AWS WAF ウェブとユーザープールACLの関連付け• ユーザープールの削除保護• AWS リソースのタグ付け

アイデンティティプールコンソール
Amazon Cognito コンソールのアイデンティティプールビューで、リストからアイデンティティプー
ルを選択して詳細を表示します。詳細ビューの、コンソールの上部にある [アイデンティティプールの概要] には、ユーザープールの基本情報が表示されます。以下のタブでは、ユーザープールの設定
を関連関数別に整理しています。
ユーザー統計[ユーザー統計] タブには、アイデンティティプールで ID を生成したユーザーに関する統計情報が表示されます。このタブでアイデンティティプール設定を行うことはできません。
アイデンティティプールコンソール

1067

Amazon Cognito

開発者ガイドID ブラウザ[ID ブラウザ] タブには、アイデンティティプールでユーザーが生成した個々の ID に関する情報が含まれています。ID は表示および削除できます。
リファレンス• Amazon Cognito ID プールの開始方法
ユーザーアクセス[ユーザーアクセス] タブには、アイデンティティプールにリンクした ID プロバイダー、開発者プ
ロバイダー、ID に割り当てられたデフォルトの IAM ロール、および認証されていないゲストア
クセス設定に関する情報が含まれています。各 ID プロバイダーをドリルダウンして以下を設定できます。
1. IAM ロール選択によるロールベースのアクセス制御
2. アクセス制御用の属性による属性ベースのアクセス制御
リファレンス• ID プール外部 ID プロバイダー• IAM ロール
• 認証された ID と認証されていない ID• デベロッパーが認証したアイデンティティ (アイデンティティプール)• ロールベースアクセスコントロールの使用• アクセスコントロールへの属性の使用
ID プールのプロパティ[ID プールのプロパティ] タブには、基本 (クラシック) 認証やリソースタグなど、さまざまなアイ
デンティティプール設定に関する情報が表示されます。
• ID プール (フェデレーティッドアイデンティティ) の認証フロー• AWS リソースのタグ付け

アイデンティティプールコンソール

1068

Amazon Cognito

開発者ガイドAmazon Cognito のセキュリティのクラウドセキュリティが最優先事項 AWS です。お客様は AWS 、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャからメリットを得られます。
セキュリティは、 AWS とユーザーの間で共有される責任です。責任共有モデルでは、これをクラウ
ドのセキュリティおよびクラウド内のセキュリティと説明しています。
• クラウドのセキュリティ — AWS クラウドで AWS サービスを実行するインフラストラクチャを保護する AWS 責任があります。 AWS また、 では、安全に使用できるサービスも提供しています。
コンプライアンスAWS プログラムコンプライアンスプログラム の一環として、サードパーティーの監査者は定期的にセキュリティの有効性をテストおよび検証。Amazon Cognito に適用されるコ
ンプライアンスプログラムの詳細については、「コンプライアンスプログラムAWS による対象範囲内のサービスコンプライアンスプログラム」を参照してください。
• クラウドのセキュリティ — お客様の責任は、使用する AWS サービスによって決まります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。
このドキュメントは、Amazon Cognito の使用時に責任共有モデルを適用する方法を理解するために役立ち、セキュリティおよびコンプライアンス上の目的を満たすように Amazon Cognito を設定する
方法を説明します。また、Amazon Cognito リソースのモニタリングや保護に役立つ他の AWS サー
ビスの使用方法についても説明します。
内容• Amazon Cognito でのデータ保護• Amazon Cognito 向けの Identity and access management• Amazon Cognito でのロギングとモニタリング• Amazon Cognito のコンプライアンス検証• Amazon Cognito の耐障害性• Amazon Cognito のインフラストラクチャセキュリティ• Amazon Cognito ユーザープールの設定と脆弱性分析• AWS Amazon Cognito の マネージドポリシー
1069

Amazon Cognito

開発者ガイドAmazon Cognito でのデータ保護
責任 AWS 共有モデル、Amazon Cognito (Amazon Cognito) でのデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての AWS クラウドを実行するグローバルインフラスト
ラクチャを保護する責任があります。お客様は、このインフラストラクチャでホストされているコン
テンツに対する管理を維持する責任があります。このコンテンツには、使用する AWS サービスのセキュリティ設定および管理タスクが含まれます。データプライバシーの詳細については、「データプライバシーFAQ」を参照してください。
データ保護の目的で、 AWS アカウントの認証情報を保護し、 AWS Identity and Access
Management () を使用して個々のユーザーアカウントを設定することをお勧めしますIAM。この方法
により、それぞれのジョブを遂行するために必要な許可のみを各ユーザーに付与できます。また、次の方法でデータを保護することをお勧めします。
• 各アカウントで多要素認証 (MFA) を使用します。
• SSL/TLS を使用して AWS リソースと通信します。
• を使用して APIおよびユーザーアクティビティのログ記録を設定します AWS CloudTrail。
• AWS 暗号化ソリューションと、 サービス内のすべての AWS デフォルトのセキュリティコント
ロールを使用します。
• Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3 に保存される個人データの検出と保護が支援されます。
顧客のアカウント番号などの機密の識別情報は、[名前] フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、、または を使用して Amazon Cognito ま
たは他の AWS API AWS CLIのサービスを使用する場合も同様です AWS SDKs。Amazon Cognito、
またはその他のサービスに入力されたデータは、いずれも診断ログへの包含のために取得される可能性があります。URL を外部サーバーに提供する場合、そのサーバーへのリクエストを検証URLするために認証情報を に含めないでください。

データ暗号化
データ暗号化は、通常、保管時の暗号化と転送中の暗号化の 2 つのカテゴリに分類されます。
保管時の暗号化
Amazon Cognito 内のデータは、業界標準に従って保管時に暗号化されます。
転送時の暗号化
データ保護

1070

Amazon Cognito

開発者ガイドマネージドサービスである Amazon Cognito は AWS グローバルネットワークセキュリティで保護されています。 AWS セキュリティサービスと がインフラストラクチャ AWS を保護する方法については、AWS 「 クラウドセキュリティ」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して AWS 環境を設計するには、「 Security Pillar AWS Well‐Architected
Framework」の「Infrastructure Protection」を参照してください。
が AWS 公開したAPI呼び出しを使用して、ネットワーク経由で Amazon Cognito にアクセスしま
す。クライアントは以下をサポートする必要があります:• Transport Layer Security (TLS）。1TLS.2 が必要で、1.3 TLS をお勧めします。
• (Ephemeral Diffie-HellmanPFS) や DHE (Elliptic Curve Ephemeral Diffie-Hellman) などの完全前方秘匿性 ECDHE () を備えた暗号スイート。これらのモードは、Java 7 以降など、ほとんどの最新システムでサポートされています。
さらに、 リクエストは、 IAMプリンシパルに関連付けられたアクセスキー ID とシークレットアクセ
スキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時セキュリティ認証情報を生成し、リクエストに署名することもできます。
Amazon Cognito ユーザープールと ID プールには、IAM認証、未認証、トークン認証のAPIオペレー
ションがあります。認証されていないオペレーションとトークン認証されたAPIオペレーションは、
アプリケーションのエンドユーザーである顧客による使用を目的としています。認証されていないオ
ペレーションとトークン認証されたAPIオペレーションは、保管中および転送中に暗号化されます。
詳細については、「Amazon Cognito ユーザープールの認証されたオペレーションと認証されていな
いAPIオペレーション」を参照してください。
Note
Amazon Cognito は、コンテンツを内部で暗号化します。お客様提供のキーはサポートしていません。

Amazon Cognito 向けの Identity and access management
AWS Identity and Access Management （IAM) は、管理者が AWS リソースへのアクセスを安全に
制御 AWS サービス するのに役立つ です。IAM 管理者は、誰を認証 (サインイン) し、誰に Amazon
Cognito リソースの使用を承認する (アクセス許可を付与する) かを制御します。IAM は AWS サービ
ス 追加料金なしで使用できる です。
ID およびアクセス管理

1071

Amazon Cognito

開発者ガイドトピック• 対象者• アイデンティティを使用した認証• ポリシーを使用したアクセスの管理• Amazon Cognito と の連携方法 IAM• Amazon Cognito の ID ベースのポリシー例• Amazon Cognito のアイデンティティとアクセスのトラブルシューティング• Amazon Cognito のサービスリンクロールの使用

対象者
AWS Identity and Access Management （IAM) の使用方法は、Amazon Cognito で行う作業によって異なります。
サービスユーザー – ユーザーが Amazon Cognito サービスを使用してジョブを実行する場合、必要な認証情報とアクセス許可は管理者が用意します。さらに多くの Amazon Cognito 機能を使用して作業を行う場合は、追加のアクセス許可が必要になることがあります。アクセスの管理方法を理解しておくと、管理者に適切な許可をリクエストするうえで役立ちます。Amazon Cognito の機能にアクセスできない場合は、「Amazon Cognito のアイデンティティとアクセスのトラブルシューティング」を参照してください。
サービス管理者 – 社内の Amazon Cognito リソースを担当しているユーザーには、通常、Amazon
Cognito への完全なアクセス権限があります。サービスユーザーがアクセスする Amazon Cognito の機能とリソースを決めるのは管理者の仕事です。次に、サービスユーザーのアクセス許可を変更する
リクエストをIAM管理者に送信する必要があります。このページの情報を確認して、 の基本概念を理解してくださいIAM。会社で Amazon Cognito IAMを使用する方法の詳細については、「」を参照
してくださいAmazon Cognito と の連携方法 IAM。 Amazon Cognito
IAM 管理者 – IAM管理者は、Amazon Cognito へのアクセスを管理するポリシーの作成方法の詳細について確認する場合があります。で使用できる Amazon Cognito アイデンティティベースのポリシーの例を表示するにはIAM、「」を参照してくださいAmazon Cognito の ID ベースのポリシー例。

アイデンティティを使用した認証
認証とは、ID 認証情報 AWS を使用して にサインインする方法です。として、IAMユーザーとして
AWS アカウントのルートユーザー、または IAMロールを引き受けることによって認証 （ にサイン
イン AWS) される必要があります。
対象者

1072

Amazon Cognito

開発者ガイドID ソースを介して提供された認証情報を使用して、フェデレーティッド ID AWS として にサインインできます。 AWS IAM Identity Center （IAM Identity Center) ユーザー、会社のシングルサインオン
認証、Google または Facebook の認証情報は、フェデレーション ID の例です。フェデレーティッ
ド ID としてサインインすると、管理者は以前に IAMロールを使用して ID フェデレーションをセッ
トアップしていました。フェデレーション AWS を使用して にアクセスすると、間接的にロールを引き受けることになります。
ユーザーのタイプに応じて、 AWS Management Console または AWS アクセスポータルにサインインできます。へのサインインの詳細については AWS、「 ユーザーガイド」の「 にサインインする
方法 AWS アカウントAWS サインイン 」を参照してください。
AWS プログラムで にアクセスする場合、 はソフトウェア開発キット (SDK) とコマンドラインイ
ンターフェイス (CLI) AWS を提供し、認証情報を使用してリクエストに暗号で署名します。 AWS
ツールを使用しない場合は、リクエストに自分で署名する必要があります。推奨される方法を使用してリクエストを自分で署名する方法の詳細については、「 IAMユーザーガイド」のAWS API「リクエストの署名」を参照してください。
使用する認証方法を問わず、追加セキュリティ情報の提供をリクエストされる場合もあります。例えば、 AWS では、アカウントのセキュリティを高めるために多要素認証 (MFA) を使用することをお勧めします。詳細については、「 AWS IAM Identity Center ユーザーガイド」の「多要素認証」および「 ユーザーガイド」の「 での多要素認証 (MFA） AWS IAM の使用」を参照してください。

AWS アカウント ルートユーザーを作成するときは AWS アカウント、アカウント内のすべての およびリソースへの AWS サービス
完全なアクセス権を持つ 1 つのサインインアイデンティティから始めます。この ID は AWS アカウ
ント ルートユーザーと呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでサインインすることでアクセスできます。日常的なタスクには、ルートユーザーを使用しないことを強くお勧めします。ルートユーザーの認証情報は保護し、ルートユーザーでしか実行できないタスクを実行するときに使用します。ルートユーザーとしてサインインする必要があるタスクの完全なリストについては、「 IAMユーザーガイド」の「ルートユーザーの認証情報を必要とするタスク」を参照してください。

フェデレーティッドアイデンティティ
ベストプラクティスとして、管理者アクセスを必要とするユーザーを含む人間のユーザーに、一時的な認証情報を使用して にアクセスするための ID プロバイダーとのフェデレーションの使用を要求
AWS サービス します。
アイデンティティを使用した認証

1073

Amazon Cognito

開発者ガイドフェデレーティッド ID は、エンタープライズユーザーディレクトリ、ウェブ ID プロバイダー、
AWS Directory Service、アイデンティティセンターディレクトリのユーザー、または ID ソースを通じて提供された認証情報 AWS サービス を使用して にアクセスするユーザーです。フェデレー
ティッド ID が にアクセスすると AWS アカウント、ロールが引き受けられ、ロールは一時的な認証情報を提供します。
アクセスを一元管理する場合は、 AWS IAM Identity Centerを使用することをお勧めします。IAM
Identity Center でユーザーとグループを作成することも、独自の ID ソース内のユーザーとグループのセットに接続して同期して、すべての AWS アカウント とアプリケーションで使用できるようにすることもできます。IAM Identity Center の詳細については、「 ユーザーガイド」のIAM「Identity
Center とはAWS IAM Identity Center 」を参照してください。

IAM ユーザーとグループ
IAM ユーザーは、単一のユーザーまたはアプリケーションに対して特定のアクセス許可 AWS アカ
ウント を持つ 内のアイデンティティです。可能な場合は、パスワードやアクセスキーなどの長期的な認証情報を持つIAMユーザーを作成するのではなく、一時的な認証情報を使用することをお勧めします。ただし、IAMユーザーとの長期的な認証情報を必要とする特定のユースケースがある場合は、
アクセスキーをローテーションすることをお勧めします。詳細については、「 ユーザーガイド」の「長期的な認証情報を必要とするユースケースでアクセスキーを定期的にローテーションするIAM」
を参照してください。
IAM グループは、IAMユーザーのコレクションを指定するアイデンティティです。グループとしてサ
インインすることはできません。グループを使用して、複数のユーザーに対して一度に権限を指定できます。多数のユーザーグループがある場合、グループを使用することで権限の管理が容易になります。例えば、 という名前のグループIAMAdminsを作成し、そのグループにIAMリソースを管理する
アクセス許可を付与できます。
ユーザーは、ロールとは異なります。ユーザーは 1 人の人または 1 つのアプリケーションに一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。ユー
ザーには永続的な長期の認証情報がありますが、ロールでは一時認証情報が提供されます。詳細については、「 ユーザーガイド」のIAM「 (ロールの代わりに) ユーザーを作成する場合IAM」を参照してください。

IAM ロール
IAM ロールは、特定のアクセス許可 AWS アカウント を持つ 内のアイデンティティです。ユーザーと似ていますがIAM、特定のユーザーに関連付けられていません。IAM ロール を切り替える AWSManagement Console ことで、 で ロールを一時的に引き受けることができます。ロールを引き受け
アイデンティティを使用した認証

1074

Amazon Cognito

開発者ガイドるには、 または AWS API オペレーションを AWS CLI 呼び出すか、カスタム を使用しますURL。
ロールの使用方法の詳細については、「 ユーザーガイド」のIAM「ロールの使用IAM」を参照してください。
IAM 一時的な認証情報を持つ ロールは、以下の状況で役立ちます。
• フェデレーションユーザーアクセス – フェデレーティッド ID に許可を割り当てるには、ロールを作成してそのロールの許可を定義します。フェデレーティッド ID が認証されると、その ID はロールに関連付けられ、ロールで定義されている許可が付与されます。フェデレーションのロールの詳細については、「 ユーザーガイド」の「サードパーティー ID プロバイダーのロールの作
成IAM」を参照してください。IAM Identity Center を使用する場合は、アクセス許可セットを設定します。ID が認証後にアクセスできる内容を制御するために、IAMIdentity Center はアクセス
許可セットを のロールに関連付けますIAM。アクセス許可セットの詳細については、「AWS IAM
Identity Center ユーザーガイド」の「アクセス許可セット」を参照してください。
• 一時的なIAMユーザーアクセス許可 – IAM ユーザーまたはロールは、 IAMロールを引き受けて、特定のタスクに対して異なるアクセス許可を一時的に引き受けることができます。
• クロスアカウントアクセス – IAMロールを使用して、別のアカウントのユーザー (信頼されたプリ
ンシパル) が自分のアカウントのリソースにアクセスすることを許可できます。クロスアカウント
アクセスを許可する主な方法は、ロールを使用することです。ただし、一部の では AWS サービ
ス、 (ロールをプロキシとして使用する代わりに) リソースに直接ポリシーをアタッチできます。
クロスアカウントアクセスのロールとリソースベースのポリシーの違いについては、「 ユーザーガイド」の「 でのクロスアカウントリソースアクセスIAMIAM」を参照してください。
• クロスサービスアクセス — 一部の は、他の の機能 AWS サービス を使用します AWS サービス。例えば、サービスで呼び出しを行うと、そのサービスが Amazon でアプリケーションを実行
EC2したり、Amazon S3 にオブジェクトを保存したりするのが一般的です。サービスでは、呼び出し元プリンシパルの許可、サービスロール、またはサービスリンクロールを使用してこれを行う
場合があります。
• 転送アクセスセッション (FAS） – IAM ユーザーまたはロールを使用して でアクションを実行す
ると AWS、プリンシパルと見なされます。一部のサービスを使用する際に、アクションを実行することで、別のサービスの別のアクションがトリガーされることがあります。FAS は、 を呼び出すプリンシパルのアクセス許可を AWS サービス、ダウンストリームサービス AWS サービ
ス へのリクエストのリクエストと組み合わせて使用します。FAS リクエストは、サービスが他の AWS サービス またはリソースとのやり取りを完了する必要があるリクエストを受け取った場合にのみ行われます。この場合、両方のアクションを実行するための権限が必要です。FAS
リクエストを行う際のポリシーの詳細については、「転送アクセスセッション」を参照してくだ
さい。
アイデンティティを使用した認証

1075

Amazon Cognito

開発者ガイド• サービスロール – サービスロールは、ユーザーに代わってアクションを実行するためにサービスが引き受ける IAMロールです。IAM 管理者は、 内からサービスロールを作成、変更、削除できますIAM。詳細については、「 ユーザーガイド」の「 にアクセス許可を委任するロールの作
成 AWS サービスIAM」を参照してください。
• サービスにリンクされたロール – サービスにリンクされたロールは、 にリンクされたサービス
ロールの一種です AWS サービス。サービスは、ユーザーに代わってアクションを実行するロー
ルを引き受けることができます。サービスにリンクされたロールは に表示され AWS アカウン
ト 、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセ
ス許可を表示できますが、編集することはできません。
• Amazon で実行されているアプリケーション EC2 – IAMロールを使用して、EC2インスタンスで実行され、 AWS CLI または AWS API リクエストを行うアプリケーションの一時的な認証情報を管理できます。これは、EC2インスタンス内にアクセスキーを保存するよりも望ましいです。 AWS
ロールをEC2インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプ
ロファイルには ロールが含まれており、EC2インスタンスで実行されているプログラムが一時的な認証情報を取得できるようにします。詳細については、「 ユーザーガイド」の「 IAMロールを使用して Amazon EC2インスタンスで実行されているアプリケーションにアクセス許可を付与するIAM」を参照してください。
IAM ロールとIAMユーザーのどちらを使用するかについては、「 ユーザーガイド」の「 (ユーザーではなく) IAMロールを作成する場合IAM」を参照してください。

ポリシーを使用したアクセスの管理でアクセスを制御する AWS には、ポリシーを作成し、 AWS ID またはリソースにアタッチします。
ポリシーは AWS 、アイデンティティまたはリソースに関連付けられているときにアクセス許可を定義する のオブジェクトです。 は、プリンシパル (ユーザー、ルートユーザー、またはロールセッション) がリクエストを行うときに、これらのポリシー AWS を評価します。ポリシーでの権限により、リクエストが許可されるか拒否されるかが決まります。ほとんどのポリシーはJSONドキュメ
ント AWS として に保存されます。JSON ポリシードキュメントの構造と内容の詳細については、「 ユーザーガイド」のJSON「ポリシーの概要IAM」を参照してください。
管理者はポリシーを使用して AWS JSON、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどのリソースに対してどのような条件下でアクションを実行できるかということです。

ポリシーを使用したアクセスの管理

1076

Amazon Cognito

開発者ガイドデフォルトでは、ユーザーやロールに権限はありません。必要なリソースに対してアクションを実行するアクセス許可をユーザーに付与するために、IAM管理者はIAMポリシーを作成できます。その後、管理者はIAMポリシーをロールに追加し、ユーザーはロールを引き受けることができます。
IAM ポリシーは、オペレーションの実行に使用する方法に関係なく、アクションのアクセス許可を定義します。例えば、iam:GetRoleアクションを許可するポリシーがあるとします。そのポリシーを持つユーザーは、 AWS Management Console、、 AWS CLIまたは AWS からロール情報を取得できますAPI。

アイデンティティベースのポリシー
ID ベースのポリシーは、IAMユーザー、ユーザーのグループ、ロールなどの ID にアタッチできる
JSONアクセス許可ポリシードキュメントです。これらのポリシーは、ユーザーとロールが実行できるアクション、リソース、および条件をコントロールします。アイデンティティベースのポリシーを作成する方法については、「 ユーザーガイド」のIAM「ポリシーの作成IAM」を参照してください。
アイデンティティベースのポリシーは、さらにインラインポリシーまたはマネージドポリシーに分類できます。インラインポリシーは、単一のユーザー、グループ、またはロールに直接埋め込まれています。管理ポリシーは、 内の複数のユーザー、グループ、ロールにアタッチできるスタンドア
ロンポリシーです AWS アカウント。管理ポリシーには、 AWS 管理ポリシーとカスタマー管理ポ
リシーが含まれます。管理ポリシーとインラインポリシーのどちらかを選択する方法については、
IAM ユーザーガイドの「管理ポリシーとインラインポリシーの選択」を参照してください。

リソースベースのポリシー
リソースベースのポリシーは、リソースにアタッチするJSONポリシードキュメントです。リソース
ベースのポリシーの例としては、IAMロールの信頼ポリシー や Amazon S3 バケットポリシー などがあります。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスをコントロールできます。ポリシーがアタッチされているリソースの場合、指定されたプリンシパルがそのリソースに対して実行できるアクションと条件は、ポリシーによって定義されます。リソースベースのポリシーでは、プリンシパルを指定する必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーティッドユーザー、またはを含めることができます AWS サービス。
リソースベースのポリシーは、そのサービス内にあるインラインポリシーです。リソースベースのポ
リシーIAMでは、 の AWS 管理ポリシーを使用できません。

ポリシーを使用したアクセスの管理

1077

Amazon Cognito

開発者ガイドアクセスコントロールリスト (ACLs）
アクセスコントロールリスト (ACLs) は、リソースへのアクセス許可を持つプリンシパル (アカウン
トメンバー、ユーザー、またはロール) を制御します。ACLs はリソースベースのポリシーに似ていますが、JSONポリシードキュメント形式を使用しません。
Amazon S3、 AWS WAF、および Amazon VPCは、 をサポートするサービスの例ですACLs。の詳細についてはACLs、Amazon Simple Storage Service デベロッパーガイドの「アクセスコントロー
ルリスト (ACL) の概要」を参照してください。

その他のポリシータイプ
AWS は、一般的ではない追加のポリシータイプをサポートします。これらのポリシータイプでは、より一般的なポリシータイプで付与された最大の権限を設定できます。
• アクセス許可の境界 – アクセス許可の境界は、アイデンティティベースのポリシーがIAMエンティ
ティ (IAMユーザーまたはロール) に付与できるアクセス許可の上限を設定する高度な機能です。エンティティにアクセス許可の境界を設定できます。結果として得られる権限は、エンティティのアイデンティティベースポリシーとそのアクセス許可の境界の共通部分になります。Principal
フィールドでユーザーまたはロールを指定するリソースベースのポリシーでは、アクセス許可の境界は制限されません。これらのポリシーのいずれかを明示的に拒否した場合、権限は無効になります。アクセス許可の境界の詳細については、「 IAMユーザーガイド」の「 IAMエンティティのア
クセス許可の境界」を参照してください。
• サービスコントロールポリシー (SCPs） – SCPsは、 の組織または組織単位 (OU) に対する最大ア
クセス許可を指定するJSONポリシーです AWS Organizations。 AWS Organizations は、 AWS ア
カウント ビジネスが所有する複数の をグループ化して一元管理するためのサービスです。組織内のすべての機能を有効にすると、サービスコントロールポリシー (SCPs) をアカウントの一部またはすべてに適用できます。は、各 を含むメンバーアカウントのエンティティのアクセス許可SCPを制限します AWS アカウントのルートユーザー。Organizations と の詳細についてはSCPs、「AWS Organizations ユーザーガイド」の「サービスコントロールポリシー」を参照してください。
• セッションポリシー - セッションポリシーは、ロールまたはフェデレーションユーザーの一時的なセッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。結果としてセッションの権限は、ユーザーまたはロールのアイデンティティベースポリシーとセッションポ
リシーの共通部分になります。また、リソースベースのポリシーから権限が派生する場合もあります。これらのポリシーのいずれかを明示的に拒否した場合、権限は無効になります。詳細について
は、「 ユーザーガイド」の「セッションポリシーIAM」を参照してください。

ポリシーを使用したアクセスの管理

1078

Amazon Cognito

開発者ガイド

複数のポリシータイプ
1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成される権限を理解するのがさらに難しくなります。複数のポリシータイプが関与する場合にリクエストを許可するかどうか
AWS を決定する方法については、 ユーザーガイドの「ポリシー評価ロジックIAM」を参照してくだ
さい。

Amazon Cognito と の連携方法 IAM
IAM を使用して Amazon Cognito へのアクセスを管理する前に、Amazon Cognito で使用できるIAM
機能を確認してください。

IAM Amazon Cognito で使用できる機能
IAM 機能Amazon Cognito サポート

アイデンティティベースのポリシーあり

リソースベースのポリシーなし

ポリシーアクションあり

ポリシーリソース

Yes

ポリシー条件キー

あり

ACLs

なし

ABAC (ポリシー内のタグ）

部分的一時的な認証情報あり

プリンシパル権限

いいえ

サービスロール

あり

サービスリンクロール

あり

Amazon Cognito およびその他の AWS のサービスがほとんどの IAM 機能と連携する方法の概要を把握するには、IAM「 ユーザーガイド」のAWS 「 と連携する のサービスIAM」を参照してください。
Amazon Cognito と の連携方法 IAM

1079

Amazon Cognito

開発者ガイドAmazon Cognito の ID ベースのポリシー
アイデンティティベースのポリシーのサポート: あり
ID ベースのポリシーは、IAMユーザー、ユーザーのグループ、ロールなどの ID にアタッチできる
JSONアクセス許可ポリシードキュメントです。これらのポリシーは、ユーザーとロールが実行できるアクション、リソース、および条件をコントロールします。アイデンティティベースのポリシーを作成する方法については、「 ユーザーガイド」のIAM「ポリシーの作成IAM」を参照してください。
IAM アイデンティティベースのポリシーでは、許可または拒否されたアクションとリソース、およびアクションが許可または拒否される条件を指定できます。プリンシパルは、それが添付されているユーザーまたはロールに適用されるため、アイデンティティベースのポリシーでは指定できません。JSON ポリシーで使用できるすべての要素については、「 ユーザーガイド」の「 IAMJSONポリ
シー要素のリファレンスIAM」を参照してください。
Amazon Cognito の ID ベースのポリシー例
Amazon Cognito の ID ベースのポリシー例については、「Amazon Cognito の ID ベースのポリシー例」を参照してください。

Amazon Cognito 内のリソースベースのポリシー
リソースベースのポリシーのサポート: なし
リソースベースのポリシーは、リソースにアタッチするJSONポリシードキュメントです。リソース
ベースのポリシーの例としては、IAMロールの信頼ポリシー や Amazon S3 バケットポリシー などがあります。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスをコントロールできます。ポリシーがアタッチされているリソースの場合、指定されたプリンシパルがそのリソースに対して実行できるアクションと条件は、ポリシーによって定義されます。リソースベースのポリシーでは、プリンシパルを指定する必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーティッドユーザー、またはを含めることができます AWS サービス。
クロスアカウントアクセスを有効にするには、リソースベースのポリシーで、アカウント全体または別のアカウントのIAMエンティティをプリンシパルとして指定できます。リソースベースのポリシーにクロスアカウントのプリンシパルを追加しても、信頼関係は半分しか確立されない点に注意してください。プリンシパルとリソースが異なる にある場合 AWS アカウント、信頼されたアカウントのIAM管理者は、プリンシパルエンティティ (ユーザーまたはロール) にリソースへのアクセス許可も付与する必要があります。IAM 管理者は、アイデンティティベースのポリシーをエンティティにアタッチすることで権限を付与します。ただし、リソースベースのポリシーで、同じアカウントのプリ
Amazon Cognito と の連携方法 IAM

1080

Amazon Cognito

開発者ガイドンシパルへのアクセス権が付与されている場合は、アイデンティティベースのポリシーをさらに付与する必要はありません。詳細については、「 ユーザーガイド」の「 でのクロスアカウントリソース
アクセスIAMIAM」を参照してください。

Amazon Cognito のポリシーアクション
ポリシーアクションのサポート: あり
管理者はポリシーを使用して AWS JSON、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどのリソースに対してどのような条件下でアクションを実行できるかということです。
JSON ポリシーの Action要素は、ポリシーでアクセスを許可または拒否するために使用できるアクションを記述します。ポリシーアクションの名前は通常、関連する AWS APIオペレーションと同じです。一致するAPIオペレーションを持たないアクセス許可のみのアクションなど、いくつかの例外があります。また、ポリシーに複数のアクションが必要なオペレーションもあります。これらの追加
アクションは、依存アクションと呼ばれます。
このアクションは、関連付けられたオペレーションを実行するための権限を付与するポリシーで使用されます。
Amazon Cognito アクションのリストについては、「サービス認可リファレンス」の「Amazon
Cognito ID で定義されるアクション」を参照してください。
Amazon Cognito のポリシーアクションでは、アクションの前に、次のプレフィックスを使用します。
cognito-identity

単一のステートメントで複数のアクションを指定するには、アクションをカンマで区切ります。
"Action": ["cognito-identity:action1","cognito-identity:action2"]

署名付きと署名なし APIsAWS 認証情報を使用して Amazon Cognito APIリクエストに署名すると、 AWS Identity and Access
Management （IAM) ポリシーでリクエストを制限できます。API 認証情報で AWS サインイン
Amazon Cognito と の連携方法 IAM

1081

Amazon Cognito

開発者ガイドする必要がある リクエストにはAdminInitiateAuth、 を使用したサーバー側のサインイン、および などの Amazon Cognito リソースを作成、表示、または変更するアクションが含まれますUpdateUserPool。署名付きAPIリクエストの詳細については、「リクエストの署名 AWS API」
を参照してください。
Amazon Cognito は一般公開するアプリ用のコンシューマー ID 製品であるため、次の署名なし にア
クセスできますAPIs。アプリは、ユーザーと見込みユーザーに対してこれらのAPIリクエストを行います。新しい認証セッションを開始するInitiateAuth場合など、事前認証APIsを必要としないものもあります。一部の APIsでは、既存の認証済みセッションを持つユーザーMFAのセットアップを完了するなどVerifySoftwareToken、アクセストークンまたはセッションキーを認証に使用します。署名なしの承認された Amazon Cognito ユーザープールは、Amazon Cognito リファレンス に示されているように、リクエスト構文で Sessionまたは AccessTokenパラメータAPIをサポートしま
す。 Amazon Cognito API 署名されていない Amazon Cognito ID は、Amazon Cognito フェデレー
ティッド ID APIリファレンス」に示されている IdentityIdパラメータAPIをサポートします。
Amazon Cognito ユーザープールAPIオペレーションの承認モデルとロールの詳細については、「」
を参照してくださいAmazon Cognito ユーザープールの認証されたオペレーションと認証されていな
いAPIオペレーション。
Amazon Cognito ID プールAPIオペレーション• GetId• GetOpenIdToken• GetCredentialsForIdentity• UnlinkIdentity
Amazon Cognito ユーザープールAPIオペレーション• AssociateSoftwareToken• ChangePassword• ConfirmDevice• ConfirmForgotPassword• ConfirmSignUp• DeleteUser• DeleteUserAttributes• ForgetDevice
Amazon Cognito と の連携方法 IAM

1082

Amazon Cognito

開発者ガイド• ForgotPassword• GetDevice• GetUser• GetUserAttributeVerificationCode• GlobalSignOut• InitiateAuth• ListDevices• ResendConfirmationCode• RespondToAuthChallenge• RevokeToken• SetUserMFAPreference• SetUserSettings• SignUp• UpdateAuthEventFeedback• UpdateDeviceStatus• UpdateUserAttributes• VerifySoftwareToken• VerifyUserAttribute

Amazon Cognito の ID ベースのポリシー例については、「Amazon Cognito の ID ベースのポリシー例」を参照してください。

Amazon Cognito のポリシーリソース
ポリシーリソースのサポート: あり
管理者はポリシーを使用して AWS JSON、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどのリソースに対してどのような条件下でアクションを実行できるかということです。
Policy ResourceJSON要素は、アクションが適用されるオブジェクトを指定します。ステートメン
トには、Resource または NotResource 要素を含める必要があります。ベストプラクティスとしAmazon Cognito と の連携方法 IAM

1083

Amazon Cognito

開発者ガイドて、Amazon リソースネーム (ARN) を使用してリソースを指定します。これは、リソースレベルの許可と呼ばれる特定のリソースタイプをサポートするアクションに対して実行できます。
オペレーションのリスト化など、リソースレベルの権限をサポートしないアクションの場合は、ス
テートメントがすべてのリソースに適用されることを示すために、ワイルドカード (*) を使用します。
"Resource": "*"Amazon リソース名 (ARNs）
ARNs Amazon Cognito フェデレーティッド ID 用のAmazon Cognito ID プール (フェデレーティッド ID) では、次の例のように、Amazon リソースネー
ム (ARN) 形式を使用して、特定の ID プールへのIAMユーザーのアクセスを制限できます。の詳細についてはARNs、「 IAM識別子」を参照してください。
arn:aws:cognito-identity:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID

ARNs for Amazon Cognito Sync
Amazon Cognito Sync では、カスタマーがアイデンティティプール ID、アイデンティティ ID、およびデータセット名でアクセスを制限することもできます。
ID プールAPIsで動作する の場合、ID プールのARN形式は Amazon Cognito フェデレーティッド IDの場合と同じですが、サービス名は cognito-syncではなく ですcognito-identity。
arn:aws:cognito-sync:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_IDなどの単一のアイデンティティAPIsで動作する RegisterDeviceの場合、次のARN形式で個々のアイデンティティを参照できます。
arn:aws:cognito-sync:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID/
identity/IDENTITY_ID

UpdateRecords や などのデータセットAPIsで動作する ではListRecords、次のARN形式を使用して個々のデータセットを参照できます。
arn:aws:cognito-sync:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID/
identity/IDENTITY_ID/dataset/DATASET_NAME

Amazon Cognito と の連携方法 IAM

1084

Amazon Cognito

開発者ガイドARNs Amazon Cognito ユーザープール用のAmazon Cognito ユーザープールでは、次のARN形式を使用して、特定のユーザープールへのユー
ザーのアクセスを制限できます。
arn:aws:cognito-idp:REGION:ACCOUNT_ID:userpool/USER_POOL_ID

Amazon Cognito リソースタイプとその のリストを確認するにはARNs、「サービス認証リファレンス」のAmazon Cognito で定義されるリソース」を参照してください。各リソースARNの を指定できるアクションについては、Amazon Cognito で定義されるアクション」を参照してください。

Amazon Cognito の ID ベースのポリシー例については、「Amazon Cognito の ID ベースのポリシー例」を参照してください。

Amazon Cognito のポリシー条件キー
サービス固有のポリシー条件キーのサポート: あり
管理者はポリシーを使用して AWS JSON、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルが、どのリソースに対してどのような条件下でアクションを実行できるかということです。
Condition 要素 (または Condition ブロック) を使用すると、ステートメントが有効な条件を指定できます。Condition 要素はオプションです。イコールや未満などの 条件演算子 を使用して条件式を作成することで、ポリシーの条件とリクエスト内の値を一致させることができます。
1 つのステートメントに複数の Condition 要素を指定する場合、または 1 つの Condition 要素に複数のキーを指定する場合、 AWS では AND 論理演算子を使用してそれらを評価します。1 つの条
件キーに複数の値を指定すると、 は論理ORオペレーションを使用して条件 AWS を評価します。ス
テートメントの権限が付与される前にすべての条件が満たされる必要があります。
条件を指定する際にプレースホルダー変数も使用できます。例えば、リソースにIAMユーザー名でタグ付けされている場合にのみ、リソースへのアクセス許可をIAMユーザーに付与できます。詳細については、「 ユーザーガイド」のIAM「ポリシー要素: 変数とタグIAM」を参照してください。
AWS は、グローバル条件キーとサービス固有の条件キーをサポートします。すべての AWS グ
ローバル条件キーを確認するには、「 ユーザーガイド」のAWS 「 グローバル条件コンテキスト
キーIAM」を参照してください。
Amazon Cognito と の連携方法 IAM

1085

Amazon Cognito

開発者ガイドAmazon Cognito の条件キーのリストについては、「サービス認可リファレンス」の「Amazon
Cognito ID の条件キー」を参照してください。条件キーを使用できるアクションとリソースについて
は、「Amazon Cognito で定義されるアクション」を参照してください。
Amazon Cognito の ID ベースのポリシー例については、「Amazon Cognito の ID ベースのポリシー例」を参照してください。

Amazon Cognito のアクセスコントロールリスト (ACLs）
をサポートACLs： いいえ
アクセスコントロールリスト (ACLs) は、リソースへのアクセス許可を持つプリンシパル (アカウン
トメンバー、ユーザー、またはロール) を制御します。ACLs はリソースベースのポリシーに似ていますが、JSONポリシードキュメント形式を使用しません。

Amazon Cognito による属性ベースのアクセスコントロール (ABAC）
サポート ABAC (ポリシー内のタグ): 部分的
属性ベースのアクセスコントロール (ABAC) は、属性に基づいてアクセス許可を定義する認可戦略です。では AWS、これらの属性はタグ と呼ばれます。タグは、IAMエンティティ (ユーザーまたはロール) および多くの AWS リソースにアタッチできます。エンティティとリソースのタグ付けは、の最初のステップですABAC。次に、プリンシパルのタグがアクセスしようとしているリソースのタグと一致する場合に、オペレーションを許可するABACポリシーを設計します。
ABAC は、急速に成長している環境や、ポリシー管理が煩雑になる状況に役立ちます。
タグに基づいてアクセスを管理するには、aws:ResourceTag/keyname、aws:RequestTag/key-name、または aws:TagKeys の条件キーを使用して、ポリシーの条件要素でタグ情報を提供します。
サービスがすべてのリソースタイプに対して 3 つの条件キーすべてをサポートする場合、そのサービスの値はありです。サービスが一部のリソースタイプに対してのみ 3 つの条件キーのすべてをサポートする場合、値は「部分的」になります。
の詳細についてはABAC、「 ユーザーガイド」の「 とはABACIAM」を参照してください。のセットアップ手順を含むチュートリアルを表示するにはABAC、「 ユーザーガイド」の「属性ベースのアク
セスコントロール (ABAC） を使用するIAM」を参照してください。

Amazon Cognito での一時的な認証情報の使用
一時的な認証情報のサポート: あり
Amazon Cognito と の連携方法 IAM

1086

Amazon Cognito

開発者ガイド一部の AWS サービス は、一時的な認証情報を使用してサインインすると機能しません。一時的な認証情報 AWS サービス を使用する などの詳細については、「 ユーザーガイド」のAWS サービス
「 と連携IAMする IAM 」を参照してください。
ユーザー名とパスワード以外の AWS Management Console 方法で にサインインする場合、一時的な認証情報を使用します。例えば、会社のシングルサインオン (SSO) リンク AWS を使用して にアクセスすると、そのプロセスによって一時的な認証情報が自動的に作成されます。また、ユーザーとしてコンソールにサインインしてからロールを切り替える場合も、一時的な認証情報が自動的に作成されます。ロールの切り替えの詳細については、「 IAMユーザーガイド」の「ロールへの切り替え(コンソール）」を参照してください。
一時的な認証情報は、 AWS CLI または を使用して手動で作成できます AWS API。その後、これらの一時的な認証情報を使用して . AWS recommends にアクセスできます AWS。これは、長期的なア
クセスキーを使用する代わりに、一時的な認証情報を動的に生成することを推奨しています。詳細については、「」の「一時的なセキュリティ認証情報IAM」を参照してください。

Amazon Cognito のクロスサービスプリンシパル許可
転送アクセスセッションをサポート (FAS): いいえ
IAM ユーザーまたはロールを使用して でアクションを実行すると AWS、プリンシパルと見なされます。一部のサービスを使用する際に、アクションを実行することで、別のサービスの別のアクション
がトリガーされることがあります。FAS は、 を呼び出すプリンシパルのアクセス許可を AWS サー
ビス、ダウンストリームサービス AWS サービス へのリクエストのリクエストと組み合わせて使用します。FAS リクエストは、サービスが他の AWS サービス またはリソースとのやり取りを完了す
る必要があるリクエストを受け取った場合にのみ行われます。この場合、両方のアクションを実行するための権限が必要です。FAS リクエストを行う際のポリシーの詳細については、「転送アクセス
セッション」を参照してください。

Amazon Cognito のサービスロール
サービスロールのサポート: あり
サービスロールは、ユーザーに代わってアクションを実行するためにサービスが引き受ける IAM
ロールです。IAM 管理者は、 内からサービスロールを作成、変更、削除できますIAM。詳細については、「 ユーザーガイド」の「 にアクセス許可を委任するロールの作成 AWS サービスIAM」を参照してください。
Amazon Cognito のサービスロールの詳細については、「プッシュ同期を有効にする」と「プッシュ同期」を参照してください。
Amazon Cognito と の連携方法 IAM

1087

Amazon Cognito

開発者ガイドWarning
サービスロールのアクセス許可を変更すると、Amazon Cognito の機能が破損する可能性があります。Amazon Cognito が指示する場合以外は、サービスロールを編集しないでください。

Amazon Cognito のサービスにリンクされたロール
サービスリンクロールのサポート: あり
サービスにリンクされたロールは、 にリンクされたサービスロールの一種です AWS サービス。
サービスは、ユーザーに代わってアクションを実行するロールを引き受けることができます。サービスにリンクされたロールは に表示され AWS アカウント 、サービスによって所有されます。IAM 管
理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。
Amazon Cognito のサービスにリンクされたロールの作成または管理の詳細については、「Amazon
Cognito のサービスリンクロールの使用」を参照してください。

Amazon Cognito の ID ベースのポリシー例
デフォルトでは、ユーザーおよびロールには Amazon Cognito リソースを作成または変更するアクセス許可がありません。また、、 AWS Command Line Interface （AWS CLI） AWS Management
Console、または を使用してタスクを実行することはできません AWS API。必要なリソースに対してアクションを実行するアクセス許可をユーザーに付与するために、IAM管理者はIAMポリシーを作成できます。その後、管理者はIAMポリシーをロールに追加し、ユーザーはロールを引き受けることができます。
これらのポリシードキュメント例を使用してIAMアイデンティティベースのJSONポリシーを作成す
る方法については、「 ユーザーガイド」のIAM「ポリシーの作成IAM」を参照してください。
各リソースタイプの の形式など、Amazon Cognito で定義されるアクションとリソースタイプの詳細については、「サービス認証リファレンスARNs」のAmazon Cognito のアクション、リソース、および条件キー」を参照してください。
トピック• ポリシーのベストプラクティス• Amazon Cognito コンソールの使用
アイデンティティベースポリシーの例

1088

Amazon Cognito

開発者ガイド• 自分の権限の表示をユーザーに許可する• 特定の ID プールにコンソールアクセスを制限する• プール内のすべての ID に対して特定のデータセットへのアクセスを許可する

ポリシーのベストプラクティス
ID ベースのポリシーは、アカウント内で誰が Amazon Cognito リソースを作成、アクセス、または削除できるを決定します。これらのアクションを実行すると、 AWS アカウントに料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイ
ドラインと推奨事項に従ってください:• AWS 管理ポリシーを開始し、最小特権のアクセス許可に移行する – ユーザーとワークロードにアクセス許可を付与するには、多くの一般的なユースケースにアクセス許可を付与する AWS 管理
ポリシーを使用します。これらは で使用できます AWS アカウント。ユースケースに固有の AWS
カスタマー管理ポリシーを定義して、アクセス許可をさらに減らすことをお勧めします。詳細については、「 ユーザーガイド」の「 AWS 管理ポリシーAWS 」または「 ジョブ機能の 管理ポリ
シーIAM」を参照してください。
• 最小特権のアクセス許可を適用する – IAMポリシーでアクセス許可を設定する場合は、タスクの実行に必要なアクセス許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用してアクセス許可を適用する方法の詳細については、「 ユーザーガイド」の「 のポリシーとアクセス許可IAMIAM」を参照してください。
• IAM ポリシーの条件を使用してアクセスをさらに制限する – ポリシーに条件を追加して、アクションとリソースへのアクセスを制限できます。例えば、ポリシー条件を記述して、すべてのリク
エストを を使用して送信する必要があることを指定できますSSL。条件を使用して、 などの特定の を介してサービスアクションが使用される場合に AWS サービス、サービスアクションへのア
クセスを許可することもできます AWS CloudFormation。詳細については、「 ユーザーガイド」のIAMJSON「ポリシー要素: 条件IAM」を参照してください。
• IAM Access Analyzer を使用してIAMポリシーを検証し、安全で機能的なアクセス許可を確保する– IAM Access Analyzer は、ポリシーがポリシー言語 (JSON) とIAMベストプラクティスに準拠するように、新規および既存のIAMポリシーを検証します。IAM Access Analyzer には、安全で機能的なポリシーの作成に役立つ 100 を超えるポリシーチェックと実用的な推奨事項が用意されています。詳細については、「 ユーザーガイド」のIAM「Access Analyzer ポリシーの検証IAM」を参照してください。
• 多要素認証を要求する (MFA） – でIAMユーザーまたはルートユーザーを必要とするシナリオがある場合は AWS アカウント、セキュリティを強化MFAするために をオンにします。API オペレー
アイデンティティベースポリシーの例

1089

Amazon Cognito

開発者ガイドションが呼び出されるMFAタイミングを要求するには、ポリシーにMFA条件を追加します。詳細
については、「 IAMユーザーガイド」のMFA「 で保護されたAPIアクセスの設定」を参照してください。
のベストプラクティスの詳細についてはIAM、「 ユーザーガイド」の「 のセキュリティのベストプ
ラクティスIAMIAM」を参照してください。
Note
Amazon Cognito コンソールの元のバージョンと新しいバージョンでは、Amazon Cognito
リソースを表示および変更するときの基本的な動作が異なります。条件が true の場合にのみcognito-idpサービスプレフィックスのアクションにアクセス許可を付与した場合、影響を受けるIAMプリンシパルaws:ViaAWSServiceは元のコンソールの Amazon Cognito リ
ソースに対して有効であった可能性がありますが、新しいコンソールでは有効ではなかった
可能性があります。Amazon Cognito コンソールで作業するには、IAMポリシーで Amazon
Cognito アクセス許可に aws:ViaAWSService条件を設定しないでください。

Amazon Cognito コンソールの使用
Amazon Cognito コンソールにアクセスするには、最小限の許可のセットが必要です。これらのアクセス許可により、 の Amazon Cognito リソースの詳細を一覧表示および表示できます AWS アカウ
ント。最小限必要な許可よりも制限が厳しいアイデンティティベースのポリシーを作成すると、そのポリシーを持つエンティティ (ユーザーまたはロール) に対してコンソールが意図したとおりに機能しません。
AWS CLI または のみを呼び出すユーザーには、最小限のコンソールアクセス許可を付与する必要はありません AWS API。代わりに、実行しようとしているAPIオペレーションに一致するアクション
のみへのアクセスを許可します。
ユーザーとロールが引き続き Amazon Cognito コンソールを使用できるようにするには、エンティ
ティに Amazon Cognito ConsoleAccessまたは ReadOnly AWS 管理ポリシーもアタッチします。
詳細については、「 ユーザーガイド」の「ユーザーへのアクセス許可の追加IAM」を参照してください。

自分の権限の表示をユーザーに許可する
この例では、IAMユーザーがユーザー ID にアタッチされているインラインポリシーと管理ポリシーを表示できるようにするポリシーを作成する方法を示します。このポリシーには、コンソールで、まアイデンティティベースポリシーの例

1090

Amazon Cognito

開発者ガイドたは AWS CLI または を使用してプログラムでこのアクションを実行するアクセス許可が含まれています AWS API。
{
"Version": "2012-10-17","Statement": [{"Sid": "ViewOwnUserInfo","Effect": "Allow","Action": ["iam:GetUserPolicy","iam:ListGroupsForUser","iam:ListAttachedUserPolicies","iam:ListUserPolicies","iam:GetUser"],"Resource": ["arn:aws:iam::*:user/${aws:username}"]},{"Sid": "NavigateInConsole","Effect": "Allow","Action": ["iam:GetGroupPolicy","iam:GetPolicyVersion","iam:GetPolicy","iam:ListAttachedGroupPolicies","iam:ListGroupPolicies","iam:ListPolicyVersions","iam:ListPolicies","iam:ListUsers"],"Resource": "*"}]}特定の ID プールにコンソールアクセスを制限する{"Version": "2012-10-17","Statement": [{"Effect": "Allow",
アイデンティティベースポリシーの例

1091

Amazon Cognito

開発者ガイド"Action": ["cognito-identity:ListIdentityPools"],"Resource": "*"},{"Effect": "Allow","Action": ["cognito-identity:*"],"Resource": "arn:aws:cognito-identity:us-east-1:0123456789:identitypool/useast-1:1a1a1a1a-ffff-1111-9999-12345678"},{"Effect": "Allow","Action": ["cognito-sync:*"],"Resource": "arn:aws:cognito-sync:us-east-1:0123456789:identitypool/useast-1:1a1a1a1a-ffff-1111-9999-12345678"}]}

プール内のすべての ID に対して特定のデータセットへのアクセスを許可する{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["cognito-sync:ListRecords","cognito-sync:UpdateRecords"],"Resource": "arn:aws:cognito-sync:us-east-1:0123456789:identitypool/useast-1:1a1a1a1a-ffff-1111-9999-12345678/identity/*/dataset/UserProfile"}]}

アイデンティティベースポリシーの例

1092

Amazon Cognito

開発者ガイドAmazon Cognito のアイデンティティとアクセスのトラブルシューティング
以下の情報は、Amazon Cognito および の使用時に発生する可能性がある一般的な問題の診断と修正に役立ちますIAM。
トピック• Amazon Cognito でアクションを実行する権限がない• iam を実行する権限がありません。PassRole• 管理者として Amazon Cognito へのアクセスを他のユーザーに許可したい• AWS アカウント以外のユーザーに Amazon Cognito リソースへのアクセスを許可したい

Amazon Cognito でアクションを実行する権限がない「I am not authorized to perform an action in Amazon Bedrock」というエラーが表示された場合、そのアクションを実行できるようにポリシーを更新する必要があります。
次の例のエラーは、mateojacksonIAMユーザーが コンソールを使用して架空のmy-examplewidgetリソースの詳細を表示しようとしているが、架空のcognito-identity:GetWidgetアクセス許可がない場合に発生します。
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform:
cognito-identity:GetWidget on resource: my-example-widget

この場合、cognito-identity:GetWidget アクションを使用して my-example-widgetリソー
スへのアクセスを許可するように、mateojackson ユーザーのポリシーを更新する必要があります。
サポートが必要な場合は、 AWS 管理者にお問い合わせください。サインイン認証情報を提供した担当者が管理者です。

iam を実行する権限がありません。PassRole
iam:PassRole アクションを実行する権限がないというエラーが表示された場合は、Amazon
Cognito にロールを渡すことを許可するようにポリシーを更新する必要があります。
一部の AWS サービス では、新しいサービスロールまたはサービスにリンクされたロールを作成する代わりに、そのサービスに既存のロールを渡すことができます。そのためには、サービスにロールを渡す権限が必要です。
トラブルシューティング

1093

Amazon Cognito

開発者ガイド

次の例のエラーは、 というIAMユーザーがコンソールを使用して Amazon Cognito でアクションを実行marymajorしようする場合に発生します。ただし、このアクションをサービスが実行するには、
サービスロールから付与された権限が必要です。メアリーには、ロールをサービスに渡す許可がありません。
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform:
iam:PassRole

この場合、Mary のポリシーを更新してメアリーに iam:PassRole アクションの実行を許可する必要があります。
サポートが必要な場合は、 AWS 管理者にお問い合わせください。サインイン認証情報を提供した担当者が管理者です。

管理者として Amazon Cognito へのアクセスを他のユーザーに許可したい
Amazon Cognito へのアクセスを他のユーザーに許可するには、アクセスが必要なユーザーまたは
アプリケーションにアクセス許可を付与する必要があります。を使用して AWS IAM Identity Center
ユーザーとアプリケーションを管理する場合は、アクセスレベルを定義するアクセス許可セットをユーザーまたはグループに割り当てます。アクセス許可セットは、ユーザーまたはアプリケーショ
ンに関連付けられたIAMロールにIAMポリシーを自動的に作成して割り当てます。詳細については、「 ユーザーガイド」の「アクセス許可セットAWS IAM Identity Center 」を参照してください。
IAM Identity Center を使用していない場合は、アクセスが必要なユーザーまたはアプリケーションのIAMエンティティ (ユーザーまたはロール) を作成する必要があります。次に、Amazon Cognito で適
切なアクセス許可を付与するポリシーをエンティティにアタッチする必要があります。アクセス許可が付与されたら、ユーザーまたはアプリケーション開発者に認証情報を提供します。これらの認証情報を使用して にアクセスします AWS。IAM ユーザー、グループ、ポリシー、アクセス許可の作成の詳細については、 IAMユーザーガイドのIAM「 での ID とポリシー、アクセス許可IAM」を参照してください。

AWS アカウント以外のユーザーに Amazon Cognito リソースへのアクセスを許可したい
他のアカウントのユーザーや組織外の人が、リソースにアクセスするために使用できるロールを作成できます。ロールの引き受けを委託するユーザーを指定できます。リソースベースのポリシーまたはアクセスコントロールリスト (ACLs) をサポートするサービスの場合、それらのポリシーを使用して、ユーザーにリソースへのアクセスを許可できます。
詳細については、以下を参照してください。
トラブルシューティング

1094

Amazon Cognito

開発者ガイド• Amazon Cognito がこれらの機能をサポートしているかどうかについては、「Amazon Cognito との連携方法 IAM」を参照してください。
• 所有している のリソースへのアクセスを提供する方法については、 AWS アカウント 「 ユーザーガイド」の「所有 AWS アカウント している別の のIAMユーザーへのアクセスを提供するIAM」を参照してください。
• リソースへのアクセスをサードパーティー に提供する方法については AWS アカウント、 ユー
ザーガイドの「サードパーティー AWS アカウント が所有する へのアクセスを提供するIAM」を参照してください。
• ID フェデレーションを通じてアクセスを提供する方法については、 IAMユーザーガイドの「外部認証されたユーザーへのアクセスの提供 (ID フェデレーション）」を参照してください。
• クロスアカウントアクセスでのロールとリソースベースのポリシーの使用の違いについては、「 ユーザーガイド」の「 でのクロスアカウントリソースアクセスIAMIAM」を参照してください。

Amazon Cognito のサービスリンクロールの使用
Amazon Cognito は AWS Identity and Access Management （IAM） サービスにリンクされたロール を使用します。サービスにリンクされたロールは、 がIAMロールを AWS サービス 引き受ける
ことを許可する信頼ポリシーを持つ一意のタイプのロールです。サービスにリンクされたロールは
Amazon Cognito によって事前定義されており、ユーザーに代わってサービスから他の AWS のサー
ビスを呼び出すために必要なすべてのアクセス許可が含まれています。
サービスリンクロールでは、必要な許可を手動で追加する必要がないため、Amazon Cognito の設定が簡単になります。Amazon Cognito は、そのサービスリンクロールの許可を定義します。別途定義されている場合を除き、Amazon Cognito しかそのロールを引き受けることができません。定義されたアクセス許可には、信頼ポリシーとアクセス許可ポリシーが含まれ、そのアクセス許可ポリシーを
他のIAMエンティティにアタッチすることはできません。
サービスリンクロールを削除するには、まずその関連リソースを削除します。これは、Amazon
Cognito リソースを保護します。リソースにアクセスするための許可を誤って削除できなくなくなるからです。
サービスにリンクされたロールをサポートする他のサービスの詳細については、AWS 「 と連携するサービスIAM」を参照し、「サービスにリンクされたロール」列で「はい」があるサービスを探します。 サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[Yes] (はい)リンクを選択します。
サービスリンクロールの使用

1095

Amazon Cognito

開発者ガイドAmazon Cognito のサービスリンクロール許可
Amazon Cognito は、以下のサービスリンクロールを使用します。
• AWSServiceRoleForAmazonCognitoIdpEmailService — Amazon Cognito ユーザープールサービス
が Amazon ID を使用して E SES メールを送信できるようにします。
• AWSServiceRoleForAmazonCognitoIdp — Amazon Cognito ユーザープールが Amazon Pinpoint プ
ロジェクトのイベントを発行し、エンドポイントを設定できるようにします。
AWSServiceRoleForAmazonCognitoIdpEmailService
AWSServiceRoleForAmazonCognitoIdpEmailService サービスリンクロールは、ロールの引き受けについて以下のサービスを信頼します。
• email.cognito-idp.amazonaws.com
このロールの許可ポリシーは、Amazon Cognito が指定されたリソースで以下のアクションを実行できるようにします。
で許可されるアクション AWSServiceRoleForAmazonCognitoIdpEmailService：• アクション: ses:SendEmail および ses:SendRawEmail• リソース: *このポリシーは、Amazon Cognito が指定されたリソースで以下のアクションを完了することを拒否します。
拒否されるアクション• アクション: ses:List*• リソース: *これらのアクセス許可により、Amazon Cognito は Amazon で検証済みの E メールアドレスをユー
ザーに E メールを送信するためにSESのみ使用できます。Amazon Cognito は、ユーザーがユーザー
プールのクライアントアプリで特定のアクション (サインアップやパスワードのリセットなど) を実行するときに、ユーザーに E メールを送信します。
サービスリンクロールの使用

1096

Amazon Cognito

開発者ガイドIAM エンティティ (ユーザー、グループ、ロールなど) がサービスにリンクされたロールを作成、編集、または削除できるようにするには、アクセス許可を設定する必要があります。詳細について
は、「 ユーザーガイド」の「サービスにリンクされたロールのアクセス許可IAM」を参照してくだ
さい。
AWSServiceRoleForAmazonCognitoIdp
AWSServiceRoleForAmazonCognitoIdp サービスにリンクされたロールは、次のサービスを信頼してロールを引き受けます。
• email.cognito-idp.amazonaws.com
このロールの許可ポリシーは、Amazon Cognito が指定されたリソースで以下のアクションを実行できるようにします。
で許可されるアクション AWSServiceRoleForAmazonCognitoIdp• アクション: cognito-idp:Describe• リソース: *このアクセス許可により、Amazon Cognito は Describe Amazon Cognito APIオペレーションを呼び出すことができます。
NotecreateUserPoolClient と を使用して Amazon Cognito を Amazon Pinpoint と統合するとupdateUserPoolClient、リソースのアクセス許可がインラインポリシーSLRとしてに追加されます。インラインポリシーは、mobiletargeting:UpdateEndpoint およびmobiletargeting:PutEvents 許可を提供します。これらの許可は、Amazon Cognito
が、Cognito に統合された Pinpoint プロジェクトのためにイベントを発行し、エンドポイン
トを設定できるようにします。

Amazon Cognito のサービスリンクロールの作成
サービスリンクロールを手動で作成する必要はありません。 AWS Management Console、、 AWS
CLIまたは Amazon Cognito で E メール配信を処理するために Amazon SES設定を使用するように
ユーザープールを設定するとAPI、Amazon Cognito によってサービスにリンクされたロールが作成されます。
サービスリンクロールの使用

1097

Amazon Cognito

開発者ガイドこのサービスリンクロールを削除した後で再度作成する必要が生じた場合は、同じ方法でアカウントにロールを再作成できます。Amazon 設定を使用して E メール配信を処理するようにユーザープー
ルを設定するSESと、Amazon Cognito によってサービスにリンクされたロールが再度作成されます。
Amazon Cognito がこのロールを作成する前に、ユーザープールの設定に使用するIAMアクセス許可に iam:CreateServiceLinkedRoleアクションが含まれている必要があります。でのアクセス許可の更新の詳細についてはIAM、「 IAMユーザーガイド」のIAM「 ユーザーのアクセス許可の変更」
を参照してください。

Amazon Cognito のサービスリンクロールの編集
AmazonCognitoIdp または AmazonCognitoIdpEmailService サービスにリンクされたロールは で編集できません AWS Identity and Access Management。サービスリンクロールを作成すると、多くのエンティティによってロールが参照される可能性があるため、ロール名を変更することはできません。ただし、 を使用してロールの説明を編集することはできますIAM。詳細については、「 IAM
ユーザーガイド」の「サービスにリンクされたロールの編集」を参照してください。

Amazon Cognito のサービスリンクロールの削除
サービスリンクロールを必要とする機能またはサービスが不要になった場合には、そのロールを削除することをお勧めします。ロールを削除すると、Amazon Cognito が積極的にモニタリングまたは維持しているエンティティのみを保持します。 AmazonCognitoIdp またはAmazonCognitoIdpEmailService サービスにリンクされたロールを削除する前に、ロールを使用する
ユーザープールごとに次のいずれかを実行する必要があります。
• ユーザープールを削除する。
• ユーザープールの E メール設定を更新して、デフォルトの E メール機能を使用する。デフォルト
設定では、サービスリンクロールが使用されません。
ロールを使用するユーザープール AWS リージョン を使用して、各 で アクションを実行することを忘れないでください。
Note
リソースを削除しようとするときに Amazon Cognito サービスがロールを使用している場合
は、削除が失敗する可能性があります。失敗した場合は、数分待ってから操作を再試行してください。

サービスリンクロールの使用

1098

Amazon Cognito

開発者ガイドAmazon Cognito ユーザープールを削除する
1.

にサインイン AWS Management Console し、 で Amazon Cognito コンソールを開きますhttps://console.aws.amazon.com/cognito。

2.

[Manage User Pools] (ユーザープールの管理) をクリックします。

3.

[Your User Pools] (ユーザープール) ページで、削除するユーザープールを選択します。

4.

[Delete pool] (プールの削除) をクリックします。

5.

[Delete user pool] (ユーザープールの削除) ウィンドウで「delete」と入力し、[Delete pool](プールの削除) をクリックします。

デフォルトの E メール機能を使用するために Amazon Cognito ユーザープールを更新する
1.

にサインイン AWS Management Console し、 で Amazon Cognito コンソールを開きますhttps://console.aws.amazon.com/cognito。

2.

[Manage User Pools] (ユーザープールの管理) をクリックします。

3.

[Your User Pools] (ユーザープール) ページで、更新するユーザープールを選択します。

4.

左側のナビゲーションメニューで [Message customizations] (メッセージのカスタマイズ) をク
リックします。

5.

「Amazon SES設定で E メールを送信しますか？」で、「いいえ - Cognito を使用する (デフォルト）」を選択します。

6.

E メールアカウントオプションの設定を終了したら、[Save changes] (変更の保存) をクリックします。

を使用してサービスにリンクされたロールを手動で削除するには IAM
IAM コンソール、、または AWS API を使用して AWS CLI、 AmazonCognitoIdp またはAmazonCognitoIdpEmailService サービスにリンクされたロールを削除します。詳細については、「 ユーザーガイド」の「サービスにリンクされたロールの削除IAM」を参照してください。

Amazon Cognito サービスリンクロールがサポートされるリージョン
Amazon Cognito は、サービス AWS リージョン が利用可能なすべての でサービスにリンクされたロールをサポートします。詳細については、「AWS リージョン およびエンドポイント」を参照してください。
サービスリンクロールの使用

1099

Amazon Cognito

開発者ガイドAmazon Cognito でのロギングとモニタリング
モニタリングは、Amazon Cognito およびその他の AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。現在 Amazon Cognito では、組織と、その組織内で発生するアクティビティを監視することができるように、以下の AWS サービス をサポートしています。
• AWS CloudTrail – CloudTrail を使用すると、Amazon Cognito コンソールからのAPI呼び出しとAmazon CognitoAPIオペレーションへのコード呼び出しをキャプチャできます。例えば、ユーザーが認証すると、 はリクエストの IP アドレス、リクエスト者、リクエスト日時などの詳細を記録
CloudTrail できます。
• Amazon CloudWatch Logs – CloudWatch Logs を使用すると、ユーザーアクティビティの詳細なログをロググループに送信できます。例えば、詳細なユーザーアクティビティログを確認して、ユーザーへの E メールとSMSメッセージの配信をトラブルシューティングできます。
• Amazon CloudWatch メトリクス – CloudWatch メトリクスを使用すると、ほぼリアルタイムでイ
ベントが発生した場合に、モニタリング、レポート、自動アクションを実行できます。例えば、提供されたメトリクスに CloudWatch ダッシュボードを作成して Amazon Cognito ユーザープールを
モニタリングしたり、提供されたメトリクスに CloudWatch アラームを作成して、設定されたしきい値に違反したときに通知したりできます。
• Amazon CloudWatch Logs Insights – CloudWatch Logs Insights を使用すると、Amazon Cognito
CloudTrail ログファイルをモニタリング CloudWatch するために にイベントを送信する CloudTrail
ように を設定できます。
トピック• コストのモニタリング• および Service Quotas でのクォータ CloudWatch と使用状況の追跡• を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

コストのモニタリング
Amazon Cognito では、使用量の以下のディメンションに対して料金が発生します。
• ユーザープールの月間アクティブユーザー (MAUs）• OIDC または SAMLフェデレーションでMAUsサインインしたユーザープール• MAUs 高度なセキュリティ機能を備えたユーザープール内のログ記録とモニタリング

1100

Amazon Cognito

開発者ガイド• アクティブなユーザープールアプリクライアントと、クライアント認証情報付与によるマシンツー
マシン (M2M) 認証のリクエストボリューム• 一部のカテゴリのユーザープールのデフォルトクォータを超える購入使用量 APIs
さらに、E メールメッセージ、SMSメッセージ、Lambda トリガーなどのユーザープールの機能では、依存サービスにコストが発生する可能性があります。完全な概要については、Amazon Cognitoの料金」を参照してください。

コストの表示と予測
AWS Billing and Cost Management コンソール で AWS コストを表示およびレポートできます。Amazon Cognito の最新の料金は、請求と支払いセクションで確認できます。請求書 、サービス別の料金 で、 をフィルタリングCognitoして使用状況を表示します。詳細については、AWS Billing
ユーザーガイドの「請求書の表示」を参照してください。
API リクエストレートをモニタリングするには、Service Quotas コンソールで使用率メトリクスを確認します。例えば、クライアント認証情報リクエストは ClientAuthentication 、リクエストのレー
トとして表示されます。請求書では、これらのリクエストは、それらを生成したアプリクライアントに関連付けられています。この情報により、マルチテナントアーキテクチャ のテナントに公平にコストを割り当てることができます。
一定期間の M2M リクエストの数を取得するには、分析のためにAWS CloudTrail イベント
を CloudWatch Logs に送信することもできます。クライアント認証情報の付与 CloudTrail
Token_POSTを使用してイベントをクエリします。次の CloudWatch Insights クエリはこの数を返します。
filter eventName = "Token_POST" and @message like '"grant_type":["client_credentials"]'| stats count(*)のコスト管理Amazon Cognito は、ユーザー数、機能の使用状況、リクエスト量に基づいて請求します。Amazon
Cognito のコストを管理するためのヒントを以下に示します。
非アクティブなユーザーをアクティブ化しないユーザーがアクティブになる一般的なオペレーションは、サインイン、サインアップ、パスワー
ドのリセットです。詳細なリストについては、「」を参照してください月次のアクティブユー
ザー。Amazon Cognito は、非アクティブなユーザーを請求書にカウントしません。ユーザーをコストのモニタリング

1101

Amazon Cognito

開発者ガイドアクティブに設定する操作は避けてください。AdminGetUser API オペレーションの代わりに、
ListUsers オペレーションでユーザーをクエリします。非アクティブなユーザーに対して、ユーザー
プールオペレーションの大量の管理テストを実行しないでください。
フェデレーティッドユーザーのリンク
2SAML.0 または OpenID Connect (OIDC) ID プロバイダーでサインインするユーザーは、ローカル
ユーザー よりもコストが高くなります。これらのユーザーをローカルユーザープロファイル にリンクできます。リンクされたユーザーは、フェデレーティッドユーザーに付属する属性とアクセスを使用して、ローカルユーザーとしてサインインできます。からのユーザー、SAMLまたは 1 か月の間に、リンクされたローカルアカウントでのみサインインOIDC IdPs するユーザーは、ローカルユー
ザーとして課金されます。
リクエストレートの管理
ユーザープールがクォータの上限に近づいている場合は、ボリュームを処理するための追加容量の購入を検討してください。アプリケーション内のリクエストの量を減らすことができる場合があります。詳細については、「クォータ制限のリクエストレートを最適化する」を参照してください。
必要な場合にのみ新しいトークンをリクエストする
クライアント認証情報の付与によるマシンツーマシン (M2M) 認証は、大量のトークンリクエストに達する可能性があります。新しいトークンリクエストはそれぞれ、リクエストレートのクォータと請求書のサイズに影響します。コストを最適化するには、アプリケーションの設計にトークンの有効期限設定とトークン処理を含めます。
• アクセストークンをキャッシュして、アプリケーションが新しいトークンをリクエストしたときに、以前に発行されたトークンのキャッシュバージョンを受け取るようにします。この方法を実装すると、キャッシュプロキシは、以前に取得したトークンの有効期限を認識せずにアクセストー
クンをリクエストするアプリケーションに対するガードとして機能します。キャッシュトークン
は、Lambda 関数や Docker コンテナなどの有効期間の短いマイクロサービスに最適です。
• トークンの有効期限を考慮するトークン処理メカニズムをアプリケーションに実装します。以前のトークンの有効期限が切れるまで、新しいトークンをリクエストしないでください。ベストプラク
ティスとして、トークンの有効期間の約 75% でトークンを更新します。この方法では、トークンの有効期間を最大化し、アプリケーションのユーザー継続性を確保します。
各アプリケーションの機密性と可用性のニーズを評価し、適切な有効期間でアクセストークンを発行するようにユーザープールアプリクライアントを設定します。カスタムトークンの有効期間は、
認証情報のリクエストの頻度を永続的に管理できる、存続期間の長いサーバーAPIsやサーバーに最適です。
コストのモニタリング

1102

Amazon Cognito

開発者ガイド未使用のクライアント認証情報アプリケーションクライアントを削除する
M2M 認証は、トークンリクエストのレートと、クライアント認証情報を付与するアプリケーション
クライアントの数という 2 つの要素に基づいて請求します。M2M 認証用のアプリケーションクライ
アントが使用されていない場合は、クライアント認証情報を発行するための認可を削除するか、削除します。アプリケーションクライアント設定の管理の詳細については、「」を参照してくださいユー
ザープールアプリクライアント。
高度なセキュリティを管理する
ユーザープールでアドバンストセキュリティ機能を設定すると、アドバンストセキュリティ請求レー
トがユーザープールMAUs内のすべての に適用されます。高度なセキュリティ機能を必要としないユーザーがいる場合は、別のユーザープールに分割します。

および Service Quotas でのクォータ CloudWatch と使用状況の追跡
Amazon Cognito ユーザープールをモニタリングできます。 CloudWatch Service Quotas ま
た、Service Quotas で ID プールの使用状況をモニタリングすることもできます。 CloudWatch
は raw データを収集し、読み取り可能なほぼリアルタイムのメトリクスに処理します。では
CloudWatch、特定のしきい値を監視し、それらのしきい値に達したときに通知を送信したりアクションを実行したりするアラームを設定できます。サービスクォータの CloudWatch アラームを作成するには、「アラームの作成 CloudWatch」を参照してください。Amazon Cognito のメトリクス
は 5 分間隔で利用できます。の保持期間の詳細については CloudWatch、Amazon CloudWatch FAQ
ページを参照してください。
Service Quotas を使用して、Amazon Cognito ユーザープールとアイデンティティプールのクォー
タの使用状況を表示および管理できます。Service Quotas コンソールには、サービスクォータの表示、サービスクォータ引き上げのリクエスト、および現在の使用状況の表示という 3 つの機能があります。最初の機能を使用してクォータを表示し、クォータが調整可能かどうかを確認できます。2番目の機能を使用して、Service Quotas の引き上げをリクエストできます。最後の機能は、クォータの使用率の表示に使用できます。この機能を利用できるのは、アカウントがしばらくの間アクティ
ブな状態であった場合のみです。Service Quotas コンソールでのクォータの表示に関する詳細については、「Viewing service quotas」を参照してください。
Note
Amazon Cognito のメトリクスは 5 分間隔で利用可能になります。の保持期間の詳細については CloudWatch、「Amazon CloudWatch FAQ ページ」を参照してください。

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1103

Amazon Cognito

開発者ガイドクロスアカウントオブザーバビリティで CloudWatchモニタリングアカウントとして AWS アカウン
ト 設定された にサインインしている場合、そのモニタリングアカウントを使用してサービスクォー
タを視覚化し、そのモニタリングアカウントにリンクされているソースアカウントのメトリクスのア
ラームを設定できます。詳細については、CloudWatch 「クロスアカウントオブザーバビリティ」を参照してください。
トピック• Amazon Cognito ユーザープールからのログのエクスポート• Amazon Cognito ユーザープールのメトリクス• Amazon Cognito ユーザープールのディメンション• Service Quotas コンソールを使用してメトリクスを追跡する• CloudWatch コンソールを使用してメトリクスを追跡する• クォータの CloudWatch アラームを作成する

Amazon Cognito ユーザープールからのログのエクスポート
CloudWatch ロググループなど AWS サービス、追加のアクティビティの詳細なログを別の に送信するようにユーザープールを設定できます。これらのログは のログよりも細かく、ユーザープールのトラブルシューティングや AWS CloudTrail、高度なセキュリティ機能 を使用したユーザーサイン
インアクティビティの分析に役立ちます。のログSMSと E メール通知エラーをストリーミングする
場合、ユーザープールは ERRORレベルのログを CloudWatch ロググループに送信します。ユーザー
サインインアクティビティのログをストリーミングする場合、ユーザープールは INFOレベルのログをロググループ、Amazon Data Firehose ストリーム、または Amazon S3 バケットに送信します。
ユーザープールで両方のオプションを組み合わせることができます。
トピック• ログのエクスポートについて知っておくべきこと• E メールとSMSメッセージの配信エラーのエクスポート• 高度なセキュリティユーザーアクティビティログのエクスポート

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1104

Amazon Cognito

開発者ガイドログのエクスポートについて知っておくべきこと
コストへの影響
Amazon Data Firehose、Amazon S3、および CloudWatch Logs では、データの取り込みと取得にコストが発生します。ログ記録設定は、 AWS 請求書に影響する可能性があります。詳細については、次を参照してください。
• Amazon CloudWatch 料金表 で提供されるログ。
• Amazon Data Firehose の料金• Amazon S3 の価格設定
ユーザーアクティビティログのエクスポートにはセキュリティ評価が含まれており、ユーザープールの高度なセキュリティ機能 の機能です。Amazon Cognito は、高度なセキュリティ機能がアクティブな場合にのみこれらのログを生成します。これらの機能により、ユーザープール内の月間アクティブユーザー (MAU) あたりのコストが増加します。詳細については、「Amazon
Cognito の料金」を参照してください。
ベストエフォート配信
Amazon Cognito からのログの配信はベストエフォートに基づきます。ユーザープールが配信するログの量、および CloudWatch Logs、Amazon S3、Firehose のサービスクォータは、ログの配信に影響を与える可能性があります。
既存の外部ログは影響を受けません
これらのログ記録オプションは、ユーザープールの次のログ機能を置き換えたり変更したりしま
せん。
1. CloudTrail サインアップやサインインなどの日常的なユーザーアクティビティの ログ。
2. CloudWatch メトリクスを使用した大規模なユーザーアクティビティの分析。
これとは別に、ユーザーインポートジョブと Lambda トリガーからのログも CloudWatch Logs
で確認できます。Amazon Cognito と Lambda は、詳細なアクティビティログ用に指定したロググループとは異なるロググループに、これらのログを保存します。
ユーザープールにのみ適用されます
ID プールのログエクスポート機能はありません。
ユーザーアクセス許可とサービスにリンクされたロールが必要です
ログのエクスポートを設定する AWS プリンシパルには、以下のトピックで説明するように、
ターゲットリソースを変更するアクセス許可が必要です。Amazon Cognito は、ユーザーに代および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1105

Amazon Cognito

開発者ガイド

わってサービスにリンクされたロールを作成し、ターゲットリソースにログを配信するロールを引き受けます。
Amazon Cognito からログを送信するための認可モデルの詳細については、「Amazon Logs
ユーザーガイド」の「 からのログ記録を有効にする AWS サービス」を参照してください。
CloudWatch
ログレベルはログタイプに限定されます
メッセージ配信ログは、 userNotification タイプとERRORエラーレベルのログです。高度なセキュリティユーザーアクティビティログは、 userAuthEvents タイプとINFOエラーレ
ベルのログです。の 2 つのメンバーを組み合わせることができます。LogConfigurations1
つは userNotificationから CloudWatch ログ、もう 1 つは userAuthEventsからFirehose、Amazon S3、または CloudWatch ログです。
ユーザーアクティビティログを複数の送信先に送信することはできません。ユーザー通知ログを
CloudWatch Logs 以外の送信先に送信することはできません。
さまざまな設定オプション
ユーザー通知ログは、Amazon Cognito ユーザープールAPIまたは AWS でのみ設定できます
SDK。高度なセキュリティユーザーアクティビティログは、 APIまたは Amazon Cognito コン
ソールで設定できます。両方を設定するには、 のリクエスト例APIに示すように、 を使用しますSetLogDeliveryConfiguration。
大規模なリソースベースのポリシーで必要な追加設定
サイズが 5,120 文字を超えるリソースポリシーを持つロググループにログを送信するには、/
aws/vendedlogs で始まるパスでロググループを設定します。詳細については、「特定のサービスからのログ記録の有効化 AWS」を参照してください。
E メールとSMSメッセージの配信エラーのエクスポート
E メールおよびSMSメッセージ配信エラーの場合、ユーザープールからエラーレベルのユーザー通
知ログを配信できます。この機能を有効にすると、Amazon Cognito からログを送信する先のロググ
ループを選択できます。ユーザー通知のログ記録は、ユーザープールが Amazon と Amazon で配信した E メールSNSとSMSメッセージのステータスを確認する場合に役立ちますSES。このログエク
スポートオプションは、ユーザーアクティビティエクスポート とは異なり、高度なセキュリティ機能を必要としません。

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1106

Amazon Cognito

開発者ガイドAPI SetLogDeliveryConfiguration API リクエスト内の Amazon Cognito ユーザープールを使用して詳細な通知ログを設定できます。GetLogDeliveryConfiguration API リクエストでユーザープールのログ
記録設定を表示できます。リクエスト本文の例を次に示します。
{"LogConfigurations": [{"CloudWatchLogsConfiguration": {"LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:example-userpool-exported"},"EventSource": "userNotification","LogLevel": "ERROR"}],"UserPoolId": "us-west-2_EXAMPLE"}

これらのリクエストは、次のアクセス許可を持つ AWS 認証情報で承認する必要があります。
{"Version": "2012-10-17","Statement": [{"Sid": "ManageUserPoolLogs","Action": ["cognito-idp:SetLogDeliveryConfiguration","cognito-idp:GetLogDeliveryConfiguration",],"Resource": ["*"],"Effect": "Allow"},{"Sid": "CognitoLog","Action": ["logs:CreateLogDelivery","logs:GetLogDelivery","logs:UpdateLogDelivery","logs:DeleteLogDelivery","logs:ListLogDeliveries"],
および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1107

Amazon Cognito

開発者ガイド"Resource": ["*"],"Effect": "Allow"},{"Sid": "CognitoLoggingCWL","Action": ["logs:PutResourcePolicy","logs:DescribeResourcePolicies","logs:DescribeLogGroups"],"Resource": ["*"],"Effect": "Allow"}]}

ユーザープールのイベントの例を次に示します。このログスキーマは変更される可能性があります。
一部のフィールドは NULL 値がログとして記録される場合があります。
{"eventTimestamp": "1687297330677","eventSource": "USER_NOTIFICATION","logLevel": "ERROR","message": {"details": "String"},"logSourceId": {"userPoolId": "String"}}

高度なセキュリティユーザーアクティビティログのエクスポート
高度なセキュリティ機能を持つユーザープールは、ユーザーアクティビティイベントをログに記録します。ユーザープールでのユーザーサインイン、サインアウト、およびその他の認証オペレーションの詳細とセキュリティ評価です。独自のログ管理システムでユーザーアクティビティログを確認したり、アーカイブを作成したりできます。このデータは、Amazon CloudWatch Logs ロググルー
プ、Amazon Data Firehose ストリーム、または Amazon Simple Storage Service (Amazon S3) バ
および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1108

Amazon Cognito

開発者ガイドケットにエクスポートできます。そこから、このデータを他のシステムに取り込んで、運用プロセスに適合する方法でデータを分析、正規化、またはその他の方法で処理できます。このタイプのデータをエクスポートするには、ユーザープールで高度なセキュリティ機能がアクティブである必要があります。
これらのユーザーアクティビティログの情報を使用して、ユーザーのサインインおよびアカウン
ト管理アクティビティのプロファイルを表示できます。デフォルトでは、Amazon Cognito はこ
れらのイベントをユーザープールに基づくストレージにキャプチャします。次の例は、サインイ
ンし、リスク要因がないと評価されたユーザーのイベントの例です。この情報を取得するには、
AdminListUserAuthEventsAPIオペレーションを使用します。以下は、その出力例です。
{"AuthEvents": [{"EventId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222","EventType": "SignIn","CreationDate": "2024-06-27T10:49:59.139000-07:00","EventResponse": "Pass","EventRisk": {"RiskDecision": "NoRisk","CompromisedCredentialsDetected": false},"ChallengeResponses": [{"ChallengeName": "Password","ChallengeResponse": "Success"}],"EventContextData": {"IpAddress": "192.0.2.1","DeviceName": "Chrome 126, Windows 10",
"Timezone": "-07:00","City": "null","Country": "United States"}}],"NextToken": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222#2024-06-27T17:49:59.139Z"}

Amazon Cognito コンソールまたは SetLogDeliveryConfigurationAPIオペレーションを使用して、ユーザーアクティビティのログエクスポートをアクティブ化できます。
および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1109

Amazon Cognito

開発者ガイドAWS Management Console
1.

使用するバケットがまだない場合は、S3 バケット 、Firehose ストリーム 、またはCloudWatch ロググループ を作成します。

2.

Amazon Cognito コンソールにサインインします。

3.

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

4.

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

5.

高度なセキュリティタブを選択します。ユーザーアクティビティログのエクスポートを検索し、編集を選択します。

6.

ログ記録ステータス で、ユーザーアクティビティログのエクスポートを有効にする の横にあるチェックボックスをオンにします。

7.

ログ記録先 で、ログCloudWatch グループ 、Amazon Data Firehose ストリーム 、またはS3 バケット のログを処理する を選択します AWS サービス 。

8.

選択すると、対応するリソースタイプがリソースセレクタに入力されます。リストからログ
グループ、ストリーム、またはバケットを選択します。作成ボタンを選択して、選択したサービスの AWS Management Console に移動し、新しいリソースを作成することもできます。

9.

[変更を保存] を選択します。

API
ユーザーアクティビティログの送信先のタイプを 1 つ選択します。
以下は、Firehose ストリームをログの送信先として設定するSetLogDeliveryConfigurationリクエスト本文の例です。
{"LogConfigurations": [{"EventSource": "userAuthEvents","FirehoseConfiguration": {"StreamArn": "arn:aws:firehose:us-west-2:123456789012:deliverystream/
example-user-pool-activity-exported"},"LogLevel": "INFO"}],"UserPoolId": "us-west-2_EXAMPLE"
および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1110

Amazon Cognito

開発者ガイド}以下は、Amazon S3 バケットをログの送信先として設定するSetLogDeliveryConfigurationリクエスト本文の例です。
{"LogConfigurations": [{"EventSource": "userAuthEvents","S3Configuration": {"BucketArn": "arn:aws:s3:::DOC-EXAMPLE-LOGGING-BUCKET"},"LogLevel": "INFO"}],"UserPoolId": "us-west-2_EXAMPLE"}

以下は、 CloudWatch ロググループをログの送信先として設定するSetLogDeliveryConfigurationリクエスト本文の例です。
{"LogConfigurations": [{"EventSource": "userAuthEvents","CloudWatchLogsConfiguration": {"LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:DOCEXAMPLE-LOG-GROUP"},"LogLevel": "INFO"}],"UserPoolId": "us-west-2_EXAMPLE"}

ログ配信を設定するユーザーは、ユーザープール管理者であり、次の追加のアクセス許可を持っている必要があります。
Amazon S3{
および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1111

Amazon Cognito

開発者ガイド"Version": "2012-10-17","Statement": [{"Sid": "ManageUserPoolLogs","Action": ["cognito-idp:SetLogDeliveryConfiguration","cognito-idp:GetLogDeliveryConfiguration",],"Resource": ["*"],"Effect": "Allow"},{"Sid": "ManageLogsS3","Effect": "Allow","Action": ["logs:CreateLogDelivery","s3:PutBucketPolicy","s3:GetBucketPolicy"],"Resource": "*"}]}CloudWatch Logs{
"Version": "2012-10-17","Statement": [{"Sid": "ManageUserPoolLogs","Action": ["cognito-idp:SetLogDeliveryConfiguration","cognito-idp:GetLogDeliveryConfiguration",],"Resource": ["*"],"Effect": "Allow"},{

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1112

Amazon Cognito

開発者ガイド"Sid": "ManageLogsCWL","Action": ["logs:CreateLogDelivery","logs:GetLogDelivery","logs:UpdateLogDelivery","logs:DeleteLogDelivery","logs:ListLogDeliveries","logs:PutResourcePolicy","logs:DescribeResourcePolicies","logs:DescribeLogGroups"],"Resource": ["*"],"Effect": "Allow"}]}

Amazon Data Firehose{"Version": "2012-10-17","Statement": [{"Sid": "ManageUserPoolLogs","Action": ["cognito-idp:SetLogDeliveryConfiguration","cognito-idp:GetLogDeliveryConfiguration",],"Resource": ["*"],"Effect": "Allow"},{"Sid": "ManageUserPoolLogsFirehose","Effect": "Allow","Action": ["logs:CreateLogDelivery","iam:CreateServiceLinkedRole","firehose:TagDeliveryStream"],

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1113

Amazon Cognito

開発者ガイド"Resource": "*"}]}ユーザープールのイベントの例を次に示します。このログスキーマは変更される可能性があります。
一部のフィールドは NULL 値がログとして記録される場合があります。
{"eventTimestamp": "1687297330677","eventSource": "USER_ACTIVITY","logLevel": "INFO","message": {"version": "1","eventId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111","eventType": "SignUp","userSub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222","userName": "test-user","userPoolId": "us-west-2_EXAMPLE","clientId": "1example23456789","creationDate": "Wed Jul 17 17:25:55 UTC 2024","eventResponse": "InProgress","riskLevel": "","riskDecision": "PASS","challenges": [],"deviceName": "Other, Other","ipAddress": "192.0.2.1","requestId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333","idpName": "","compromisedCredentialDetected": "false","city": "Seattle","country": "United States","eventFeedbackValue": "","eventFeedbackDate": "","eventFeedbackProvider": ""},"logSourceId": {"userPoolId": "us-west-2_EXAMPLE"}}

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1114

Amazon Cognito

開発者ガイドAmazon Cognito ユーザープールのメトリクス
以下の表には、Amazon Cognito ユーザープールに使用できるメトリクスがリストされています。Amazon Cognito の Amazon CloudWatch メトリクスの名前空間は AWS/Cognito です。詳細については、「Amazon CloudWatch ユーザーガイド」の「名前空間」を参照してください。
Note
過去 2 週間に新しいデータポイントがなかったメトリクスは、コンソールに表示されません。また、コンソールの [All metrics] (すべてのメトリクス) タブにある検索ボックスにそれらのメトリクス名またはディメンション名を入力しても表示されません。さらに、listmetrics コマンドの結果にも返されません。これらのメトリクスを取得する最善の方法は、の get-metric-dataまたは get-metric-statistics コマンドを使用することですAWS CLI。

メトリクス

説明

SignUpSuccesses

Amazon Cognito ユーザープールに対して正常に行われたユーザー登録リクエストの合計数を提供します。正常に行われたユーザー登録リク
エストは 1 の値を生成し、失敗したリクエスト
は 0 の値を生成します。スロットリングされた
リクエストも失敗したリクエストと見なされるため、スロットリングされたリクエストも 0 の数を生成します。
正常に行われたユーザー登録リクエストの割合を確認するには、このメトリクスの Average
統計を使用します。ユーザー登録リクエストの合計数を計上するには、このメトリクスのSample Count 統計を使用します。正常に行われたユーザー登録リクエストの合計数を計上するには、このメトリクスの Sum 統計を使用します。失敗したユーザー登録リクエストの合計数を CloudWatch Mathカウントするには、および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1115

Amazon Cognito

メトリクス

開発者ガイド

説明式を使用して Sum 統計から Sample Count 統計を減算します。
このメトリクスは、各ユーザープールクライア
ントのユーザープールごとにパブリッシュされます。ユーザー登録が管理者によって実行された場合、メトリクスはユーザープールクライア
ントを Admin とした形でパブリッシュされます。
このメトリクスは、ユーザーのインポートおよびユーザーの移行には生成されません。
メトリクスディメンション:
UserPool、UserPoolClient
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1116

Amazon Cognito

開発者ガイドメトリクス

説明

SignUpThrottles

Amazon Cognito ユーザープールに対して行われたユーザー登録リクエストで、スロットリン
グされたものの合計数を提供します。ユーザ
ー登録リクエストがスロットリングされるたびに、1 の数が発行されます。
スロットリングされたユーザー登録リクエストの合計数を計上するには、このメトリクスのSum 統計を使用します。
このメトリクスは、各クライアントのユーザー
プールごとにパブリッシュされます。スロット
リングされたリクエストが管理者によって行われたものである場合、メトリクスはユーザー
プールクライアントを Admin とした形でパブリッシュされます。
メトリクスディメンション:
UserPool、UserPoolClient
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1117

Amazon Cognito

開発者ガイドメトリクス

説明

SignInSuccesses

Amazon Cognito ユーザープールに対して正常に行われたユーザー認証リクエストの合計数を提供します。認証トークンがユーザーに発行されると、ユーザー認証は正常に行われたとみなされます。認証が正常に行われると 1 の値が生成され、リクエストが失敗すると 0 の値が生成されます。スロットリングされたリクエストも失敗したリクエストと見なされるため、スロッ
トリングされたリクエストも 0 の数を生成します。
正常に行われたユーザー認証リクエストの割合を調べるには、このメトリクスの Average
統計を使用します。ユーザー認証リクエストの合計数を計上するには、このメトリクスのSample Count 統計を使用します。正常に行われたユーザー認証リクエストの合計数を計上するには、このメトリクスの Sum 統計を使用します。失敗したユーザー認証リクエストの合計数を CloudWatch Mathカウントするには、式を使用して Sum 統計から Sample Count 統計を減算します。
このメトリクスは、各クライアントのユーザー
プールごとにパブリッシュされます。リクエス
トで無効なユーザープールクライアントが提供された場合、メトリクスの対応するユーザー
プールクライアント値には、リクエストで送信された実際の無効な値ではなく、固定値のInvalid が含まれます。
このメトリクスには Amazon Cognito トークンを更新するリクエストが含まれないことに注意
してください。Refresh トークン統計の提供には、別のメトリクスがあります。

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1118

Amazon Cognito

メトリクス

開発者ガイド説明
メトリクスディメンション:
UserPool、UserPoolClient
単位: 数

SignInThrottles

Amazon Cognito ユーザープールに対して行われたユーザー認証リクエストで、スロットリン
グされたものの合計数を提供します。認証リク
エストがスロットリングされるたびに、1 の数が発行されます。
スロットリングされたユーザー認証リクエストの合計数を計上するには、このメトリクスのSum 統計を使用します。
このメトリクスは、各クライアントのユーザー
プールごとにパブリッシュされます。リクエス
トで無効なユーザープールクライアントが提供された場合、メトリクスの対応するユーザー
プールクライアント値には、リクエストで送信された実際の無効な値ではなく、固定値のInvalid が含まれます。
このメトリクスに Amazon Cognito トークンを更新するリクエストは含まれません。Refresh
トークン統計の提供には、別のメトリクスがあります。
メトリクスディメンション:
UserPool、UserPoolClient
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1119

Amazon Cognito

開発者ガイドメトリクス

説明

TokenRefreshSuccesses

Amazon Cognito ユーザープールに対して行われた Amazon Cognito を更新するリクエスト
で、正常に行われたものの合計数を提供します。Amazon Cognito トークンの更新リクエス
トが正常に行われると 1 の値が生成され、失敗したリクエストには 0 の値が生成されます。ス
ロットリングされたリクエストも失敗したリク
エストと見なされるため、スロットリングされたリクエストも 0 の数を生成します。
正常に行われた Amazon Cognito トークンの更新リクエストの割合を調べるには、このメトリ
クスの Average 統計を使用します。Amazon
Cognito トークンを更新するリクエストの合計数を計上するには、このメトリクスの Sample
Count 統計を使用します。正常に行われたAmazon Cognito トークンの更新リクエストの合計数を計上するには、このメトリクスの Sum
統計を使用します。Amazon Cognito トークンの更新に失敗したリクエストの合計数をカウントするには、 Math式を使用して CloudWatch
Sum 統計から Sample Count 統計を減算します。
このメトリクスは、ユーザープールクライアン
トごとにパブリッシュされます。リクエストに無効なユーザープールクライアントがある場合、ユーザープールクライアントの値には固定値の Invalid が含まれます。
メトリクスディメンション:
UserPool、UserPoolClient
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1120

Amazon Cognito

開発者ガイドメトリクス

説明

TokenRefreshThrottles

Amazon Cognito ユーザープールに対して行われた Amazon Cognito トークンを更新するリク
エストで、スロットリングされたものの合計数を提供します。Amazon Cognito トークンの更新リクエストがスロットリングされるたびに、1 の数が発行されます。
Amazon Cognito トークンのスロットリングされた更新リクエストの合計数を計上するには、
このメトリクスの Sum 統計を使用します。
このメトリクスは、各クライアントのユーザー
プールごとにパブリッシュされます。リクエス
トで無効なユーザープールクライアントが提供された場合、メトリクスの対応するユーザー
プールクライアント値には、リクエストで送信された実際の無効な値ではなく、固定値のInvalid が含まれます。
メトリクスディメンション:
UserPool、UserPoolClient
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1121

Amazon Cognito

開発者ガイドメトリクス

説明FederationSuccesses

Amazon Cognito ユーザープールに対して正常に行われた ID フェデレーションリクエストの合計数を提供します。ID フェデレーションは、Amazon Cognito がユーザーに認証トークンを発行した時点で成功とみなされます。ID
フェデレーションリクエストが正常に行われると 1 の値が生成され、失敗すると 0 の値が生成されます。スロットリングされたリクエスト
や、認証コードは生成されるがトークンは生成されないリクエストでは、値が 0 になります。
正常に行われた ID フェデレーションリクエ
ストの割合を調べるには、このメトリクスの
Average 統計を使用します。ID フェデレー
ションリクエストの合計数を計上するには、
このメトリクスの Sample Count 統計を使用します。正常に行われた ID フェデレーショ
ンリクエストの合計数を計上するには、このメトリクスの Sum 統計を使用します。失敗した ID フェデレーションリクエストの合計数をCloudWatch Mathカウントするには、 式を使用して Sum 統計から Sample Count 統計を減算します。
メトリクスディメンショ
ン:UserPool、UserPoolC
lient 、IdentityProvider
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1122

Amazon Cognito

開発者ガイドメトリクス

説明FederationThrottles

Amazon Cognito ユーザープールに対して行われた ID フェデレーションリクエストで、ス
ロットリングされたものの合計数を提供します。ID フェデレーションリクエストがスロッ
トリングされるたびに、1 の数が発行されます。
スロットリングされた ID フェデレーションリ
クエストの合計数を計上するには、このメトリ
クスの Sum 統計を使用します。
メトリクスディメンショ
ン:UserPool、UserPoolC
lient 、IdentityProvider
単位: 数

CallCount

顧客が実行したコールで、カテゴリに関連するものの合計数を提供します。このメトリクスには、スロットリングコール、失敗したコール、
正常に行われたコールなどのすべてのコールが含まれます。
このメトリクスは [Usage] (使用状況) の
nameSpace で利用できます。
カテゴリクォータは、 AWS アカウントとリー
ジョンのすべてのユーザープールにまたがるア
カウントごとに適用されます。
カテゴリ内のコールの合計数は、このメトリク
スの Sum 統計を使用して計上できます。
メトリクスディメンション: Type、Resource、Class
単位: 数

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1123

Amazon Cognito

開発者ガイドメトリクス

説明

ThrottleCount

スロットルされたコールで、カテゴリに関連するものの合計数を提供します。
このメトリクスは [Usage] (使用状況) の
nameSpace で利用できます。
このメトリクスは、アカウントレベルでパブリッシュされます。
カテゴリ内のコールの合計数は、このメトリク
スの Sum 統計を使用して計上できます。
メトリクスディメンション: Type、Resource、Class
単位: 数

Amazon Cognito ユーザープールのディメンション
Amazon Cognito によってパブリッシュされた使用状況メトリクスの絞り込みには、以下のディメンションが使用されます。ディメンションは、CallCount および ThrottleCount メトリクスのみに適用されます。
ディメンション

説明

Service

リソースを含む AWS サービスの名前。A
mazon Cognito の使用状況メトリクスの場合、
このディメンションの値は Cognito user
pool です。

Type

報告されるエンティティのタイプ。Amazon
Cognito 使用状況メトリクスの唯一の有効な値は ですAPI。

リソース

実行中のリソースのタイプ。有効な値はカテゴ
リ名のみです。

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1124

Amazon Cognito

開発者ガイドディメンション

説明Class

追跡されているリソースのクラス。Amazon
Cognito は class ディメンションを使用しません。

Service Quotas コンソールを使用してメトリクスを追跡する
Service Quotas を使用して、一元化された場所から Amazon Cognito ユーザープールおよびアイデ
ンティティプールのクォータを表示および管理できます。Service Quotas コンソールを使用して、特定のクォータに関する詳細の表示、クォータ使用率のモニタリング、クォータ引き上げのリクエストを行うことができます。一部のクォータタイプでは、クォータの使用率を追跡するアラームを作成できます CloudWatch。追跡できる Amazon Cognito メトリクスの詳細については、「クォータの使用状況を追跡する」を参照してください。
Amazon Cognito ユーザープールおよびアイデンティティプールのサービスクォータ使用率を表示す
るには、次の手順を実行します。
1.

Service Quotas コンソール を開きます。

2.

ナビゲーションペインで、[AWS services] (AWS のサービス) を選択します。

3.

[AWS のサービス] リストで、[Amazon Cognito ユーザープール] または [Amazon Cognito フェ
デレーティッド ID] を検索して選択します。[Service Quota] (サービスクォータ) ページが表示さ
れます。

4.

CloudWatch モニタリングをサポートするクォータを選択します。例えば、Amazon Cognito
ユーザープールで [Rate of UserAuthentication requests] を選択します。

5.

[Monitoring] (モニタリング) までスクロールダウンします。このセクションは、 CloudWatch モ
ニタリングをサポートするクォータに対してのみ表示されます。

6.

[Monitoring] (モニタリング) では、現在のサービスクォータ使用率をグラフに表示できます。

7.

[Monitoring] (モニタリング) で、1 時間、3 時間、12 時間、1 日、3 日、または 1 週間を選択します。

8.

グラフ内の任意の領域を選択して、サービスクォータ使用率の割合を表示します。ここから、グ
ラフをダッシュボードに追加するか、アクションメニューを使用してメトリクス で表示 を選択すると、 CloudWatch コンソールの関連するメトリクスが表示されます。

および Service Quotas でのクォータ CloudWatch と使用状況の追跡

1125

Amazon Cognito

開発者ガイドCloudWatch コンソールを使用してメトリクスを追跡するを使用して Amazon Cognito ユーザープールメトリクスを追跡および収集できます CloudWatch。
CloudWatch ダッシュボードには、使用するすべての AWS サービスに関するメトリクスが表示されます。を使用して CloudWatch メトリクスアラームを作成できます。アラームは、通知を送信する、またはモニタリングしている特定のリソースに変更を行うように設定できます。でサービスクォータ
メトリクスを表示するには CloudWatch、次のステップを実行します。
1.

CloudWatch コンソール を開きます。

2.

ナビゲーションペインで Metrics (メトリクス) を選択します。

3.

[All metrics] (すべてのメトリクス) でメトリクスとディメンションを選択します。

4.

メトリクスの横にあるチェックボックスをオンにします。グラフにメトリクスが表示されます。

Note
過去 2 週間に新しいデータポイントがなかったメトリクスは、コンソールに表示されません。また、コンソールの [All metrics] (すべてのメトリクス) タブにある検索ボックスにそれらのメトリクス名またはディメンション名を入力しても表示されず、list-metrics コマンドの結果にも返されません。これらのメトリクスを取得する最善の方法は、 の get-metricdataまたは get-metric-statistics コマンドを使用すること AWS ですCLI。

クォータの CloudWatch アラームを作成する
Amazon Cognito は、 CallCountおよび AWS のサービスクォータに対応する CloudWatch 使
用状況メトリクスを提供しますThrottleCountAPIs。での使用状況の追跡の詳細については、
CloudWatch「」を参照してくださいクォータの使用状況を追跡する。
Service Quotas コンソールで、使用量がサービスクォータに近づいた場合に警告するアラームを作成できます。Service Quotas コンソールを使用して CloudWatch アラームを設定する方法について
は、Service Quotas CloudWatch 」を参照してください。 Service Quotasを使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail
Amazon Cognito は AWS CloudTrail、Amazon Cognito のユーザー、ロール、または AWS サービスによって実行されたアクションを記録するサービスである と統合されています。 は、Amazon
Cognito コンソールからのAPI呼び出しや Amazon Cognito APIオペレーションへのコード呼び出しを使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1126

Amazon Cognito

開発者ガイドを含む、Amazon Cognito Amazon Cognito の呼び出しのサブセットをイベントとして CloudTrail
キャプチャします。証跡を作成する場合は、Amazon Cognito の CloudTrail イベントなど、Amazon
S3 バケットにイベントを配信することを選択できます。 Amazon S3 証跡を設定しない場合でも、CloudTrail コンソールのイベント履歴 で最新のイベントを表示できます。で収集された情報を使用
して CloudTrail、Amazon Cognito に対するリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。
の設定とアクティブ化の方法など CloudTrail、 の詳細については、AWS CloudTrail 「 ユーザーガイ
ド」を参照してください。
特定の CloudTrail イベントに対して Amazon CloudWatch アラームを作成することもできます。例
えば、ID プールの設定が変更された場合にアラームをトリガー CloudWatch するように を設定できます。詳細については、 CloudTrail 「イベントの CloudWatch アラームの作成: 例」を参照してくだ
さい。
トピック• の Amazon Cognito 情報 CloudTrail• Amazon Cognito のサインインイベントの概要• Amazon Logs Insights を使用した Amazon Cognito CloudTrail CloudWatch イベントの分析の Amazon Cognito 情報 CloudTrail
CloudTrail を作成すると、 がオンになります AWS アカウント。Amazon Cognito でサポートされているイベントアクティビティが発生すると、そのアクティビティは CloudTrail イベント履歴 の他の
AWS サービスイベントとともにイベントに記録されます。 AWS アカウントで最近のイベントを表
示、検索、ダウンロードできます。詳細については、「イベント履歴 を含む CloudTrail イベントの表示」を参照してください。
Amazon Cognito のイベントなど、 AWS アカウント内のイベントの継続的な記録については、証跡を作成します。 CloudTrail 証跡はログファイルを Amazon S3 バケットに配信します。デフォルトでは、コンソールで証跡を作成すると、すべての リージョンに証跡が適用されます。証跡は、 AWS
パーティション内のすべてのリージョンからのイベントをログに記録し、指定した Amazon S3 バケットにログファイルを配信します。さらに、 CloudTrail ログで収集されたイベントデータをより詳細に分析し、それに基づいて行動するように、他の AWS サービスを設定できます。詳細について
は、以下を参照してください。
• 証跡を作成するための概要• CloudTrail がサポートするサービスと統合を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1127

Amazon Cognito

開発者ガイド• の Amazon SNS通知の設定 CloudTrail• 複数のリージョンからの CloudTrail ログファイルの受信と複数のアカウントからのログファイルの受信 CloudTrail
各イベントまたはログエントリには、誰がリクエストを生成したかという情報が含まれます。アイデ
ンティティ情報は、以下を判別するのに役立ちます:• リクエストがルート認証情報とIAMユーザー認証情報のどちらを使用して行われたか。
• リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
• リクエストが別の AWS サービスによって行われたかどうか。
詳細については、CloudTrail userIdentity 「」要素を参照してください。
の機密データ AWS CloudTrail
ユーザープールと ID プールはユーザーデータを処理するため、Amazon Cognito
は CloudTrail イベント内の一部のプライベートフィールドを値 で隠しま
すHIDDEN_FOR_SECURITY_REASONS。Amazon Cognito がイベントに設定しないフィールドの例については、「Amazon Cognito のサインインイベントの概要」を参照してください。Amazon
Cognito は、パスワードやトークンなど、一般的にユーザー情報を含む一部のフィールドだけを非表示にします。Amazon Cognito は、APIリクエスト内の非プライベートフィールドに入力した個人識
別情報の自動検出やマスキングを実行しません。
Amazon Cognito ユーザープール
Amazon Cognito は、ユーザープールアクションページにリストされているすべてのアクションのロ
グ記録を CloudTrail 、ログファイルのイベントとしてサポートします。Amazon Cognito は、ユーザープールイベントを管理イベント CloudTrail として に記録します。
Amazon Cognito ユーザープール CloudTrail エントリの eventTypeフィールドは、アプリケーショ
ンが Amazon Cognito ユーザープールAPIまたは OpenID Connect、2.0、またはホストされた UISAML のリソースを提供するエンドポイントにリクエストを行ったかどうかを示します。API リクエ
ストには eventType の AwsApiCallがあり、エンドポイントリクエストには eventTypeの がありますAwsServiceEvent。
Amazon Cognito は、以下のホストされた UI リクエストを のイベントとしてホストされた UI に記録します CloudTrail。
を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1128

Amazon Cognito

開発者ガイドでのホストされた UI オペレーション CloudTrail
操作

説明

Login_GET , CognitoAuthentication

ユーザーは ログインエンドポイント に認証情報を表示または送信します。

, Beta_Auth

OAuth2_Authorize_GET
orize_GET, OAuth2Res

OAuth2Response_GET
ponse_POST

ユーザーは 認可エンドポイント を表示します。
ユーザーは IdP トークンを /oauth2/i
dpresponse
す。

, Beta_SAML

SAML2Response_POST

エンドポイントに送信しま

ユーザーは IdP SAMLアサーションを/saml2/
エンドポイントに送信しま

2Response_POST

idpresponse
す。

Login_OIDC_SAML_POST

ユーザーは、ログインエンドポイント でユー
ザー名を入力し、IdP identifier と一致させます。

Token_POST , Beta_Token_POST

ユーザーは、認証コードを トークンエンドポ
イント に送信します。

Signup_GET , Signup_POST

ユーザーは、サインアップ情報を /signup エ
ンドポイントに送信します。

Confirm_GET , Confirm_POST

ユーザーは、ホストされた UI で確認コードを送信します。

ResendCode_POST

ユーザーは、ホストされた UI で確認コードの再送リクエストを送信します。

ForgotPassword_GET, ForgotPas

sword_POSTを使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

ユーザーは、パスワードのリセットリクエスト
を /forgotPassword エンドポイントに送信
します。

1129

Amazon Cognito

開発者ガイド操作
ConfirmForgotPassword_GET

説明,

ConfirmForgotPassword_POST

ユーザーは、ForgotPassword リクエストを確認するコードを /confirmForgotPass
word エンドポイントに送信します。

ResetPassword_GET , ResetPass
word_POST

ユーザーは、ホストされた UI で新しいパス
ワードを送信します。

Mfa_GET, Mfa_POST

ユーザーは、ホストされた UI で多要素認証(MFA) コードを送信します。

MfaOption_GET , MfaOption_POST

ユーザーは、ホストされた UI MFAで の任意の方法を選択します。

MfaRegister_GET , MfaRegister_POST

ユーザーは、 の登録時に、ホストされた UI で多要素認証 (MFA) コードを送信しますMFA。

Logoutユーザーは、/logout エンドポイントでサインアウトします。

SAML2Logout_POST

ユーザーは、/saml2/logout エンドポイン
トでサインアウトします。

Error_GET

ユーザーは、ホストされた UI でエラーページを表示します。

UserInfo_GET , UserInfo_POST

ユーザーまたは IdP は、UserInfo エンドポイン
ト と情報を交換します。

Confirm_With_Link_GET

ユーザーは、Amazon Cognito が E メールメッ
セージで送信したリンクに基づいて確認を送信します。

Event_Feedback_GET

ユーザーは、高度なセキュリティ機能イベント
に関するフィードバックを Amazon Cognito に送信します。

を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1130

Amazon Cognito

開発者ガイドNote
Amazon Cognito はUserSub、ユーザーに固有のリクエストのUserName CloudTrail ロ
グには記録しますが、記録しません。特定の のユーザーを見つけるには、 ListUsers
をUserSub呼び出しAPI、 サブのフィルターを使用します。

Amazon Cognito アイデンティティプール
データイベント
Amazon Cognito は、次の Amazon Cognito ID イベントをデータイベント CloudTrail として に記録します。 データイベントは、デフォルトではログに CloudTrail 記録されない大量のデータプレーン
APIオペレーションです。追加の変更がイベントデータに適用されます。
• GetCredentialsForIdentity• GetId• GetOpenIdToken• GetOpenIdTokenForDeveloperIdentity• UnlinkIdentity
これらのAPIオペレーションの CloudTrail ログを生成するには、証跡でデータイベントをアクティブ
化し、Cognito ID プールのイベントセレクタを選択する必要があります。詳細については、「AWS
CloudTrail ユーザーガイド」の「証跡のデータイベントの記録」を参照してください。
次のCLIコマンドを使用して、証跡に ID プールイベントセレクタを追加することもできます。
aws cloudtrail put-event-selectors --trail-name <trail name> --advanced-event-selectors\"{\\"Name\": \"Cognito Selector\",\\"FieldSelectors\": [\{\\"Field\": \"eventCategory\",\\"Equals\": [\\"Data\"\]\},\{\を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1131

Amazon Cognito

開発者ガイド\"Field\": \"resources.type\",\\"Equals\": [\\"AWS::Cognito::IdentityPool\"\
]\
}\
]\
}"

管理イベントAmazon Cognito は、Amazon Cognito ID プールの残りのAPIオペレーションを管理イベント .logs 管理イベントAPIオペレーションとしてデフォルトでログに記録します。 CloudTrail
Amazon Cognito が に記録する Amazon Cognito ID プールAPIオペレーションのリストについてはCloudTrail、Amazon Cognito ID プールAPIリファレンス」を参照してください。
Amazon Cognito Sync
Amazon Cognito は、すべての Amazon Cognito Sync APIオペレーションを管理イベントとしてログに記録します。Amazon Cognito が に記録する Amazon Cognito Sync APIオペレーションのリストについては CloudTrail、Amazon Cognito Sync APIリファレンス」を参照してください。

Amazon Cognito のサインインイベントの概要
証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できます。 CloudTrail
ログファイルには 1 つ以上のログエントリが含まれます。イベントは任意のソースからの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストパラメータなどに関する情報が含まれます。 CloudTrail ログファイルはパブリックAPIコールの順序付けられたスタック
トレースではないため、特定の順序では表示されません。
トピック• ホストされた UI サインアップの CloudTrail イベント例• SAML リクエストの CloudTrail イベント例• トークンエンドポイントへのリクエストの CloudTrail イベント例• の CloudTrail イベントの例 CreateIdentityPool• の CloudTrail イベントの例 GetCredentialsForIdentity• の CloudTrail イベントの例 GetId• の CloudTrail イベントの例 GetOpenIdTokenを使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1132

Amazon Cognito

開発者ガイド• の CloudTrail イベントの例 GetOpenIdTokenForDeveloperIdentity• の CloudTrail イベントの例 UnlinkIdentity
ホストされた UI サインアップの CloudTrail イベント例
次の CloudTrail イベント例は、ユーザーがホストされた UI を通じてサインアップしたときにAmazon Cognito が記録する情報を示しています。
Amazon Cognito は、新しいユーザーがアプリのサインインページに移動すると、次のイベントをログに記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-04-06T05:38:12Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Login_GET","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","errorCode": "","errorMessage": "","additionalEventData":{"responseParameters":{"status": 200.0},"requestParameters":{"redirect_uri":["https://www.amazon.com"],"response_type":["token"],"client_id":を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1133

Amazon Cognito

開発者ガイド["1example23456789"]}},"eventID": "382ae09a-151d-4116-8f2b-6ac0a804a38c","readOnly": true,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

Amazon Cognito は、新しいユーザーがアプリのサインインページで [ Sign up ] を選択すると、次のイベントをログに記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-05T23:21:43Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Signup_GET","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":{"status": 200},"requestParameters":{"response_type":を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1134

Amazon Cognito

開発者ガイド["code"],"redirect_uri":["https://www.amazon.com"],"client_id":["1example23456789"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "7a63e7c2-b057-4f3d-a171-9d9113264fff","eventID": "5e7b27a0-6870-4226-adb4-f86cd51ac5d8","readOnly": true,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

Amazon Cognito は、新しいユーザーがユーザー名を選択し、E メールアドレスを入力し、アプリのサインインページからパスワードを選択すると、次のイベントをログに記録します。Amazon
Cognito は、ユーザーの ID に関する識別情報を に記録しません CloudTrail。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-05T23:22:05Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Signup_POST","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1",を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1135

Amazon Cognito

開発者ガイド"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":{"status": 302},"requestParameters":{"password":["HIDDEN_DUE_TO_SECURITY_REASONS"],"requiredAttributes[email]":["HIDDEN_DUE_TO_SECURITY_REASONS"],"response_type":["code"],"_csrf":["HIDDEN_DUE_TO_SECURITY_REASONS"],"redirect_uri":["https://www.amazon.com"],"client_id":["1example23456789"],"username":["HIDDEN_DUE_TO_SECURITY_REASONS"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "9ad58dd8-3517-4aa8-96a5-d17a01df9eb4",を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1136

Amazon Cognito

開発者ガイド"eventID": "c75eb7a5-eb8c-43d1-8331-f4412e756e69","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

Amazon Cognito は、新規ユーザーがサインアップ後にホストされた UI のユーザー確認ページにアクセスすると、次のイベントをログに記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-05T23:22:06Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Confirm_GET","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":{"status": 200},"requestParameters":{"response_type":["code"],"redirect_uri":[を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1137

Amazon Cognito

開発者ガイド"https://www.amazon.com"],"client_id":["1example23456789"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "58a5b170-3127-45bb-88cc-3e652d779e0b","eventID": "7f87291a-6d50-409a-822f-e3a5ec7e60da","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

Amazon Cognito は、ホストされた UI のユーザー確認ページで、Amazon Cognito が送信したコードを E メールメッセージでユーザーが入力したときに、次のイベントをログに記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-05T23:23:32Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Confirm_POST","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1138

Amazon Cognito

開発者ガイド{"status": 302},"requestParameters":{"confirm":[""],"deliveryMedium":["EMAIL"],"sub":["704b1e47-34fe-40e9-8c41-504997494531"],"code":["HIDDEN_DUE_TO_SECURITY_REASONS"],"destination":["HIDDEN_DUE_TO_SECURITY_REASONS"],"response_type":["code"],"_csrf":["HIDDEN_DUE_TO_SECURITY_REASONS"],"cognitoAsfData":["HIDDEN_DUE_TO_SECURITY_REASONS"],"redirect_uri":["https://www.amazon.com"],"client_id":["1example23456789"を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1139

Amazon Cognito

開発者ガイド],"username":["HIDDEN_DUE_TO_SECURITY_REASONS"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "9764300a-ed35-4f87-8a0f-b18b3fe2b11e","eventID": "e24ac6e5-2f70-4c6e-ad4e-2f08a547bb36","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

SAML リクエストの CloudTrail イベント例
Amazon Cognito は、IdP SAML で認証されたユーザーがSAMLアサーションを/saml2/
idpresponseエンドポイントに送信すると、次のイベントを記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-06T00:50:57Z","eventSource": "cognito-idp.amazonaws.com","eventName": "SAML2Response_POST","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1140

Amazon Cognito

開発者ガイド"responseParameters":{"status": 302},"requestParameters":{"RelayState":["HIDDEN_DUE_TO_SECURITY_REASONS"],"SAMLResponse":["HIDDEN_DUE_TO_SECURITY_REASONS"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "4f6f15d1-c370-4a57-87f0-aac4817803f7","eventID": "9824b50f-d9d1-4fb8-a2c1-6aa78ca5902a","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "625647942648","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

トークンエンドポイントへのリクエストの CloudTrail イベント例
次の例は、トークンエンドポイント へのリクエストからのイベントの例です。
Amazon Cognito は、認証して認証コードを受け取ったユーザーがコードを /oauth2/token エン
ドポイントに送信すると、以下のイベントを記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1141

Amazon Cognito

開発者ガイド},"eventTime": "2022-05-12T22:12:30Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Token_POST","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":{"status": 200},"requestParameters":{"code":["HIDDEN_DUE_TO_SECURITY_REASONS"],"grant_type":["authorization_code"],"redirect_uri":["https://www.amazon.com"],"client_id":["1example23456789"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "f257f752-cc14-4c52-ad5b-152a46915238","eventID": "0bd1586d-cd3e-4d7a-abaf-fd8bfc3912fd","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1142

Amazon Cognito

開発者ガイド{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

バックエンドシステムが /oauth2/token エンドポイントにアクセストークンのclient_credentials リクエストを送信すると、Amazon Cognito は次のイベントをログに記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-12T21:07:05Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Token_POST","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":{"status": 200},"requestParameters":{"grant_type":["client_credentials"],"client_id":["1example23456789"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"
を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1143

Amazon Cognito

開発者ガイド},"requestID": "4f871256-6825-488a-871b-c2d9f55caff2","eventID": "473e5cbc-a5b3-4578-9ad6-3dfdcb8a6d34","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}

Amazon Cognito は、アプリが更新トークンを新しい ID に交換し、/oauth2/token エンドポイン
トとトークンにアクセスすると、次のイベントをログに記録します。
{"eventVersion": "1.08","userIdentity":{"accountId": "123456789012"},"eventTime": "2022-05-12T22:16:40Z","eventSource": "cognito-idp.amazonaws.com","eventName": "Token_POST","awsRegion": "us-west-2","sourceIPAddress": "192.0.2.1","userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...","requestParameters": null,"responseElements": null,"additionalEventData":{"responseParameters":{"status": 200},"requestParameters":{"refresh_token":["HIDDEN_DUE_TO_SECURITY_REASONS"],を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1144

Amazon Cognito

開発者ガイド"grant_type":["refresh_token"],"client_id":["1example23456789"]},"userPoolDomain": "mydomain.us-west-2.amazoncognito.com","userPoolId": "us-west-2_aaaaaaaaa"},"requestID": "2829f0c6-a3a9-4584-b046-11756dfe8a81","eventID": "12bd3464-59c7-44fa-b8ff-67e1cf092018","readOnly": false,"eventType": "AwsServiceEvent","managementEvent": true,"recipientAccountId": "123456789012","serviceEventDetails":{"serviceAccountId": "111122223333"},"eventCategory": "Management"}の CloudTrail イベントの例 CreateIdentityPool
次の例は、CreateIdentityPool アクションに対するリクエストのログエントリを示しています。リクエストは Alice という名前のIAMユーザーによって行われました。
{"eventVersion": "1.03","userIdentity": {"type": "IAMUser","principalId": "PRINCIPAL_ID","arn": "arn:aws:iam::123456789012:user/Alice","accountId": "123456789012","accessKeyId": "['EXAMPLE_KEY_ID']","userName": "Alice"},"eventTime": "2016-01-07T02:04:30Z","eventSource": "cognito-identity.amazonaws.com","eventName": "CreateIdentityPool",を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1145

Amazon Cognito

開発者ガイド"awsRegion": "us-east-1","sourceIPAddress": "127.0.0.1","userAgent": "USER_AGENT","requestParameters": {"identityPoolName": "TestPool","allowUnauthenticatedIdentities": true,"supportedLoginProviders": {"graph.facebook.com": "000000000000000"}},"responseElements": {"identityPoolName": "TestPool","identityPoolId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE","allowUnauthenticatedIdentities": true,"supportedLoginProviders": {"graph.facebook.com": "000000000000000"}},"requestID": "15cc73a1-0780-460c-91e8-e12ef034e116","eventID": "f1d47f93-c708-495b-bff1-cb935a6064b2","eventType": "AwsApiCall","recipientAccountId": "123456789012"}の CloudTrail イベントの例 GetCredentialsForIdentity
次の例は、GetCredentialsForIdentity アクションに対するリクエストのログエントリを示しています。
{"eventVersion": "1.08","userIdentity": {"type": "Unknown"},"eventTime": "2023-01-19T16:55:08Z","eventSource": "cognito-identity.amazonaws.com","eventName": "GetCredentialsForIdentity","awsRegion": "us-east-1","sourceIPAddress": "192.0.2.4","userAgent": "aws-cli/2.7.25 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off
command/cognito-identity.get-credentials-for-identity","requestParameters": {"logins": {を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1146

Amazon Cognito

開発者ガイド"cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa":"HIDDEN_DUE_TO_SECURITY_REASONS"},"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE"},"responseElements": {"credentials": {"accessKeyId": "ASIAIOSFODNN7EXAMPLE","sessionToken": "aAaAaAaAaAaAab1111111111EXAMPLE","expiration": "Jan 19, 2023 5:55:08 PM"},"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE"},"requestID": "659dfc23-7c4e-4e7c-858a-1abce884d645","eventID": "6ad1c766-5a41-4b28-b5ca-e223ccb00f0d","readOnly": false,"resources": [{"accountId": "111122223333","type": "AWS::Cognito::IdentityPool","ARN": "arn:aws:cognito-identity:us-east-1:111122223333:identitypool/useast-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE"}],"eventType": "AwsApiCall","managementEvent": false,"recipientAccountId": "111122223333","eventCategory": "Data"}の CloudTrail イベントの例 GetId
次の例は、GetId アクションに対するリクエストのログエントリを示しています。
{"eventVersion": "1.08","userIdentity": {"type": "Unknown"},"eventTime": "2023-01-19T16:55:05Z","eventSource": "cognito-identity.amazonaws.com","eventName": "GetId","awsRegion": "us-east-1","sourceIPAddress": "192.0.2.4","userAgent": "aws-cli/2.7.25 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off
command/cognito-identity.get-id",を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1147

Amazon Cognito

開発者ガイド"requestParameters": {"identityPoolId": "us-east-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE","logins": {"cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa":"HIDDEN_DUE_TO_SECURITY_REASONS"}},"responseElements": {"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE"},"requestID": "dc28def9-07c8-460a-a8f3-3816229e6664","eventID": "c5c459d9-40ec-41fd-8f6b-57865d5a9975","readOnly": false,"resources": [{"accountId": "111122223333","type": "AWS::Cognito::IdentityPool","ARN": "arn:aws:cognito-identity:us-east-1:111122223333:identitypool/useast-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE"}],"eventType": "AwsApiCall","managementEvent": false,"recipientAccountId": "111122223333","eventCategory": "Data"}の CloudTrail イベントの例 GetOpenIdToken
次の例は、GetOpenIdToken アクションに対するリクエストのログエントリを示しています。
{"eventVersion": "1.08","userIdentity": {"type": "Unknown"},"eventTime": "2023-01-19T16:55:08Z","eventSource": "cognito-identity.amazonaws.com","eventName": "GetOpenIdToken","awsRegion": "us-east-1","sourceIPAddress": "192.0.2.4","userAgent": "aws-cli/2.7.25 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off
command/cognito-identity.get-open-id-token","requestParameters": {"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE","logins": {を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1148

Amazon Cognito

開発者ガイド"cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa":"HIDDEN_DUE_TO_SECURITY_REASONS"}},"responseElements": {"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE"},"requestID": "a506ba18-10d7-4fdb-9548-a8187b2e38bb","eventID": "19ffc1a6-6ed8-4580-a4e1-3062c5ce6457","readOnly": false,"resources": [{"accountId": "111122223333","type": "AWS::Cognito::IdentityPool","ARN": "arn:aws:cognito-identity:us-east-1:111122223333:identitypool/useast-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE"}],"eventType": "AwsApiCall","managementEvent": false,"recipientAccountId": "111122223333","eventCategory": "Data"}の CloudTrail イベントの例 GetOpenIdTokenForDeveloperIdentity
次の例は、GetOpenIdTokenForDeveloperIdentity アクションに対するリクエストのログエン
トリを示しています。
{"eventVersion": "1.08","userIdentity": {"type": "AssumedRole","principalId": "AROA1EXAMPLE:johns-AssumedRoleSession","arn": "arn:aws:sts::111122223333:assumed-role/Admin/johns-AssumedRoleSession","accountId": "111122223333","accessKeyId": "ASIAIOSFODNN7EXAMPLE","sessionContext": {"sessionIssuer": {"type": "Role","principalId": "AROA1EXAMPLE","arn": "arn:aws:iam::111122223333:role/Admin","accountId": "111122223333","userName": "Admin"},を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1149

Amazon Cognito

開発者ガイド"attributes": {"creationDate": "2023-01-19T16:53:14Z","mfaAuthenticated": "false"}}},"eventTime": "2023-01-19T16:55:08Z","eventSource": "cognito-identity.amazonaws.com","eventName": "GetOpenIdTokenForDeveloperIdentity","awsRegion": "us-east-1","sourceIPAddress": "27.0.3.154","userAgent": "aws-cli/2.7.25 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off
command/cognito-identity.get-open-id-token-for-developer-identity","requestParameters": {"tokenDuration": 900,
"identityPoolId": "us-east-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE","logins": {"JohnsDeveloperProvider": "HIDDEN_DUE_TO_SECURITY_REASONS"}},"responseElements": {"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE"},"requestID": "b807df87-57e7-4dd6-b90c-b06f46a61c21","eventID": "f26fed91-3340-4d70-91ae-cdf555547b76","readOnly": false,"resources": [{"accountId": "111122223333","type": "AWS::Cognito::IdentityPool","ARN": "arn:aws:cognito-identity:us-east-1:111122223333:identitypool/useast-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE"}],"eventType": "AwsApiCall","managementEvent": false,"recipientAccountId": "111122223333","eventCategory": "Data"}の CloudTrail イベントの例 UnlinkIdentity
次の例は、UnlinkIdentity アクションに対するリクエストのログエントリを示しています。
{"eventVersion": "1.08",を使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1150

Amazon Cognito

開発者ガイド"userIdentity": {"type": "Unknown"},"eventTime": "2023-01-19T16:55:08Z","eventSource": "cognito-identity.amazonaws.com","eventName": "UnlinkIdentity","awsRegion": "us-east-1","sourceIPAddress": "192.0.2.4","userAgent": "aws-cli/2.7.25 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off
command/cognito-identity.unlink-identity","requestParameters": {"logins": {"cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa":"HIDDEN_DUE_TO_SECURITY_REASONS"},"identityId": "us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE","loginsToRemove": ["cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa"]},"responseElements": null,"requestID": "99c2c8e2-9c29-416f-bb17-b650a5cbada9","eventID": "d8e26126-202a-43c2-b458-3f225efaedc7","readOnly": false,"resources": [{"accountId": "111122223333","type": "AWS::Cognito::IdentityPool","ARN": "arn:aws:cognito-identity:us-east-1:111122223333:identitypool/useast-1:2dg778b3-50b7-565c-0f56-34200EXAMPLE"}],"eventType": "AwsApiCall","managementEvent": false,"recipientAccountId": "111122223333","eventCategory": "Data"}

Amazon Logs Insights を使用した Amazon Cognito CloudTrail CloudWatch イベントの分析
Amazon Logs Insights を使用して、Amazon Cognito CloudTrail CloudWatch イベントを検索および分析できます。ログにイベントを送信するように証跡を設定すると、 CloudWatch CloudTrail は証跡設定に一致するイベントのみを送信します。
Amazon Cognito CloudTrail イベントをクエリまたは調査するには、 CloudTrail コンソールで証跡設
定で管理イベントオプションを選択し、 AWS リソースで実行された管理オペレーションをモニタリを使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1151

Amazon Cognito

開発者ガイドングできるようにします。アカウント内でのエラー、異常なアクティビティ、または異常なユーザー
動作を特定したい場合は、オプションで追跡設定の [Insights イベント] オプションを選択することができます。
サンプル Amazon Cognito クエリ
Amazon CloudWatch コンソールでは、次のクエリを使用できます。
一般的なクエリ
最近追加された 25 件のログイベントを検索します。
fields @timestamp, @message | sort @timestamp desc | limit 25| filter eventSource = "cognito-idp.amazonaws.com"

例外を含む、最近追加された 25 件のログイベントのリストを取得します。
fields @timestamp, @message | sort @timestamp desc | limit 25| filter eventSource = "cognito-idp.amazonaws.com" and @message like /Exception/

例外とエラーのクエリ
Amazon Cognito ユーザープール sub と共に、最近追加されたエラーコード
NotAuthorizedException を伴う 25 件のログイベントを検索します。
fields @timestamp, additionalEventData.sub as user | sort @timestamp desc | limit 25| filter eventSource = "cognito-idp.amazonaws.com" and errorCode="NotAuthorizedException"

eventName と対応する sourceIPAddress を持つレコードの数を検索します。
filter eventSource = "cognito-idp.amazonaws.com"| stats count(*) by sourceIPAddress, eventName

NotAuthorizedException エラーをトリガーした上位 25 の IP アドレスを検索します。
filter eventSource = "cognito-idp.amazonaws.com" and errorCode="NotAuthorizedException"| stats count(*) as count by sourceIPAddress, eventNameを使用した Amazon Cognito API呼び出しのログ記録 AWS CloudTrail

1152

Amazon Cognito

開発者ガイド| sort count desc | limit 25

を呼び出した上位 25 ForgotPassword の IP アドレスを見つけますAPI。
filter eventSource = "cognito-idp.amazonaws.com" and eventName = 'ForgotPassword'| stats count(*) as count by sourceIPAddress| sort count desc | limit 25

Amazon Cognito のコンプライアンス検証
サードパーティーの監査者は、複数の コンプライアンスプログラムの一環として Amazon Cognitoのセキュリティと AWS コンプライアンスを評価します。これには、SOC、PCI、Fed RAMP、
HIPAAなどが含まれます。
特定のコンプライアンスプログラムの対象となる AWS サービスのリストについては、「コンプライ
アンスAWS プログラムによる対象範囲内のサービス」を参照してください。一般的な情報について
は、「AWS コンプライアンスプログラム」を参照してください。
を使用して、サードパーティーの監査レポートをダウンロードできます AWS Artifact。詳細について
は、「 でのレポート AWS Artifactのダウンロード」の」を参照してください。
Amazon Cognito の使用時におけるユーザーのコンプライアンス責任は、データの機密性、会社のコンプライアンス目的、および適用される法律と規制に応じて異なります。 AWS は、コンプライアン
スに役立つ以下のリソースを提供しています。
• 「セキュリティ & コンプライアンス クイックリファレンスガイド」– これらのデプロイガイドには、アーキテクチャ上の考慮事項の説明と、 AWSでセキュリティとコンプライアンスに重点を置いたベースライン環境をデプロイするためのステップが記載されています。
• HIPAA セキュリティとコンプライアンスの設計ホワイトペーパー — このホワイトペーパーでは、企業が AWS を使用して HIPAA準拠のアプリケーションを作成する方法について説明します。
• AWS コンプライアンスリソース – このワークブックとガイドのコレクションは、お客様の業界や地域に適用される場合があります。
• 「 デベロッパーガイド」の「 ルールによるリソースの評価 AWS Config」 – は、リソース設定
が社内プラクティス、業界ガイドライン、および規制にどの程度準拠しているかを評価します。
AWS Config• AWS Security Hub – この AWS サービスは、 内のセキュリティ状態を包括的に把握 AWS し、セキュリティ業界標準とベストプラクティスへの準拠を確認するのに役立ちます。
コンプライアンス検証

1153

Amazon Cognito

開発者ガイドAmazon Cognito の耐障害性
AWS グローバルインフラストラクチャは、 AWS リージョンとアベイラビリティーゾーンを中心に構築されています。リージョンには、低レイテンシー、高いスループット、そして高度の冗長ネッ
トワークで接続されている複数の物理的に独立および隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェイルオーバーする
アプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーン
は、従来の単一または複数のデータセンターインフラストラクチャよりも可用性が高く、フォールト
トレラントで、スケーラブルです。
AWS リージョンとアベイラビリティーゾーンの詳細については、AWS 「 グローバルインフラスト
ラクチャ」を参照してください。
トピック• リージョンデータに関する考慮事項

リージョンデータに関する考慮事項
Amazon Cognito ユーザープールはそれぞれ 1 つの AWS リージョンで作成され、そのリージョンにのみユーザープロファイルデータを保存します。ユーザープールは、オプション機能の設定方法に応じて、ユーザーデータを別の AWS リージョンに送信できます。
• デフォルトのno-reply@verificationemail.com E メールアドレス設定は Amazon Cognito
ユーザープールでの E メールアドレスのルーティング検証に使用されます。E メールは関連付けられているユーザープールと同じリージョン経由でルーティングされます。
• Amazon Cognito ユーザープールで Amazon Simple Email Service (Amazon SES) を設定するために別の E メールアドレスが使用されている場合、その E メールアドレスは Amazon の E メールア
ドレスに関連付けられた AWS リージョンを介してルーティングされますSES。
• SMS Amazon Cognito ユーザープールからのメッセージは、「E メールまたは電話の検証の設定」で特に明記されていないSNS限り、同じリージョンの Amazon を介してルーティングされます。
• Amazon Cognito ユーザープールで Amazon Pinpoint 分析が使用される場合、イベントデータは米国東部 (バージニア北部) リージョンにルーティングされます。

耐障害性

1154

Amazon Cognito

開発者ガイドNote
Amazon Pinpoint は、北米、欧州、アジア、オセアニアの複数の AWS リージョンで利用できます。Amazon Pinpoint リージョンには、Amazon Pinpoint が含まれますAPI。Amazon
Pinpoint リージョンが Amazon Cognito でサポートされている場合、Amazon Cognito は同じ
Amazon Pinpoint リージョン内の Amazon Pinpoint プロジェクトにイベントを送信します。
リージョンが Amazon Pinpoint でサポートされていない場合、Amazon Cognito は us-east-1
でのイベントの送信のみをサポートします。Amazon Pinpoint の詳細なリージョン情報については、「Amazon Pinpoint エンドポイントとクォータ」および「Amazon Cognito ユーザー
プールを使用して Amazon Pinpoint 分析を使用する」を参照してください。

Amazon Cognito のインフラストラクチャセキュリティ
マネージドサービスである Amazon Cognito は AWS グローバルネットワークセキュリティで保護されています。 AWS セキュリティサービスと がインフラストラクチャ AWS を保護する方法については、AWS 「 クラウドセキュリティ」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して AWS 環境を設計するには、「 Security Pillar AWS Well‐Architected
Framework」の「Infrastructure Protection」を参照してください。
が AWS 公開したAPI呼び出しを使用して、ネットワーク経由で Amazon Cognito にアクセスしま
す。クライアントは以下をサポートする必要があります:• Transport Layer Security (TLS）。1TLS.2 が必要で、1.3 TLS をお勧めします。
• (Ephemeral Diffie-HellmanPFS) や DHE (Elliptic Curve Ephemeral Diffie-Hellman) などの完全前方秘匿性 ECDHE () を備えた暗号スイート。これらのモードは、Java 7 以降など、ほとんどの最新システムでサポートされています。
さらに、 リクエストは、 IAMプリンシパルに関連付けられたアクセスキー ID とシークレットアクセ
スキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

Amazon Cognito ユーザープールの設定と脆弱性分析
AWS は、ゲストオペレーティングシステム (OS) やデータベースのパッチ適用、ファイアウォール
設定、ディザスタリカバリなどの基本的なセキュリティタスクを処理します。これらの手順は適切なインフラストラクチャセキュリティ

1155

Amazon Cognito

開発者ガイド第三者によって確認され、証明されています。詳細については、以下のリソース を参照してください。
• Amazon Cognito のコンプライアンス検証• 責任共有モデル

AWS Amazon Cognito の マネージドポリシー

ユーザー、グループ、ロールにアクセス許可を追加するには、自分でポリシーを記述するよりも、
AWS 管理ポリシーを使用する方が簡単です。必要なアクセス許可のみをチームに提供するIAMカス
タマー管理ポリシーを作成するには、時間と専門知識が必要です。すぐに開始するには、 AWS マ
ネージドポリシーを使用できます。これらのポリシーは一般的なユースケースを対象としており、AWS アカウントで利用できます。 AWS 管理ポリシーの詳細については、「 ユーザーガイド」の「AWS 管理ポリシーIAM」を参照してください。
AWS サービスは、 AWS マネージドポリシーを維持および更新します。 AWS 管理ポリシーのアクセス許可は変更できません。サービスでは、新しい機能を利用できるようにするために、 AWS マ
ネージドポリシーに権限が追加されることがあります。この種類の更新は、ポリシーがアタッチされている、すべてのアイデンティティ (ユーザー、グループおよびロール) に影響を与えます。新しい機能が立ち上げられた場合や、新しいオペレーションが使用可能になった場合に、各サービスがAWS マネージドポリシーを更新する可能性が最も高くなります。サービスは AWS マネージドポリ
シーからアクセス許可を削除しないため、ポリシーの更新によって既存のアクセス許可が中断されることはありません。
さらに、 は、複数の サービスにまたがる職務機能の マネージドポリシー AWS をサポートします。
例えば、 ReadOnlyAccess AWS 管理ポリシーは、すべての AWS サービスとリソースへの読み取り
専用アクセスを提供します。サービスが新機能を起動すると、 は新しいオペレーションとリソースの読み取り専用アクセス許可 AWS を追加します。職務機能ポリシーのリストと説明については、「 ユーザーガイドAWS 」の「職務機能用の 管理ポリシーIAM」を参照してください。
AWS Amazon Cognito へのアクセスを許可する マネージドIAMポリシー• AmazonCognitoPowerUser – ID プールとユーザープールのあらゆる側面へのアクセスと管理のための許可。このポリシーのアクセス許可を表示するには、「」を参照してくださ
いAmazonCognitoPowerUser。
AWS マネージドポリシー

1156

Amazon Cognito

開発者ガイド• AmazonCognitoReadOnly - ID プールとユーザープールへの読み取り専用アクセスのための許可。このポリシーのアクセス許可を表示するには、「」を参照してくださ
いAmazonCognitoReadOnly。
• AmazonCognitoDeveloperAuthenticatedIdentities – 認証システムが Amazon Cognitoと統合するのための許可。このポリシーのアクセス許可を表示するには、「」を参照してくださ
いAmazonCognitoDeveloperAuthenticatedIdentities。
これらのポリシーは Amazon Cognito チームによって管理されるため、新しい APIsが追加されても、ユーザーは引き続き同じレベルのアクセス権を持ちます。
Note
新しいアイデンティティプールを作成すると、認証済みユーザーアクセスとゲストユーザー
アクセス用の新しいロールを自動的に作成できます。新しいIAMロールで ID プールを作成する管理者には、ロールを作成するIAMアクセス許可も必要です。

認証されていないゲストアクセスを持つアイデンティティプールは、認証されていないユーザーにセッションポリシーとして追加の AWS 管理ポリシーを適用します。この AWS 管理ポリシーには、管理目的での使用はありません。代わりに、アイデンティティプールの拡張認証フローでゲスト
ユーザーに適用できるアクセス許可の範囲が制限されます。詳細については、「IAM ロール」を参照してください。
AWS Amazon Cognito がゲストユーザーに付与する マネージドIAMポリシー• AmazonCognitoUnAuthedIdentitiesSessionPolicy - インラインセッションポリシーと組
み合わせて、 はIAM、管理者が ID プールのゲストユーザーに付与できるアクセス許可を制限します。Amazon Cognito は、このポリシーをゲストセッションに自動的に適用します。詳細について
は、「ゲストの AWS マネージドセッションポリシー」を参照してください。

Amazon Cognito による AWS マネージドポリシーの更新
ポリシーの更新

1157

Amazon Cognito

開発者ガイドAmazon Cognito の AWS マネージドポリシーの更新に関する詳細を、このサービスがこれらの変更の追跡を開始した以降の分について表示します。このページの変更に関する自動アラートを受け取るには、Amazon Cognito ドキュメント履歴ページのRSSフィードにサブスクライブします。

変更

説明

日付

AmazonCognitoUnAut

Amazon Cognito は、ID プール内の認証されていない (ゲスト) ユーザーに対して Amazon
Location Service の使用を許可する新しいアクションを追加しました。

2024 年 8 月 9 日

ID プール内のゲストユーザーの特権スコープダウンのための AWS マネージドポリシーを追加しました。

2023 年 7 月 14 日

パワーユーザーが Amazon
Cognito ユーザープールへのAWS WAF ウェブの関連付けを表示および管理ACLsできるようにする新しいアクセス許可を追加しました。

2022 年 7 月 19 日

hedIdentitiesSessi
onPolicy - 変更

AmazonCognitoUnAut
hedIdentitiesSessi
onPolicy – 新しいポリシー

AmazonCognitoPower
User および AmazonCog
nitoReadOnly– 変更

読み取り専用ユーザーがACLs Amazon Cognito ユー
ザープールへの AWS WAF
ウェブの関連付けを表示できるようにする新しいアクセス
許可を追加しました。
AmazonCognitoPower
User - 変更

Amazon Cognito による
Amazon Simple Email Service

2021 年 11 月 17 日

PutIdentityPolicy および ListConfigurationSets のオペレーションの呼びポリシーの更新

1158

Amazon Cognito

変更

開発者ガイド

説明

日付

出しを可能にする新しい許可が追加されました。
この変更により、Amazon
Cognito ユーザープールはAmazon SES 送信承認ポリシーを更新し、ユーザープー
ルで E メール送信を設定する
ときに Amazon SES設定セットを適用できます。
AmazonCognitoPower
User - 変更

Amazon Cognito による
Amazon Simple Notificat

2021 年 6 月 1 日

ion Service の GetSMSSan
dboxAccountStatus オペ
レーションの呼び出しを可能にする新しい許可が追加されました。
この変更により、Amazon
Cognito ユーザープールは、
ユーザープールを通じてす
べてのエンドユーザーにメッセージを送信するために、Amazon Simple Notification
Service のサンドボックスから乗り換える必要があるかどうかを判断できるようになります。
Amazon Cognito が変更の追跡を開始

ポリシーの更新

Amazon Cognito が AWS マ
ネージドポリシーの変更の追跡を開始しました。

2021 年 3 月 1 日

1159

Amazon Cognito

開発者ガイドAmazon Cognito リソースのタグ付け
タグは、ユーザーまたはAWSがAWSリソースに割り当てるメタデータラベルです。各タグ
は、キーと値から構成されます。ユーザーが割り当てるタグでは、ユーザーがキーと値を定義します。たとえば、1 つのリソースのキーを stage と定義し、値を test と定義します。
タグは、以下のことに役立ちます。
• AWS リソースを識別および整理します。多くの AWS のサービスではタグ付けがサポートされるため、さまざまなサービスからリソースに同じタグを割り当てることができます。タグは、どのリソースが関連しているかを示すのに役立ちます。例えば、Amazon DynamoDB テーブルに割り当てるタグと同じものを Amazon Cognito ユーザープールに割り当てることができます。
• AWS のコストを追跡します。これらのタグは、AWS Billing and Cost Management ダッシュボー
ドで有効にできます。AWS では、コスト配分タグを使用してコストを分類し、毎月のコスト配分レポートを提供します。詳細については、AWS Billing ユーザーガイドの「コスト配分タグの使用」を参照してください。
• リソースに割り当てられたタグに基づいて、リソースへのアクセスをコントロールします。AWS
Identity and Access Management (IAM) ポリシーの条件でキーと値を指定することによってアクセスをコントロールできます。例えば、ユーザープールの更新をユーザーに許可しても、そのユー
ザープールに owner タグと、そのユーザーの名前の値がある場合のみに限定することができます。詳細については、IAM ユーザーガイドの「タグを使用したアクセス制御」を参照してください。
AWS Command Line Interface または Amazon Cognito API を使用して、ユーザーと ID プールの両方のタグの追加、編集、または削除を行うことができます。Amazon Cognito コンソールを使用して、ユーザープールのタグを管理することもできます。
タグの使用方法のヒントについては、AWS の回答ブログのAWS タグ付け戦略記事を参照してください。
以下のセクションでは、Amazon Cognito のタグに関する詳細が説明されています。

Amazon Cognito でサポートされるリソース
Amazon Cognito の以下のリソースがタグ付けをサポートしています。
• ユーザープール
サポートされるリソース

1160

Amazon Cognito

開発者ガイド• ID プール

タグの制限
Amazon Cognito リソースのタグには、以下の制限が適用されます。
• リソースに割り当てることができるタグの最大数: 50• キーの最大長 – 128 文字 (Unicode)• 値の最大長 – 256 文字 (Unicode)• キーと値の有効な文字 – a～z、A～Z、0～9、スペース、および特殊文字 (_ . : / = + - @)• キーと値は大文字と小文字が区別されます• aws: をキーのプレフィックスとして使用しないでください。AWS 用に予約済みです。

Amazon Cognito コンソールを使用したタグの管理
Amazon Cognito コンソールを使用して、ユーザープールに割り当てられたタグを管理することができます。
ユーザープールにタグを追加するには
1.

[Amazon Cognito console] (Amazon Connect コンソール) に移動します。プロンプトが表示されたら、AWS 認証情報を入力します。

2.

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

3.

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

4.

[User pool properties] (ユーザープールのプロパティ) タブを選択し、Tags (タグ) を探します。

5.

[Add tags] (タグを追加する) を選択し、最初のタグを追加します。以前このユーザープールにタ
グを割り当てたことがある場合は、[Manage tags] (タグの管理) を選び、[Add another] (別のタグを追加) を選択します。

6.

[Tag Key] (タグキー) と [Tag Value]] (タグ値) に値を入力します。

7.

追加するタグごとに、[Add another tag] (別のタグを追加) を選択します。

8.

タグの追加を完了したら、[Save changes] (変更の保存) を選択します。

[Manage tags] (タグの管理) ページで、既存のタグのキーと値を編集することもできます。タグを削除するには、[Remove] (削除) を選択します。
タグの制限

1161

Amazon Cognito

開発者ガイドAWS CLI の例
AWS CLI は、Amazon Cognito ユーザープールと ID プールに割り当てるタグの管理に役立つコマンドを提供します。

タグの割り当て次のコマンドを使用して、既存のユーザープールと ID プールにタグを割り当てます。
Example tag-resource ユーザープール向けのコマンド
コマンドの cognito-idp セット内の tag-resource 使用して、ユーザープールにタグを割り当てます。
$ aws cognito-idp tag-resource \> --resource-arn user-pool-arn \> --tags Stage=Test

このコマンドには次のパラメータが含まれます。
• resource-arn – タグを割り当てるユーザープールの Amazon リソースネーム (ARN)。ARN を調べるには、Amazon Cognito コンソールでユーザープールを選択し、[General settings] (一般設定)
タブの [Pool ARN] (プール ARN) 値を表示します。
• tags — 形式key=valueのタグのキーバリューペアです。
一度に複数のタグを割り当てるには、カンマ区切りリストで指定します。
$ aws cognito-idp tag-resource \> --resource-arn user-pool-arn \> --tags Stage=Test,CostCenter=80432,Owner=SysEng

Example tag-resource ID プール向けのコマンド
コマンドの cognito-identity セット内の tag-resource 使用して、ID プールにタグを割り当てます。
$ aws cognito-identity tag-resource \> --resource-arn identity-pool-arn \> --tags Stage=Test

AWS CLI の例

1162

Amazon Cognito

開発者ガイドこのコマンドには次のパラメータが含まれます。
• resource-arn – タグを割り当てる ID プールの Amazon リソースネーム (ARN)。ARN を調べ
るには、Amazon Cognito コンソールで ID プールを選択し、[Edit identity pool] (ID プールの編集)をクリックします。その後、[Identity pool ID] (ID プールの ID) で [Show ARN] (ARN の表示) をク
リックします。
• tags — 形式key=valueのタグのキーバリューペアです。
一度に複数のタグを割り当てるには、カンマ区切りリストで指定します。
$ aws cognito-identity tag-resource \> --resource-arn identity-pool-arn \> --tags Stage=Test,CostCenter=80432,Owner=SysEng

タグの表示
次のコマンドを使用して、ユーザープールと ID プールに割り当てたタグを表示します。
Example list-tags-for-resource ユーザープール向けのコマンド
コマンドの cognito-idp セット内の list-tags-for-resource 使用して、ユーザープールにタ
グを割り当てます。
$ aws cognito-idp list-tags-for-resource --resource-arn user-pool-arn

Example list-tags-for-resource ID プール向けのコマンド
コマンドの cognito-identity セット内の list-tags-for-resource 使用して、ID プールにタグを割り当てます。
$ aws cognito-identity list-tags-for-resource --resource-arn identity-pool-arn

タグの削除
以下のコマンドを使用して、ユーザープールと ID プールからタグを削除します。
Example untag-resource ユーザープール向けのコマンド
コマンドの cognito-idp セット内の untag-resource 使用して、ユーザープールにタグを割り
当てます。
タグの表示

1163

Amazon Cognito

開発者ガイド$ aws cognito-idp untag-resource \> --resource-arn user-pool-arn \> --tag-keys Stage CostCenter Owner--tag-keysパラメータには、1 つ以上のタグキーを指定します。タグ値は含みません。キーをス
ペースで区切ります。
Example untag-resource ID プール向けのコマンド
コマンドの cognito-identity セット内の untag-resource 使用して、ID プールにタグを割り当てます。
$ aws cognito-identity untag-resource \> --resource-arn identity-pool-arn \> --tag-keys Stage CostCenter Owner--tag-keysパラメータには、1 つ以上のタグキーを指定します。タグ値は含みません。
Important
ユーザーまたは ID プールの削除後、削除されたプールに関連するタグは、削除から最大 30
日までコンソールまたは API コールに表示できます。

リソース作成時のタグの適用
次のコマンドを使用して、ユーザープールまたは ID プールを作成するときにタグを割り当てます。
Example create-user-poolコマンドとタグ
create-user-pool コマンドを使用してユーザープールを作成するときは、--user-pool-tags
パラメータと共にタグを指定できます。
$ aws cognito-idp create-user-pool \> --pool-name user-pool-name \> --user-pool-tags Stage=Test,CostCenter=80432,Owner=SysEng

タグのキーバリューペアは、key=value形式が必須です。複数のタグを追加する場合は、カンマで区切りを付けたリストで指定します。
リソース作成時のタグの適用

1164

Amazon Cognito

開発者ガイド

Example create-identity-pool コマンドとタグ
create-identity-pool コマンドを使用して ID プールを作成するときは、--identity-pooltags パラメータと共にタグを指定できます。
$ aws cognito-identity create-identity-pool \> --identity-pool-name identity-pool-name \> --allow-unauthenticated-identities \> --identity-pool-tags Stage=Test,CostCenter=80432,Owner=SysEng

タグのキーバリューペアは、key=value形式が必須です。複数のタグを追加する場合は、カンマで区切りを付けたリストで指定します。

Amazon Cognito API を使用したタグの管理
以下のアクションを Amazon Cognito API で使用することで、ユーザープールと ID プールのタグを管理できます。

ユーザープールタグの API アクション
次の API アクションを使用して、ユーザープールのタグを割り当て、表示、削除します。
• TagResource• ListTagsForResource• UntagResource• CreateUserPool

ID プールタグの API アクション
次の API アクションを使用して、ID プールのタグを割り当て、表示、削除します。
• TagResource• ListTagsForResource• UntagResource• CreateIdentityPool

API アクション

1165

Amazon Cognito

開発者ガイドAmazon Cognito のクォータ
Amazon Cognito には、アカウントで実行できる操作の最大数のデフォルトクォータ (以前は制限と呼ばれていました) があります。Amazon Cognito では、Amazon Cognito リソースの最大数と最大サイズのクォータがあります。
各 Amazon Cognito クォータは、1 つの 内の 1 つの AWS リージョン 内のリクエストの最大量を表します AWS アカウント。例えば、アプリケーションは、米国東部 （バージニア北部RPS) のすべてのユーザープールに対するオペレーションのデフォルトクォータ () レートまでAPIリクエストを行うことができます。 UserAuthenticationアジアパシフィック (東京) のアプリは、自分のリージョンのすべてのユーザープールに対して同じ量のリクエストを生成できます。 AWS は、一度に 1つのリージョンでクォータ引き上げリクエストのみを付与できます。米国東部 (バージニア北部) でクォータを引き上げても、アジアパシフィック (東京) の最大リクエストレートには影響しません。
トピック• API リクエストレートクォータについて• API リクエストレートクォータの管理• Amazon Cognito ユーザープールAPIオペレーションカテゴリとリクエストレートクォータ• Amazon Cognito ID プール (フェデレーティッド ID) APIオペレーションリクエストレートクォー
タ• リソースの番号とサイズのクォータ

API リクエストレートクォータについて
クォータのカテゴリ
Amazon Cognito は、 APIオペレーションに最大リクエストレートを適用します。Amazon Cognitoが利用できるAPIオペレーションの詳細については、「ユーザープールの場合、これらのオペレー
ションは UserAuthenticationや Amazon Cognito API およびエンドポイントリファレンス などの一般的なユースケースのカテゴリにグループ化されます」を参照してくださいUserCreation。
カテゴリ別のユーザープールAPIオペレーションのリストについては、「」を参照してくださ
いAmazon Cognito ユーザープールAPIオペレーションカテゴリとリクエストレートクォータ。
Service Quotas コンソール では、カテゴリユーザープールと ID プールごとにクォータの使用状
況を追跡できます。Amazon Cognito ユーザープールのリクエストレートがクォータを超えている
API リクエストレートクォータについて

1166

Amazon Cognito

開発者ガイド場合は、追加の容量を購入できます。ユーザープールのクォータの使用状況をカテゴリ別に追跡し、Service Service Quotas コンソール でクォータの引き上げを購入できます。
オペレーションクォータは、カテゴリ内のすべてのオペレーションに対する 1 秒あたりの最大リクエスト数 (RPS) として定義されます。Amazon Cognito ユーザープールサービスは、各カテゴリのすべての操作にクォータを適用します。例えば、カテゴリ UserCreation には
SignUp、ConfirmSignUp、AdminCreateUser、および AdminConfirmSignUp の 4 つのオペ
レーションが含まれます。これは、合計クォータ 50 で割り当てられますRPS。複数のオペレーショ
ンが同時に行われる場合、このカテゴリ内の各オペレーションは最大 50 個をRPS個別に呼び出すことも、組み合わせて呼び出すこともできます。
Note
カテゴリクォータはユーザープールにのみ適用されます。Amazon Cognito は、各 ID プール
クォータを 1 つのオペレーションに適用します。カテゴリごとおよびオペレーションごとのリクエストレートクォータの両方で、 は、1 AWS アカウント つのリージョン内の のすべてのユーザープールまたは ID プールからのすべてのリクエストの集計レート AWS を測定します。

特別なリクエストレート処理を使用した Amazon Cognito ユーザープール
APIオペレーション
オペレーションクォータは、カテゴリレベルでのリクエストの合計数で測定され、適用されますが、特別な取扱いルールが適用される AdminRespondToAuthChallenge およびRespondToAuthChallenge オペレーションに対しては例外になります。
UserAuthentication カテゴリには、Amazon Cognito ユーザープー
ル 、AdminInitiateAuth、InitiateAuth、APIおよび の 4 つのオペレーションが含まれますAdminRespondToAuthChallengeRespondToAuthChallenge。さらに、ホストされた UIのユーザー認証がこのクォータに影響します。InitiateAuth および AdminInitiateAuth オ
ペレーションは、カテゴリクォータごとに測定され、施行されます。マッチングオペレーション
RespondToAuthChallenge および AdminRespondToAuthChallenge は、別のクォータの対象であり、UserAuthentication カテゴリの制限の 3 倍です。この昇格されたクォータは、アプリ
ケーションで設定された複数の認証チャレンジに対応します。このクォータは、ほとんどのユースケースに十分対応できます。アプリが認証チャレンジに最大 3 つの応答を行うと、追加のリクエス
トはUserAuthenticationカテゴリクォータにカウントされます。多要素認証 (MFA）、デバイス
特別なリクエストレート処理を使用した Amazon Cognito ユーザープールAPIオペレーション

1167

Amazon Cognito

開発者ガイド認証、カスタム認証はすべて、ユーザープールに組み込むことができるチャレンジプロンプトの例です。
例えば、UserAuthenticationカテゴリのクォータが 80 の場合RPS、RespondToAuthChallenge または を最大 240 RPS (3 * 80 ) のレー
トAdminRespondToAuthChallengeで呼び出すことができますRPS。ユーザープールが認証ごとに 4 ラウンドのチャレンジを要求し、1 秒あたり 70 人のユーザーがサインインする場合、合計RespondToAuthChallengeは 280 RPS (70 x 4) で、クォータを 40 RPS上回ります。追加の 40
RPSが 70 回のInitiateAuth呼び出しに追加され、UserAuthenticationカテゴリ 110 RPS (40+ 70) の合計使用量になります。この値は 80 x RPS30 に設定されたカテゴリクォータを超えている
ためRPS、Amazon Cognito はアプリケーションからのリクエストを調整します。

月次のアクティブユーザー
Amazon Cognito がユーザープールの請求を計算すると、毎月のアクティブユーザー (MAU） ごとに料金が請求されます。クォータ引き上げリクエストの計画では、現在の数と予測MAU数を考慮してください。暦月内にMAU、そのユーザーに関連する ID オペレーションがある場合、ユーザーは としてカウントされます。ユーザーをアクティブにするアクティビティには、次のものが含まれます。
• ユーザーのサインアップまたは管理者作成• サインイン• サインアウト• ユーザーアカウントの確認または属性検証• パスワードのリセット• ユーザー属性、グループメンバーシップ、またはMFA設定を変更する• ユーザーの詳細属性をクエリする• ユーザーのアクティブ化、非アクティブ化、または削除

Note
ユーザーのカテゴリクエリ詳細属性には、APIオペレーション が含まれますがAdminGetUser、 は含まれませんListUsers。大規模なユーザープールの詳細な user-byuser クエリは、 AWS 請求書に大きな影響を与える可能性があります。超過料金を回避するには、 を使用してユーザーデータを収集ListUsersするか、外部データベースにユーザー情報を保存します。

月次のアクティブユーザー

1168

Amazon Cognito

開発者ガイドAPI リクエストレートクォータの管理
クォータ要件を特定する
Important
UserAuthentication、、 などのカテゴリの Amazon Cognito クォータを増やす場合
はUserCreationAccountRecovery、他の のクォータを増やす必要がある場合があります
AWS サービス。例えば、Amazon Cognito が Amazon Simple Notification Service (Amazon
SNS) または Amazon Simple Email Service (Amazon SES) で送信するメッセージは、それらのサービスでリクエストレートクォータが不十分な場合に失敗する可能性があります。

クォータ要件を計算するには、特定の期間内にアプリケーションとやり取りするアクティブなユー
ザーの数を判断します。例えば、アプリケーションに 8 時間の期間内に平均 100 万人のアクティブ
ユーザーによるサインインがあることを想定する場合、1 秒あたり平均 35 人のユーザーを認証できる必要があります。
さらに、平均的なユーザーセッションが 2 時間であると仮定し、トークンが 1 時間後に期限切れになるように設定している場合、各ユーザーは、セッション中にトークンを 1 回更新する必要があります。この負荷をサポートするのに必要なUserAuthenticationカテゴリの平均クォータは 70 ですRPS。
8 時間のユーザーサインイン頻度の変動を考慮して 3:1 peak-to-average の比率を想定した場合、必要なクォータは UserAuthentication 200 ですRPS。
Note
ユーザーアクションごとに複数のオペレーションを呼び出す場合は、カテゴリレベルで個々のオペレーションのコールレートを合計する必要があります。

クォータ制限のリクエストレートを最適化する
API レート制限を引き上げると AWS 請求コストが増加するため、クォータの引き上げをリクエストする前に、使用量モデルの調整を検討してください。以下は、リクエストレートを最適化するアプリ
ケーションアーキテクチャの例です。
API リクエストレートクォータの管理1169

Amazon Cognito

開発者ガイドバックオフ待機期間後に再試行する
API 呼び出しごとにエラーを検出し、バックオフ期間後に再試行できます。バックオフアルゴリ
ズムは、ビジネスのニーズと負荷に応じて調整できます。Amazon SDKsには再試行ロジックが組み込まれています。詳細については、「 で構築するツール」を参照してください AWS。
頻繁に更新される属性に外部データベースを使用する
アプリケーションが、カスタム属性の読み取りと書き込みにユーザープールへの複数のコールを必要とする場合は、外部ストレージを使用します。優先データベースを使用してカスタム属性を保存する、またはキャッシュレイヤーを使用してサインイン時にユーザープロファイルをロードすることができます。このプロファイルは、ユーザープールからユーザープロファイルを再ロードしないでも、必要に応じてキャッシュから参照することができます。
クライアント側でJSONウェブトークン (JWTs) を検証する
アプリケーションは、JWTトークンを信頼する前に検証する必要があります。ユーザープールにAPIリクエストを送信しなくても、クライアント側でトークンの署名と有効性を検証できます。
トークンが検証されたら、トークン内のクレームを信頼し、より多くのgetUserAPI呼び出しを行う代わりにクレームを使用できます。詳細については、JSON「ウェブトークンの検証」を参照してください。
待合室でウェブアプリケーションへのトラフィックを調整する
試験の受験やライブイベントへの参加など、時間が限られているイベント中に多数のユーザーがサインインするトラフィックが予想される場合は、セルフスロットリングメカニズムを使用してリクエストトラフィックを最適化できます。例えば、セッションが利用可能になるまでユーザーが待機できる待合室を設定して、使用可能な容量がある間にリクエストを処理できます。待合室のリファレンスアーキテクチャについては、「AWS Virtual Waiting Room」を参照してください。
キャッシュ JWTs
アクセストークンの有効期限が切れるまで再利用します。API ゲートウェイでトークンキャッ
シュを使用するフレームワークの例については、「」を参照してくださいキャッシュトークン。
ユーザー情報をクエリするAPIリクエストを生成する代わりに、有効期限が切れるまで ID トーク
ンをキャッシュし、キャッシュからユーザー属性を読み取ります。
でのAPIリクエストレートの操作の詳細については AWS、「ワークロードAPIでのスロットリングの管理とモニタリング」を参照してください。 AWS 請求書にコストを追加する Amazon Cognito オペ
レーションの最適化については、「」を参照してください のコスト管理。
リクエストレートの最適化

1170

Amazon Cognito

開発者ガイドクォータの使用状況を追跡する
Amazon Cognito は、アカウントレベルで各APIオペレーションカテゴリ CloudWatch のCallCountおよび ThrottleCountメトリクスを Amazon で生成します。お客様が実行するカテゴ
リ関連のコールの合計数を追跡するには、CallCount を使用できます。カテゴリ関連のスロットル
されたコールの合計数は、ThrottleCount を使用して追跡できます。カテゴリ内のコールの合計数を計上するには、Sum 統計で CallCount および ThrottleCount メトリクスを使用できます。
詳細については、「 CloudWatch 使用状況メトリクス」を参照してください。
サービスクォータをモニタリングする場合、使用率 は使用中のサービスクォータの割合です。例えば、クォータの値が 200 リソースで 150 リソースが使用中の場合、使用率は 75% です。使用状況
は、サービスクォータに対する使用中のリソースまたはオペレーションの数です。
CloudWatch メトリクスによる使用状況の追跡を使用して、Amazon Cognito ユーザープールの使用率メトリクスを追跡および収集できます
CloudWatch。ダッシュボード AWS サービス には、使用するすべての CloudWatchに関するメト
リクスが表示されます。では CloudWatch、メトリクスアラームを作成して通知したり、モニタ
リングする特定のリソースを変更したりできます。 CloudWatch メトリクスの詳細については、
CloudWatch 「使用状況メトリクスの追跡」を参照してください。
Service Quotas メトリクスを使用した使用率の追跡
Amazon Cognito ユーザープールは、Service Quotas と統合されています。Service Quotas
は、Service Quotas の使用状況を表示および管理するためのコンソールインターフェイスです。Service Quotas コンソールでは、特定のクォータの値を調べたり、モニタリング情報を表示したり、クォータの引き上げをリクエストしたり、 CloudWatch アラームを設定したりできます。アカ
ウントがアクティブになってからしばらくすると、リソース使用率のグラフを表示できます。
Amazon Amazon Cognito Cognito ID プールの Service Quotas コンソールの Applied account-levelquota value 列には、現在のクォータが表示されます。 Amazon Cognito 使用率 列には、現在のクォータ使用率が表示されます。調整可能な Amazon Cognito ユーザープール requests-per-second（RPS) クォータには、現在の使用状況が表示されます。Service Quotas コンソールで CloudWatch
メトリクスに移動して、選択したクォータメトリクスを詳しく確認することもできます。Service
Quotas コンソールでのクォータの表示に関する詳細については、「Viewing service quotas」を参照
してください。

クォータの使用状況を追跡する

1171

Amazon Cognito

開発者ガイド月間アクティブユーザーを追跡する (MAUs）
ユーザープール内の月間アクティブユーザー数 (MAUs) は、リクエストレートクォータの増加に関する計画に重要なデータを提供します。API リクエストレートを、特定の期間にアクティブだったユーザーの数と比較できます。その知識があれば、アプリケーションのアクティブユー
ザーの増加が使用モデルのクォータにどのように影響するかを計算できます。例えば、米国西部(オレゴン) のアプリケーションを組み合わせると、1 か月で 200 万人のアクティブユーザーがいて、UserAuthenticationカテゴリが 1 秒あたり 120 リクエストのデフォルトクォータ () で時折スロットリングエラーを受け取ったとしますRPS。前月、広告キャンペーンが成功する前に 100 万
件MAUsに達し、アプリケーションが 80 件を超えることはありませんでしたRPS。新しいテレビス
ポットの結果として同様のスパイクが予想される場合は、調整されたクォータが 160 の次の 100 万人のユーザーに対応するためRPSに、さらに 40 を購入できますRPS。
を確認するには MAUsAWS Billing コンソールにアクセスし、最近の請求書を確認します。サービス 別の料金では、Cognito でフィルタリングして、MAUsその請求期間の の内訳を表示できます。

クォータ引き上げのリクエスト
Amazon Cognito には、各 のユーザープールと ID プールで で実行できる 1 秒あたりの最大オペ
レーション数のクォータがあります AWS リージョン。調整可能な Amazon Cognito ユーザープー
ルのAPIリクエストレートクォータの引き上げを購入できます。現在のクォータを確認し、Service
Quotas コンソールまたは Service Quotas APIオペレーション ListAWSDefaultServiceQuotasおよび Service Quotas を使用して引き上げを購入しますRequestServiceQuotaIncrease。
• Service Quotas コンソールを使用してクォータの引き上げを購入するには、「Service Quotas
API ユーザーガイド」の「クォータの引き上げのリクエストService Quotas」を参照してください。
• AWS は、クォータ引き上げリクエストを 10 日以内に完了することを目標としています。ただし、いくつかの考慮事項により、リクエストの処理時間が 10 日を超える場合があります。例えば、一部のリクエストでは Amazon Cognito で追加のハードウェア容量をプロビジョニングする必要があり、リクエストボリュームが季節的に増加すると遅延が発生する場合があります。
• Service Quotas でクォータが利用できない場合は、Service limit increase フォームを使用してください。

月間アクティブユーザーを追跡する (MAUs）

1172

Amazon Cognito

開発者ガイドImportant
クォータは、調整可能なもののみを引き上げることができます。クォータ容量を増やす必要があります。クォータ引き上げの料金については、Amazon Cognito の料金」を参照してく
ださい。

Amazon Cognito ユーザープールAPIオペレーションカテゴリとリ
クエストレートクォータ
Amazon Cognito には、異なる承認モデル を持つAPIオペレーションのクラスが重複している
ため、各オペレーションはカテゴリに属します。 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html各カテゴリには、アカウント AWS リージョン 内の 1
つの にあるすべてのユーザープールで、すべてのメンバーAPIオペレーションに対して独自のプール
クォータがあります。調整可能なカテゴリのクォータについてのみ、引き上げをリクエストできます。詳細については、「クォータ引き上げのリクエスト」を参照してください。クォータ調整は、
単一リージョンのアカウント内のユーザープールに適用されます。Amazon Cognito は、一部のカテ
3

ゴリ のオペレーションを、ユーザープールごとに 1 秒あたり 5 リクエスト (RPS) に制限します。デ
フォルトのクォータ (RPS） は、 内のすべてのユーザープールに追加に適用されます AWS アカウ
ント。
Note
各カテゴリのクォータは、月間アクティブユーザー数 () で測定されますMAUs。 AWS アカ
ウント が 200 万未満の場合は、デフォルトのクォータ内で動作MAUsできます。100 万件未満でMAUs、Amazon Cognito がリクエストをスロットリングしている場合は、アプリの最適化を検討してください。詳細については、「クォータ制限のリクエストレートを最適化す
る」を参照してください。

カテゴリオペレーションクォータは、1 つの AWS リージョン内のユーザープールのすべてのユー
ザーに適用されます。Amazon Cognito は、アプリが 1 人のユーザーに対して生成できるリクエストの数にも制限を設けています。次の表に示すように、ユーザーごとのAPIリクエストを制限する必要があります。
Amazon Cognito ユーザープールのユーザーあたりのリクエストレートクォータ
ユーザープールのリクエストレートクォータ

1173

Amazon Cognito

開発者ガイド操作

ユーザーあたりのオペレーション数 (1 秒あたりのオペレーション数)

読み込みユーザープロファイル

10

例: GetUser、GetDevice
書き込みユーザープロファイル
例: UpdateUserAttributes

10、SetUserSe

ttings次の表に示すように、カテゴリごとのAPIリクエストを制限する必要があります。
Amazon Cognito ユーザープールのカテゴリごとのリクエストレートクォータ
カテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserAuthe

ユーザーを認証 (サインイン) するオペレー
ション。

120

あり

ntication• InitiateAuth• InitiateAuth
または トークンエ
ンドポイント によるトークンの更新• RespondTo
1

AuthChallenge• AdminInitiateAuth

これらのオペレーシ
ョンは 特別なリク
エストレート処理を使用した Amazon
Cognito ユーザープー
ルAPIオペレーションの対象となります。

• AdminResp
ondToAuth
Challenge

1• 認証コードまたは
暗黙的な許可MFA
でホストされた UI
ユーザープールのリクエストレートクォータ

1174

Amazon Cognito

カテゴリ

開発者ガイド説明

デフォルトのクォー
タ (RPS）

調整可能

Amazon Cognito ロー
カルユーザーを作成または確認するオ
ペレーション。これは、Amazon Cognito
ユーザープールによって直接作成され、検証されるユーザー
です。

50

あり

ユーザープールフェ
デレーションエンド
ポイントに IdP レス
ポンスを送信するオ
ペレーション。OIDC
IdP トークン、およ
びすべてのSAMLリ
クエストが発生する
またはソーシャルプ
ロバイダーのオペレーションは、このク
ォータに影響します
。

25

あり

サインインおよび
2???

UserCreation• SignUp• ConfirmSignUp• AdminCreateUser• AdminConf
irmSignUp

UserFederation
サードパーティーID プロバイダーを使用してユーザーをAmazon Cognito ユー
ザープールにフェデ
レート (認証) するオ
ペレーション。

ユーザープールのリクエストレートクォータ

1175

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserAccou

ユーザーのアカウン
トを回復する、またはユーザーのパスワ
ードを変更もしくは更新するオペレーシ
ョン。

30

なし

ユーザープールからユーザーを取得する
操作。

120

あり

ntRecovery• ChangePassword• ConfirmFo
rgotPassword• ForgotPassword• AdminResetUserPassword• AdminSetU
serPassword• RespondTo
1

AuthChallenge• AdminResp
ondToAuth
Challenge1• ホストされた UIのパスワードリセット
UserRead• AdminGetUser• GetUser

ユーザープールのリクエストレートクォータ

1176

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserUpdate

ユーザーとユーザー
属性を管理するために使用するオペレー
ション。

25

なし

トークン管理のオペ
レーション

120

あり

• AdminAddU
serToGroup• AdminDele
teUserAttributes• AdminUpda
teUserAttributes• AdminDeleteUser• AdminDisableUser• AdminEnableUser• AdminLink
ProviderForUser• AdminDisa
bleProviderForUser• VerifyUserAttribute• DeleteUser• DeleteUserAttributes• UpdateUserAttributes• AdminUser
GlobalSignOut• GlobalSignOut• AdminRemo
veUserFromGroup
UserToken• RevokeToken

ユーザープールのリクエストレートクォータ

1177

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserResou

記憶されているデバ
イスやグループメン
バーシップなどのユーザーリソース情報
を Amazon Cognito から取得するオペレー
ション。

50

あり

rceRead• AdminGetDevice• AdminList
GroupsForUser• AdminListDevices• GetDevice• ListDevices• GetUserAttributeVerificationCode• ResendCon
firmationCode• AdminList
UserAuthEvents

ユーザープールのリクエストレートクォータ

1178

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserResou

記憶されているデバ
イスやグループメン
バーシップなど、ユーザーのリソース情報を更新するオペレ
ーション。

25

なし

ユーザーのリストを
返す操作。

30

なし

rceUpdate• AdminForgetDevice• AdminUpda
teAuthEve
ntFeedback• AdminSetU
serMFAPreference• AdminSetU
serSettings• AdminUpda
teDeviceStatus• UpdateDev
iceStatus• UpdateAuthEventFeedback• ConfirmDevice• SetUserMF
APreference• SetUserSettings• VerifySoftwareToken• AssociateSoftwareT
oken• ForgetDevice
UserList• ListUsers• ListUsersInGroup

ユーザープールのリクエストレートクォータ

1179

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserPoolRead

ユーザープールを読み取る操作。

15

なし

ユーザープールを作成、更新、または削除するオペレーショ
ン。

15

なし

• DescribeUserPool• ListUserPools
UserPoolUpdate• CreateUserPool• UpdateUserPool• DeleteUserPool

ユーザープールのリクエストレートクォータ

1180

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserPoolR

ユーザープールからグループやリソース
サーバーなどのリソースに関する情報を取得するオペレーシ

20なし

esourceRead• DescribeIdentityPr
ovider• DescribeResourceServer

3ョン。

• DescribeUserImport
Job• DescribeU
serPoolDomain• GetCSVHeader• GetGroup• GetSigningCertificate• GetIdentityProvide
rByIdentifier• GetUserPo
olMfaConfig• ListGroups• ListIdentityProviders• ListResourceServers• ListTagsF
orResource• ListUserImportJobs• DescribeRiskConfig
uration• GetUICustomization

ユーザープールのリクエストレートクォータ

1181

Amazon Cognito

開発者ガイドカテゴリ

説明

デフォルトのクォー
タ (RPS）

調整可能

UserPoolR

ユーザープールのグ
ループやリソースサーバーなどのリソー
スを変更するオペレ

15なし

esourceUpdate• AddCustomAttributes• CreateGroup

3

ーション。

• CreateIdentityProv
ider• CreateRes
ourceServer• CreateUserImportJob• CreateUserPoolDomain• DeleteGroup• DeleteIdentityProv
ider• DeleteRes
ourceServer• DeleteUserPoolDomain• SetUserPo
olMfaConfig• StartUserImportJob• StopUserImportJob• UpdateGroup• UpdateIdentityProv
ider• UpdateRes
ourceServer

ユーザープールのリクエストレートクォータ

1182

Amazon Cognito

カテゴリ

開発者ガイド説明

デフォルトのクォー
タ (RPS）

調整可能

ユーザープールクラ
イアントに関する情報を取得するオペレ

15

なし

15

なし

150

なし

• UpdateUserPoolDomain• SetRiskConfiguration• SetUICustomization• TagResource• UntagResource
UserPoolC
lientRead• DescribeU
serPoolClient

3

ーション。

• ListUserPoolClientsUserPoolC
lientUpdate• CreateUserPoolClie
nt

ユーザープールクラ
イアントを作成、更新、削除するオペレ
3ーション。

• DeleteUserPoolClie
nt• UpdateUserPoolClient
ClientAut
hentication
トークンエンド
ポイントに対す
る client_cr

machine-to-machine
リクエストの承認に使用される認証情報を生成するオペレー
ション

edentials 付与タ
イプのリクエスト

ユーザープールのリクエストレートクォータ

1183

Amazon Cognito

1

開発者ガイドが ChallengeNameの A RespondToAuthChallengeまたは

AdminRespondToAuthChallengeレスポンスは、UserAccountRecoveryカテゴリにNEW_PASSWORD_REQUIREDカウントされます。他のすべてのチャレンジレスポンスは、
UserAuthenticationカテゴリにカウントされます。
2

サインイン中のホストされた UI オペレーションごとに、クォータに 1 つのリクエストが付与されます。例えば、サインインしてMFAコードを提供するユーザーは、2 つのリクエストを提供します。
認証コード付与でのトークン利用には、UserAuthenticationカテゴリのクォータと同じレートで追加のクォータ割り当てが適用されます。
3

このカテゴリの個々のオペレーションには、1 つのユーザープールRPSに対して 5 を超えるレート
でオペレーションが呼び出されないようにする制約があります。

Amazon Cognito ID プール (フェデレーティッド ID) APIオペレー
ションリクエストレートクォータ
操作

説明

デフォルト
のクォータ
(RPS）

調整可能

クォータ引き上
げの対象

1

GetId

ID プールからア
イデンティティ
ID を取得しま
す。

25

あり

アカウントチームにお問い合わせください。

GetOpenId

クラシック
ワークフローの ID プールから OpenID トー
クンを取得しま
す。

200

はい

アカウントチームにお問い合わせください。

拡張ワークフローの ID プール
から AWS 認証
情報を取得しま
す。

200

はい

アカウントチームにお問い合わせください。

Token

GetCredentialsForI
dentity

ID プールリクエストレートクォータ

1184

Amazon Cognito

操作

開発者ガイド

説明

デフォルト
のクォータ
(RPS）

調整可能

クォータ引き上げの対象

1

デベロッパー
ワークフローの ID プールから OpenID トー
クンを取得します。

50ありアカウントチームにお問い合わせください。

ID プールIDs内の ID のリストを取得します。

5あり

アカウントチームにお問い合わせください。

アイデンティ
ティプールから登録した ID を 1
つ以上削除します。

10[Yes (はい)]アカウントチームにお問い合わせください。

TagResource

アイデンティ
ティプールにタグを適用します。

5ありアカウントチームにお問い合わせください。

UntagReso

アイデンティ
ティプールからタグを削除します。

5ありアカウントチームにお問い合わせください。

アイデンティ
ティプールに適用されたタグのリストを表示します。

10[Yes (はい)]アカウントチームにお問い合わせください。

GetOpenId
TokenForD
eveloperI
dentity

ListIdent
ities

DeleteIdentitiesurce

ListTagsF
orResource

ID プールリクエストレートクォータ

1185

Amazon Cognito

1

開発者ガイドデフォルトのクォータは、 の にある ID プールの最小リクエストレートクォータ AWS リージョン

です AWS アカウント。リージョンによってはRPS、クォータが高くなる場合があります。

リソースの番号とサイズのクォータ
リソースクォータは、Amazon Cognito のリソース、入力フィールド、期間、およびその他の機能の最大数またはサイズです。
一部のリソースクォータの調整は、サービスクォータコンソールまたはサービス制限の引き上げフォームからリクエストできます。Service Quotas コンソールからクォータの引き上げをリクエス
トするには、Service Quotas ユーザーガイドの「Requesting a quota increase」を参照してください。Service Quotas でクォータが利用できない場合は、Service limit increase フォームを使用してく
ださい。
Note
リージョン あたりのユーザープールなどの AWS アカウント レベルのリソースクォータは、各 の Amazon Cognito リソースに適用されます AWS リージョン。 例えば、米国東部 (バージニア北部) に 1,000 個のユーザープールを持ち、欧州 (ストックホルム) に別の 1,000 個の
ユーザープールを持つことができます。

次の表は、デフォルトのリソースクォータと、それらが調整可能かどうかを示しています。
Amazon Cognito ユーザープールのリソースクォータ
リソース

クォータ

調整可能

最大クォータユーザープールあたりのアプリケーショ
ンクライアント

1,000

あり

10,000

リージョンごとのユーザープール

1,000

あり

10,000

ユーザープールあた
りのアイデンティティプロバイダー

300

あり

1,000

リソースの番号とサイズのクォータ

1186

Amazon Cognito

開発者ガイド

リソース

クォータ

調整可能

最大クォータユーザープールあたりのリソースサーバ
ー

25

あり

300

ユーザープールあたりのユーザー数

40,000,000あり

アカウントチームにお問い合わせください。

トークン生成前のLambda トリガーの合

5,000

あり

アカウントチームにお問い合わせください。

ユーザープールあた
りのカスタム属性数

50

なし

該当なし

属性あたりの文字数

2,048 バイト

なし

該当なし

カスタム属性名の文
字数

20

なし

該当なし

パスワードポリシーに最低限必要なパス
ワード文字数

6～99

なし

該当なし

ごとに毎日送信される E メールメッセー

50

なし

該当なし

E メール件名の文字数

140

なし

該当なし

E メールメッセージの
文字数

20,000なし

該当なし

SMS 検証メッセージ
の文字

140

なし

該当なし

パスワードの文字数

256

なし

該当なし

1

計変更数

2

ジ AWS アカウント

リソースの番号とサイズのクォータ

1187

Amazon Cognito

開発者ガイド

リソース

クォータ

調整可能

最大クォータID プロバイダー名の
文字数

32

なし

該当なし

ID プロバイダーあた
り識別子数

50

なし

該当なし

ユーザーにリンクされた ID 数

5

なし

該当なし

アプリケーションク
ライアントURLsあたりのコールバック

100

なし

該当なし

アプリクライアント
URLsあたりのログア
ウト

100

なし

該当なし

リソースサーバーあたりのスコープ

100

なし

該当なし

アプリケーションク
ライアントあたりの
スコープ数

50

なし

該当なし

アカウントあたりのカスタムドメイン数

4

なし

該当なし

各ユーザーが所属できるグループ数

100

なし

該当なし

ユーザープールあた
りのグループ

10,000

なし

該当なし

1

このクォータは、トークン生成前の Lambda トリガー からのトークンで発生する場合があります。1 つのトランザクションのアクセストークンと ID トークンの既存のクレームと追加クレームのリソースの番号とサイズのクォータ

1188

Amazon Cognito

開発者ガイド数、およびスコープは、このクォータ以下の数まで合計する必要があります。抑制されたクレームとスコープは、このクォータには加算されません。
2

このクォータは、Amazon Cognito ユーザープールでデフォルトの E メール機能を使用している場
合にのみ適用されます。E メール配信ボリュームを増やすには、Amazon E SESメール設定を使用するようにユーザープールを設定します。詳細については、「Amazon Cognito ユーザープールの E
メール設定」を参照してください。
Amazon Cognito ユーザープールセッションの有効性パラメータ
トークン

クォータ

ID トークン

5 分～1 日更新トークン

1 時間～3,650 日

アクセストークン

5 分～1 日ホストされた UI セッション cookie

1 時間

認証セッショントークン

3 分～15 分

Amazon Cognito ユーザープールコードセキュリティリソースクォータ (調整不可)
リソース

クォータ

サインアップ確認コードの有効期間

24 時間

ユーザー属性検証コードの有効期間

24 時間

多要素認証 (MFA) コードの有効期間

3～15 分

パスワードを忘れた場合のコードの有効期間

1 時間

ユーザーあたりの ConfirmForgotPassw

5～20

ord および ForgotPassword リクエスト
1の最大数/時間

リソースの番号とサイズのクォータ

1189

Amazon Cognito

開発者ガイドリソース

クォータ

ユーザーあたりの ResendConfirmation

5

Code リクエストの最大数/時間
ユーザーあたりの ConfirmSignUp リクエス
トの最大数/時間

15

ユーザーあたりの ChangePassword リクエ
ストの最大数/時間

5

ユーザーあたりの GetUserAttributeVe

5rificationCode

リクエストの最大数/時間

ユーザーあたりの VerifyUserAttribute
リクエストの最大数/時間

15

1

Amazon Cognito は、パスワード更新リクエストのリスク要因を評価し、評価したリスクレベルに応じたクォータを割り当てます。詳細については、「パスワードを忘れた場合の対応」を参照してく
ださい。
Amazon Cognito ユーザープールへのユーザーインポートジョブのリソースクォータ
リソース

クォータ

調整可能

最大クォータユーザープールあたりのユーザーインポ
ートジョブ

1,000

あり

アカウントチームにお問い合わせください。

ユーザーインポート
CSV行あたりの最大
文字数

16,000なし

該当なし

最大CSVファイルサ
イズ

100 MBなし

該当なし

CSV ファイルあたりの最大ユーザー数

500,000なし

該当なし

リソースの番号とサイズのクォータ

1190

Amazon Cognito

開発者ガイドAmazon Cognito ID プール (フェデレーティッドアイデンティティ) リソースのクォータ
リソース

クォータ

調整可能

最大クォータアカウントあたりのアイデンティティプ
ール

1,000

あり

該当なし

ID プールあたりのAmazon Cognito ユー
ザープールプロバイ
ダー数

50

あり

1,000

ID プール名の文字長128 バイト

なし

該当なし

ログインプロバイダ
ー名の文字長2,048 バイト

なし

該当なし

ID プールあたりのア
イデンティティ数

無制限

なし

該当なし

ロールマッピングを指定できる ID プロバ
イダー数

10

なし

該当なし

単一のリストまたはlookup コールからの
結果の数

60

なし

該当なし

ロールベースのアク
セスコントロール(RBAC) ルール

25

なし

該当なし

Amazon Cognito Sync リソースクォータ

リソースの番号とサイズのクォータ

1191

Amazon Cognito

開発者ガイド

リソース

クォータ

調整可能

最大クォータアイデンティティあたりのデータセット

20あり

アカウントチームにお問い合わせください。

データセットあたり
のレコード

1,024

あり

アカウントチームにお問い合わせください。

1 つのデータセットの
サイズ

1 MB

あり

アカウントチームにお問い合わせください。

データセット名の文
字数

128 バイトなし

該当なし

正常なリクエスト後の一括発行の待機時
間

24 時間

なし

該当なし

リソースの番号とサイズのクォータ

1192

Amazon Cognito

開発者ガイドAmazon Cognito API およびエンドポイントリファレンス
以下のリファレンスでは、Amazon Cognito の各機能のサービスエンドポイントについて説明しています。Amazon Cognito ユーザープールには、ユーザープールドメインを持つユーザープールエンド
ポイントとユーザープール API のオプションがあります。Amazon Cognito ユーザープールのユー
ザープール API での API オペレーションクラスの内訳については、「Amazon Cognito ユーザープー
ルAPIとユーザープールエンドポイントの使用」を参照してください。
AWS リージョン によるユーザープール API のサービスエンドポイントの完全なリストについて
は、AWS 全般リファレンスの「サービスエンドポイント」を参照してください。
トピック• ユーザープールフェデレーションエンドポイントとホストされた UI リファレンス• Amazon Cognito ユーザープール API リファレンス• Amazon Cognito ID プール (フェデレーティッド ID) API リファレンス• Amazon Cognito Sync API リファレンス

ユーザープールフェデレーションエンドポイントとホストされた
UI リファレンス
ユーザープールにドメインを割り当てると、Amazon Cognito はここにリストされているパブリック
ウェブページをアクティブにします。ドメインは、すべてのアプリクライアントの中央アクセスポイ
ントとして機能します。これらには、ユーザーがサインアップしてサインイン (ログインエンドポイント) およびサインアウト (ログアウトエンドポイント) できるホストされた UI が含まれます。これらのリソースの詳細については、「Amazon Cognito でホストされた UI およびフェデレーションエ
ンドポイントの設定と使用」を参照してください。
これらのページには、ユーザープールがサードパーティーの 、OpenID Connect (OIDC）SAML、および 2.0 ID プロバイダー () OAuth と通信できるようにするパブリックウェブリソースも含まれていますIdPs。フェデレーティッド ID プロバイダーを使用してユーザーをサインインするには、ユー
ザーはインタラクティブホスト UI ログインエンドポイントまたは OIDC へのリクエストを開始する必要があります認可エンドポイント。Authorize エンドポイントは、ホストされている UI または IdP
サインインページにユーザーをリダイレクトします。

ユーザープールのエンドポイントリファレンス

1193

Amazon Cognito

開発者ガイドアプリは、Amazon Cognito ユーザープール を使用してローカルユーザーにサインインすることもできます。 Amazon Cognito API ローカルユーザーは、外部 IdP を介したフェデレーションなしに、
ユーザープールディレクトリにのみ存在します。
Amazon Cognito は、ホストされた UI とフェデレーションエンドポイントに加えて JavaScript、 forAndroid、iOS などと統合SDKsします。SDKs には、Amazon Cognito APIサービスエンドポイント
でユーザープールAPIオペレーションを実行するためのツールが用意されています。サービスエンド
ポイントの詳細については、「Amazon Cognito Identity エンドポイントとクォータ」を参照してく
ださい。
WarningAmazon Cognito domain のエンドエンティティまたは中間 Transport Layer Security (TLS)
証明書を固定しないでください。 AWS は、すべてのユーザープールエンドポイントとプレフィックスドメインのすべての証明書を管理します。Amazon Cognito 証明書をサポートする信頼チェーン内の認証機関 (CAs) は、動的にローテーションおよび更新されます。アプリ
を中間証明書またはリーフ証明書に固定すると、 が証明書を AWS ローテーションすると、アプリは予告なく失敗する可能性があります。
代わりに、アプリケーションを利用できるすべての Amazon ルート証明書に固定します。詳細については、AWS Certificate Manager ユーザーガイドの「証明書のピンニング」にある
ベストプラクティスと推奨事項を参照してください。

トピック• ホストされた UI エンドポイントのリファレンス• OAuth 2.0、OpenID Connect、および 2.0 SAML フェデレーションエンドポイントリファレンス• OAuth 2.0 許可• Amazon Cognito ユーザープールでのPKCE認証コード付与での の使用• ホストされた UI とフェデレーションエラーレスポンス

ホストされた UI エンドポイントのリファレンス
Amazon Cognito はユーザープールにドメインを追加すると、このセクションのホストされた UI エ
ンドポイントをアクティブにします。これらは、ユーザーがユーザープールのコア認証オペレーショ
ンを完了できるウェブページです。これには、パスワード管理、多要素認証 (MFA）、属性検証用のホストされた UI エンドポイントのリファレンス

1194

Amazon Cognito

開発者ガイドページが含まれます。ホストされた UI サインアップのエクスペリエンスについて詳しくは、「ホストされた UI でのサインアップとサインイン」を参照してください。
ホストされた UI を構成するウェブページは、顧客とのインタラクティブなユーザーセッションのためのフロントエンドウェブアプリケーションです。アプリはユーザーのブラウザでホストされた UIを呼び出す必要があります。Amazon Cognito は、この章のウェブページに対するプログラムによるアクセスをサポートしていません。JSON レスポンスを返OAuth 2.0、OpenID Connect、および 2.0
SAML フェデレーションエンドポイントリファレンスす のフェデレーションエンドポイントは、ア
プリケーションコードで直接クエリできます。認可エンドポイント は、ホストされた UI または IdP
サインインページのどちらかにリダイレクトされます。また、ユーザーのブラウザで開く必要があります。
すべてのユーザープールエンドポイントは、 IPv4およびIPv6送信元 IP アドレスからのトラフィックを受け入れます。
このガイドのトピックでは、頻繁に使用されるホスト UI エンドポイントについて詳しく説明しま
す。Amazon Cognito は、ユーザープールにドメインを割り当てる際に以下のウェブページを利用できるようにします。
ホストされた UI エンドポイント
エンドポイント URL

説明

アクセス方法https://Your user pool

ユーザープールのローカルユーザーとフェデレーショ
ンユーザーにサインインします。

認可エンドポイント、/

ユーザープールユーザーをサ
インアウトします。

直接リンク。「ログアウトエ
ンドポイント」を参照してください。

E メールリンクを選択してユーザーアカウントを検証したユーザーを確認します。

ユーザーが E メールメッセー
ジ内のリンクを選択しました。

domain/ログイン

https://Your user pooldomain/ログアウト

https://Your user pooldomain/confirmUser

ホストされた UI エンドポイントのリファレンス

logout、と /confirmf
orgotPassword などのエ
ンドポイントからリダイレク
トします。「ログインエンド
ポイント」を参照してくださ
い。

1195

Amazon Cognito

開発者ガイドエンドポイント URL

説明

アクセス方法https://Your user pool

新規ユーザーをサインアップ

domain/サインアップ

します。/login ページは、ユーザーが [Sign up] (サイ/oauth2/authorize と同じパラメータで直接リンクします。

ンアップ) を選択すると、/
signup に移動します。
https://Your user pooldomain/確認

https://Your user pooldomain/forgotPassword

ユーザープールがサインアッ
プしたユーザーに確認コー
ドを送信すると、ユーザーにコードの入力を求めます。

/signup からのリダイレクトのみ。

ユーザーにユーザー名の入力を求め、パスワードリセット

1. /login のパスワードを忘

コードを送信します。/login

2. /oauth2/authorize と同じパラメータで直接リンクします。

ページは、ユーザーが [Forgot
your password?] (パスワードをお忘れですか?) を選択すれた場合のリンクから。

るとユーザーを /forgotPa
ssword に誘導します。
https://Your user pooldomain/confirmforgotPass
word

ユーザーにパスワードリ
セットコードと新しいパス/forgotPassword からのリダイレクトのみ。

ワードの入力を求めます。/
forgotPassword ページ
は、ユーザーが [Reset yourpassword] (パスワードのリセット) を選択するとユーザー
を /confirmforgotPass
word ページに誘導します。

https://Your user pooldomain/再送信コード

ユーザープールにサインアッ
プしたユーザーに、新しい確認コードを送信します。

/confirm の [新しいコードを送信] リンクからのリダイレク
トのみ。

トピック
ホストされた UI エンドポイントのリファレンス

1196

Amazon Cognito

開発者ガイド• ログインエンドポイント• ログアウトエンドポイント

ログインエンドポイント
ログインエンドポイントは認証サーバーであり、認可エンドポイント からのリダイレクト先です。
これは、ID プロバイダーを指定しない場合のホスト UI へのエントリポイントです。ログインエンド
ポイントへのリダイレクトを生成すると、ログインページにロードされ、ユーザーにクライアントに設定されている認証オプションが提示されます。
Note
ログインエンドポイントはホスト UI のコンポーネントです。アプリで、ログインエンドポ
イントにリダイレクトするフェデレーションページとホストされた UI ページを呼び出します。ユーザーがログインエンドポイントに直接アクセスすることはベストプラクティスではありません。

ホストされた UI エンドポイントのリファレンス

1197

Amazon Cognito

開発者ガイドGET /ログイン/login エンドポイントは、ユーザーの最初のリクエストの HTTPS GET のみをサポートします。ア
プリは Chrome や Firefox などのブラウザでページを呼び出します。/login から にリダイレクトす
ると認可エンドポイント、最初のリクエストで指定したすべてのパラメータが渡されます。ログイン
エンドポイントは authorize エンドポイントのすべてのリクエストパラメータをサポートします。ログインエンドポイントに直接アクセスすることもできます。ベストプラクティスとしては、すべてのユーザーのセッションを /oauth2/authorize から開始してください。
例 - ユーザーにサインインを促す
この例では、ログイン画面が表示されます。
GET https://mydomain.auth.us-east-1.amazoncognito.com/login?
response_type=code&
ホストされた UI エンドポイントのリファレンス

1198

Amazon Cognito

開発者ガイドclient_id=ad398u21ijw3s9w3939&
redirect_uri=https://YOUR_APP/redirect_uri&state=STATE&
scope=openid+profile+aws.cognito.signin.user.admin

例 – レスポンス
認証サーバーは認証コードとステートを伴ってアプリにリダイレクトします。サーバーは、コードとステートをフラグメントではなく、クエリ文字列のパラメータで返す必要があります。
HTTP/1.1 302 Found
Location: https://YOUR_APP/redirect_uri?
code=AUTHORIZATION_CODE&state=STATE

ユーザーが開始したサインインリクエスト
ユーザーは、/login エンドポイントをロードした後で、ユーザー名とパスワードを入力して [サインイン] を選択できます。これを行うと、GET リクエストと同じヘッダーリクエストパラメータと、
ユーザー名、パスワード、およびデバイスのフィンガープリントを含むリクエスト本文で、HTTPSPOST リクエストが生成されます。

ログアウトエンドポイント/logout エンドポイントは、リダイレクションエンドポイントです。ユーザーをサインアウト
し、URLアプリクライアントの認可されたサインアウトまたは/loginエンドポイントにリダイレ
クトします。/logout エンドポイントへのGETリクエストで使用可能なパラメータは、Amazon
Cognito がホストする UI のユースケースに合わせて調整されます。
ユーザーをホストされた UI にリダイレクトして再度ログインするには、リクエストに redirect_uri パラメータを追加します。redirect_uri パラメータを含む logout リクエス
トには、client_id、response_type、scope などの ログインエンドポイント への後続のリク
エスト用のパラメータも含める必要があります。
ログアウトエンドポイントは、顧客とのインタラクティブなユーザーセッション用のフロントエンド
ウェブアプリケーションです。アプリは、このエンドポイントと他のホストされた UI エンドポイン
トをユーザーのブラウザで呼び出す必要があります。
選択したページにユーザーをリダイレクトするには、アプリクライアントに許可されたサインアウ
トURLsを追加します。logout エンドポイントへのユーザーのリクエストに、logout_uri およ
ホストされた UI エンドポイントのリファレンス

1199

Amazon Cognito

開発者ガイドび client_id パラメーターを追加します。の値がアプリケーションクライアントに許可されたサイ
ンアウトURLsの 1 つである場合、Amazon Cognito logout_uriはその にユーザーをリダイレクトしますURL。
2.0 のシングルログアウト (SLO) SAML では IdPs、Amazon Cognito はまず IdP 設定で定義したSLO
エンドポイントにユーザーをリダイレクトします。IdP がユーザーを にリダイレクトするとsaml2/
logout、Amazon Cognito はリクエストlogout_uriから redirect_uriまたは へのリダイレク
トをもう 1 つ返します。詳細については、「SAML サインアウトフロー」を参照してください。
ログアウトエンドポイントは、 OIDCまたはソーシャル ID プロバイダー () からユーザーをサインア
ウトしませんIdPs。外部 IdP とのセッションからユーザーをサインアウトするには、そのプロバイ
ダーのサインアウトページに移動します。
GET /ログアウト/logout エンドポイントは HTTPS GET のみをサポートします。ユーザープールクライアントは通常、このリクエストをシステムブラウザ経由で行います。ブラウザは通常、Android では Custom
Chrome Tab、iOS では Safari View Control です。
リクエストパラメータ
client_id
アプリのアプリクライアント ID。アプリクライアント ID を取得するには、ユーザープールにアプリを登録する必要があります。詳細については、「ユーザープールアプリクライアント」を参照してください。
必須。
logout_uri
logout_uri パラメータを使用して、ユーザーをカスタムサインアウトページにリダイレクトします。その値を、ユーザーがサインアウトURLした後にリダイレクトするアプリクライアントサイ
ンアウトに設定します。logout_uri は、client_id パラメータでのみ使用してください。詳細については、「ユーザープールアプリクライアント」を参照してください。
logout_uri パラメータを使用して、ユーザーを別のアプリクライアントのサインインページにリダイレクトすることもできます。他のアプリケーションクライアントのサインインページを、ア
プリケーションクライアントの許可されたコールバックURLとして設定します。/logout エンド
ポイントへのリクエストで、logout_uri パラメータの値を URLエンコードされたサインインペー
ジに設定します。
ホストされた UI エンドポイントのリファレンス

1200

Amazon Cognito

開発者ガイドAmazon Cognito では、/logout エンドポイントへのリクエストに logout_uri または redirect_uri
パラメータのいずれかが必要です。logout_uri パラメータは、ユーザーを別のウェブサイト
にリダイレクトします。/logout エンドポイントへのリクエストに logout_uri パラメータとredirect_uri パラメータの両方が含まれている場合、Amazon Cognito は logout_uri パラメータのみを使用し、redirect_uri パラメータをオーバーライドします。
redirect_uri
redirect_uri パラメータを使用して、ユーザーをサインインページにリダイレクトし、認証を行います。その値を、ユーザーが再度サインインした後にリダイレクトするアプリケー
ションクライアント許可コールバックURLに設定します。/login エンドポイントに渡す
client_id、scope、state、response_type のパラメータを追加します。
Amazon Cognito では、/logout エンドポイントへのリクエストに logout_uri または redirect_uri
パラメータのいずれかが必要です。ユーザーを/loginエンドポイントにリダイレクトしてトークンを再認証し、アプリに渡すには、redirect_uri パラメータを追加します。logout_uri パラメー
タと redirect_uri パラメータの両方が/logoutエンドポイントへのリクエストに含まれている場
合、Amazon Cognito は redirect_uri パラメータをオーバーライドし、logout_uri パラメータのみを処理します。
response_type
ユーザーがサインインした後に Amazon Cognito から受信する OAuth2.0 レスポンス。 codeおよび tokenは response_type パラメータの有効な値です。
redirect_uri パラメータを使用する場合は必須です。
state
アプリケーションがリクエストに状態パラメータを追加すると、/oauth2/logoutエンドポイン
トがユーザーをリダイレクトするときに Amazon Cognito はその値をアプリケーションに返します。
この値をリクエストに追加して、CSRF攻撃から保護します。
state パラメータの値を URLでエンコードされたJSON文字列に設定することはできません。state パラメータでこの形式に一致する文字列を渡すには、文字列を base64 にエンコード
してから、アプリケーションでデコードします。
redirect_uri パラメータを使用する場合は強くお勧めします。
ホストされた UI エンドポイントのリファレンス

1201

Amazon Cognito

開発者ガイドscope
redirect_uri パラメータを使用してサインアウトした後に Amazon Cognito にリクエストする
OAuth2.0 スコープ。Amazon Cognito は、/logout エンドポイントへのリクエストの scope パ
ラメータを使用してユーザーを /login エンドポイントにリダイレクトします。
redirect_uri パラメータを使用する場合は任意。scope パラメータを含めない場合、Amazon
Cognito は scope パラメータを使用してユーザーを /login エンドポイントにリダイレクトしま
す。Amazon Cognito がユーザーをリダイレクトし、scope に自動的にデータを入力する場合、パラメータには、アプリクライアントに対して許可されているすべてのスコープが含まれます。
リクエストの例
例 - ログアウトしてユーザーをクライアントにリダイレクトする
logout_uri と を除きclient_id、このエンドポイントで使用可能なすべてのクエリパラメータはに渡されます認可エンドポイント。Amazon Cognito は、リクエストに logout_uriと が含まれている場合logout_uri、他のすべてのリクエストパラメータを無視して、 の値URLでユーザーセッ
ションを にリダイレクトしますclient_id。これは、URLアプリクライアントの認可されたサイン
アウトURLである必要があります。
次は、サインアウトと https://www.example.com/welcome へのリダイレクトのリクエスト例です。
GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
client_id=1example23456789&
logout_uri=https%3A%2F%2Fwww.example.com%2Fwelcome

例 - ログアウトし、ユーザーに別のユーザーとしてサインインするように促す
リクエストに logout_uri が省略されているが、許可エンドポイントへの正しい形式のリクエス
トを構成するパラメータが指定されている場合、Amazon Cognito はホストされた UI サインインにユーザーをリダイレクトします。ログアウトエンドポイントは、元のリクエストのパラメータをリダ
イレクト先に追加します。ログアウトエンドポイントへのリクエストredirect_uriの パラメータは、サインアウト ではなくURL、認証エンドポイントにURL渡すサインインです。
以下は、ユーザーをサインアウトし、サインインページにリダイレクトし、サインインhttps://www.example.com後に認証コードを に提供するリクエストの例です。
GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
ホストされた UI エンドポイントのリファレンス

1202

Amazon Cognito

開発者ガイドresponse_type=code&
client_id=1example23456789&
redirect_uri=https%3A%2F%2Fwww.example.com&
state=example-state-value&
nonce=example-nonce-value&
scope=openid+profile+aws.cognito.signin.user.admin

OAuth 2.0、OpenID Connect、および 2.0 SAML フェデレーションエンド
ポイントリファレンス
Amazon Cognito はユーザープールにドメインを追加すると、このセクションのエンドポイントを
アクティブにします。フェデレーションエンドポイントはユーザーインタラクティブではありません。アプリケーションがサードパーティーの 2.0、、OIDCおよび OAuth 2.0 ID プロバイダー (IdPs)
SAML と通信するためのサービスロールを実行します。
このガイドのトピックでは、頻繁に使用される 2.0 OAuth および OIDCエンドポイントについて説明します。Amazon Cognito はユーザープールにドメインを割り当てる際に以下のエンドポイントを作成します。
ユーザープールのフェデレーションエンドポイント
エンドポイント URL

説明

アクセス方法https://Your user pool

ユーザーをホストされた UI に
リダイレクトするか、IdP でサインインするようにリダイ
レクトします。

ユーザー認証を開始するためにカスタマーブラウザで呼び出されます。「認可エンドポ
イント」を参照してください。

認証コードまたはクライアン
ト認証情報リクエストに基づいてトークンを返します。

トークンを取得するためにア
プリによってリクエストされます。「トークンエンドポイント」を参照してください。

アクセストークンの 2.0
OAuth スコープとユーザー IDに基づいてユーザー属性を返します。

ユーザープロファイルを取得するためにアプリからリクエ
ストされます。「UserInfo エ
ンドポイント」を参照してく
ださい。

domain/oauth2/authorize

https://Your user pooldomain/oauth2/token

https://Your user pooldomain/oauth2/userInfo

フェデレーションエンドポイントリファレンス

1203

Amazon Cognito

開発者ガイドエンドポイント URL

説明

アクセス方法https://Your user pool

更新トークンと関連するアク
セストークンを取り消します。

トークンの取り消しをアプリ
ケーションからリクエストされました。「エンドポイントの取り消し」を参照してください。

ユーザープールのOIDCアーキ
テクチャのディレクトリ。

ユーザープール発行者のメタデータを見つけるためにアプ
リからリクエストされます。

Amazon Cognito トークンの検証に使用できるパブリックキー。

を検証するためにアプリからリクエストされましたJWTs。

ソーシャル ID プロバイダー
は、認証コードを使用してユーザーをこのエンドポイン
トにリダイレクトする必要があります。Amazon Cognito
は、フェデレーションユー
ザーを認証する際に、このコードをトークンに引き換えます。

IdP OIDC クライアントのコー
ルバック として IdP サインイ
ンからリダイレクトされます
URL。

SAML 2.0 ID プロバイダーと統合URLするためのアサー
ションコンシューマーレスポ
ンス (ACS）。

2.0 SAML IdP から として
URL、または ACS IdP が開始するサインイン の送信元ポイントとしてリダイレクトされdomain/oauth2/revoke

https://cognito-idp。Region.amazonaw
s.com/your user pool
ID/.well-known/openid-configu
rationhttps://cognito-idp。Region.amazonaw
s.com/your user pool
ID/.well-known/jwks.json
https://Your user pooldomain/oauth2/idpresponse

https://Your user pooldomain/saml2/idpresponse

1

ます 。

フェデレーションエンドポイントリファレンス

1204

Amazon Cognito

開発者ガイドエンドポイント URL

説明

アクセス方法https://Your user pool

2.0 ID SAML プロバイダーと統合URLするための Single
Logout (SLO）。

2.0 SAML IdP から単一のログ
アウト (SLO) としてリダイレ
クトされますURL。POST バ
インディングのみを受け入れます。

domain/saml2/ログアウト

1

IdP が開始するSAMLサインインの詳細については、「」を参照してくださいIdP によるSAMLサイ
ンインの使用。
OpenID Connect と標準の詳細については、OAuthOpenID Connect 1.0 および OAuth2.0」を参照してください。
トピック• 認可エンドポイント• トークンエンドポイント• UserInfo エンドポイント• エンドポイントの取り消し• saml2/idpresponse エンドポイント

認可エンドポイント/oauth2/authorize エンドポイントは、2 つのリダイレクト先をサポートするリダイレクトエン
ドポイントです。に identity_providerまたは idp_identifierパラメータを含めるとURL、
その ID プロバイダー (IdP) のサインインページにユーザーをサイレントにリダイレクトします。それ以外の場合、リクエストに含めたのと同じURLパラメータログインエンドポイントで にリダイレ
クトされます。
認証エンドポイントは、ホストされている UI または IdP サインインページのどちらかにリダイレク
トされます。このエンドポイントにおけるユーザーセッションの送信先は、ユーザーがブラウザで直接操作する必要があるウェブページです。
認証エンドポイントを使用するには、ユーザープールに以下のユーザープールの詳細に関する情報を提供するパラメータを使用して、ユーザーのブラウザを /oauth2/authorize で呼び出します。
• サインインするアプリクライアント。
フェデレーションエンドポイントリファレンス

1205

Amazon Cognito

開発者ガイド• 終了URLするコールバック。
• ユーザーのアクセストークンでリクエストする OAuth2.0 スコープ。
• サインインに使用するサードパーティーの IdP (任意)。
また、Amazon Cognito が受信クレームの検証に使用する state および nonce パラメータを提供することもできます。
GET /oauth2/authorize/oauth2/authorize エンドポイントは HTTPS GET のみをサポートします。アプリは通常、このリクエストをユーザーのブラウザで開始します。/oauth2/authorize エンドポイントへのリクエ
ストは、 経由でのみ行うことができますHTTPS。
認証エンドポイントの定義の詳細については、「認証エンドポイント」のOpenID Connect (OIDC)
標準http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthorizationEndpoint」を参照してください。
リクエストパラメータ
response_type（必須) レスポンスタイプ。code または token を指定する必要があります。
response_type が code のリクエストに成功すると、認証コード付与を返します。認証コードの付与は、Amazon Cognito がリダイレクト に追加するcodeパラメータですURL。アプリはトークンエンドポイント と、アクセス、ID、更新の各トークンとコードを交換することができます。セキュリティ上のベストプラクティスとして、またユーザーに更新トークンを受け取るには、アプリで認証コード付与を使用します。
response_type が token のリクエストに成功すると、暗黙的な付与を返します。暗黙的な許可は、Amazon Cognito がリダイレクト に追加する ID およびアクセストークンですURL。暗黙的な付与は、トークンと潜在的な識別情報をユーザーに公開するため、安全性が低くなります。ア
プリクライアントの設定で、暗黙的な付与のサポートを無効にできます。
client_id（必須) アプリクライアント ID。
client_id の値は、リクエストを行うユーザープール内のアプリクライアントの ID である必要があります。アプリクライアントは、Amazon Cognito ローカルユーザーまたは少なくとも 1 つのサードパーティー IdP によるサインインをサポートしている必要があります。
フェデレーションエンドポイントリファレンス

1206

Amazon Cognito

開発者ガイドredirect_uri（必須) Amazon Cognito URLがユーザーを承認した後に認証サーバーがブラウザをリダイレクトする 。
リダイレクトユニフォームリソース識別子 (URI) には、次の属性が必要です。
• 絶対 である必要がありますURI。
• をクライアントURIに事前登録しておく必要があります。
• フラグメントコンポーネントが含まれていない。
OAuth 「2.0 - リダイレクトエンドポイント」を参照してください。
Amazon Cognito ではHTTPS、テストURL目的でコールバックとして設定できる を除きhttp://
localhost、リダイレクトに URIを使用する必要があります。
Amazon Cognito は、 URLsなどのアプリケーションコールバックもサポートしていますmyapp://example。
state（オプション、推奨) アプリケーションがリクエストに状態パラメータを追加すると、/oauth2/
authorizeエンドポイントがユーザーをリダイレクトするときに Amazon Cognito はその値をア
プリケーションに返します。
この値をリクエストに追加して、CSRF攻撃から保護します。
state パラメータの値を URLでエンコードされたJSON文字列に設定することはできません。state パラメータでこの形式に一致する文字列を渡すには、文字列を base64 にエンコード
してから、アプリケーションでデコードします。
identity_provider（オプション) このパラメータを追加して、ホストされた UI をバイパスし、ユーザーをプロバ
イダーのサインインページにリダイレクトします。identity_provider パラメータの値はユーザープールに表示される ID プロバイダー (IdP) の名前です。
• ソーシャルプロバイダーの場合、ID_provider 値 Facebook、Google、LoginWithAmazon、および を使用できますSignInWithApple。
• Amazon Cognito ユーザープールの場合は、値 を使用しますCOGNITO。
• SAML 2.0 および OpenID Connect (OIDC) ID プロバイダー (IdPs) の場合は、ユーザープールの IdP に割り当てた名前を使用します。
フェデレーションエンドポイントリファレンス

1207

Amazon Cognito

開発者ガイドidp_identifier（オプション) このパラメータを追加して、identity_provider 名の代替名を持つプロバイダーにリダイレクトします。Amazon Cognito コンソールのサインインエクスペリエンスタブOIDC IdPs
から SAML 2.0 と の識別子を入力できます。
scope（オプション) システム予約スコープまたはクライアントに関連付けられているカスタムスコープの組み合わせにすることができます。スコープはスペースで区切る必要があります。システム予約されたスコープは openid、email、phone、profile、および
aws.cognito.signin.user.admin です。使用されるスコープは、いずれもクライアントに関連付けられている必要があり、関連付けられていなければ、ランタイム時に無視されます。
クライアントがスコープをリクエストしない場合、認証サーバーはクライアントに関連付けられているすべてのスコープを使用します。
ID トークンは openid スコープがリクエストされた場合にのみ返されます。Amazon Cognito ユーザープールに対してアクセストークンを使用できるのは、aws.cognito.signin.user.admin スコープがリクエストされている場合のみです。phone、email、および profile スコープは、openid スコープがリクエストされた場合にのみリクエストできます。これらのスコープは ID トークン内でクレームを記述します。
code_challenge_method（オプション) チャレンジの生成に使用したハッシュプロトコル。は、S256 とプレーンの 2 つのメソッドPKCERFCを定義します。ただし、Amazon Cognito 認証サーバーは S256 のみをサポートします。
code_challenge（オプション) から生成したチャレンジcode_verifier。
code_challenge_method パラメータを指定した場合にのみ必須です。
nonce（オプション) リクエストに追加できるランダムな値。指定したノンス値は、Amazon Cognito が発行する ID トークンに含まれます。リプレイ攻撃を防ぐために、アプリは ID トークンの nonce
クレームを検査し、生成したものと比較することができます。nonce クレームの詳細について
は、「OpenID Connect standard」(OpenID Connect 標準) の「ID token validation」(ID トークンの検証) を参照してください。
フェデレーションエンドポイントリファレンス

1208

Amazon Cognito

開発者ガイド

肯定的なレスポンスを持つリクエストの例
次の例は、/oauth2/authorizeエンドポイントへのHTTPリクエストの形式を示しています。
認証コード付与
これは、認証コード付与のリクエスト例です。
例 – GETリクエスト
次のリクエストは、ユーザーがredirect_uri送信先でアプリに渡す認証コードを取得するセッ
ションを開始します。このセッションは、ユーザー属性と Amazon Cognito セルフサービスAPIオペ
レーションへのアクセスの範囲をリクエストします。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin

例 – レスポンス
Amazon Cognito 認証サーバーは、承認コードとステートを伴ってリダイレクトしアプリに戻ります。認証コードは 5 分間有効です。
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdefEXAMPLE11111&state=abcdefg

による認証コード付与 PKCE
これは、 を使用した認証コード付与のリクエスト例ですPKCE。
例 – GETリクエスト
次のリクエストは、前のリクエストに code_challenge パラメータを追加します。トークンのコード交換を完了するには、/oauth2/tokenエンドポイントへのリクエストに code_verifierパラ
メータを含める必要があります。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
フェデレーションエンドポイントリファレンス

1209

Amazon Cognito

開発者ガイドredirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin&
code_challenge_method=S256&
code_challenge=a1b2c3d4...

例 - レスポンス
認証サーバーは、認証コードと状態を使用してアプリケーションにリダイレクトします。コードと状
態は、フラグメントではなくクエリ文字列パラメータで返される必要があります。
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdefEXAMPLE11111&state=abcdefg

openid スコープを使用しないトークン付与
これは、暗黙的な許可を生成し、ユーザーのセッションJWTsに直接返すリクエストの例です。
例 – GETリクエスト
次のリクエストは、認証サーバーからの暗黙的な付与用です。Amazon Cognito からのアクセストー
クンは、セルフサービスAPIオペレーションを承認します。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=token&client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin

例 - レスポンス
Amazon Cognito 認証サーバーはアクセストークンを伴ってリダイレクトし、アプリに戻ります。openid スコープがリクエストされなかったため、Amazon Cognito は ID トークンを返しません。また、Amazon Cognito はこのフローで更新トークンを返しません。Amazon Cognito は、クエ
リ文字列ではなくフラグメントでアクセストークンと状態を返します。
HTTP/1.1 302 Found
Location: https://YOUR_APP/
redirect_uri#access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE

フェデレーションエンドポイントリファレンス

1210

Amazon Cognito

開発者ガイドopenid スコープを使用したトークン付与
これは、暗黙的な許可を生成し、ユーザーのセッションJWTsに直接返すリクエストの例です。
例 – GETリクエスト
次のリクエストは、認証サーバーからの暗黙的な付与用です。Amazon Cognito からのアクセストー
クンは、ユーザー属性とセルフサービスAPIオペレーションへのアクセスを許可します。
GET
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=token&client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin+openid+profile

例 – レスポンス
認証サーバーは、アクセストークンと ID トークンを使用してアプリケーションにリダイレクトバッ
クします (openidスコープが含まれていたため）。

HTTP/1.1 302 Found
Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&exp

否定応答の例
Amazon Cognito はリクエストを拒否することがあります。負のリクエストには、HTTPエラーコー
ドと、リクエストパラメータの修正に使用できる説明が付属しています。以下は、否定的なレスポン
スの例です。
• client_id と redirect_uriが有効で、リクエストパラメータが正しくフォーマットされていない場合、認証サーバーはエラーをクライアントの にリダイレクトredirect_uriし、URLパラ
メータにエラーメッセージを追加します。以下は、誤ったフォーマットの例です。
• リクエストには response_typeパラメータは含まれません。
• 認証リクエストは code_challengeパラメータを提供しましたが、
code_challenge_methodパラメータは提供していません。
• code_challenge_method パラメータの値は ではありませんS256。
フェデレーションエンドポイントリファレンス

1211

Amazon Cognito

開発者ガイド

以下は、誤ったフォーマットのリクエスト例に対するレスポンスです。
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request• クライアントが tokenで codeまたは をリクエストしてもresponse_type、これらのリクエス
トに対するアクセス許可がない場合、Amazon Cognito 認証サーバーはredirect_uri次のようにクライアントの unauthorized_clientに戻ります。
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client• クライアントが無効、不明、または有効ではない形式のスコープをリクエストする場合は、以下にあるように、Amazon Cognito 認証サーバーが invalid_scope をクライアントの
redirect_uri に返します。
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope• サーバーに予期しないエラーが発生した場合、認証サーバーはクライアントの server_errorに戻りますredirect_uri。HTTP 500 エラーはクライアントに送信されないため、エラーはユー
ザーのブラウザに表示されません。認証サーバーは次のエラーを返します。
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error• Amazon Cognito がサードパーティーの へのフェデレーションを通じて認証する場合
IdPs、Amazon Cognito では次のような接続の問題が発生する可能性があります。
• IdP からトークンをリクエストしているときに接続タイムアウトが発生した場合、認証サーバー
は以下のようにエラーをクライアントの redirect_uri にリダイレクトします。
HTTP 1.1 302 Found Location: https://client_redirect_uri?
error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint• ID トークンの検証のためにjwks_uriエンドポイントを呼び出すときに接続タイムアウトが発生すると、認証サーバーは次のようにエラーでクライアントの にリダイレクトしますredirect_uri。
HTTP 1.1 302 Found Location: https://client_redirect_uri?
error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri

フェデレーションエンドポイントリファレンス

1212

Amazon Cognito

開発者ガイド• サードパーティーの にフェデレーションして認証する場合 IdPs、プロバイダーはエラーレスポン
スを返すことがあります。これは、設定エラーや、次のようなその他の理由が原因である可能性があります。
• 他のプロバイダーからエラーレスポンスを受け取った場合、認証サーバーは以下のようにエラーをクライアントの redirect_uri にリダイレクトします。
HTTP 1.1 302 Found Location: https://client_redirect_uri?
error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error
getting token• Google からエラーレスポンスを受け取った場合、認証サーバーは以下のようにエラーをクライ
アントの redirect_uri にリダイレクトします。
HTTP 1.1 302 Found Location: https://client_redirect_uri?
error=invalid_request&error_description=Google+Error+-+[status code]+[Googleprovided error code]• Amazon Cognito が外部 IdP に接続するときに通信例外が発生すると、認証サーバーは、次のいず
れかredirect_uriのメッセージを使用してエラーでクライアントの にリダイレクトします。
••

HTTP 1.1 302 Found Location: https://client_redirect_uri?
error=invalid_request&error_description=Connection+reset
HTTP 1.1 302 Found Location: https://client_redirect_uri?
error=invalid_request&error_description=Read+timed+out

トークンエンドポイント
OAuth の 2.0 トークンエンドポイントはJSON、ウェブトークン (JWTs) /oauth2/token を発行します。
ユーザープール 2.0 OAuth 認証サーバーは、トークンエンドポイントから次のタイプのセッションにJSONウェブトークン (JWTs) を発行します。
1. 認可コード付与のリクエストを完了したユーザー。コードの引き換えに成功すると、ID、アクセ
ス、更新の各トークンが返されます。
2. クライアント認証情報の付与を完了した M achine-to-machine (M2M) セッション。クライアント
シークレットによる認証が成功すると、アクセストークンが返されます。
フェデレーションエンドポイントリファレンス

1213

Amazon Cognito

開発者ガイド3. 以前にサインインして更新トークンを受け取ったことがあるユーザー。更新トークン認証は、新しい ID トークンとアクセストークンを返します。
Note
ホストされた UI またはフェデレーションで認証コード付与を使用してサインインする
ユーザーは、トークンエンドポイントからトークンを常に更新できます。オペレーショ
ンでサインインAPIInitiateAuthし、記憶されたデバイスがユーザープールでアクティブでない場合にトークンエンドポイントでトークンを更新AdminInitiateAuthできるユーザー。記憶されたデバイスがアクティブの場合は、 InitiateAuthまたは
AdminInitiateAuthAPIリクエストの AuthFlow REFRESH_TOKEN_AUTHでトークンを更新します。

ユーザープールにドメインを追加すると、トークンエンドポイントが公開されます。HTTP POST リ
クエストを受け入れます。アプリケーションセキュリティのために、認証コードのサインインイベン
トPKCEで を使用します。PKCE は、認証コードを渡したユーザーが、認証したユーザーと同じユーザーであることを確認します。の詳細についてはPKCE、IETF「7636RFC」を参照してください。
ユーザープールアプリクライアントとそのグラントタイプ、クライアントシークレット、承認された
スコープ、クライアントの詳細については、IDs「」を参照してくださいユーザープールアプリクラ
イアント。M2M 認証、クライアント認証情報の付与、およびアクセストークンスコープによる認証の詳細については、「」を参照してくださいスコープ、M2M 、リソースサーバーによるAPI認可。
アクセストークンからユーザーに関する情報を取得するには、それを UserInfo エンドポイントまたは GetUserAPIリクエストに渡します。
POST /oauth2/トークン/oauth2/token エンドポイントは HTTPS POST のみをサポートします。ユーザープールクライア
ントは、ブラウザ経由ではなく、このエンドポイントに直接リクエストを送信します。
トークンエンドポイントは client_secret_basic と client_secret_post をサポートしています。OpenID Connect 仕様の詳細については、「クライアント認証」を参照してください。OpenID Connect 仕様のトークンエンドポイントの詳細については、「トークンエンドポイン
ト」を参照してください。

フェデレーションエンドポイントリファレンス

1214

Amazon Cognito

開発者ガイドヘッダーのリクエストパラメータ
Authorization
クライアントがシークレットを発行された場合、クライアントは認証ヘッダーclient_secretでその client_idと をclient_secret_basicHTTP認証として渡すことができます。また、client_id と client_secret を client_secret_post 認証としてリクエスト本文に含めることもできます。
認証ヘッダー文字列は Basic Base64Encode(client_id:client_secret) です。次の例
は、Base64-encodedバージョンの文字列 を使用したabcdef01234567890、クライアントシー
クレット djc98u3jiedmi283eu928を持つアプリケーションクライアントの認証ヘッダーですdjc98u3jiedmi283eu928:abcdef01234567890。
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

Content-Type
このパラメータの値を 'application/x-www-form-urlencoded' に設定します。
本文のリクエストパラメータ
grant_type（必須) リクエストするOIDC許可のタイプ。
authorization_code、refresh_token、または client_credentials を指定する必要があります。次の条件で、トークンエンドポイントからカスタムスコープのアクセストークンをリクエストできます。
• アプリケーションクライアント設定でリクエストされたスコープを有効にしました。
• クライアントシークレットを使用してアプリケーションクライアントを設定しました。
• アプリケーションクライアントでクライアント認証情報の付与を有効にします。
client_id（オプション) ユーザープール内のアプリケーションクライアントの ID。ユーザーを認証したのと同じアプリケーションクライアントを指定します。
クライアントがパブリックで、シークレットがない場合、または がclient_secret_post認可client_secretされている場合は、このパラメータを指定する必要があります。
フェデレーションエンドポイントリファレンス

1215

Amazon Cognito

開発者ガイドclient_secret（オプション) ユーザーを認証したアプリクライアントのクライアントシークレット。アプリ
ケーションクライアントがクライアントシークレットを持っていて、Authorization ヘッダーを送信しなかった場合は必須です。
scope（オプション) アプリケーションクライアントに関連付けられている任意のカスタムスコープの組み合わせにすることができます。リクエストするスコープは、アプリケーションクライアント
に対してアクティブ化する必要があります。そうでない場合、Amazon Cognito はそれを無視します。クライアントがスコープをリクエストしない場合、認証サーバーはアプリクライアント設
定で承認したすべてのカスタムスコープを割り当てます。
grant_type が client_credentials である場合にのみ使用されます。
redirect_uri（オプション) authorization_codeでの取得に使用されたredirect_uriものと同じである
必要があります/oauth2/authorize。
が の場合grant_type、このパラメータを指定する必要がありますauthorization_code。
refresh_token（オプション) ユーザーのセッションの新しいアクセストークンと ID トークンを生成するには、/oauth2/tokenリクエストの refresh_token パラメータの値を、同じアプリケーション
クライアントから以前に発行された更新トークンに設定します。
code（オプション) 認証コード付与からの認証コード。認証リクエストに grant_typeの が含まれている場合は、このパラメータを指定する必要がありますauthorization_code。
code_verifier（オプション) で認証コード付与リクエストcode_challengeの の計算に使用した任意の値
PKCE。
肯定的なレスポンスを持つリクエストの例
トークン用の認可コードの交換
例 – POSTリクエスト
フェデレーションエンドポイントリファレンス

1216

Amazon Cognito

開発者ガイドPOST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect

例 - レスポンス
HTTP/1.1 200 OK
Content-Type: application/json{"access_token":"eyJra1example","id_token":"eyJra2example","refresh_token":"eyJj3example","token_type":"Bearer","expires_in":3600}

Note
トークンエンドポイントは、grant_type が authorization_code の場合にのみ
refresh_token を返します。

アクセストークンのクライアント認証情報の交換: 認証ヘッダーのクライアントシークレット
例 – POSTリクエスト
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=client_credentials&
client_id=1example23456789&
フェデレーションエンドポイントリファレンス

1217

Amazon Cognito

開発者ガイドscope=resourceServerIdentifier1/scope1 resourceServerIdentifier2/scope2

例 – レスポンス
HTTP/1.1 200 OK
Content-Type: application/json{"access_token":"eyJra1example","token_type":"Bearer","expires_in":3600}

アクセストークンのクライアント認証情報の交換: リクエスト本文のクライアントシークレット
例 – POSTリクエスト
POST /oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request
User-Agent: USER_AGENT
Accept: /Accept-Encoding: gzip, deflate, brContent-Length: 177
Referer: http://auth.example.com/oauth2/token
Host: auth.example.com
Connection: keep-alive

grant_type=client_credentials&client_id=1example23456789&scope=my_resource_server_identifier%2F

例 - レスポンス
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: Tue, 05 Dec 2023 16:11:11 GMT
x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b{"access_token": "eyJra12345EXAMPLE","expires_in": 3600,
フェデレーションエンドポイントリファレンス

1218

Amazon Cognito

開発者ガイド"token_type": "Bearer"}

トークンの認証コード付与PKCEを と交換する
例 – POSTリクエスト
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
code_verifier=CODE_VERIFIER&
redirect_uri=com.myclientapp://myclient/redirect

例 – レスポンス
HTTP/1.1 200 OK
Content-Type: application/json{"access_token":"eyJra1example","id_token":"eyJra2example","refresh_token":"eyJj3example","token_type":"Bearer","expires_in":3600}

Note
トークンエンドポイントは、refresh_token が grant_type の場合にのみ
authorization_code を返します。

トークン用の更新トークンの交換
例 – POSTリクエスト
フェデレーションエンドポイントリファレンス

1219

Amazon Cognito

開発者ガイドPOST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
grant_type=refresh_token&client_id=1example23456789&
refresh_token=eyJj3example

例 – レスポンス
HTTP/1.1 200 OK
Content-Type: application/json{"access_token":"eyJra1example","id_token":"eyJra2example","token_type":"Bearer","expires_in":3600}

Note
トークンエンドポイントは、grant_type が authorization_code の場合にのみ
refresh_token を返します。

否定応答の例
例 - エラーレスポンス
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8{"error":"invalid_request|invalid_client|invalid_grant|
unauthorized_client|unsupported_grant_type"}

フェデレーションエンドポイントリファレンス

1220

Amazon Cognito

開発者ガイドinvalid_request
リクエストに必須パラメータが含まれていない、サポートされていないパラメータ値(unsupported_grant_type 以外) が含まれている、または正しい形式ではありません。たとえば、grant_type が refresh_token であるが、refresh_token が含まれていない、などです。
invalid_client
クライアントの認証に失敗しました。たとえば、クライアントが認証ヘッダーに client_id とclient_secret を含めたが、その client_id と client_secret を持つクライアントが存在しない場合です。
invalid_grant
更新トークンが失効しています。
認可コードが既に消費されているか、存在しません。
アプリクライアントにはリクエストされたスコープ内すべての属性への読み取りアクセス権はありません。例えば、アプリが email スコープをリクエストすると、アプリクライアントは
email 属性の読み取りはできますが、email_verified は読み取れません。
unauthorized_client
クライアントがコード付与フローまたはトークンの更新を許可されていません。
unsupported_grant_type
grant_type が authorization_code、refresh_token、または client_credentials
以外の場合に返されます。

UserInfo エンドポイント
userInfo エンドポイントは OpenID Connect (OIDC) userInfoエンドポイント です。トークンエン
ドポイント が発行したアクセストークンをサービスプロバイダーが提示すると、ユーザー属性で応答します。ユーザーのアクセストークンのスコープは、 userInfo エンドポイントがレスポンスで返すユーザー属性を定義します。openid スコープはアクセストークンクレームのいずれかである必要があります。
Amazon Cognito は、 などのユーザープールAPIリクエストに応答してアクセストークンを発行しますInitiateAuth。スコープが含まれていないため、userInfo エンドポイントはこれらのアクセストーク
フェデレーションエンドポイントリファレンス

1221

Amazon Cognito

開発者ガイドンを受け入れません。代わりに、トークンエンドポイントからアクセストークンを提示する必要があります。
2.0 OAuth サードパーティー ID プロバイダー (IdP) もuserInfoエンドポイントをホストします。ユー
ザーがその IdP で認証すると、Amazon Cognito は認証コードを IdP tokenエンドポイントとサイレントに交換します。ユーザープールは IdP アクセストークンを渡して、IdP userInfoエンドポイン
トからのユーザー情報の取得を許可します。
GET /oauth2/userInfo
アプリは、ブラウザ経由ではなく、このエンドポイントに直接リクエストを送信します。
詳細については、OpenID Connect (OIDC) 仕様のUserInfo「エンドポイント」を参照してください。
トピック• ヘッダーのリクエストパラメータ• 例 – リクエスト• 例 - 肯定的なレスポンス• ネガティブレスポンスの例
ヘッダーのリクエストパラメータ
Authorization: Bearer <access_token>
認証ヘッダーフィールドにアクセストークンを渡します。
必須。
例 – リクエスト
GET /oauth2/userInfo HTTP/1.1
Content-Type: application/x-amz-json-1.1
Authorization: Bearer eyJra12345EXAMPLE
User-Agent: [User agent]
Accept: */*Host: auth.example.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

フェデレーションエンドポイントリファレンス

1222

Amazon Cognito

開発者ガイド例 - 肯定的なレスポンス
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: [Integer]
Date: [Timestamp]
x-amz-cognito-request-id: [UUID]
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Server: Server
Connection: keep-alive{"sub": "[UUID]","email_verified": "true","custom:mycustom1": "CustomValue","phone_number_verified": "true","phone_number": "+12065551212","email": "bob@example.com","username": "bob"}

OIDC クレームのリストについては、「標準クレーム」を参照してください。現在、Amazon
Cognito は、email_verified と phone_number_verified の値を文字列として返します。
ネガティブレスポンスの例
例 - 不正なリクエスト
HTTP/1.1 400 Bad Request
WWW-Authenticate: error="invalid_request",
error_description="Bad OAuth2 request at UserInfo Endpoint"

invalid_request
リクエストに必須パラメータがないか、サポートされていないパラメータ値が含まれているか、
形式が正しくありません。
フェデレーションエンドポイントリファレンス

1223

Amazon Cognito

開発者ガイド例 – 不正なトークン
HTTP/1.1 401 Unauthorized
WWW-Authenticate: error="invalid_token",error_description="Access token is expired, disabled, or deleted, or the user has
globally signed out."

invalid_token
アクセストークンの有効期限が切れているか、取り消されているか、形式が正しくないか、無効です。

エンドポイントの取り消し/oauth2/revoke エンドポイントは、指定した更新トークンを使用して Amazon Cognito が最初に発行したユーザーのアクセストークンを取り消します。このエンドポイントは、同じ更新トークンから後続のすべてのアクセストークンと ID トークンも取り消します。エンドポイントがトークンを取り消した後は、取り消したアクセストークンを使用して Amazon Cognito トークンAPIsが認証するにアクセスすることはできません。
POST /oauth2/revoke/oauth2/revoke エンドポイントは HTTPS POST のみをサポートします。ユーザープールクライ
アントは、システムブラウザ経由ではなくこのエンドポイントに直接リクエストを送信します。
ヘッダーのリクエストパラメータ
Authorization
アプリケーションクライアントにクライアントシークレットがある場合、アプリケーションは基本認証を介して認証ヘッダーclient_secretで client_idと を渡す必要がありますHTTP。
シークレットはベーシック Base64Encode(client_id:client_secret) です。
Content-Type
常に 'application/x-www-form-urlencoded' にする必要があります。

フェデレーションエンドポイントリファレンス

1224

Amazon Cognito

開発者ガイド本文のリクエストパラメータ
token（必須) クライアントが取り消す更新トークン。このリクエストは、Amazon Cognito がこの更新
トークンで発行したすべてのアクセストークンも無効にします。
必須。
client_id（オプション) 取り消すトークンのアプリケーションクライアント ID。
クライアントがパブリックでありシークレットがない場合は必須です。
取り消しリクエストの例
例 1: クライアントシークレットのないアプリクライアントのトークンを取り消す

POST /oauth2/revoke HTTP/1.1
Host: https://mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
token=2YotnFZFEjr1zCsicMWpAA&
client_id=djc98u3jiedmi283eu928

例 2: クライアントシークレットを持つアプリクライアントのトークンを取り消す

POST /oauth2/revoke HTTP/1.1
Host: https://mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=2YotnFZFEjr1zCsicMWpAA

取り消しエラーレスポンス
正常なレスポンスには空のボディが含まれています。エラーレスポンスは、 errorフィールドと、場合によっては error_descriptionフィールドを持つJSONオブジェクトです。
フェデレーションエンドポイントリファレンス

1225

Amazon Cognito

開発者ガイドエンドポイントエラー• トークンがリクエストに存在しない場合、またはアプリケーションクライアントでこの機能が無効になっている場合は、400 HTTP とエラー が表示されますinvalid_request。
• Amazon Cognito が失効リクエストで送信したトークンが更新トークンでない場合、400 HTTP と
エラー が表示されますunsupported_token_type。
• クライアント認証情報が有効でない場合、401 HTTP とエラー が表示されますinvalid_client。
• トークンが取り消された場合、またはクライアントが無効なトークンを送信した場合、200 HTTP
OK を受け取ります。

saml2/idpresponse エンドポイント
はSAMLアサーション/saml2/idpresponseを受け取ります。 service-provider-initiated (SP 開始)
サインインでは、アプリケーションはこのエンドポイントと直接やり取りしません。2.0 ID SAML プ
ロバイダー (IdP) はユーザーのSAML応答をここにリダイレクトします。SP 開始サインインの場合
は、 へのパスをアサーションコンシューマーサービス (ACS) saml2/idpresponseとして IdP を設定しますURL。セッション開始の詳細については、「」を参照してくださいSAML Amazon Cognito
ユーザープールでの セッション開始。
IdP で開始されたサインインで、SAML2.0 プロバイダーでユーザーをサインインさせた後、アプリ
ケーションでこのエンドポイントへのリクエストを呼び出します。ユーザーはブラウザで IdP でサインインし、アプリケーションはSAMLアサーションを収集してこのエンドポイントに送信します。
経由でHTTP POSTリクエストの本文にSAMLアサーションを送信する必要がありますHTTPS。POST
リクエストの本文は、 SAMLResponseパラメータと Relaystateパラメータである必要があります。詳細については、「IdP によるSAMLサインインの使用」を参照してください。
POST /saml2/idpresponse
IdP が開始するサインインで/saml2/idpresponseエンドポイントを使用するには、ユーザーのセッションに関する情報をユーザープールに提供するパラメータを含むPOSTリクエストを生成します。
• サインインするアプリケーションクライアント。
• 終了URLするコールバック。
• ユーザーのアクセストークンでリクエストする OAuth 2.0 スコープ。
• サインインリクエストを開始した IdP。
フェデレーションエンドポイントリファレンス

1226

Amazon Cognito

開発者ガイドIdP が開始するリクエスト本文パラメータ
SAMLResponse
ユーザープール内の有効なアプリケーションクライアントと IdP 設定に関連付けられた IdP からの Base64-encodedされたSAMLアサーション。
RelayState
RelayState パラメータには、エンドポイントに渡すリクエストパラメータが含まれますoauth2/authorize。これらのパラメータの詳細については、「」を参照してください認可
エンドポイント。
response_type
2OAuth.0 許可タイプ。
client_id
アプリクライアント ID。
redirect_uri
Amazon Cognito がユーザーを承認した後に認証サーバーURLがブラウザをリダイレクトする。
identity_provider
ユーザーをリダイレクトする ID プロバイダーの名前。
idp_identifier
ユーザーをリダイレクトする ID プロバイダーの識別子。
scope
ユーザーが認証サーバーにリクエストする OAuth 2.0 スコープ。
肯定的なレスポンスを持つリクエストの例
例 – POSTリクエスト
次のリクエストは、アプリクライアント MySAMLIdPの IdP からのユーザーに対する認証コード付与
用です1example23456789。ユーザーは認証コードhttps://www.example.comを使用して にリダイレクトします。認証コードは、2.0 OAuth スコープ openid、、emailおよび のアクセストーク
ンを含むトークンと交換できますphone。
フェデレーションエンドポイントリファレンス

1227

Amazon Cognito

開発者ガイドPOST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded
SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone

例 – レスポンス
前のリクエストに対するレスポンスを次に示します。
HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]

OAuth 2.0 許可
Amazon Cognito ユーザープール 2.0 OAuth 認証サーバーは、3 種類の 2.0 OAuth 認証付与 に応答してトークンを発行します。ユーザープール内の各アプリクライアントに、サポートされる許可タイ
プを設定できます。クライアント認証情報許可は、暗黙または認証コード許可と同じアプリクライア
ントとして有効にできません。暗黙的コード付与と認証コード付与のリクエストは、認可エンドポイ
ント で開始され、クライアント認証情報付与のリクエストは トークンエンドポイント で開始されます。
認証コード付与
認証リクエストが成功すると、認証サーバーはコールバック に codeパラメータの認証コードを追加しますURL。次に、トークンエンドポイント と、アクセス、ID、更新トークンのコードを交換することができます。認証コード付与をリクエストするには、リクエスト
で response_type を code に設定します。リクエスト例については、「認証コード付与」を参照してください。
認証コード付与は、最も安全な認証付与の形式です。トークンの内容がユーザーに直接表示されることはありません。代わりに、ユーザーのトークンを取得して安全に保管する責任はアプリにあります。Amazon Cognito では、認証コード付与が 3 種類のトークン (ID、アクセス、更新) すOAuth 2.0 許可

1228

Amazon Cognito

開発者ガイドべてを認証サーバーから取得する唯一の方法です。Amazon Cognito ユーザープール を介した認証から 3 つのトークンタイプをすべて取得することもできますがAPI、 は 以外のスコープのアク
セストークンを発行APIしませんaws.cognito.signin.user.admin。
暗黙的な付与認証リクエストが成功すると、認証サーバーは access_tokenパラメータのアクセストーク
ンと id_tokenパラメータの ID トークンをコールバック に追加しますURL。暗黙的な許可では、トークンエンドポイント に追加の操作は必要ありません。暗黙的な許可をリクエストするには、リクエストで response_type を token に設定します。暗黙的な許可では、ID とアクセス
トークンのみが生成されます。リクエスト例については、「openid スコープを使用しないトークン付与」を参照してください。
暗黙的な許可は、レガシーの認証付与方法です。認証コード付与とは異なり、ユーザーはトークンを傍受して検査できます。暗黙的な許可によるトークンの配信を防ぐには、認証コード付与のみをサポートするようにアプリクライアントを設定します。
クライアント認証情報
クライアント認証情報は、アクセスの認可のみの machine-to-machine許可です。クライアント
認証情報許可を受けるには、認可エンドポイント をバイパスして、トークンエンドポイント に
直接リクエストを生成してください。アプリクライアントにはクライアントシークレットが必要
で、クライアント認証情報許可のみをサポートする必要があります。リクエストが成功すると、認証サーバーがアクセストークンを返します。
クライアント認証情報付与からのアクセストークンは、2.0 OAuth スコープを含む認証メカニズ
ムです。通常、トークンには、アクセスで保護された に対するHTTPオペレーションを許可するカスタムスコープクレームが含まれていますAPIs。詳細については、「スコープ、M2M 、リ
ソースサーバーによるAPI認可」を参照してください。
クライアント認証情報の付与は、 AWS 請求書にコストを追加します。詳細については、「Amazon Cognito の料金」を参照してください。
これらの権限とその実装の詳細については、 AWS セキュリティブログのOAuthAmazon Cognito で2.0 を使用する方法: さまざまな OAuth 2.0 権限について学ぶ」を参照してください。

Amazon Cognito ユーザープールでのPKCE認証コード付与での の使用
Amazon Cognito は、認証コード付与でコード交換 (PKCE) 認証の証明キーをサポートしています。PKCE は、パブリッククライアント用の OAuth 2.0 認証コード付与の拡張機能です。PKCE
は、傍受された認証コードが使用されるのを防ぎます。
の使用 PKCE

1229

Amazon Cognito

開発者ガイドAmazon Cognito が を使用する方法 PKCE
で認証を開始するにはPKCE、アプリケーションが一意の文字列値を生成する必要があります。この文字列は、Amazon Cognito が最初の認証許可をリクエストするクライアントとトークンの認証コードを交換するクライアントを比較するために使用するシークレット値であるコード検証子です。
アプリはコード検証文字列にSHA256ハッシュを適用し、結果を base64 にエンコードする必要があります。ハッシュされた文字列をリクエスト本文のcode_challengeパラメータ認可エンドポイン
トとして に渡します。アプリケーションが認証コードをトークンと交換するときは、 へのリクエス
ト本文にcode_verifierパラメータとしてプレーンテキストのコード検証文字列を含める必要がありますトークンエンドポイント。Amazon Cognito はコード検証子に対して同じ hash-and-encode
オペレーションを実行します。Amazon Cognito は、認証リクエストで受け取ったのと同じコード
チャレンジをコード検証者が生成したと判断する場合にのみ、ID、アクセス、および更新トークンを返します。
で認証付与フローを実装するには PKCE
1.

Amazon Cognito コンソールを開きます。プロンプトが表示されたら、 AWS 認証情報を入力します。

2.

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

3.

リストから既存のユーザープールを選択するか、ユーザープールを作成します。ユーザープールを作成すると、ウィザード中にアプリケーションクライアントを設定し、ホストされた UI を設定するように求められます。

4.

a.

新しいユーザープールを作成する場合は、ガイド付きセットアップ中にアプリケーションク
ライアントを設定し、ホストされた UI を設定します。

b.

既存のユーザープールを設定する場合は、ドメインとパブリックアプリケーションクライア
ント を追加します。

ランダムな英数字の文字列を生成します。これは通常、汎用的に一意の識別子 (UUID) であり、 のコードチャレンジを作成しますPKCE。この文字列は、リクエストで に送信する
code_verifierパラメータの値ですトークンエンドポイント。

5.

code_verifier 文字列をSHA256アルゴリズムでハッシュします。ハッシュオペレー
ションの結果を base64 にエンコードします。この文字列は、リクエストで に送信する
code_challengeパラメータの値です認可エンドポイント。
次のPython例では、 を生成code_verifierし、 を計算しますcode_challenge。
#!/usr/bin/env python3の使用 PKCE

1230

Amazon Cognito

開発者ガイドimport random
from base64 import urlsafe_b64encodefrom hashlib import sha256
from string import ascii_lettersfrom string import digits# use a cryptographically strong random number generator source
rand = random.SystemRandom()
code_verifier = ''.join(rand.choices(ascii_letters + digits, k=128))
code_verifier_hash = sha256(code_verifier.encode()).digest()
code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=')
print(f"code challenge: {code_challenge}")print(f"code verifier: {code_verifier}")

Python スクリプトからの出力例を次に示します。
code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg
code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBkJWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH

6.

で認証コード付与リクエストを使用して、ホストされた UI サインインを完了しますPKCE。の
例を次に示しますURL。
https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyotdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256

7.

認証を収集codeし、トークンエンドポイントを持つトークンと引き換えます。リクエストの例を次に示します。
POST /oauth2/token HTTP/1.1
Host: mydomain.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 296
redirect_uri=https%3A%2F%2Fwww.example.com&
client_id=1example23456789&
code=7378f445-c87f-400c-855e-0297d072ff03&の使用 PKCE

1231

Amazon Cognito

開発者ガイドgrant_type=authorization_code&
code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBkJWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH

8.

レスポンスを確認します。ID、アクセス、更新トークンが含まれます。Amazon Cognito ユー
ザープールトークンの使用の詳細については、「」を参照してくださいユーザープールでのトークンの使用。

ホストされた UI とフェデレーションエラーレスポンス
ホスト UI のサインインプロセスまたはフェデレーションログインでエラーが返されることがあります。認証がエラーで終了する原因となる条件は次のとおりです。
• ユーザープールでは実行できない操作を、ユーザーが実行する。
• Lambda トリガーが想定どおりの構文で応答しない。
• ID プロバイダー (IdP) がエラーを返す。
• Amazon Cognito は、ユーザーが提供した属性情報を検証できませんでした。
• IdP は、必須の属性に対応するクレームを送信しませんでした。
Amazon Cognito はエラーを検出すると、以下のいずれかの方法でエラーを通知します。
1. Amazon Cognito は、リクエストパラメータに エラーURLを含むリダイレクトを送信します。
2. Amazon Cognito はホストされた UI にエラーを表示します。
Amazon Cognito がリクエストパラメータに追加するエラーの形式は次のとおりです。
https://<Callback URL>/?error_description=error+description&error=error+name

ユーザーが操作を実行できないときにエラー情報を送信できるように支援する場合は、 URL とページのテキストまたはスクリーンショットをキャプチャするようにリクエストします。
Note
Amazon Cognito エラーの説明は固定文字列ではないため、固定のパターンや形式に依存するロジックは使用しないでください。

ホストされた UI とフェデレーションエラーレスポンス

1232

Amazon Cognito

開発者ガイドOIDC およびソーシャル ID プロバイダーのエラーメッセージ
ID プロバイダー (IdP) は、エラーを返すことがあります。OIDC または OAuth2.0 IdP が標準に準拠するエラーを返すと、Amazon Cognito はユーザーをコールバックにリダイレクトURLし、プロバイダーエラーレスポンスをエラーリクエストパラメータに追加します。Amazon Cognito は、プロバイ
ダー名とHTTPエラーコードを既存のエラー文字列に追加します。
以下は、エラーを返した IdP から Amazon Cognito へのリダイレクトの例URLです。
https://www.amazon.com/?error_description=LoginWithAmazon+Error+-+400+invalid_request+The+request+is+missing+a+required+parameter+%3A+client_secret&error=invalid_request

Amazon Cognito はプロバイダーから受け取ったもののみを返すため、ユーザーにはこの情報のサブセットが表示される場合があります。
IdP による初回ログインで問題が発生すると、IdP はすべてのエラーメッセージをユーザーに直接配信します。Amazon Cognito は、ユーザーセッションを検証するリクエストを IdP に生成すると、エラーメッセージをユーザーに中継します。Amazon Cognito は、次のエンドポイントから OAuthおよび OIDC IdP エラーメッセージをリレーします。
/tokenAmazon Cognito が IdP の認証コードをアクセストークンと交換します。
/.well-known/openid-configuration
Amazon Cognito は発行者のエンドポイントへのパスを検出します。
/.well-known/jwks.json
ユーザーのJSONウェブトークン (JWTs) を検証するために、Amazon Cognito は IdP がトークンの署名に使用するJSONウェブキー (JWKs) を検出します。
Amazon Cognito はHTTPエラーを返す可能性のある 2.0 SAML プロバイダーへのアウトバウンド
セッションを開始しないため、2.0 IdP SAML を使用したセッション中のユーザーのエラーには、この形式のプロバイダーエラーメッセージは含まれません。

Amazon Cognito ユーザープール API リファレンス
Amazon Cognito ユーザープールは、ウェブおよびモバイルアプリのユーザーによるサインアップとサインインを可能にします。認証されたユーザーのパスワードを変更し、未認証ユーザーがパス
ユーザープール API リファレンス

1233

Amazon Cognito

開発者ガイドワードを忘れた場合のフローを開始することができます。詳細については、「ユーザープール認証フロー」および「ユーザープールでのトークンの使用」を参照してください。
Amazon Cognito ユーザープール API には、ユーザープールとユーザーを表示および変更し、ユーザーの認証と承認を実行するオペレーションが含まれています。Amazon Cognito ユーザープール
API に統合される API オペレーションのクラスの説明については、「Amazon Cognito ユーザープー
ルAPIとユーザープールエンドポイントの使用」を参照してください。
Amazon Cognito ユーザープール API オペレーションと構文の詳細なリストについては、「Amazon
Cognito ユーザープール API リファレンス」を参照してください。Amazon Cognito ユーザープー
ル API リファレンスの各ページは、さまざまな AWS SDK の構文と例を含む参考資料へのリンクです。

Amazon Cognito ID プール (フェデレーティッド ID) API リファレンス
Amazon Cognito ID プールの使用により、ウェブおよびモバイルアプリケーションのユーザーは、権限が制限された一時的な AWS 認証情報を取得して AWS の他のサービスにアクセスすることができます。
完全な ID プール (フェデレーション ID) API リファレンスについては、「Amazon Cognito API リ
ファレンス」を参照してください。

Amazon Cognito Sync API リファレンス
AWS のサービスである Amazon Cognito Sync は、アプリケーション関連のユーザーデータのデバイ
ス間での同期を可能にするクライアントライブラリです。
Amazon Cognito Sync API リファレンスの詳細については、Amazon Cognito Sync API リファレン
スを参照してください。

ID プール API リファレンス

1234

Amazon Cognito

開発者ガイドAmazon Cognito のドキュメント履歴
次の表は、Amazon Cognito のドキュメントへの重要な追加項目を示しています。また、お客様からいただいたフィードバックを反映して、ドキュメントの小さな更新を頻繁に行っています。フィードバックを送信するには、Amazon Cognito ドキュメントの任意のページで下部にあるフィードバッ
クリンクを使用してください。
変更

説明

日付

に関する情報を更新しましID プール内の認証されていな
い ID のスコープダウンのための AWS マネージドポリシー
が、Amazon Location Serviceを廃止するようになりました。

2024 年 8 月 9 日

Lambda トリガーによるカスタム認証の新しい脅威防止と脅威検出の強化。

脅威からの保護を使用してカスタム認証サインインを分析し、適応型認証レスポンスを適用できるようになりました。また、脅威対策では、サ
インイントラフィックを分析して、試行間の地理的距離が不可能な状態になった。

2024 年 8 月 8 日

パスワードの再利用防止とユーザーアクティビティログのエクスポートのための新しい高度なセキュリティ機能。

ユーザーアクティビティログ
をエクスポートし、Amazon
Cognito ユーザープールの高度なセキュリティ機能を備えたパスワード履歴ポリシーを設定できるようになりました。

2024 年 8 月 6 日

Amazon Cognito がカナダ西部(カルガリー) およびアジアパ
シフィック (香港) で利用可能になりました AWS リージョン。

カナダ西部 (カルガリー) およびアジアパシフィック (香港)
リージョンで Amazon Cognito
リソースを作成できるようになりました。

2024 年 7 月 9 日

たAmazonCognitoUnAut
hedIdentitiesSessi
onPolicy 。

1235

Amazon Cognito

開発者ガイド

高度なセキュリティのためのアプリケーション動作の説明を改善

高度なセキュリティアダプ
ティブ認証のためのデバイス
コンテキストデータに関する情報を更新しました。

2024 年 6 月 10 日

トークン前の Lambda トリ
ガーで複雑なオブジェクトのサポートを追加

ID およびアクセストークンのクレームに配列とJSONオブジ
ェクトを追加できるようになりました。

2024 年 5 月 30 日

Verified Permissions とAmazon Cognito に関する情報を更新しました。

Amazon Verified Permissions
が Amazon Cognito とより直接的に統合されるようになりました。

2024 年 5 月 15 日

マルチリージョンの Amazon
SES検証済み ID。

Amazon AWS リージョンを使用しない一部の では
SES、Amazon Cognito ユー
ザープールは 2 つのリモートリージョン間で E メールの負荷分散を行います。

2024 年 5 月 10 日

M2M 認証とコスト管理に関する情報を追加しました。

Amazon Cognito ユーザープールで machine-to-machine(M2M) ユースケースのクライ
アント認証情報付与を使用す
る方法について説明します。

2024 年 5 月 9 日

Amazon Cognito が欧州 (スペイン) およびアジアパシフィッ
ク (ハイデラバード) で利用可能になりました AWS リージョン。

欧州 (スペイン) およびアジ
アパシフィック (ハイデラバード) リージョンで Amazon
Cognito リソースを作成できるようになりました。

2024 年 4 月 15 日

Amazon Cognito がアジアパシ
フィック (メルボルン) で利用可能になりました AWS リージョン。

アジアパシフィック (メルボルン) リージョンで Amazon
Cognito リソースを作成できるようになりました。

2024 年 4 月 4 日

1236

Amazon Cognito

開発者ガイドFlutter for Amazon Cognito
ユーザープールに Android ア
プリの例を追加しました。

Amazon Cognito 用のスター
ターモバイルアプリは、 のFlutter アプリケーションの例から構築できます GitHub。

2024 年 4 月 4 日

新しい入門コンテンツ

開始方法、一般的なシナリ
オ、マルチテナントのベスト
プラクティス、サインイン後のリソースへのアクセスに関するコンテンツを拡張しました。

2024 年 4 月 1 日

Amazon Cognito が欧州(チューリッヒ) で利用可能になりました AWS リージョン。

欧州 (チューリッヒ) リージョンで Amazon Cognito リソー
スを作成できるようになりました。

2024 年 3 月 14 日

Amazon Cognito が中東 (UAE)
で利用可能になりました AWS
リージョン。

中東 (UAE) リージョンでAmazon Cognito リソースを作成できるようになりました。

2024 年 3 月 8 日

SAML新機能と改善されたコンテンツ。

SAML リクエストへの署名、SAMLレスポンスの暗号化、IdP 開始の の設定が可能になりましたSAMLSSO。

2024 年 2 月 1 日

クォータの引き上げが利用可
能になりました。

Amazon Cognito リクエスト
レートクォータの追加容量を購入できるようになりました。

2024 年 1 月 25 日

Amazon Cognito ID プール
は、Service Quotas のリク
エストレートをサポートします。

Amazon Cognito ID プールのrequests-per-second （RPS)
クォータをモニタリング
し、Service Quotas コンソー
ルで引き上げをリクエストできるようになりました。

2023 年 12 月 19 日

1237

Amazon Cognito

開発者ガイドアクセストークンの内容をカスタマイズするための新機能を追加しました。

ユーザープールアクセストー
クンのクレームとスコープを追加、変更、削除できるようになりました。

2023 年 12 月 12 日

アプリケーションクライア
ントとOAuthスコープに関す
るコンテンツが改善されました。

ユーザープールアプリクライ
アント と スコープ、M2M 、リソースサーバーによるAPI認
可 をわかりやすくするための編集と訂正。従来のコンソー
ルの説明を削除しました。

2023 年 11 月 14 日

デバイスとデバイス認証に関するコンテンツが改善されました。

デバイスキーとデバイスSRP
認証の使用に関する新しいコンテンツ。

2023 年 10 月 18 日

AWS Management Console ガ
イダンスを更新しました。

ユーザープールコンソールリ
ファレンスを削除し、関連するテーマ内のトピックを並べ替え、Amazon Cognito コン
ソールのタブベースの整理に関するガイダンスを追加しました。

2023 年 8 月 30 日

LOGINエンドポイントへの直接アクセスが強調されなくなりました。

ユーザープール ログインエン
ドポイント の視覚的概要を追加しまし、認可エンドポイン
ト を使って認証を開始することを強調しました。

2023 年 8 月 30 日

Amazon Cognito が、アジア
パシフィック (大阪) とイスラ
エル (テルアビブ) で利用可能になりました AWS リージョン。

アジアパシフィック (大阪) お
よびイスラエル (テルアビブ)
リージョンで Amazon Cognito
リソースを作成できるようになりました。

2023 年 8 月 30 日

1238

Amazon Cognito

開発者ガイドAmazon Verified Permissionsを使用した Amazon Cognitoの認可に関する情報を追加しました。

アプリでは、Verified
Permissions を呼び出しAPIて、中央機関からアクセス決定を生成できます。

2023 年 8 月 1 日

ユーザープールの詳細なユーザーアクティビティをAmazon CloudWatch Logs に記録する新機能を追加しました。

E メールとSMSメッセージの配信エラーを CloudWatch ロ
ググループにログ記録できるようになりました。

2023 年 8 月 1 日

ID プールゲストユーザーのAWS マネージドポリシーに関する情報を更新しました。

ID プールゲストユーザーのアクセス許可のスコープダウ
ンに、インラインセッション
ポリシーと AWS マネージド
セッションポリシーの両方が含まれるようになりました。

2023 年 5 月 16 日

Amazon Cognito ID プールのコンテンツ改善と新しいコンソール手順。

新しいコンソールのチュート
リアルを追加し、新しいコン
ソールエクスペリエンスを反映しました。また、アイデン
ティティプールに関するコード統合の詳細を改善しました。

2023 年 5 月 16 日

サービスホームページとユー
ザープールホームページの追加と改善。

Amazon Cognito とユーザープールの概要ページを更新しました。

2023 年 5 月 16 日

ユーザープールトークンド
キュメントの全般的な改善。

トークンの例を更新し、トークンの検証に関する新しい情報を追加しました。

2023 年 2 月 16 日

1239

Amazon Cognito

開発者ガイドAmazon Cognito ID プールのデータイベントを にログ記録できるようになりました AWS
CloudTrail。

CloudTrail は、データイベ
ントを記録する証跡でのAmazon Cognito ID プールのハイボリュームなAPIオペレー
ションの選択をサポートします。

2023 年 2 月 15 日

Lambda トリガーの例と説明を更新しました。

Lambda トリガーの例がJavaScript バージョン 3 に更新されました。Lambda トリ
ガーをAPIアクションに直接関連付けることができるようになりました。

2023 年 1 月 31 日

Amazon Cognito ID プール
は、認証されていないセッションに AWS 管理ポリシーを適用します。

拡張フローを使用して認証するアイデンティティプール
ユーザーには、セッションに追加の AWS 管理ポリシーが適用されるようになりました。

2023 年 1 月 31 日

コード例を追加しました。

このガイドには、さまざまなプログラミング言語の
Amazon Cognito アプリのサン
プルコードが含まれるようになりました。

2023 年 1 月 23 日

Amazon Cognito ユーザープー
ルでのAPIモデルと認証に関する情報を追加しました。

Amazon Cognito ユーザープー
ルには、リクエスト認証用の
複数のAPIインターフェイスと形式があります。

2022 年 12 月 15 日

Amazon Cognito が欧州 (ミラノ) で利用可能になりました
AWS リージョン。

欧州 (ミラノ) リージョンでAmazon Cognito ユーザープー
ルを作成できるようになりました。

2022 年 12 月 6 日

1240

Amazon Cognito

開発者ガイドユーザープールの削除保護に関する情報を追加しました。

で新しいユーザープールを作成すると AWS Management
Console、デフォルトで削除から保護されるようになりました。

2022 年 10 月 20 日

ホストされた UI のユーザー
ガイドと、ホストされた UITOTPMFAの に関する情報を追加しました。

ユーザーは Amazon Cognito
でホストされた UI に
TOTPMFAデバイスを登録できるようになりました。デ
フォルトのホストされた UI を
プレビューできるようになりました。

2022 年 9 月 8 日

AWS WAF および Amazon
Cognito に関する情報を追加しました。

AWS WAF ウェブを ACL
Amazon Cognito ユーザープー
ルに関連付けることができる
ようになりました。

2022 年 8 月 3 日

AWS CloudTrail イベントの例をさらに追加しました。

Amazon Cognito は、フェデレーションとホストされた UI
リクエストを証跡に記録するようになりました

2022 年 6 月 15 日

2 段階の属性検証に関する情報を追加しました。

ユーザーがログインする前に新しいメールアドレスまたは電話番号を確認する必要があ
るかどうかを選択できるようになりました。

2022 年 6 月 9 日

1241

Amazon Cognito

開発者ガイドフェデレーションドキュメン
トを更新しました。新しい IP
アドレス伝達機能。

ユーザープールソーシャル を設定するためのチュートリア
ルを更新しました IdPs。フェデレーションユーザープロ
ファイルと属性マッピングに関する情報を追加しました。
高度なセキュリティのために、デバイスのフィンガープ
リントに関する新しい情報を追加しました。

2022 年 5 月 31 日

ホストされた UI を操作しずにフェデレーティッドユーザー
をサインインするAmazon Cognito がユーザーをフェデレーションサインインにサイレントで誘導するように、アプリケーションをブッ
クマークする方法に関する新しいページを追加しました。

2022 年 5 月 29 日

Amazon Cognito ユーザープー
ルのリージョン内SMSおよびE メールメッセージング

Amazon Simple Notification
Service をSMSメッセージに、Amazon Simple EmailService をユーザープール
AWS リージョン と同じ の E
メールメッセージに使用できるようになりました。

2022 年 3 月 14 日

クォータページの更新

リソースとリクエストレートのクォータを追加し、明確化しました。

2022 年 1 月 10 日

新しい Amazon Cognito ユー
ザープールコンソールエクス
ペリエンス

更新された Amazon Cognito
コンソールでユーザープール
を作成および管理するための手順を更新しました。

2021 年 11 月 18 日

1242

Amazon Cognito

開発者ガイド

RevokeToken API および失効
エンドポイント

RevokeToken オペレーションを使用して、ユーザーの更新
トークンを取り消すことができます。

2021 年 6 月 10 日

マルチテナントのベストプラ
クティス

マルチテナントアプリケー
ションのベストプラクティスを追加しました。

2021 年 3 月 4 日

アクセスコントロールの属性

Amazon Cognito アイデンティ
ティプールは、お客様が AWS
リソースへのアクセスをユーザーに許可する方法として、
アクセスコントロール (AFAC)の属性を提供します。認証
は、ID プロバイダーからのユーザーの属性 (ID プロバイ
ダーは Amazon Cognito とのフェデレーションにこれらを使用します) に基づいて実行することができます。

2021 年 1 月 15 日

カスタムSMS送信者 Lambda
トリガーとカスタム E メール
送信者 Lambda トリガー

カスタムSMS送信者 Lambda
トリガーとカスタム E メー
ル送信者 Lambda トリガーを使用すると、サードパーティ
ープロバイダーが Lambda 関
数コード内からユーザーに E
メールとSMS通知を送信できるようになります。

2020 年 11 月 30 日

Amazon Cognito トークンの更新アクセストークン、ID トーク
ン、および更新トークンに更新された有効期限情報が追加されました。

2020 年 10 月 29 日

1243

Amazon Cognito

Amazon Cognito Service
Quotas開発者ガイドService Quotas は、Amazon
Cognito カテゴリクォータ
で使用できます。Service
Quotas コンソールを使用して、クォータの使用状況の表示、クォータの引き上げのリクエスト、クォータの使用状況をモニタリングする
CloudWatch アラームの作成を行うことができます。この変更の一環として、Amazon
Cognito ユーザープールの使用可能な CloudWatchメトリ
クスセクションが更新され、2020 年 10 月 29 日

新しい情報が反映されました。新しいセクション名は、および Service Quotas でのCloudWatchクォータと使用状況の追跡です。
Amazon Cognito クォータの分類

クォータカテゴリは、クォータの使用状況の監視と引き上げのリクエストに役立てることができます。クォータは、一般的なユースケースに基づいてカテゴリに分類されます。

2020 年 8 月 17 日

Amazon Cognito が米国 AWS
G でサポートされるovCLoud

Amazon Cognito が AWS
GovCloud （米国) リージョンでサポートされるようになりました。

2020 年 5 月 13 日

1244

Amazon Cognito

開発者ガイドAmazon Cognito Pinpoint ド
キュメントの更新

新しいサービスリンクロールが追加されました。「Amazon Cognito ユーザープールでの Amazon Pinpoint 分析の使用」にある手順が更新されました。

2020 年 5 月 13 日

新しい Amazon Cognito 専用
セキュリティの章

セキュリティの章は、組織が AWS サービスの組み込み
セキュリティと設定可能なセ
キュリティの両方に関する詳細情報を取得するのに役立ちます。新しい章では、クラウドとクラウド内のセキュリ
ティに関する情報を提供します。

2020 年 4 月 30 日

Amazon Cognito ID プールがApple でサインインをサポート「Apple でサインイン」は、
cn-north-1 リージョンを除
く、Amazon Cognito が運営されているその他すべてのリージョンで利用できます。

2020 年 4 月 7 日

新しい Facebook APIバージョ
ニング

Facebook にバージョン選択を追加しましたAPI。

2020 年 4 月 3 日

ユーザー名の大文字と小文字を区別しない更新

ユーザープールを作成する前に、ユーザー名の大文字と小文字を区別しない設定を有効にすることを推奨事項として追加しました。

2020 年 2 月 11 日

1245

Amazon Cognito

開発者ガイドに関する新しい情報 AWS
AmplifyAWS Amplify SDKs および ラ
イブラリを使用してAmazon
Cognito をウェブまたはモバ
イルアプリと統合する方法についての情報を追加しました。SDKs より前の Amazon
Cognito の使用に関する情報を削除しました AWS Amplify。

2019 年 11 月 22 日

ユーザープールトリガーの新
しい属性

Amazon Cognito は、ほとんどのユーザープールトリガーのAWS Lambda 関数に渡される2019 年 10 月 4 日

イベント情報に clientMet
adata パラメータを含めるようになりました。このパラメータを使用して、追加のデータでカスタム認証ワーク
フローを強化できます。
更新された制限

アクションの ListUsers APIス
ロットリング制限が更新されました。

2019 年 6 月 25 日

新しい制限

ユーザープールのソフト制限に、ユーザー数の制限が含まれるようになりました。

2019 年 6 月 17 日

Amazon Cognito ユーザープー
ルの Amazon E SESメール設定

Amazon Cognito が Amazon
設定を使用してユーザーに E メールを送信するように、ユーザープールを設定できますSES。この設定では、Amazon Cognito が、これ以外の方法では成し得なかった
大規模な配信ボリュームで E
メールを送信できるようになります。

2019 年 4 月 8 日

1246

Amazon Cognito

開発者ガイドタグ付けのサポート

Amazon Cognito リソースのタグ付けに関する情報を追加しました。

2019 年 3 月 26 日

カスタムドメインの証明書を変更する

カスタムドメインを使用してAmazon Cognito がホストする
UI をホストする場合は、必要に応じてこのドメインのSSL
証明書を変更できます。

2018 年 12 月 19 日

新しい制限

各ユーザーが所属できるグ
ループの最大数に新しい制限が追加されました。

2018 年 12 月 14 日

制限の更新

ユーザープールのソフト制限が更新されました。

2018 年 12 月 11 日

E メールアドレスと電話番号を検証するためのドキュメン
トの更新

ユーザーがアプリにサインアップするときに E メールまたは電話による確認を要求す
るようにユーザープールを構成する方法に関する情報を追加しました。

2018 年 11 月 20 日

E メールのテストに関するドキュメントの更新

アプリのテスト中に Amazon
Cognito からの E メールを開始するためのガイダンスを追加しました。

2018 年 11 月 13 日

1247

Amazon Cognito

開発者ガイドAmazon Cognito アドバンスト
セキュリティ

新しいセキュリティ機能を追加しました。これにより、デベロッパーは、アプリやユーザーを悪意のあるボットから保護し、ユーザーアカウントをセキュリティで保護して認証情報の侵害を防ぎ、サイン
イン試行の計算されたリスクに基づいてサインインに必要なチャレンジを自動的に調整できます。

2018 年 14 月 6 日

Amazon Cognito がホストする
UI のカスタムドメイン

デベロッパーが Amazon
Cognito ユーザープール内のホストされた UI に独自の完全なカスタムドメインを使用することを可能にします。

2018 年 6 月 4 日

Amazon Cognito ユーザープー
ル OIDC ID プロバイダー

Salesforce や Ping Identity な
どの OpenID Connect (OIDC)
ID プロバイダーを介したユー
ザープールのサインインを追加しました。

2018 年 5 月 17 日

Amazon Cognito Lambda 移行
トリガー

Lambda の移行トリガー機能を対象とするページが追加されました。

2018 年 4 月 8 日

1248

Amazon Cognito

開発者ガイドAmazon Cognito デベロッパー
ガイドの更新トップレベルの「Amazon
Cognito とは」と「Amazon
Cognito の使用開始方法」を追加しました。また、一般的なシナリオを追加し、ユー
ザープール を再編成しましたTOC。新しい「Amazon
Cognito ユーザープールの使用開始方法」セクションを追加しました。

2018 年 4 月 6 日

Amazon Cognito アドバンスト
セキュリティベータ

デベロッパーがアプリやユーザーを悪意のあるボットから保護し、インターネットの他の場所で侵害された認証情報に対してユーザーアカウントをセキュリティで保護して、サインインの試行の兆候について計算されたリスクに基づいて、サインインに必要なチャレンジを自動的に調整できるようにする、新しいセキュ
リティ機能が追加されました。

2017 年 11 月 28 日

Amazon Pinpoint の統合

Amazon Cognito ユーザー
プールアプリの分析を提供
し、Amazon Pinpoint キャン
ペーン向けのユーザーデー
タを強化するために Amazon
Pinpoint を使用する機能を追加しました。

2017 年 9 月 26 日

1249

Amazon Cognito

開発者ガイドAmazon Cognito ユーザープー
ルのフェデレーションおよび
組み込みアプリケーション UI
機能

ユーザーが Facebook、
Google、Login with Amazon、または SAML ID プロバイダー
を介してユーザープールに
サインインできるようにする機能を追加しました。カスタマイズ可能な組み込みアプリ
ケーション UI とカスタムク
レームによる OAuth 2.0 サ
ポートを追加しました。

2017 年 8 月 10 日

HIPAA およびPCIコンプライ
アンス関連の機能の変更

ユーザーが電話番号または E
メールアドレスユーザー名として使用することを許可する機能が追加されました。

2017 年 7 月 6 日

ユーザーグループとロール
ベースのアクセスコントロー
ル機能

ユーザーグループを作成および管理する管理機能が追加されました。管理者は、グループメンバーシップと管理者が作成したルールに基づいて、ユーザーにIAMロールを割り当てることができます。

2016 年 12 月 15 日

ドキュメントの更新

ユーザープールで AWS
Lambda トリガーを使用する
方法を示す例を更新しました。

2016 年 11 月 27 日

ドキュメントの更新

iOS コード例を更新しました。

2016 年 11 月 18 日

ドキュメントの更新

ユーザーアカウントの認証の流れに関する情報を追加しました。

2016 年 11 月 9 日

1250

Amazon Cognito

開発者ガイドユーザーアカウントの作成機
能Amazon Cognito コンソールとを使用してユーザーアカウン
トを作成する管理機能を追加しましたAPI。

2016 年 10 月 6 日

ユーザーインポート機能

Cognito ユーザープール一括
インポート機能を追加しました。この機能を使用して、既存の ID プロバイダーからAmazon Cognito ユーザープー
ルにユーザーを移行します。

2016 年 9 月 1 日

Cognito ユーザープールの一般提供

Cognito ユーザープール機能を追加しました。この機能を使用して、ユーザーディレクト
リを作成、管理し、ユーザー
プールを使用してモバイル
アプリケーションまたはウェブアプリケーションにサインアップとサインインを追加します。

2016 年 7 月 28 日

SAML サポート

Security Assertion Markup
Language 2.0 (SAML 2.0) による ID プロバイダーによる認証のサポートが追加されました。

2016 年 6 月 23 日

CloudTrail 統合との統合を追加しました AWS
CloudTrail。

2016 年 2 月 18 日

イベントと Lambda の統合

Amazon Cognito の重要なイベ
ントに応じて AWS Lambda 関
数を実行できます。

2015 年 4 月 9 日

Amazon Kinesis へのデータス
トリーム

データストリームにコント
ロールや洞察を提供します。

2015 年 3 月 4 日

1251

Amazon Cognito

開発者ガイドOpenID Connect のサポート

OpenID 接続プロバイダーをサ
ポートします。

2014 年 11 月 23 日

プッシュ同期

サイレントプッシュ同期のサ
ポートを有効にします。

2014 年 11 月 6 日

デベロッパーが認証した ID のサポートを追加

独自の認証およびアイデン
ティティ管理システムを持
つデベロッパーが、Amazon
Cognito の ID プロバイダーとして扱われるようになります。

2014 年 9 月 29 日

Amazon Cognito の一般提供

2014 年 7 月 10 日

1252

Amazon Cognito

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

mccliii