0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS ALB + S3 + Cognito マネージドログインで実現する SPA での公開構成!

Posted at

image.png

はじめに

前回の「AWS SPAをALB+S3でセキュアに公開!」の続きです!

今回は、AWS 上で Vue.js などの SPA(Single Page Application)を安全に公開する構成として、以下のサービスを組み合わせた実装手順を解説します。

採用する構成

  • S3
    • SPA(Vue.js)の静的ファイルを配置
  • ALB(Application Load Balancer)
    • HTTPS 終端
    • S3 へのコンテンツ配信
    • / アクセスを /index.html に変換(SPA 対応)
  • Amazon Cognito
    • マネージドログイン画面による認証
    • ALB の認証機能と連携
  • ACM

全体構成図(イメージ)

[ Browser ]
     |
     | https://test.co.jp
     v
[ ALB (HTTPS) ]
     |
     | 認証(Cognito)
     v
[ S3 Bucket ]
   └ index.html
   └ assets/*

手順

1. SPA(Vue.js)をビルドして S3 に配置

npm run build

生成された dist/ 配下のファイルを S3 バケットにアップロード。

  • バケットは 非公開
  • 静的ウェブホスティングは 無効で OK

2. S3 バケットポリシーを ALB からのみ許可

ALB からのアクセスのみ許可するため、以下のようなバケットポリシーを設定。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

3. ALB を作成(HTTPS)

  • ALB を インターネット向けで作成
  • リスナー
    • HTTP(80) → HTTPS(443)へリダイレクト
    • HTTPS(443) → ターゲットグループ

4. ALB のターゲットグループに S3 を設定

  • ターゲットタイプ:IP
  • プロトコル:HTTPS
  • エンドポイント:S3 の リージョンエンドポイント

※前回と一緒

5. SPA 対応:/ を /index.html に変換

ALB の リスナールールで以下を設定。

ルール例

  • 条件
    • パス:/
  • アクション
    • 転送先を書き換え:/index.html

※前回と一緒

6. Cognito ユーザープールを作成

  • 認証方式:メールアドレス
  • MFA:任意
  • ユーザー登録:セルフサインアップ可(用途に応じて)

マネージドログイン設定

  • アプリクライアントを作成
    • シークレット:無効
  • コールバック URL
    • https://test.co.jp/oauth2/idpresponse

7. ALB と Cognito を連携(認証設定)

ALB の HTTPS リスナーに以下のアクションを追加。

認証アクション

  • 認証タイプ:OIDC
  • 認証プロバイダー:Amazon Cognito
  • 設定内容
    • ユーザープール
    • アプリクライアント
    • ドメイン

処理フロー

  1. 未ログインで ALB にアクセス
  2. Cognito マネージドログイン画面へリダイレクト
  3. ログイン成功
  4. ALB → S3 → SPA 表示

8. 動作確認

  1. ブラウザでアクセス(https://test.co.jp
  2. Cognito のログイン画面が表示される
  3. ログイン後、Vue.js SPA が表示される

おわりに

これで、"認証"を含むセキュアな構成が出来上がりました!
細かい部分は微調整が必要ですが、SPAで行う環境であればイケてるんじゃないかと思います。

ただ、全てALBを通過させるので、スピードなどがちょっと心配です。
次回は、よくある「CloudFront + S3」との比較を記事にしたいと思います。


参考(感謝)

  • AIに聞きながら
  • 経験者にご教授頂きながら
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?