LoginSignup
13
8

More than 5 years have passed since last update.

サーバーレスシステムでユーザー情報をアクセストークンを使って取得する

Last updated at Posted at 2017-02-22

やりたいこと

サーバレス認証.png

サーバーレスシステムでの個人情報保護について考えてみます。

システムで管理するべき個人情報は、できるだけクラウド内にとどめ、クライアントとやりとりしないということにできれば、通信路上での漏えいを防ぐことができます。
また、個人情報の管理を、限定することができれば、システムの大部分は、個人情報の漏洩について意識することなくシステム開発を行うことができます。

このような要求のシステムの場合、AWSでは、次のようになります。

  1. Cognito Identity Poolでユーザー管理をする。
  2. クライアント⇔AWS間の通信路上はアクセストークンと処理結果のみの受け渡しする。
  3. AWS内ではLambdaがアクセストークンを受け取りCognitoのユーザー情報をもとに処理を行う。

アクセストークンを受け取ったLambdaにアクセストークンに対応するユーザー情報へのアクセス権限が委譲され、LambdaはCognitoのユーザー情報を取得し処理できるようになります。よって、Lambdaは、アクセストークンを受け取れるようにする必要はありますが、ユーザー情報にアクセスするためのロールを付与する必要がなくなります。

参考までに、LambdaからCognitoにHTTPS通信する際に、どのような情報をやりとりするとアクセストークンと引き換えにユーザー情報を取得できるのか、cURL, Postman, AWS CLIを使って調べたのでまとめておきます。

結論

必要な情報は以下でした。
- Cognito Identity Service Providerが発行したアクセストークン
- Cognito Identity Poolのリージョン
- 各種おきまりのヘッダー(Content-Type、X-Amz-Target)

※ 各種おきまりのヘッダーをつけないと以下のエラーが返ってきます。

{"code":"BadRequest","message":"The server did not understand the operation that was requested.","type":"client"}

cURL

$ curl 'https://cognito-idp.<リージョン>.amazonaws.com/' -H 'Content-Type: application/x-amz-json-1.1' -H 'X-Amz-Target: AWSCognitoIdentityProviderService.GetUser' --data-binary '{"AccessToken":"<アクセストークン>"}'

Postman

AWS CLI

$ aws cognito-idp get-user --access-token <アクセストークン>

(備考)

  • <リージョン>は、東京だったら「ap-northeast-1」です。
  • このシステムでは、HTTPS通信が必須です。
  • AWSのサービス間のセキュリティ(ex. Lambda ⇔ Cognito)の信頼性は、別途、考慮が必要です。
13
8
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
13
8