CLOSE

TECH PLAYからの相談③/Q&A『サーバーレスアーキテクチャにおけるセキュリティについて』(全2記事)

「Cognitoと他の認証は協調できる?」「環境を分けた場合の振り分けは?」 AWSソリューションアーキテクトが回答する認証・認可のQ&A

AWSのソリューションアーキテクトが悩めるエンジニアの相談に乗り、「サービスを進化させるアーキテクチャの生み出し方」を伝授する「AWS Tech talk Night#3 ~TECH PLAYのエンジニアが相談!AWSソリューションアーキテクトが導く『WEBサービスを進化させるアーキテクチャ』~」。ここでアマゾンウェブサービスジャパン合同会社の福井氏・清水氏・下川氏、パーソルイノベーション株式会の鈴木氏・中村氏・青山氏が登壇。続いて、視聴者とTECH PLAYからの質問に回答します。前回はこちらから。

Cognitoと他の認証を協調させるような作り方はできるか

清水崇之氏(以下、清水):視聴者のみなさんから1つ質問がきています。「Cognitoと他の認証を協調させるような作り方はできますか」という質問について、いかがですか?

福井厚氏(以下、福井):はい。これもCognitoがフェデレーションの機能を持っています。例えばFacebookやGoogle ID、あとはSAM認証をサポートしているような他のIdPと連携させて認証することができるようになっています。そういう複合というか、組み合わせで認証させることも可能です。

清水:ありがとうございます。

中村航也氏(以下、中村):Deletion Policyの話に関係しますが、Cognitoのユーザー情報、DynamoDBに退避させておいて、いざという時に復旧できるようなアプローチがあるとしたら、そのDynamoDBはCognitoのスタックを分離しておくか、もしくはCognitoのスタック内でDeletion Policyで中が削除されないように管理しておくかで言うと、スタックを分けるアプローチが望ましいということですか?

下川賢介氏(以下、下川):そうですね。スタックを分けるか、実はDynamoDB自体にもS3にバックアップする機能があるので、最終的にはS3に置いておく。S3のほうはすごく堅牢性の高いサービスになっているので、そちらに置いておいて、そこから復元していくことも考えられると思います。

本当に失われてはいけないリソースであればS3で管理しておく。S3自体は堅牢性の高いサービスですが、リージョナル障害にも耐えたいという時にはS3のリージョン間のレプリケーションを使う。例えば東京と大阪をレプリケーションしておいて、他のリージョンにデータを逃がしておくとか。サービスの(中の)どこまでデータを残しておきたいかという要求によって、先の先まで計画することもできるのかなと思います。

清水:ちょっと違うかもしれませんが、バルクヘッドみたいな考え方なのかなと思いますね。やはり大事な部分、サービスをどこまできちんと動かすかというところで、影響を与えたくないのであれば、やはりスタックごとに分けておくというのが1つのプラクティスである気はします。

AWSで認証・認可をすべてGUIで設計・設定できるようなサービスはあるか

清水:もう1つ質問が来ているので読み上げますね。「AWSで認証・認可をすべてGUIで設計・設定できるようなサービスはありますか」。認証・認可をすべてGUIで操作できればいい、設計・設定できればいいという意味かな。

下川:「マネジメントコンソールからすべて設定できますか」という解釈でいいですかね?

清水:それでいいと思います。

下川:CognitoもAPI Gatewayというサービスも、マネジメントコンソールからポチポチとクリックしたりドラッグしたりすることによって設定できます。ただ、2つくらい前の質問にあったとおり、画面を操作する手続きは再現性がなかったり、Excelで手順書を起こさないと同じような環境が作れなかったりするので、できるだけInfrastructure as codeでテンプレートを使ったりするほうがいいんじゃないのかなとは思いますね。

福井:そうですね。

CognitoオーソライザーはFargateと組み合わせた認証・認可は可能か

青山稜河氏(以下、青山):先ほどのCognitoは、Fargateと一緒に組み合わせて認証・認可みたいなものはできるんですか?

下川:そうですね。先ほどの図にもあったALBが実はCognitoとかに対応しているので、同じようにCognitoベースの認証ができます。

今(スライドには)ALBが書かれていますが、実はお客さまの中ではECSの前、Fargateの前にALBではなくAPI Gatewayを置くというスタイル、アーキテクチャパターンを取ることもできます。API Gatewayベースでやれば、先ほど説明したアーキテクチャを取ることができるのかなと思います。

青山:ありがとうございます。

Amplifyホスティング機能について

福井:この図を見て思い出しました。先ほど言い忘れたんですが、フロントエンドについてはもちろんコンテナで実行してもらってもかまいませんが、もう1つ、Amplifyホスティングという機能を使ってもらうと、簡単にこういうStatic GenerationしたサイトをS3上でホスティングできます。

そうすることによってより管理の工数を削減したりコストを抑えたりできると思うので、そちらを検討してもらってもよいと思います。

青山:そのAmplifyというのは、処理の流れとしてCloud Frontに行って、そのままS3に行く感じですか?

福井:そうです。自動的にS3のホスティングとCloud Frontを構築してデプロイしてくれます。

青山:便利ですね。

福井:はい。試していただければ。もともとAmplifyというサービス自体は、クライアントのアプリケーションを実装するのに便利なライブラリやフレームワークを用意したサービスでした。

例えばReactやAngular、あるいはモバイルアプリケーションであるiOSやAndroidに対応するようなサービスでしたが、今はどんどん拡張されて、ホスティングとかデータのモデリングとか、そういったところまでできるようになっています。見てもらえると便利な機能がたくさんあります。

青山:ありがとうございます。

環境を分けている場合はどのように振り分けするべきか

青山:もう1つ質問がきています。TECH PLAYではもう1つALBがあるじゃないですか。今、これで新しい環境と古い環境を分けているんですよね。パスベースルーティングで移行の真っ最中。

例えば、/blogというパスは新しい環境、/eventというパスは古い環境、EC2の環境と分けていて、S3でホスティングした場合はどうやって振り分けたらいいのかが気になったんですが、どうでしょう?

福井:WebサイトのURLでパスルーティングしているということでよいですか?

青山:そうです。

福井:なるほど。ロードバランサーで振り分けたい場合、どうすればいいですかね。

青山:ロードバランサーじゃなくてもいいんですけれど、今はそういう構成なので。

福井:一応Cloud Frontの中でも分けることはできるので、新しいものはS3のスタティックホスティングして、それ以外のURLに関してはそのオリジンをEC2にしてもらうかたちは取れるかと思います。

青山:あ、なるほど、わかりました。ありがとうございます。

下川:たぶん視聴者の方、CloudFrontとかS3いう単語が初めて出てきたので(わからない方のために説明します)。CloudFrontは、例えばCDNみたいなコンテンツ・デリバリー・ネットワークという役割を果たしていて、そこでキャッシュをしたりエッジからレスポンスを返したり、レイテンシーに貢献できたりするようなサービスです。

S3は何かと言うとオブジェクトストレージで、ここにファイルや何かリソースを登録しておき、そこをCloudFrontからオリジンとしてさすことによって、そのリソース、例えばCSSとかHTMLという静的リソースをユーザーに返すことができる。こんな組み合わせができるようなサービスになっています。

CloudFormation側からSAMに変換はできるのか

清水:ありがとうございます。そろそろお時間ですが、いかがですか。TECH PLAYのみなさんから最後に何か質問があれば。

青山:最初のデプロイの相談に戻りますが、簡単にデプロイする方法。これをSAMでやる方法ですが、逆に、CloudFormationでSAMがCloudFormationに変換する処理をするじゃないですか。

福井:はい。

青山:逆にCloudFormation側から、そのSAMに変換することもできるんですか。

福井:それはないです。

青山:ないですか。

福井:はい。

青山:CloudFormationで全部完結できるのかなと思ったのが(今の質問をした)理由です。

福井:先ほど言ったように、SAMのテンプレートの中にCloudFormationのテンプレートを含めることができるので、過去にあるそのCloudFormationのテンプレートをペタッとSAMのテンプレートに貼ってもらえればそのまま使えます。

青山:ありがとうございます。そうなんですね。

下川:記述の面だけでなく、例えば私がSAMを好きな理由にローカルテストができる・しやすいことがあります。SAMのCLIの中にLambdaのエミュレータやAPI Gatewayのエミュレータをローカルで立ち上げてテストするという機能がある。CloudFormationにないようなデプロイ前にテストがローカルでできてしまう機能があるので、それらを使いたいケースでは、CloudFormationとは考え方を分けておくのがいいのかなと思います。

福井:はい。

青山:ありがとうございます。ローカルでLambdaを動かしたりするということは初めて知りました。

福井:そうですか。

下川:ぜひ。

福井:試してもらえれば。

青山:ありがとうございます。

下川:あくまでもエミュレータなので、Cloudを模倣して動くというかたちです。すべてがCloudの性能や機能を実現しているわけではない点は注意してください。

青山:はい。ありがとうございます。

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

  • 大変な現場作業も「動画を撮るだけ」で一瞬で完了 労働者不足のインフラ管理を変える、急成長スタートアップの挑戦 

人気の記事

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!