More Related Content Similar to AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介 (20) More from Amazon Web Services Japan (20) AWS Black Belt Online Seminar 2017 AWSにおけるアプリ認証パターンのご紹介1. アマゾン ウェブ サービス ジャパン株式会社
ソリューションアーキテクト 辻 義一
2017.10.10
【AWS Black Belt Online Seminar】
AWSにおけるアプリ認証パターン
2. AWS Black Belt Online Seminar とは
AWSJのTechメンバがAWSに関する様々な事を紹介するオンラインセミナーです
【火曜 12:00〜13:00】
主にAWSのソリューションや
業界カットでの使いどころなどを紹介
(例:IoT、金融業界向け etc.)
【水曜 18:00〜19:00】
主にAWSサービスの紹介や
アップデートの解説
(例:EC2、RDS、Lambda etc.)
※開催曜日と時間帯は変更となる場合がございます。
最新の情報は下記をご確認下さい。
オンラインセミナーのスケジュール&申し込みサイト
https://aws.amazon.com/jp/about-aws/events/webinars/
5. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
用語について
6. 用語の確認(1/2)
統一されておらず曖昧な用語もあるが、本ウェビナーでは以下の通りとする。
認証 = Authentication (AuthN)
相手が本当に申告された人であるかを確認すること。
認可 = Authorization (AuthZ)
特定の条件で特定のリソースへのアクセスを許可すること。
認証連携 = Federated Authentication, Federated Identity, ID Federation, Federation
サードパーティで行われた認証情報を受け取って、認証を実施する代わりにすること。
アプリにとって認証を委譲していることになる。
別の用語例: 実現方法の例:SAML, OpenID, OpenID Connect
代理アクセス = Delegated Acccess
ユーザ合意の上で、サード−パーティがユーザの代わりにリソースへのアクセスを許可すること。
ユーザにとって認可されている一部をサードパーティに委譲することになる。
実現方法の例:OAuth
8. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
本Webinarでの想定ユースケース
3パターン
勝手に
3分類
12. サードパーティ
Webサイト
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
OAuth
AWSのマネージドサービス
トークンで
APIにアクセス
代理アクセスできる
トークン発行
バックエンド
SAML
バックエンド
システムアプリの認証情報
でアクセス
API
外部への認証連携
AWSリソースに
直接アクセス
モバイル
アプリ
ID/Passwodでの認証・
トークン発行
トークン ベースでの認証
API
API
トークン
シングル
ページ
アプリケーション
○○○ API
□□□ API
+ 認証機能
ユーザレポジトリ
② モバイルアプリやシングルページアプリケーショ
ン
サーバサイドはAPIで実現
サーバサイドは
ステートレスな構成
モバイルアプリなど
クライアントサイドの
画面はJavaScriptで構成
初回ユーザ認証後は、
トークンベースでの認証
16. AWS IAM (Identity and Access Management)
ユーザやロールに、何を
行ってよいか記載された
ポリシーを割り当てて制
御する。
APIにアクセスする際に
使用する認証情報は
• アクセスキー
• シークレットアクセスキー
• トークン(有効期限ありの場合のみ)
で構成されている。
AWSのサービスは認証情
報をSigV4という方法で署
名をAPIリクエストに毎回
付けてアクセスする。
AWSのサービスへの認証と認可を管理するサービス
EC2
起動、停止
S3
アップロード
ダウンロード
Management
Console
ユーザ名・
パスワード
AWS管理者・
オペレータ
SDK
アクセスキー・
シークレット
アクセスキー
AWS CLI
>
API
IAMユーザ
IAMロール
ユーザ、
アプリ、
サービスなど
アクセスキー・
シークレット
アクセスキー・
トークン
17. Amazon Cognito
Cognito User Pool
アプリケーションにユーザー登録やサイ
ンイン機能を追加できる。
• パスワードやMFAを使ったユーザ
認証、フェデレーションして認証
• 認証後に独自のアプリケーションで
も検証可能なJWT形式のトークンが
得られる
Cognito Federated Identities
IDプロバイダと認証連携して、
ロールを使った一時的なAWS認証
情報を得られる。
主にモバイル向けに認証機能を提供するサービス
Cognito Sync
アプリケーションにデバイス間でユーザ出た
の同期を実現できるサービスとライブラリ。
18. Amazon API Gateway
REST APIを実現するリバースプロキシとして
動作
OS、キャパシティ等インフラの管理不要
認証・認可をメソッド単位で制御可能
• 標準:AWS認証情報
• カスタム:Lambdaで任意に実装可
APIに必要なスロットリング、キャッシュの
機能を提供
バックエンドとしてLambda、既存Webシステ
ムを利用可能
Web APIの作成・保護・運⽤と公開を簡単に
モバイル
アプリ
Webサイト
サービス
API
Gatew
ay Lambda
API Gateway
キャッシュ
EC2 /
Elastic Beanstalk
Webサービス
CloudWatch
モニタリング
Lambda
カスタム オーソライザー
19. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS上での実現パターン
20. user001
********
login
ブラウザ
□□□ Web
+ 認証機能ID/Passwodでの
認証・Cookie発行
Cookieベースでの認証
Cookie ユーザレポジトリ
&セッションストア
Webサイト
バックエンド
システムアプリの認証情報で
アクセス
API
サードパーティ
Webサイト
a f t g
サードパーティとの認
証連携
SAML
○○○ Web
セッション
ストア
内部や外部への認証連携
サードパーティ
Webサイト
AWSのマネージドサービス
AWSリソースに
直接アクセス
代理アクセスできる
トークン発行
OAuth
トークンで
APIにアクセス
API
① コンシューマ向けWebサイト
ID/Passwodでの認証・Cookie発行
Cookieベースでの認証
→
user001
********
login
ブラウザ
□□□ Web
+ 認証機能ID/Passwodでの
認証・Cookie発行
Cookieベースでの認証
Cookie ユーザレポジトリ
&セッションストア
認証はAWS上でも実装方法に違いは無し。
ユーザレポジトリには以下のものが使用可。
• Amazon DynamoDB
• Amazon RDS
ユーザレポジトリ
&セッションストア
21. user001
********
login
ブラウザ
□□□ Web
+ 認証機能ID/Passwodでの
認証・Cookie発行
Cookieベースでの認証
Cookie ユーザレポジトリ
&セッションストア
Webサイト
バックエンド
システムアプリの認証情報で
アクセス
API
サードパーティ
Webサイト
a f t g
サードパーティとの認
証連携
SAML
○○○ Web
セッション
ストア
内部や外部への認証連携
サードパーティ
Webサイト
AWSのマネージドサービス
AWSリソースに
直接アクセス
代理アクセスできる
トークン発行
OAuth
トークンで
APIにアクセス
API
① コンシューマ向けWebサイト
ブラウザからAWSリソースへのアクセス
→
S3とCloudFrontは認証の要否を設定でき、
認証方法の1つとして署名付きURLを利用で
きる。
生成されたURLは、長いパラメータが付いて
いますが単なるURLのため、HTML内にリン
ク先やイメージのURL、ファイルのアップ
ロード先に使用できる。
この方法は、Webサーバの負荷軽減、Web
サーバのステートレス化に役立つ。
user001
********
login
ブラウザ
AWSのマネージドサービス
AWSリソースに
直接アクセス
署名付きURLをサーバサイド生成することで直接アクセス
• Amazon S3
• Amazon CloudFront
例: https://s3-ap-northeast-
1.amazonaws.com/tsujiy-
share/blackbelt.pdf?Signature=3qU6GYLrhaqUsA
OZZs3%2BnkqEMFM%3D&Expires=1509937417
&AWSAccessKeyId=AKIAI5WBYZZKWLQO7XVA
署名付きURL
をリンク先に
23. user001
********
login
ブラウザ
□□□ Web
+ 認証機能ID/Passwodでの
認証・Cookie発行
Cookieベースでの認証
Cookie ユーザレポジトリ
&セッションストア
Webサイト
バックエンド
システムアプリの認証情報で
アクセス
API
サードパーティ
Webサイト
a f t g
サードパーティとの認
証連携
SAML
○○○ Web
セッション
ストア
内部や外部への認証連携
サードパーティ
Webサイト
AWSのマネージドサービス
AWSリソースに
直接アクセス
代理アクセスできる
トークン発行
OAuth
トークンで
APIにアクセス
API
① コンシューマ向けWebサイト
アプリの認証情報でアクセス
→
EC2 インスタンスプロファイルを使うと EC2
インスタンス内で、AWS 認証情報を入手で
きる。
パラメータストアでは、パスワードやDB接
続文字列など任意の文字列を入手できる。
アプリケーション プログラムと認証情報を
分離できるため、パスワードなどの流出を防
ぎやすくなる。
アプリと認証情報を分離し、安全に管理
• EC2 インスタンスプロファイル
• EC2 Systems Manager パラメータストア
バックエンド
システムアプリの認証情報で
アクセス
API
AWSのマネージドサービス
24. user001
********
login
ブラウザ
□□□ Web
+ 認証機能ID/Passwodでの
認証・Cookie発行
Cookieベースでの認証
Cookie ユーザレポジトリ
&セッションストア
Webサイト
バックエンド
システムアプリの認証情報で
アクセス
API
サードパーティ
Webサイト
a f t g
サードパーティとの認
証連携
SAML
○○○ Web
セッション
ストア
内部や外部への認証連携
サードパーティ
Webサイト
AWSのマネージドサービス
AWSリソースに
直接アクセス
代理アクセスできる
トークン発行
OAuth
トークンで
APIにアクセス
API
① コンシューマ向けWebサイト
サードパーティとの認証連携
内部との認証連携
代理アクセス
→ AWS上でも実装方法に違いは無し。
user001
********
login
ブラウザ
サードパーティ
Webサイト
a f t g
サードパーティとの認
証連携
SAML
内部や外部への認証連携
サードパーティ
Webサイト
代理アクセスできる
トークン発行
OAuth
トークンで
APIにアクセス
API
25. SAML
□□□ API
+ 認証機能
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
ID/Passwodでの認証・
トークン発行
② モバイルアプリやシングルページアプリケーショ
ン
代理アクセスできる
トークン発行
サードパーティ
Webサイト
OAuth
AWSのマネージドサービス
トークンで
APIにアクセス AWSリソースに
直接アクセス
バックエンド
システムアプリの認証情報で
アクセス
API
バックエンド
トークン ベースでの認証
API
API
トークン
○○○ API
ユーザレポジトリ
モバイル
アプリ
シングル
ページ
アプリケーション
トークン ベースでの認証
API
トークン
○○○ API
API
AWSのマネージドサービス
AWSリソースに
直接アクセス
ID/Passwodでの認証・
トークン発行
ID/Passwodでの認証・トークン発行
トークンベースでの認証
ブラウザからAWSリソースへのアクセス
→ ユーザ認証・ユーザレポジトリ・
トークン発行をサービスで実現
• Amazon Cognito
Cognito
ID/Passwodでの認証・
トークン発行
認証に関連する内容を一通りサービスで
実現できるため、実装コストや期間を
減らすことができる。
Eメールや携帯電話番号へのSMSを使った
MFAも可能。
26. ② モバイルアプリやシングルページアプリケーション
Cognito User Poolを使用した場合のユーザ認証のおおまかな流れ
標準ではSecure Remote Passwordプロトコルという仕組み
でユーザ名とパスワードが検証される。
アプリ :InitiateAuth APIを呼び出す。
認証フローとしてUSER_SRP_AUTHを指定。
Cognito :チャレンジを返す。
チャレンジの種類としてPASSWORD_VERIFIERを返し、
パスワードの検証を求める。
アプリ :RespondToAuthChallenge APIを呼び出す。
パスワードを使って生成したチャレンジレスポンスを送る。
Cognito :3種類トークンを返す。
・IDトークン(JWT形式、クレーム情報と認証用)
・アクセストークン(JWT形式、認証用)
・更新トークン(他トークン更新依頼時用)
JWTトークン
Cognito
User PoolAPI (JSON)
http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html
初回アクセス、ID/Password認証
JWT
トークン
モバイル
アプリ
シングル
ページ
アプリケーション
user001
********
login
SDK
iOS, Android, JavaScript
1
2
3
4
1
2
3
4
28. アプリ :API Gatewayを呼び出す。
Cognitoから受け取ったJWTトークンをAPI Gatewayへの呼
び出しに含める。
API Gateway:JWTトークンを検証して、
Lambdaを呼び出す。
API Gateway :結果を返す。
JWTセットに含まれる公開鍵でユーザから受け取った
JWTトークンの署名を検証して、OKであれば、
リクエストされたAPIを処理して結果を返す。
② モバイルアプリやシングルページアプリケーション
Cognito User Poolを使用した場合のユーザ認証のおおまかな流れ
API
http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html
2回目以降のアクセス、API Gatewayへトークンベースの認証
API Gateway
モバイル
アプリ
シングル
ページ
アプリケーション
user001
********
login
SDK
iOS, Android, JavaScript
JWT
トークン
1
3
1
2
3
2
Lambda
29. ② モバイルアプリやシングルページアプリケーション
Cognito User Poolを使用した場合のユーザ認証のおおまかな流れ
API
http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html
2回目以降のアクセス、AWSリソースへの認証
AWSの
マネージドサービス
モバイル
アプリ
シングル
ページ
アプリケーション
user001
********
login
SDK
iOS, Android, JavaScript
AWS
認証情報
API
JWT
トークン
アプリ :GetCredentialsForIdentity APIを呼び出す。
Cognito User Poolから受け取ったJWTトークンをCognito
Federated Identitiesに渡す。
Cognito :AWS認証情報を返す。
認証情報は一時的なもので、アクセスキー、シークレット
アクセスキー、トークンで構成されている。
アプリ :AWS認証情報を使ってAWSの他のサービス
にアクセスする。
AWSサービス:結果を返す。
Cognito
Federated Identities
1
2
3
4
1
2
3
4
30. □□□ API
+ 認証機能
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
ID/Passwodでの認証・
トークン発行
② モバイルアプリやシングルページアプリケーショ
ン
サードパーティとの認証連携
→
代理アクセスできる
トークン発行
サードパーティ
Webサイト
OAuth
AWSのマネージドサービス
トークンで
APIにアクセス AWSリソースに
直接アクセス
バックエンド
システムアプリの認証情報で
アクセス
API
バックエンド
トークン ベースでの認証
API
API
トークン
○○○ API
ユーザレポジトリ
モバイル
アプリ
シングル
ページ
アプリケーション
トークン
サードパーティ
Webサイト
a f t g
SAML
Amazon, Facebook, Google, SAML との
認証連携をサービスで実現
• Amazon Cognito
Cognitoサードパーティとの
認証連携
ユーザ認証に使用できるCognito User Pool
で認証連携も行える。
※Cognito User PoolはOpenID Connect、Twitterには現時点で未対応。
Cognito Federated IdentitiesはOpenID Connect、Twitterに対応しており、
AWS認証情報を得られる。
31. SAML
□□□ API
+ 認証機能
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
ID/Passwodでの認証・
トークン発行
② モバイルアプリやシングルページアプリケーショ
ン
代理アクセスできる
トークン発行
サードパーティ
Webサイト
OAuth
AWSのマネージドサービス
トークンで
APIにアクセス AWSリソースに
直接アクセス
バックエンド
システムアプリの認証情報で
アクセス
API
バックエンド
トークン ベースでの認証
API
API
トークン
○○○ API
ユーザレポジトリ
モバイル
アプリ
シングル
ページ
アプリケーション
トークン
API
AWSのマネージドサービス
AWSリソースに
直接アクセス
ID/Passwodでの認証・
トークン発行
ID/Passwodでの認証・トークン発行
ブラウザからAWSリソースへのアクセス
Cognitoで対応できない方法で実現したい場合
→
以下のような場合、独自で認証を実現する
事が考えられる。
• クライアント証明書認証
• 独自のMFA
• 独自ポリシーのパスワード認証
独自に認証してAWSの認証情報を発行
• AWS Security Token Service (STS)
32. □□□ API
+ 認証機能
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
ID/Passwodでの認証・
トークン発行
② モバイルアプリやシングルページアプリケーショ
ン
トークンベースの認証
→
代理アクセスできる
トークン発行
サードパーティ
Webサイト
OAuth
AWSのマネージドサービス
トークンで
APIにアクセス AWSリソースに
直接アクセス
バックエンド
システムアプリの認証情報で
アクセス
API
バックエンド
トークン ベースでの認証
API
API
トークン
○○○ API
ユーザレポジトリ
モバイル
アプリ
シングル
ページ
アプリケーション
標準でAWSの認証情報に対応しており、認
証・認可をパスしたアクセスのみEC2や
Lambdaなどに送ることができる。
Custom Authorizerで独自のトークンにも
対応できる。
トークン ベースでの認証
API
API
AWSの認証情報を使った認証・認可を
サービスで実現
• Amazon API Gateway
33. サードパーティ
Webサイト
a f t g
SAML
サードパーティとの
認証連携
□□□ API
+ 認証機能
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
ID/Passwodでの認証・
トークン発行
② モバイルアプリやシングルページアプリケーショ
ン
代理アクセス
→
代理アクセスできる
トークン発行
サードパーティ
Webサイト
OAuth
AWSのマネージドサービス
トークンで
APIにアクセス AWSリソースに
直接アクセス
バックエンド
システムアプリの認証情報で
アクセス
API
バックエンド
トークン ベースでの認証
API
API
トークン
○○○ API
ユーザレポジトリ
モバイル
アプリ
シングル
ページ
アプリケーション
ユーザ認証に使用できるCognito User Pool
で代理アクセスを実現できるOAuthプロコ
ルに対応して、トークンをサードパーティ
Webサイトに提供も行える。
サードパーティ
Webサイト
OAuth
トークンで
APIにアクセス
API
代理アクセスできる
トークン発行
OAuth を使った代理アクセス機能を実現
• Amazon Cognito
Cognito
34. SAML
user001
********
login
社員PC
Active Directory
Federation Service
(ADFS, IdP)
Acitve Directory
Linux/Unix系
Webサーバ
インターネット
サードパーティ
SaaS
ユーザ
レポジトリ
SAML対応
Webサーバ
Webサーバ
サードパーティ
との認証連携
SSO製品
社内での認証連携
Webサーバ
ID/Passwodでの認証
統合Windows認証
/ Kerberos認証
Acitve Directory
③ エンタープライズ企業の社内システム
Active Directory (AD)
→
認証を利用するリソースをAWS上に
配置するなどのユースケースで
Directory ServiceのMicrosoft ADを利用で
きる。
ただし、既存のADを完全にAWS上に置き
換えたいなどの場合は、移行コストを考え
るとEC2上のWindows Serverで実現する方
が良い。
ADの構築運用をサービスで実現
• AWS Directory Service
• Amazon EC2 Systems Manager Config
user001
********
login
社員PC
Webサーバ統合Windows認証
/ Kerberos認証
インスタンス作成時に
ドメインの自動参加
35. SAML
user001
********
login
社員PC
Active Directory
Federation Service
(ADFS, IdP)
Acitve Directory
Linux/Unix系
Webサーバ
インターネット
サードパーティ
SaaS
ユーザ
レポジトリ
SAML対応
Webサーバ
Webサーバ
サードパーティ
との認証連携
SSO製品
社内での認証連携
Webサーバ
ID/Passwodでの認証
統合Windows認証
/ Kerberos認証
③ エンタープライズ企業の社内システム
ID/Passwordでの認証
社内での認証連携
サードパーティとの認証連携
→ AWS上でも実装方法に違いは無し。
SAML
user001
********
login
社員PC
Active Directory
Federation Service
(ADFS, IdP)
Linux/Unix系
Webサーバ
インターネット
サードパーティ
SaaS
ユーザ
レポジトリ
SAML対応
Webサーバ
サードパーティ
との認証連携
SSO製品
社内での認証連携
Webサーバ
ID/Passwodでの認証
36. 組み合わせ: API Gateway + CloudFrontの署名Cookie
認証あり静的Webサイトを実現
• Amazon CloudFront + Amazon S3
Cookie
Cookieベースでの認証
CloudFront S3
API Gateway Lambda
トークンでの認証
・Cookie発行
トークン
ID/Passwodでの認証
・トークン発行
Cognito
user001
********
login
ブラウザ
認証部分のみHTML+JavaScriptでクライア
ント部分を実装し、認証後はCookieを元に
単純な静的Webサイトを提供できる。
サードパーティ
Webサイト
a f t g
サードパーティとの
認証連携
SAML
42. AWS Well Architected 個別技術相談会のお知らせ
Well Architectedフレームワークに基づく数十個の質問項目を元に、お客
様がAWS上で構築するシステムに潜むリスクやその回避方法をお伝えす
る個別相談会
https://pages.awscloud.com/well-architected-consulting-2017Q4-jp.html
参加無料
毎週火曜・木曜開催