s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

re:Invent 2014 参加レポート

ラスベガスで行われたre:invent 2014に参加してきました。

参加したSessionやイベントのまとめです。(Sessionはスライドと動画が順次公開されると思うので簡単に。)
KeyNoteについてはすでに日本語でも英語でも情報が多く出回っているので割愛。

GameDay (11/11)

GameDay(https://reinvent.awsevents.com/gameday.html)とは、
AWS上で以下の3つのフェーズに分かれた作業を行い、
その中で後述する観点で優れた対応(優れた攻撃, 一番早い復旧, おもしろいエピソード)
をとったチームが表彰される競技です。

  1. 指定された手順にある通りにシステムを構築

    • テーマは画像変換のQueueシステム。
    • EC2(VPC), S3, SQS, SNSあたりのコンポーネントを組み合わせ、オートスケールするQueueシステムを構築します。
  2. 他のチームが構築したシステムを攻撃

    • 会場内のどこかのチームが発行したIAMユーザー(PowerUserの権限)を渡されて、これを使って攻撃をします。
  3. 他のチームに攻撃された自分たちのシステムを修復

    • 最初に構築したシステムを復旧し、運営から発行されたリクエストを正しく処理できる状態にします。

去年のre:Inventや、日本でも実施されているので競技自体を知っている方は多いとおもいます。
参加前に色々と調べていた感じだと、テーマ(構築するシステム)は今まで開催されていたものと同じだったのかなと思います。

チーム分けは会場(300人弱くらいかな...?)で適当に周りの人と組んでくれと言われます。
日本人も数名いたようですが、せっかくなので日本人以外の人と組みました。
僕達のチームがやったのは以下のような対応でした。

  • Breaking
    • Disable CloudTrail.
    • Use remote code execution to...
      • Modify their processing script
      • Add more sleep statements
      • Make it pull nyancat every time
      • Overlay text saying “You got pwn3d”
    • Shuffle Instance name. (Switch Master and NAT Instance)
    • Change the instance startup script to pull our version in before starting
    • Screw with their security groups
    • Rotate their Master access & secret keys
    • Blow away their AMI image
    • Fiddle with the iAM policies
  • Hardening
    • Enable CloudTrail and keep enabling them.
    • Use CloudFormation & CloudFormer
    • Remove 2 sleep statements from processing script, and re-snapshot
    • Copy AMI to another region
    • Copy AMI to another account
    • Use AWS instance termination protection
    • Fixed security issues in the application

チームを組んだ @GeneticGenesis (zen)はできたできたとよろこんでました。
https://twitter.com/GeneticGenesis/status/532328652369698817

一番はやい復旧をしていたのはAnsibleとCloudFormationを使って復旧していたチーム,
おもしろいエピソードは(おそらく対戦相手の?)AWSのクレデンシャルをGitHubにアップロードしたチームでした。
(結果発表の頃には完全に集中力が切れていて最も優れた攻撃がなんだったのかは聞き逃しました...)

入賞はできなかったですが日本語の通じない環境でエンジニアリングをするというとてもいい経験になりました。
僕のような拙い英語力でも、出てくる単語がAWSやシステムに関するものなのでなんとかなったのかなという感想です。

SEC201 - AWS Security Keynote Address (11/12)

(Keynoteの後展示ブースを回っていたら開始時間過ぎてたので途中から参加)

  • keynoteで発表されたAWS Config, AWS Key Management Service(KMS)の話
    • 実際の設定の仕方をManagement Consoleの画面を含めての解説など。
    • 別にセッションがあるので、技術的に深い仕様の説明はなかった。
  • NASDAQがオンプレからAWSに移行した話。
    • オンプレミス環境のキャパシティの問題で、短期間で移行をしなければいけない状況。
    • AWSが鍵まわりの取り扱いの問題をうまく解決できたので成功したよという話。
  • Amazonのセキュリティ周りのカルチャーについて
    • 問題の本質を捉えましょうね。Howではなく、Whyを繰り返しましょう。
    • しっかりとテストしようね。
    • 権限移譲とスピード感のバランス。

SDD408 - Amazon Route 53 Deep Dive: Delivering Resiliency, Minimizing Latency

  • Route53によるサイトフェイルオーバや Geo Routing等の話を、実際のRoute53の設定を示しての説明
    • 平常時は2つのエンドポイントを用意し、片方が落ちている時はもう片方のレコードを返すパターン
    • Geo Routingを階層的にしたパターン
    • DNSのキャッシュ対策として、Wildcardを用いる方法
    • CloudWatchを用いた動的なWeightの変更の方法

SEC302 - Delegating Access to Your AWS Environment

  • DelegationとFederationの違い
    • Delegationは他のAWSアカウントのユーザ(もしくはリソース)に対して、あなたのリソースへの権限を与えるもの
    • Federationはその他の認証機構のユーザに対して、あなたのリソースへの権限を与えるもの
  • AWSアカウントに対する権限付与について、Delegationの方法をユースケース毎に説明
    • 同一アカウント内での権限付与
    • クロスアカウントでの権限付与
    • AWSリソースに対する権限付与
  • ドキュメントに書いてある内容の範囲内だったので、個人的には目新しい話はあまりなかった印象
  • とはいえ現状このあたりを適切に運用できていないのも確かなのでうまいやり方を見つけたい。
  • (SEC304) Bring Your Own Identities – Federating Access to Your AWS Environment のほうが聞きたかった内容を話してくれていた模様。

SDD403 - Amazon RDS for MySQL Deep Dive

APP309 - Running and Monitoring Docker Containers at Scale

  • Dockerのインスタンスユースケースについて
  • Dockerのモニタリング項目について
    • Memory: page fault, RSS, Swap
    • CPU: user, system
    • Block I/O: bikio.io_service_bytes, bikio.io_queued
    • Network: tx/rx_errors, tx/rx_dropped, tx/rx_bytes
  • メトリクスの集取はcAdvisor(https://github.com/google/cadvisor)を使います。
  • tag-baseの監視をしましょう。
  • Application, コンテナ, ホスト等、レイヤーを分けたメトリクスを取りましょう。

WEB401 - Optimizing Your Web Server on AWS

  • AWSでのHTTPサーバの最適化の話
  • よいパフォーマンスとはスループットが高い, レイテンシが少ない, 安価?であること。
  • 計測, ログングをしましょうという話。
  • ログのローテート. 圧縮, Ship(ログ転送のこと?初めて知った。)をしましょう。
  • net.* あたりの各種カーネルパラメータの説明
  • オフロードや、Route53 latency-basedルーティングも使いましょう。

ADV402 - Beating the Speed of Light with Your Infrastructure in AWS

  • 60 Billion requests/dayのリクエストをいかに捌くかという話。
  • 1%のdowntimeが$1Millionの損失に。
  • DynamoDB選択の理由を他のミドルウェアとの比較を出して説明
    • 候補はCassandra, Redis, memcache, Hbase
  • 各リージョンのDynamoのデータ同期の方法をどう実現しているかの話。

WEB306 - UI, Load, and Performance Testing Your Websites on AWS

  • UIテストの話
    • なぜテストをするのか? なぜ自動化するのか?
    • テストの範囲は?
      • Unitテスト, サービスレベル, UIテストの担当範囲
    • ImageMagickを使って、Beta環境とProduaction環境の比較をするUIテストの話
    • Seleniumを使ったログイン画面のUIテストの例
    • Selenium Gridを使ったクロスブラウザUIテストの話
  • LOAD
    • AWSのいいところは、本番環境のコピーが簡単に構築できる
    • それぞれのレイヤーがスケーラブルであるかを確認する
    • ELB, ClouFront, AutoScalingそれぞれに対するテスト
    • ELBに対してテストをする場合の注意点
      • ELBのIPではなくHostnameに対して行う
      • アプリケーションがIPのキャッシュを持たないことを確認する
      • Stickey Sessionが有効だとトラフィックが偏ることがある
    • 注意点
    • ツール: Apache Bench, curl-loader, Siege, Bees with Machene Guns
    • アプリケーションのモニタリング

DEV301-R - Advanced Usage of the AWS CLI (Repeat Session)

  • aws configureのsubcommandを使いましょう。
  • profileで設定を分けられるよ
  • 設定ファイルの説明
    • .aws/credentials
      • すべてのAWS SDKがサポート
      • クレデンシャル情報のみ
    • .aws/config
      • CLIのみサポート
      • クレデンシャル以外の情報(regionの設定とか)を含められる
  • --queryオプションを使いましょう
  • EC2のステート遷移について
    • 起動後, runningになるまでsleepをloopさせるようなプログラムは適切につくるのが大変。
    • aws ec2 waitなら簡単にできる。
  • --cli-input-json, --generate-cli-skeltonによるjsonでの設定
  • credentialの優先順位
    • 環境変数 -> credentials -> config -> AssumeRole -> IAM Role
  • S3 streaming

Pub Crawl, re:Play Party

カンファレンス開催中、毎晩のようにPartyが開催されていました。
どの会も大音量の音楽がかかった空間でご飯とお酒が振る舞われていました。

JAPAN Night

日本からツアーできている人たちにまじって(僕はツアー参加ではなかったので)
JAPAN Nightに参加しました。
日本でAWSのサポート部署にいる方とお話にいろいろな話を聞けたのがよかったです。
あと肉がおいしかった。

以上、簡単ですがre:Invent2014の参加レポートでした。