[レポート] AWSを活用したユーザー認証実装パターン解説 #AWSSummit

AWS Summit Tokyo 2019 Day2 で開催された「AWSを活用したユーザー認証実装パターン解説」についてレポートします。

セッション情報

スピーカー:堀場 隆文氏 (アマゾン ウェブ サービス ジャパン株式会社)

セッション名:AWSを活用したユーザー認証実装パターン解説

AWSのマネージドな認証サービスを利用してユーザー認証をサーバレスで構築してみませんか?システムに欠かせない機能の1つがユーザー認証です。開発者は様々な製品やサービスを組み合わせてユーザー認証機能を実装します。本セッションではユーザー認証で議論に上がりやすい開発者の関心事をとりあげ、 Cognito等のAWSのマネージドな認証サービスとALB、API Gatewayなどのアプリケーション構築で利用するAWSサービスを例に挙げユーザー認証の実現方法を説明します。

セッションの概要

  • 内容
    • ユーザー認証の概要
    • AWSの認証関連のマネージドサービスのご紹介
    • ユーザー認証の実装パターン解説
  • ゴール
    • AWSのマネージドサービスを活用したユーザー認証の構成検討ができる

ユーザー認証の概要

  • あらゆる箇所で実施される認証
    • AWS管理者
      • マネジメントコンソールでユーザの作成など
    • セキュリティ担当
      • ログの監視、監査
    • 開発者
      • 環境のプロビジョニング
      • SSHの鍵でEC2にログイン
    • パートナー
      • BtoB
    • 消費者
      • BtoC
    • 従業員
  • ユーザ認証というのは
    • ID、パスワードを使用して本人であることを確認すること
  • 実行権限の確認を認可という
  • Webアプリケーションの実装理
    • 従来型のアプリ
    • モダンなAPIベースのWebアプリ
      • Javascriptで通信、画面の描画。SPAと呼ばれるもの
      • AWSのAPIを直接呼び出すこともある
      • AWSのCredentialsが必要
    • クラウドベンダー提供のアプリ
      • 実装はベンダー依存。従来型、APIベース等
  • ユーザ認証に関連する関心事
    • 強固な認証
      • MFA
    • ユーザビリティ
      • シングルサインオン
    • ガバナンス、コンプライアンス
    • 構築/運用性
  • マネージドサービスを活用しイノベーションに投資をしましょう

 

AWSの認証関連のサービス紹介

  • AWSではセキュリティを再優先事項としている
  • AWSのセキュリティ関連サービスポートフォリオ
    • ID管理/認証/管理
      • IAM
      • AWS Single Sign-On
      • Amazon Cognito
      • AWS Diretrory Service
      • Amazon Cloud Directory
      • AWS Secrets Manager
      • AWS Organizations
      • AWS Resource Access Manager
    • インフラ保護
      • VPC
      • AWS Shield
      • AWS WAF
      • Amazon Inspector
      • AWS Systems Manager
    • データ保護
      • Amazon Macie
      • KMS
      • AWS CloudHSM
      • AWS Certificate Manager
    • 発見的統制
      • AWS Security Hub
      • Amazon GuardDuty
      • AWS CloudTrail
      • AWS Config
      • Amazon CloudWatch
      • VPC Flow Logs
    • 訂正的統制
      • AWS Config Rules
      • AWS Lambda
  • ID管理/認証/認可に関連するサービス
    • ID管理 & 認証
      • AWS Single Sign-On
      • 複数のAWSアカウントやビジネスアプリへのシングルサインオンを実現
      • AWS Directory Service
        • マネージド型Microsoft Active Directory
      • Amazon Cognito
        • カスタムアプリやAWS APIの認証、認可を提供
      • Amazon Cloud Directory
        • 様々なユースケースに対応するディレクトリ機能を提供
    • 認可
      • IAM
        • AWS APIに対するアクセス制御
      • AWS Secrets Manager
        • パスワードのライフサイクル管理
    • リソース管理
      • AWS Organizations
        • 複数のAWSアカウントのリソースをポリシーで制御
      • AWS Resource Access Manager
        • 複数のAWSアカウントへのリソース共有を制御
  • AWSアカウントは増加していく、マルチアカウント
    • 100こアカウントがある場合パスワードを管理できない
  • Webアプリケーションで利用する認証サービス
    • AWS SSO
    • Amazon Cognito
  • AWS SSOの特徴
    • 強固な認証
      • MFA
      • パスワードポリシー
    • ユーザビリティ
    • ガバナンス、コンプライアンス
      • AD対応
      • CloudTrail対応(監査)
    • 構築/運用
      • プログラミング不要
      • マネージドで負荷軽減
  • Amazon Cognitoの特徴
    • 強固な認証
      • MFA
      • パスワードポリシー
      • AWS Credentialsの発行機能
    • ユーザビリティ
      • ソーシャル連携
        • Amazon、Facebook、Googleと簡単に連携できる
    • ガバナンス、コンプライアンス
      • 外部IDプロバイダと連携
      • CloudTrail対応(監査)
    • 構築/運用
      • プログラミング不要
      • マネージドで負荷軽減
    • ユーザプールとIDプール
      • 認証する場合はユーザープールを使用する
        • 認証関連機能
        • ユーザディレクトリ
        • 外部IDプロバイダ連携
      • IDプール
        • AWS Credentials発行
        • 外部IDプロバイダ連携

AWSを活用したユーザ認証実装パターン解説

  • 従来型(HTMLベース)のWebアプリ
    • 認証サービスの活用パターン
      • ALBとAmazon Cognito、OIDC準拠IDプロバイダと連携
      • Amazon Cognitoの活用時のフロー
        1. ALBへアクセス
        2. ALBがユーザープールへリダイレクト
        3. Amazon Cognitoが認証画面を表示
        4. ユーザがID、パスワードを入力し送信
        5. Amazon Cognitoがトークンを送信し、ALBへリダイレクト
        6. ユーザがALBへアクセスしコンテンツを利用
    • カスタム実装するパターン
      • 認証サービス要件/データ保管場所などによりカスタム実装が必要な場合
      • NLB + EC2 + Amazon RDS
      • NLB + EC2 +オンプレミスDB
  • BモダンなAPIベースのアプリの場合(SPA)
    • APIをAmazon API Gatewayで提供している場合
      • Amazon API Gatewayは3種類の認証方式をサポート
        • Amazon Cognito(ユーザプール):ユーザプールや外部IDプロバイダで認証する場合
        • AWS IAM:IAMユーザ/IAMロールやフェデレーションを利用時
        • AWS Lmbada:独自ロジックで認証する場合
      • Amazon Cognito活用時のフロー
        1. S3へアクセスし認証画面を表示
        2. ユーザプールにアクセス、トークンをもらう
        3. クライアントがAmazon API Gatewayへアクセス
        4. API Gatewayがトークンをチェック
    • APIを独自実装で提供している場合
      • アプリケーションロジック内でのカスタム認証を実装
      • NLB + EC2 + RDS
      • NLB + EC2 + オンプレミスDB
    • AWSのAPIを実行する場合
      • Amazon Cognito IDプールを利用する方法
        • IDプールは主に以下の二種類の「ユーザー認証」情報を利用してAWS Credentialsを発行
          • ユーザプール + IDプール で認証
          • 外部IDプロバイダ + IDプール で認証
        • AWS API 利用時のフロー
          1. S3へアクセスし認証画面を表示
          2. ユーザプールにアクセス、トークンをもらう
          3. IDプールにトークンを渡すことでAWS Credentialsを取得
          4. AWS Credentialsを使用し、DynamoDBやS3、API Gatewayにアクセス
    • IDプールによるAWS Credentials発行
      • 事前にIAMロールの割り当てルールを設定
        • IAMロールの割当方法
          • デフォルトのロール
          • ルールベース
          • トークン内指定
          • 未認証
      • 割り当てられたIAMロールを利用してAWS Credentialsを生成
      • Aws Amplifyで簡単に動きを試せる
  • クラウドベンダーが提供するクラウドアプリ
    • シングルサインオンを提供したい場合
      • AWS SSO
        • 100種類移譲のアプリやSAML2.0対応のアプリケーションを統合可能
        • 複数のAWSアカウントの統合も可能
        • マネージドなディレクトリサービスも提供
      • AWS SSO利用時のフロー
        1. AWS SSOへアクセス
        2. AWS SSOは認証画面を応答
        3. ユーザはID、パスワードを送信
        4. AWS SSOはポータル画面を応答
        5. ユーザはポータル画面から利用するアプリを選択

まとめ

  • カスタム実装も選択肢としてはあるということを覚えておく
  • マネージドサービスを活用しイノベーションに投資を
  • ユースケースに適した実装方法の選択を