Slide 1

Slide 1 text

AWS Cognitoで開発環境を守る 2022/07/01 株式会社ミクシィ 開発本部 セキュリティ室 小林 聖哉

Slide 2

Slide 2 text

©mixi, Inc, All rights reserverd. 自己紹介 ● 開発本部 セキュリティ室 ● 21新卒 ● 全社的なAWS/GCPの監視 ○ 監視基盤の実装・改善 ● セキュリティ対策支援 ● etc… 2

Slide 3

Slide 3 text

©mixi, Inc, All rights reserverd. アジェンダ ● セキュリティ室で行っているIaaS監視の紹介 ● 管理画面・開発環境のインターネット公開の課題 ● Cognito 紹介 ○ 活用シナリオ ○ 導入時の課題と解決策 ○ セキュリティ設定周り ● まとめ 3

Slide 4

Slide 4 text

©mixi, Inc, All rights reserverd. セキュリティ室で行っているAWS/GCPの監視について ● 各プロジェクトの監視 ○ 設定不備や侵害の検知 ● Irene ○ 内製ツール ○ アラートの自動評価・管理 ○ 画面キャプチャ, etc… ● AWS: 約50アカウント (※全てではない) ○ CloudTrail ○ GuardDuty ○ OSSの設定監視ツール ● GCP: 2組織/100プロジェクト以上 ○ Security Command Center ○ 内製のリソース収集ツール ● 詳細 → https://speakerdeck.com/mixi_engineers/srenext2022-skaru 4

Slide 5

Slide 5 text

©mixi, Inc, All rights reserverd. 管理画面・開発環境のインターネット公開の課題 ● サービスの管理画面・開発環境のインターネット公開の検知 ○ リモートワークの普及/自宅からアクセスしたい ○ 委託会社などの社外の人がアクセスしたい → ALBのIdP連携では自社IdPを使える人しか制御できない → 仕方なくインターネット公開 ● 自社 + 特定の外部ユーザーを認証したい Cognitoを使えば 自社IdP + 他社のIdP/独自のユーザープール で実現できそう 5

Slide 6

Slide 6 text

©mixi, Inc, All rights reserverd. Cognitoとは ● ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します ● ユーザプール (今回扱うのはこちら) ○ 認証 ○ ユーザディレクトリ ○ サインアップおよびサインインサービス ■ Cognito User Pool ■ Google, Apple, Facebook, Amazon ■ OIDC Provider ■ SAML Provider ○ サインインのためのHosted UIを提供 ● IDプール ○ 認可 ○ Amazon S3 や DynamoDB などの AWS のサービスにアクセスするための一時的な AWS 認証情報を取得できます ○ 匿名ユーザと認証されたユーザで異なるIAMロールを付与することができる Hosted UI 6

Slide 7

Slide 7 text

©mixi, Inc, All rights reserverd. シナリオ例 7 ● Cognito × ALB ● Cognito × CloudFront

Slide 8

Slide 8 text

©mixi, Inc, All rights reserverd. Cognito × ALB ● ALB経由でアプリケーションを公開している場合 ● リスナールールの認証にAmazon Cognitoを設定するだけ ● HostedUIにリダイレクトされます 8

Slide 9

Slide 9 text

©mixi, Inc, All rights reserverd. Cognito × CloudFront ● SPAなど、S3からCloudFront経由でコンテンツを配信してる場合 ● lambda@EdgeでHostedUIにリダイレクトして認証する ○ https://github.com/awslabs/cognito-at-edge ○ Viewer Request Eventsに設定する 9

Slide 10

Slide 10 text

©mixi, Inc, All rights reserverd. Cognito導入時の課題 導入自体は簡単そうだが・・・ 課題もでてきた ● TOTPによるMFAを設定したい ● Google認証時に特定のユーザーだけ許可したい 10

Slide 11

Slide 11 text

©mixi, Inc, All rights reserverd. Cognito導入時の課題 ● TOTPによるMFAを設定したい ● Google認証時に特定のユーザーだけ許可したい 11

Slide 12

Slide 12 text

©mixi, Inc, All rights reserverd. CognitoのユーザにMFAを設定したい: 認証方法 ● 社内ユーザー ○ Google, OIDC IDプロバイダがそのまま使える ○ 社内のセキュリティポリシーに沿った設定 ● 外部ユーザー ○ 業務委託先など一時的にアクセス可能なユーザを作りたい場合 ○ Cognito User Poolにて、ユーザを作成して提供する必要がある ○ 社内ユーザと同等のセキュリティレベルにしたい → MFAは設定させたい 12

Slide 13

Slide 13 text

©mixi, Inc, All rights reserverd. CognitoのユーザにMFAを設定したい ● SMSもしくはTOTPによるMFAを設定可能だが、Hosted UIではTOTPの設定ができない ○ https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-settings-mfa -totp.html 1. AWS CLIを使って設定する • IAM発行して、作業してもらう必要がある 2. MFA設定用の画面を作る • AWS Amplify SDKを使うことで簡単に実装できる • 使い回しも可能 13

Slide 14

Slide 14 text

©mixi, Inc, All rights reserverd. CognitoのユーザにMFAを設定したい ● Amplify SDKがよしなにやってくれる ● withAuthenticator でラップするだけ 14 src/App.js Sample

Slide 15

Slide 15 text

©mixi, Inc, All rights reserverd. CognitoのユーザにMFAを設定したい ● TOTPによるMFA設定が可能 ● S3等でホストしてユーザに設定してもらう ● 初期設定後はHosted UIでもMFAが使える 15

Slide 16

Slide 16 text

©mixi, Inc, All rights reserverd. Cognito導入時の課題 ● TOTPによるMFAを設定したい ● Google認証時に特定のユーザだけ許可したい 16

Slide 17

Slide 17 text

©mixi, Inc, All rights reserverd. 特定のGoogleユーザーだけ許可したい ● Google OAuth同意画面のスコープ ○ 外部: 全てのGoogleアカウント ○ 内部: GCPの組織に紐づいている全ユーザー ● OAuth同意画面の設定だけではユーザごとに許可/拒否できない 17 同意画面の設定

Slide 18

Slide 18 text

©mixi, Inc, All rights reserverd. 特定のGoogleユーザーだけ許可したい: トリガー ● 認証イベント時に、Lambda関数を挟める ○ カスタム検証が可能 ○ サインアップ前後  ○ サインイン前後 ● 属性 ○ ユーザプールID ○ アプリクライアントID ○ ユーザ名 ○ ユーザ属性 ■ emailなど 18 サインイン前に属性の検証をして、認証の許可/拒否ができる

Slide 19

Slide 19 text

©mixi, Inc, All rights reserverd. 特定のGoogleユーザーだけ許可したい: トリガー ● 検証用のLambdaを作成し、認証前のトリガーに設定する ● 例: Googleユーザかつ許可するemailの時のみ通過させる ○ ユーザー名: Google_XXX の形式になる (usernameを属性マッピングしていない場合) 19

Slide 20

Slide 20 text

©mixi, Inc, All rights reserverd. 特定のGoogleユーザーだけ許可したい: グループ管理 ● 所属しているグループによって権限を変えることもできる ○ ex) 管理者グループ, 一般ユーザグループなどに分けて、異なるIAMロールを付与できる ● ソーシャルログインは自動的にグループが生成される (デフォルトではロールはついていない) ● 複数のグループに所属することも可能で、優先順位がつけられる ● トリガーで所属グループをチェックする 20

Slide 21

Slide 21 text

©mixi, Inc, All rights reserverd. セキュリティ設定について ● 自己サインアップは無効にしましょう ○ 有効のままだとだれでもサインアップできてしまい認証を突破できてしまいます ● アドバンスドセキュリティ ○ 侵害された認証情報の検知 ○ アダプティブ認証 ○ IPアドレスのホワイトリスト/ブラックリスト ● CloudTrail ○ APIイベントからサインインステータスを見れる ■ InitiateAuth: サインイン時のイベント ○ 新たにHosted UIのイベントが見れるようになっていた (6/17) ■ https://docs.aws.amazon.com/cognito/latest/developerguide/understanding-amazon-cognito-entries.html 21

Slide 22

Slide 22 text

©mixi, Inc, All rights reserverd. まとめ ● Cognito + ALB/CloudFrontを使うことでセキュアな環境構築が可能 ● AmplifySDKを使用して、TOTPによるMFAの設定が可能 ● トリガーを使用することで、ユーザごとに制御が可能 ● Cognitoのセキュリティ周りの設定 22

Slide 23

Slide 23 text

No content