Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

WebIdentityFederationとCognito

Web Identity Federationとは?

例えば、DynamoDB SDKを使ってDynamoDBにアクセスする際にアクセスキーが必要となりますが、アプリに埋め込むのは当然ながら非推奨デス。

これをいい感じに解決しAWSリソースに対するアクセスを許可させる方法がSecurityTokenService(STS)を用いたWeb Identity Federationです。

①ユーザーに一般的なサードパーティー ID プロバイダー (Login with Amazon、Facebook、Google、OpenID Connect (OIDC) 2.0 互換の任意のプロバイダーなど) を使用したサインインを求めることができます。②,③そのプロバイダーの認証情報を AWS アカウントのリソースを使用するための一時的なアクセス許可に変換することができます。 IAM の一時的なセキュリティ認証情報

①amazonのアカウントにログイン、amazon(IdP)からtokenが返ってくる。
②そのtokenをSTSに渡すとSTSは期限つきのIAMロール(AssumeRole)を発行
③AssumeRoleを使いDynamoDBにアクセス

①が認証、②③が認可という関係になりますね。
簡単に書きましたが実装にはIAM側での設定などが必要になります。IAM ID プロバイダーの作成

そんなWeb Identity Federationをアプリケーションで使う際に推奨されているのがAWS Cognito

AWS Cognitoとは?

ウェブアプリケーションやモバイルアプリケーションの認証、許可、ユーザー管理をサポートしてくれます!

Cognitoのコンポーネント

コンポーネントは主にユーザープールIDプールの2つで構成されています。

◯ユーザープール

ユーザープールはユーザーの認証と管理を行うコンポーネント

■ 認証方法
  • ユーザー名 (設定でメールアドレスや電話番号も使用可) とパスワードを入力してログイン認証(Cognitoユーザープールが提供する認証機能)

  • 外部IDプロバイダーと連携した認証(Facebook, Google, Amazon, Apple)

Cognitoユーザープールが提供する認証機能はユーザー自身がサインアップを行い登録、また管理者が事前に登録する事もできます。

■ 認証されたユーザー情報はどこに登録される?

認証されたユーザー情報はユーザープールに登録されます。
認証された証としてIDトークンが発行され、このIDトークンを使い、アプリケーションがユーザーを特定したり、他のサービスとの連携を行うことが出来ます。

◯IDプール

外部IDプロバイダーによって認証されたIDに対して、AWSへのアクセス権限を持つ一時クレデンシャルを返すコンポーネント

■ 認証方法
  • 外部IDプロバイダー認証(Cognitoユーザープール, Amazon, Facebook, Google, Twitter, OIDCに準拠したプロバイダー, SAMLに準拠したプロバイダー)
■ ユーザープールとの違いは?
  • ユーザープールは認証を行うコンポーネント
  • IDプールは認可を行うコンポーネント

どちらのコンポーネントも外部プロバイダー認証(IdP)を使えますが、IDプールでは認証後に付与される一時クレデンシャルを使い、アクセスが許可されているAWSリソースに対してアクセスすることができます。

◯ユーザープールとIDプール

IDプールのIdPにユーザープールを指定可能です。つまり、ユーザープールトークンとIDプールトークン (STS)は交換することが可能です。

下の図を見るとわかりやすいと思います!

①アプリにアクセスするとログイン画面にリダイレクト認証を行う
②IDプールのIdPとしてユーザープールを指定することでユーザープールのIDトークンから一時クレデンシャルを返す
③一時クレデンシャルを使いアクセスが許可されているAWSリソースに対してアクセス

ハンズオンも書く予定でしたが疲れたので次回にします:innocent:
Cognito初心者なので間違ってるところあれば教えてください!

参考

ウェブ ID フェデレーションについて
AWS再入門ブログリレー Amazon Cognito編
[AWS Black Belt Online Seminar] Amazon Cognito 資料及び QA 公開

Kouichi_Itagaki
猫とAWSが好きです。 AWS SAA / AWS SOA / AWS DVA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away