Cognito

Amazon Cognitoと外部IDP連携の設定ガイド: OIDC/SAML比較・ログインプロパティ設定

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

OIDCとSAMLの選定基準

プロトコル選定時の主な判断軸を以下に比較します。

項目 OIDC SAML
認証形式 トークンベース(JSON) XMLアサーションベース
使用シーン モバイル・Webアプリ向け エンタープライズ・クラウド連携向け
設定手順の複雑さ 簡単で設定項目が少ない 詳細なメタデータ処理が必要

OIDCは開発者にとって導入が簡単ですが、SAMLは既存の企業システムとの互換性に優れています。特に、フェデレーションロールの構成やリダイレクトURLの管理など、プロトコルごとに異なる仕様があるため注意が必要です。


Cognito連携の目的とユースケース

Cognitoは、外部IdPを介したAWSリソースへのアクセス制御が主な目的です。例えば、Azure AD経由でEC2に接続する際や、Google Workspaceユーザーをアプリケーションに認証させるケースがあります。

具体的なユースケースとして挙げられるのは以下の3つです:

  • ユーザー管理の外部委譲(企業内のActive DirectoryをCognitoと連携)
  • セキュアなSaaSアプリ開発(OAuth2.0経由で認証フローを実装)
  • コスト削減(既存のIdPインフラを活用し、Cognito独自のユーザー管理を不要に)

いずれの場合も、loginsプロパティの正確な設定やフェデレーションロールの権限設計が成功の鍵となります。


Identity PoolとUser Poolでの連携差異

Identity PoolとUser Poolはどちらも外部IdPと連携可能です。しかし、認証フローの目的や役割管理の仕組みに大きな違いがあります。特に、フェデレーションロールの構成方法が異なるため、誤って設定するとアクセス権が付与されないケースが発生します。


Identity Poolのフェデレーションロール構成

Identity Poolは、外部IdP経由でユーザーを認証した後、AWSリソースへのアクセス権を付与するためのロールを設定します。この際、以下のように2つのロールが必要です:

  1. フェデレーションロール(IdPからの認証に基づく)
  2. 外部IdP(OIDC/SAML)を介してユーザーが認証された際に適用されるロール
  3. IAMポリシーでAWSリソースへのアクセス権限を定義

  4. デフォルトロール(未認証時やロールが見つからない場合の備え)

  5. ユーザーが外部IdP経由で認証されなかった時に適用されるロール

具体的な設定手順については後述します。


User Poolのプロバイダーコンフィグ設定

User Poolは、ユーザー登録・パスワードリセットなどの機能を備えたCognitoサービスです。外部IdPとの連携では、認証フローに追加の認証手段(フェデレーション)を提供することが目的です。

例えば、企業内ユーザーがGoogleアカウントでもログインできるように設定する場合、User Pool内にプロバイダーコンフィグとしてIdP情報を登録します。この際、OIDCまたはSAMLのメタデータファイルが必要となります。


loginsプロパティの正しい設定方法

外部IdPと連携させる際には、必ずloginsプロパティを正しく定義しなければなりません。このプロパティは、ユーザーがどのIdPから認証されたかを識別するためのキーであり、OIDC・SAMLそれぞれに応じた形式で指定します。


OIDCプロバイダーのProviderName指定

OIDCプロバイダーを使用する場合、loginsプロパティには以下のような構造になります:

  • oidc.の直後にIdPの識別子(例:oidc.google.com)を指定
  • ユーザーのIDトークンは、認証フローで発行されるJSON形式の値

例として、Googleアカウントを使用した場合のloginsプロパティは以下のようになります:


SAMLプロバイダーのAssertionConsumerServiceURL入力

SAMLの場合、loginsプロパティには以下のような形式で設定します:

  • saml.の後にIdPから取得したメタデータファイルに記載された識別子を指定
  • <SAMLアサーション>は、IdPが発行するXML形式の認証情報

注意点として、AssertionConsumerServiceURL(ACS URL)をCognito側とIdP側で一致させる必要があります。これは、後述の「リダイレクトURLのドメイン登録手順」で確認します。


リダイレクトURLのドメイン登録手順

認証フロー中に発生するリダイレクトURLは、CognitoとIdP双方で正しく設定されている必要があります。誤って指定すると、ユーザーがログイン画面に遷移できず、403エラーなどの不具合が発生します。


AWS Cognito設定画面でのURL追加

Cognitoの管理コンソールからリダイレクトURLを登録するには、以下の手順を行います:

  1. Identity PoolまたはUser Poolを開き、「プロバイダー」タブへ移動
  2. 新規IdPを追加し、リダイレクトURLのフィールドに以下を入力します:
  3. https://<cognito-domain>.auth.<region>.amazoncognito.com/
  4. 例:https://myapp.auth.ap-northeast-1.amazoncognito.com/

このURLは、CognitoがIdPからの認証応答を受けるためのエンドポイントです。


IdP側で許可されたリダイレクト先確認

IdP側(例:Azure ADやGoogle Workspace)では、Cognitoが発行するURLをリダイレクト先として許可しているかを必ず確認してください。

  • Azure ADの場合、アプリケーション設定の「ログインURL」に登録が必要です
  • Google Workspaceでは、「OAuthクライアントID」にリダイレクトURLを追加します

メタデータファイルの作成・アップロード

SAMLプロバイダーと連携する際には、メタデータファイル(XML形式)の取得とCognitoへの登録が必要です。OIDCではこの手順は不要ですが、SAML導入時は必須となります。


SAMLプロバイダー向けXMLファイル生成

IdP側でメタデータファイルを取得するには、以下を行います:

  1. IdP管理画面にアクセスし、「メタデータ」または「フェデレーション設定」セクションを開く
  2. XML形式のメタデータをダウンロードします(例:Azure ADではhttps://login.microsoftonline.com/common/federationmetadata/2007-06/federationmetadata.xml

このファイルには、ACS URLやIdPの識別子など、Cognito連携に必要な情報が含まれています。


OIDCプロバイダーのWell-Known Endpoint確認

OIDCではメタデータファイルではなく、.well-known/openid-configurationというエンドポイントから情報を取得します。

  1. ブラウザで以下をアクセス:
    https://<oidc-provider-domain>/.well-known/openid-configuration

  2. 例:https://accounts.google.com/.well-known/openid-configuration

  3. JSON形式のレスポンスから、issuerやauthorization_endpointなどの情報を確認し、Cognitoに設定します。


フェデレーションロールの設定ポイント

外部IdPを通じてAWSリソースへのアクセスを許可するには、フェデレーションロールを正しく構成することが不可欠です。特に、IAMポリシーの設計ミスがセキュリティリスクにつながるため、慎重に設定してください。


IAMロールの信頼ポリシーテンプレート

フェデレーションロールを作成する際は、信頼ポリシー(Trust Policy)を以下のように定義します:

  • arn:aws:iam::に自身のAWSアカウントIDを入力
  • Federatedフィールドは、IdPのプロバイダードメイン(例:oidc.google.com

SAMLの場合には、以下のように設定します:


連携後のアクセス権付与ベストプラクティス

フェデレーションロールにAWSリソースへのアクセス権を付与する際は、以下のようなベストプラクティスに従ってください:

  1. 最小限の権限付与(Least Privilege)
  2. ユーザーが必要とするリソースに限定してIAMポリシーを定義

  3. ロールアサーションの検証

  4. SAMLアサーションでは、NameIDAttributeStatementでユーザー情報を確認し、アクセス制限をかける

  5. 定期的な権限見直し

  6. ユーザーが所属するグループやロールが変化した場合、ポリシーを見直す

まとめ

本記事では、Amazon Cognitoと外部IdPを連携させる際の設定手順・ポイントについて解説しました。主な要点は以下の通りです:

  • OIDC/SAMLの選定基準に応じて、認証フローを設計する
  • Identity Pool vs User Poolで役割管理の違いを理解し、適切な設定を行う
  • loginsプロパティを正しく指定し、リダイレクトURLとメタデータファイルを登録
  • フェデレーションロールを信頼ポリシーとともに慎重に構成する

外部IdP連携はAWS環境におけるセキュリティ設計の重要な一環です。設定ミスが発生しないよう、各手順を丁寧に実施してください


おわりに

本記事で解説した手順により、Cognitoと外部IdPの連携を正確かつ効率的に実装できます。特に OIDC と SAML の技術的違いや、Identity Pool と User Pool の用途の違いを理解しておくことで、開発プロセスでのトラブルを大幅に減らすことが可能です。

AWSコンソールでの設定画面を参照しながら、実際に導入を進めることで、実務的な知識を確かなものにしてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Cognito