はじめに
1月13日に開催された、AWSのユーザーグループである、
JAWS-UG さいたま支部 第9回勉強会に参加してきました。
開催情報
- 開催日:2018年01月13日(土)
- 会場:川口市立映像・情報メディアセンター メディアセブン
- 時間:13:30~17:30
勉強会のテーマ
re:Invent2017振り返り
私が気になるサービスは、AWSに買収されたCloud9です!
参加した感想
都内のJAWS-UGは平日のためなかなか参加できません。。。
今回参加したさいたま支部は、少人数でとてもアットホームな会でした。
ぼっち参加でも楽しかったです!(懇親会に行けなかったのが残念。。。)
以下、ライトニングトークのメモです。
走り書きなので、誤字脱字はご容赦ください。
【LT1】サーバーレス化を支える認証認可の話
発表者
- NRIネットコム株式会社
- 佐々木拓郎さん(今回初参加)
- ワイン好きなAWSエンジニア(@dkfj)
- AWSの本書いた。2018年1月20日に発売予定。(AWS業務システム設計・移行ガイド)
- 1冊目は、AWSパターン別構築・運用ガイド
- 2冊目は、AWSクラウドネイティブ・アプリケーション開発技本(632ページ)
- Lambdaとか書いた。
目的
- サーバレスアーキテクチャで構築する際の認証認可、アクセス制御のパターンをなんとなく知る
構成
- ロジック
- APIGateway→lambda→DynamoDB
- コンテンツの取得
- CloudFront→S3
利用できる人を限定する場合は?
認証(Authentication)
- 誰であるか?
- ID,PASS確認
- 正当性の確認
- 本人性の保証
認可(Authorization)
- 誰が誰に何の情報を与えるか?
APIの世界では?
- 初回アクセス:ID、PASS
- 認証・認可システム
- 二回目以降:トークン
- 利用者は、リクエストwith TokenでAPIを呼ぶ
Tokenの運用をどうするか?
ID連携技術
- OAuth(認可のプロトコル)
- OpenID(認証のプロトコル)
- 認証認可+OAuth2.0=OpenID Connect
- SAML
- 企業内のシステム間連携に多い
参考文献
工藤達雄さんのSlideShareをみるべき
アクセス制限
- アクセス元情報によるアクセス制限
- IP
- ヘッダー情報(UserAgent)
- 遷移元による制限(リファラー)
AWSでどうするか?
Cognito
- 認証認可のサービス
- APIと相性ぴったり
- 機能
- Cognito User Pool
- ユーザー管理(DB)サービス
- サインイン・サインアウトなど認証を担当
- MFAやパスワードポリシーなど、一通りの機能がそろっている
- Cognito Federated Identities
- 認証部分は、外部プロバイダに移譲。認可のサービス
- 外部プロバイダとして、FacebookやTwitterなどが利用可能
- 認証したユーザーに一時的なAWSの利用権限を与える
- AWS STSを簡単に使えるようにしたもの
- Cognito User Pool
API Gateway
- WebAPIの作成・保護・運用と公開を管理するサービス
- REST APIの作成サービス
- Lambda
- HTTP Proxy
- AWS Proxy
- 機能
- 認証
- IAMアクセス権限
- デフォルトはだれでもAPI Gatewayを使える
- カスタムオーサライザー
- Lambda呼び出し
- 一番多く使われる(と思う)
- Cognitoユーザープール
- IAMアクセス権限
- アクセス制限
- クライアント証明書
- APIキー
- 認証ではない
- requestの検証
- ヘッダー、本文内などに特定の文言を見てチェック
- IPアドレスによる制限
- WAF+CloudFront
- WAFのIP Match Conditionを利用
- WAFを利用するために、CloudFrontも利用
- WAFのためにCloudFrontを使うので無駄な側面もある
- IAMによる制限
- API Gatewayの認証で、IAMを利用する
- IAMのconditionでIP制限をかける
- 特定の場所のみ有効な鍵
- 利用者がAWSユーザのみであれば手段の1つ
- Publicな不特定なユーザには向かない
- WAF+CloudFront
- 認証
ユースケースごとのアーキテクチャ(Cognito編)
- 新規サービス立ち上げ
- Cognito UserPoolがおすすめ
- クライアント→API Gateway→【認証】Cognito User Pool
- 既存のシステムにAPI追加
- カスタムオーサライザーで既存DBを参照
- Lambdaで自前で認証処理を実装
- 既存システムにID/パスワード問合せ
- カスタムオーサライザーで既存DBを参照
- 既存システムをCognito User Poolに移行したい
- つらい
- データインポート機能はある
- でも、パスワードは移行できない
- パスワード再発行の仕組みで、初回ログイン時変更を促す
- 大規模移行の時に、つらい。。。
- つらい
- Cognito User Poolのデータをバックアップしたい
- できない
- UserPoolのバックアップ・エクスポートができない
- データはAWSが責任もって守ってる
- 必須の場合は、DynamoDBなどに保存すべき
- できない
- ワールドワイドなサービスでCognito使いたい
- リージョン間でのreplication機能なし
- 世界で谷津のCognitoだと認証のレイテンシが問題
- DynamoDBのクロスリージョンreplicationで解決?
API Gatewayのアンチパターン
- SNI非対応クライアントに対応する
- 古いブラウザ、Java1.6以前はSNIに対応していない
- 対応策
- API Gatewayではなく、直接Lambdaを呼び出す
- API Gatewayの前に、ELB/EC2を置く
- Nginxのプロキシとか
- そこまでやるならEC2 で全部やったほうがいい
- 似たような問題に、httpでAPI Gatewayにアクセスしたいとか
- クライアント側の更新が望ましい
- VPC内で利用したい
- 18年1月現在、API Gatewayは非対応
- Lambdaは、VPC内でも起動は可能
- 18年1月現在、API Gatewayは非対応
- API Gateway経由でバッチ的処理をキックしたい
- 統合のタイムアウトは29秒
- バッチ処理などは向かない
- 解決策
- バックエンドとの統合を非同期にする
- そもそもAPIからキックする必要があるのかを再考する
re:Cap
- ブログ紹介@「プログラマでありたい)
AWS AppSync
- GraphQLが使える
GuardDuty
- トレンドマイクロを殺しに来るService
Amazon MQ
- IBMを殺しに来ているのでは
S3 Select
- SQL的に取得できるっぽい
【LT2】2018年からコンテナ始めませんか?
発表者
- 古渡晋也さん(@f_prg)
- フリーランス(12/1から)
- JAWS-UGさいたま支部コアメンバー
- AWS資格
- 年3回から24回くらい受験できるようになった!
- SAA、DEVA、SYSOPA(★★★)
- PSA(★)
- PDEO(再認定受験中)
対象
- コンテナ、始めたいと思っている方。
- コンテナ、始めたよという方。
半年くらいのあるあるを話します。
半年何をしていたの?
- モバイルアプリで処理するサーバサイドAPIの開発
- AWSインフラ構築
Docker fo Mac
- 起動早い
- 開発サーバのユーザー作成&管理がない
苦労話
- Dockerfileの学習
- Nginx、各種conf、aws cliなど入れる
- Docker-composeの学習
- 1回で同じ開発環境ができるようにする
- 開発者用イメージの作成
- イメージ作成がすごく遅い
- 変更の少ない部分を分ける
- AWS CodeBuild + AWS CodePipeline
- AWSでビルド用マシンが立ち上がる
- MACでECRにプッシュ
- こっちのほうが早い
- イメージ作成がすごく遅い
- DBデータの永続化
- dockerが吹っ飛ぶとデータが消える
- アプリログでエラーが発生
- コンテナイメージとAWSインフラへのデプロイ
- Blue-Green Deployment
- 自分のプロダクトもこうするべき!!!
- この前どっちのデプロイだたか忘れる!
- 色じゃなくて、時系列でやるべき
- 戻せることが目的
- Blue-Green Deployment
- まとめ
- 開発環境はしっかり準備する(3か月くらいかかった)
- ECSはしっかりとデプロイまで設計を!!
【LT3 】RDS Auroraのデータをなるべく安全に分析とか検証に使えるようにしちまおう
発表者
- 沼沢一樹さん
- 株式会社mediba
安全に分析・検証とは?
- 本番環境のデータの活用
- 本番データを分析にかけたい!
- 本番データでソースコードを検証したい!
- 本番データで別サイト作りたい
- などなど
どうやって?
- Aurora Multi-Master
- 新機能
- Master(Writer)インスタンスをスケールアウトするもの
- writerが1つ死んでもフェイルオーバーがない
- ゼロダウンタイムの実現
- writerが1つ死んでもフェイルオーバーがない
- 今回の方法はこれではない
ボツ案と採用案
- Auroraのスナップショットから復元する
- 最も安全だが、データが最新ではない
- 本番用AuroranoReaderインスタンスの1つをエンドポイント直接指定
- 最も最新だが、1台だけ高負荷になるリスクがある
- 【採用案】本番とは別にAurora用意
- Masterをreplication
- 書き込み量の増加に伴い、本番用のAuroraクラスタのWriter負荷が上がる懸念はある
- 公式ドキュメントで実現できる
- Masterをreplication
やってみた
- 本番用と分析用でVPCを分ける
- 分離することでアクセス制限をシンプルに
- VPC Peeringでクローズな通信にする
【余興?】Pollyに歌わせてみた
Pollyが某ロボットアニメの主題歌の曲を歌ってました。 凄いw
【懇親会】re:Inventについて、ワイワイ喋ろう
- 参考サイト
- www.awsgeek.com
- Lambda
- 同時実行制限を設定できるようになった
- .NET core
- GO
- PrivateLink
- CIDRがかぶってても行ける(らしい)
その他、各自が気になるサービスをワイワイ喋りました。 また、re:Invent 2017のノベルティや、Tシャツをたくさんいただきました。
おわりに
とても有意義な時間を過ごすことができました。
さいたま支部のみなさん、ありがとうございました。
次回もぜひ参加したいと思います!