10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Amazon Cognito ユーザープールでAWS SSOをIdPとして設定する

Posted at

AWSのIoT関連サービスはかなり充実してきており、ダッシュボードや管理画面などもたくさん提供されています。

  • AWS IoT SiteWise Monitor
  • Fleet Hub for AWS IoT Device Management
  • Amazon Managed Grafana

などなど。
共通点として、ユーザー管理にAWS Single Sign-On (AWS SSO)が使われており、開発することなく、ユーザー管理ができますし、
同じIDで複数のサービスにログインすることもできます。

image.png

自前で作成するアプリケーションもこの仲間に入ることができないかと思い調べたところ、CognitoのSAML連携で実現できそうということがわかりましたので、試してみました。

完成したら、こんなことができるはずです。

image.png

参考

AWS Single Sign-Onではありませんが、他のOktaとSAML連携する資料がありましたので、これを参考にしました。

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

まずはウィザードに従ってユーザープールを作成します。

ステップ1 サインインエクスペリエンスを設定

項目
プロバイダーのタイプ Cognito ユーザープール
項目
Cognito ユーザープールのサインインオプション Eメール

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (1).png

ステップ2 セキュリティ要件を設定

項目
パスワードポリシーモード Cognitoのデフォルト
項目
MFAの強制 MFAなし
項目
セルフサービスのアカウントの復旧を有効化 チェックなし

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (2).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (3).png

ステップ3 サインアップエクスペリエンスを設定

項目
自己登録を有効化 チェックなし
項目
Cognitoが検証と確認のためにメッセージを自動的に送信することを許可 チェックなし

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (4).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (5).png

ステップ4 メッセージ配信を設定

項目
Eメールプロバイダー CognitoでEメールを送信

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (7).png

ステップ5 アプリケーションを統合

項目
ユーザープール名 UserPool001
項目
CognitoのホストされたUIを使用 チェックあり
項目
ドメインタイプ Cognitoドメインを使用する
Cognitoドメイン https://c4g2hykd
項目
アプリケーションタイプ パブリッククライアント
アプリケーションクライアント名 AppClient
クライアントのシークレット クライアントのシークレットを生成しない
許可されているコールバックURL https://example.com

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (8).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (9).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (10).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (11).png

以上で、Cognito ユーザープールの作成は完了です。

AWS SSOにアプリケーションを作成する

1. 新規アプリケーションの追加

「カスタム SAML 2.0 アプリケーションの追加」をクリック

console.aws.amazon.com_singlesignon_home_region=us-east-1(1280x720).png

2. Custom SAML 2.0 application の設定

項目
表示名 Custom SAML 2.0 application
説明 Custom SAML 2.0 application

AWS SSO SAML メタデータファイルのURLは後で使います。

__メタデータファイルがない場合は、手動でメタデータ値を入力できます。__のリンクをクリックます。

項目 説明
アプリケーション ACS URL https://c4g2hykd.auth.us-east-1.amazoncognito.com/saml2/idpresponse [Cognitoドメイン]/saml2/idpresponse
アプリケーション SAML 対象者 urn:amazon:cognito:sp:us-east-1_lRTlSUVKh urn:amazon:cognito:sp:[ユーザープール ID]

console.aws.amazon.com_singlesignon_home_region=us-east-1(1280x720) (1).png

console.aws.amazon.com_singlesignon_home_region=us-east-1(1280x720) (2).png

console.aws.amazon.com_singlesignon_home_region=us-east-1(1280x720) (4).png

3. 属性マッピング

属性マッピングタブで以下の通り設定します。

アプリケーションのユーザー属性 この文字列値または AWS SSO のユーザー属性にマッピング
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress ${user:email}

console.aws.amazon.com_singlesignon_home_region=us-east-1(1280x720) (5).png

4. 割り当て済みユーザー

作成するアプリに割りあてる、SSOのユーザーを追加します。

Cognito ユーザープールのIdPとしてAWS SSOを追加する

サインインエクスペリエンスタブのアイデンティティプロバイダーを追加をクリックします。

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720).png

1. アイデンティティプロバイダーを追加

項目
フェデレーティッドサインインのオプション SAML
項目
プロバイダー名 AWSSSO
サインアフトフローを追加 チェックあり
メタデータドキュメントのソース メタデータドキュメントのエンドポイントURLを入力
メタデータドキュメントのエンドポイントURLを入力 https://portal.sso.us-east-1.amazonaws.com/saml/metadata/NzgxNzQ5MzcyMTc3X2lucy1jZjdhYTcwNWI1ZjJjZGFm
  • SAML プロバイダーとユーザープールの間で属性をマッピング
ユーザープール属性 SAML 属性
email http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (13).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (16).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (17).png

2. アプリケーションクライアントの設定を修正する

アプリケーションの統合タブの最下部にある AppClient をクリックします。

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (22).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (23).png

ホストされた UIの編集ボタンをクリックします。
以下の設定を変更します。

  1. IDプロバイダーをAWSSSOに変更
  2. OAuth 2.0 権限タイプを暗黙的な付与に変更

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (25).png

console.aws.amazon.com_cognito_v2_idp_user-pools_create_region=us-east-1(1280x720) (26).png

以上で設定は完了です。

動作確認

ホストされた UIの欄にある「ホストされたUIを表示」ボタンをクリックします。

AWS SSOのログイン画面が表示されます。

us-east-1.signin.aws_platform_login_workflowStateHandle=734e7303-1b7e-4cc3-b08b-302933efa5c7(1280x720).png

認証情報を入力し、ログインすると、最終的に https://example.com に遷移します。

example.com_(1280x720).png

URLを見てみると、トークンが付与されていることがわかります。

https://example.com/#access_token=xxxxx&idToken=xxxxx&token_type=Bearer&expires_in=3600

このトークンを使用すれば、Cognitoで認証するように設定したAPI Gatewayなどにアクセスできるようになりますね。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?