3
2

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 3 years have passed since last update.

WebアプリからAWSユーザ認証する方法について

Last updated at Posted at 2020-10-28

AWSユーザ認証の方法

概要

まず、Webアプリを作成する方法として、大きくは下記2種類ありますが、今回はS3にホスティングする方法でのユーザ認証の方法について、まとめます。

  • EC2を使用する方法
  • S3にホスティングする方法

S3にWebアプリをホスティングし、AWSに対してリクエストする構成としては、下図の通り。

image.png

ユーザ認証の方法

下記の3種類があるが、Cognitoを使用した認証が一般的に思う。

image.png

下記個別のメリット・デメリット

1. AWS Cognitoを使用する方法

AWSのサービスでユーザ名、パスワードを用いたユーザ管理をすることができる。

Googleアカウント、Facebookアカウントなどでの認証もできる。

[メリット]

  • 独自のユーザ認証の仕組みを作成する必要がない。
  • ユーザ名、メールアドレスなどで認証する仕組みを作れる
  • 一時的なセキュリティ情報として認証できる(有効期限を設けることができる)ため、安全

[デメリット]

  • 有料

    →ただし、50,000ユーザ(月間アクティブユーザ)まで無料

2. AWS IAMを使用する方法

IAMと対応するアクセスキーとシークレットキーを発行してアクセスする方法。

[メリット]

  • 独自のユーザ認証の仕組みを作成する必要がない。

[デメリット]

  • AWSがランダムで発行するアクセスキーとシークレットキーを使用する必要がある。

  • 基本的に一般ユーザに配布して使用するものではなく、サーバサイドでの制御に使用するもの。

  • 一時的なセキュリティ情報とならないため、危険。

3. Lambdaを使用する方法

独自のユーザ管理、認証の方法を構築する必要がある。

[メリット]

  • 自由に作ることができる。

[デメリット]

  • 認証の仕組みをすべて作成する必要がある。

Amazon Cognitoについて

概要

Amazon Cognito は、ウェブアプリケーションやモバイルアプリケーションの認証、許可、ユーザー管理をサポートするサービス。

Amazon Cognito の主な 2 つのコンポーネントは、ユーザープールと ID プールです。

1. ユーザプール

ログインを提供する機能。

  • ユーザパスワード、メールアドレス、電話番号、カスタム属性などを格納可能 ユーザにまつわるデータベースのようなもの。
  • 上記を利用して認証し、API Gatewayにアクセス可能なトークンを取得することができる。

2. IDプール

ユーザープールからユーザ認証成功時に発行されるトークンを使って、AWSのサービスに対するアクセス権を得ることができる機能のこと。

AWSのS3やDynamoDBなどのサービスに直接アクセスするときに使用する機能。

今のところ私の用途ではAPI Gateway経由でのアクセスを想定しており、今回は説明しない。

3. アクセスの流れ

image.png

  1. S3からWebページを取得する。
  2. Cognitoを使用してユーザ認証を行う。
  3. 認証成功時に取得したトークンを使用してAPI GatewayへRequestし、情報を取得する。

4. 認証したユーザをAWS内で特定する方法について

Cognitoで認証時に取得できるトークンをBase64でデコードすると、ユーザ名などの情報を取得する事ができる。

API GatewayのREST APIコール時、上記トークンを使用するため、Lambdaでユーザ名を取得することができ、ユーザ名などのユーザ管理情報をDBなどに保持しておけば、ユーザ情報を特定することができると考える。

[参考URL]

・Cognitoについての概要
https://qiita.com/fjisdahgaiuerua/items/d420a2137e8d67e0a190

・CognitoとIAMでの認証の違い
https://qiita.com/katekichi/items/dbf279077db6a7b597fc
https://www.skyarch.net/blog/?p=16856
https://dev.classmethod.jp/articles/lex_access_by_unauth_user_using_cognito/

・Cognito QA
https://aws.amazon.com/jp/cognito/faqs/

・参考動画
https://www.youtube.com/watch?v=wnB6Fq7-tHs

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?