紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【JAWS-UG】さいたま支部 第9回勉強会 〜年初め日本で一番早いre:Cap & 新年会〜に参加してきました

f:id:yokoyantech:20180113212716p:plain

はじめに

1月13日に開催された、AWSのユーザーグループである、
JAWS-UG さいたま支部 第9回勉強会に参加してきました。

f:id:yokoyantech:20180113212504j:plain

開催情報

  • 開催日: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を簡単に使えるようにしたもの
  • API Gateway

    • WebAPIの作成・保護・運用と公開を管理するサービス
    • REST APIの作成サービス
      • Lambda
      • HTTP Proxy
      • AWS Proxy
    • 機能
      • 認証
        • IAMアクセス権限
          • デフォルトはだれでもAPI Gatewayを使える
        • カスタムオーサライザー
          • Lambda呼び出し
          • 一番多く使われる(と思う)
        • Cognitoユーザープール
      • アクセス制限
        • クライアント証明書
        • APIキー
          • 認証ではない
        • requestの検証
          • ヘッダー、本文内などに特定の文言を見てチェック
      • IPアドレスによる制限
        • WAF+CloudFront
          • WAFのIP Match Conditionを利用
          • WAFを利用するために、CloudFrontも利用
            • WAFのためにCloudFrontを使うので無駄な側面もある
        • IAMによる制限
          • API Gatewayの認証で、IAMを利用する
          • IAMのconditionでIP制限をかける
            • 特定の場所のみ有効な鍵
            • 利用者がAWSユーザのみであれば手段の1つ
            • Publicな不特定なユーザには向かない

ユースケースごとのアーキテクチャ(Cognito編)

  • 新規サービス立ち上げ
    • Cognito UserPoolがおすすめ
    • クライアント→API Gateway→【認証】Cognito User Pool
  • 既存のシステムにAPI追加
    • カスタムオーサライザーで既存DBを参照
      • Lambdaで自前で認証処理を実装
      • 既存システムにID/パスワード問合せ
  • 既存システムを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内でも起動は可能
  • 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
      • 自分のプロダクトもこうするべき!!!
    • この前どっちのデプロイだたか忘れる!
      • 色じゃなくて、時系列でやるべき
      • 戻せることが目的
  • まとめ
    • 開発環境はしっかり準備する(3か月くらいかかった)
    • ECSはしっかりとデプロイまで設計を!!

【LT3 】RDS Auroraのデータをなるべく安全に分析とか検証に使えるようにしちまおう

発表者

  • 沼沢一樹さん
    • 株式会社mediba

安全に分析・検証とは?

  • 本番環境のデータの活用
    • 本番データを分析にかけたい!
    • 本番データでソースコードを検証したい!
    • 本番データで別サイト作りたい
      • などなど

どうやって?

  • Aurora Multi-Master
    • 新機能
    • Master(Writer)インスタンスをスケールアウトするもの
      • writerが1つ死んでもフェイルオーバーがない
        • ゼロダウンタイムの実現
    • 今回の方法はこれではない

ボツ案と採用案

  • Auroraのスナップショットから復元する
    • 最も安全だが、データが最新ではない
  • 本番用AuroranoReaderインスタンスの1つをエンドポイント直接指定
    • 最も最新だが、1台だけ高負荷になるリスクがある
  • 【採用案】本番とは別にAurora用意
    • Masterをreplication
      • 書き込み量の増加に伴い、本番用のAuroraクラスタのWriter負荷が上がる懸念はある
      • 公式ドキュメントで実現できる

やってみた

  • 本番用と分析用でVPCを分ける
    • 分離することでアクセス制限をシンプルに
    • VPC Peeringでクローズな通信にする

【余興?】Pollyに歌わせてみた

Pollyが某ロボットアニメの主題歌の曲を歌ってました。 凄いw

【懇親会】re:Inventについて、ワイワイ喋ろう

  • 参考サイト
    • www.awsgeek.com
  • Lambda
    • 同時実行制限を設定できるようになった
    • .NET core
    • GO
  • PrivateLink
    • CIDRがかぶってても行ける(らしい)

その他、各自が気になるサービスをワイワイ喋りました。 また、re:Invent 2017のノベルティや、Tシャツをたくさんいただきました。

おわりに

とても有意義な時間を過ごすことができました。
さいたま支部のみなさん、ありがとうございました。
次回もぜひ参加したいと思います!