Upgrade to Pro — share decks privately, control downloads, hide ads and more …

6gram to MIXI M / 6gram から MIXI M へ 〜2年間の軌跡〜

6gram to MIXI M / 6gram から MIXI M へ 〜2年間の軌跡〜

ミクシィ x ビットバンク合同LT会 〜2社におけるクラウド活用最前線〜
https://mixi.connpass.com/event/251707/
にて登壇した内容のスライドです。

ryosan470

July 01, 2022
Tweet

More Decks by ryosan470

Other Decks in Technology

Transcript

  1. 開発本部 / MIXI M事業部
    6gram から MIXI M へ
    ~2年間の軌跡~
    ミクシィ x ビットバンク合同LT会
    〜2社におけるクラウド活用最前線〜
    @ryosan-470 2022/07/01

    View Slide

  2. SRE NEXT 2020 でお話ししたことの続き
    2
    「グループウォレットアプリ6gramの運用をはじめてみた」で調べてみてね

    View Slide

  3. 今日お話しすること
    ● 構成について
    ● 前提条件と運用目標
    ● PCI DSS とは何?
    ● 2年経って最初の運用ポリシーやモットーは守れた?
    ● まとめ
    3

    View Slide

  4. 構成について
    ● AWS 環境に構築
    ○ 東京リージョンのみ
    ○ Direct Connect を使っている
    ■ データセンター3ヶ所にルーターを設置
    ● バックエンド: Elixir
    4

    View Slide

  5. 前提条件
    ● カード情報を取り扱うために PCI DSS に準拠
    ● 無停止
    ○ 弊社都合のメンテナンスは基本的には行わない
    ● 専属の運用チームや運用者は用意しない
    ○ インフラ専任者はいない
    ○ みんなでワイワイやっていこうというチームの雰囲気
    5

    View Slide

  6. 「できる限り運用負荷を減らしたい」
    6

    View Slide

  7. 運用負荷とは?
    7
    ● 例えばインスタンスが存在すると:
    ○ ホスト OS の管理やカーネルパッチアップデート
    ● セキュリティ対策
    ○ ウイルス、脆弱性、侵入検知、ファイル改ざん...

    View Slide

  8. 運用負荷とは?
    8
    ● 例えばデータベースサーバー (RDBMS) が存在すると:
    ○ スケーラビリティ
    ■ 水平方向に増やすのは厄介
    ■ 自由に伸縮すること
    ● 無停止オペレーションの実現の困難さ
    ○ マイグレーション
    ■ 大きいテーブルになると無停止では難しい
    ○ RDBMS 自体のメンテナンス

    View Slide

  9. 行き着いた構成
    9

    View Slide

  10. 完全フルマネージド、サーバーレスな構成
    10
    AWS Fargate
    AWS CodeBuild
    AWS Lambda
    コンピュート
    Amazon DynamoDB
    データベース
    Amazon CloudWatch
    Rollbar
    ロギング

    View Slide

  11. この構成は PCI DSS 準拠を行うのも楽
    ● 多くの要件を AWS に任せることができる
    ○ インスタンスが存在しないことで「アカウント」の要件がなくなる
    ● 例えば: ファイル改ざん
    ○ ホストマシンは AWS 管理下なので考慮不要
    ○ 動いているコンテナを読み取り専用に
    書き込めないんだから改ざんできるわけない
    11

    View Slide

  12. PCI DSS とは?
    ● クレジットカード情報を取り扱う事業者が遵守する規則
    ● 12要件約400項目ある
    ● 毎年 QSA と呼ばれる外部の監査人から監査を受ける
    ○ 規模によっては自己問診というのでも OK
    ○ 弊社は外部監査を受けています。
    ● 時代遅れみたいな要件もある
    ○ 例: パスワードは90日ごとに変更
    12

    View Slide

  13. ここまでが2020年当時の話
    13

    View Slide

  14. 気になるところ
    14
    ● セキュリティインシデントはなかったのか
    ● データベース、DynamoDB 全振りで OK だったのか
    ● 2年間で構成に変化はなかったのか
    ● 2年間インスタンスがなくても問題なかったのか

    View Slide

  15. 気になるところ
    15
    ● セキュリティインシデントはなかったのか
    ● データベース、DynamoDB 全振りで OK だったのか
    ● 2年間で構成に変化はなかったのか
    ● 2年間インスタンスがなくても問題なかったのか

    View Slide

  16. 「セキュリティインシデント」
    はありませんでした!!!
    16

    View Slide

  17. 気になるところ
    17
    ● セキュリティインシデントはなかったのか
    ● データベース、DynamoDB 全振りで OK だったのか
    ● 2年間で構成に変化はなかったのか
    ● 2年間インスタンスがなくても問題なかったのか

    View Slide

  18. 問題なし
    18
    時間の都合で詳細はカットします

    View Slide

  19. 気になるところ
    19
    ● セキュリティインシデントはなかったのか
    ● データベース、DynamoDB 全振りで OK だったのか
    ● 2年間で構成に変化はなかったのか
    ● 2年間インスタンスがなくても問題なかったのか

    View Slide

  20. 2020年初頭に監査人から一言
    20

    View Slide

  21. 監査人からのコメント
    21
    ● ルーターのログ、保存している?
    ○ ログサーバーまたは別媒体に即座にバックアップ
    ● ルーターの時刻同期してますか?
    ○ 信頼できる時刻ソースと同期
    ● ルーターのコンフィグ管理をしていますか?

    View Slide

  22. 来年 (2021年) の監査までには解決してね
    22

    View Slide

  23. どうにかせねば
    23

    View Slide

  24. データセンター (2020年当時) の状況
    24
    ● ログはルーターの中に保存しているだけ
    ○ 何か間違えたりバッファが溢れると消えてしまう可能性があった
    ● 時刻同期はしていない
    ○ 信頼できる時刻ソースとは同期しておらず
    ○ データセンター内にある弊社別チームの時刻サーバーと同期
    ● コンフィグ管理はできていない
    ○ GitHub で設定されているコンフィグを管理
    ○ 実際にそれ通り設定されているか作業者以外が確認できない

    View Slide

  25. なんとかせねば... いろいろと検討と調査をすすめる
    ● CloudWatch は直接ログを受けることができない
    ○ エージェントが必須
    ● AWS には NTP サーバーが存在するが Direct Connect
    経由からは直接接続できない
    ○ NTPサーバーを買うという手もある
    上2点は UDP プロトコルを受けられれば何かできる
    ● ルーターには「HTTPアップロード」という機能がある
    25

    View Slide

  26. どうしよう...
    ● Network Load Balancer は当時 UDP を受けられたが
    バックエンドにインスタンスが必要
    このために運用負荷が増えるインスタンスの導入はやり
    たくない
    ● NTP は TCP でも何とかなりそうだがあまり一般的では
    ない
    ● コンフィグに関しては「HTTPアップロード機能」で何と
    かできそう
    26

    View Slide

  27. 行き詰まった
    27

    View Slide

  28. そんなとき
    28

    View Slide

  29. Fargate が NLB + UDP のロードバランシングサポートを発表 (2020/07)
    29
    ● ログ
    ○ Syslog サーバーを Fargate で稼働
    ○ 受け取った値をそのまま標準出力 → CloudWatch
    ● 時刻同期
    ○ AWS の時刻ソース (Amazon Time Sync Service) にプロキシ
    ○ 時刻ソースは原子時計なので信頼できる
    ● コンフィグ
    ○ HTTP サーバーを構築 → CloudWatch

    View Slide

  30. 2021年の監査: 「問題なし」
    30

    View Slide

  31. 一件落着
    31

    View Slide

  32. 気になるところ
    32
    ● セキュリティインシデントはなかったのか
    ● データベース、DynamoDB 全振りで OK だったのか
    ● 2年間で構成に変化はなかったのか
    ● 2年間インスタンスがなくても問題なかったのか

    View Slide

  33. 結論
    必要になりました
    33

    View Slide

  34. JCB に続き
    Visa の導入が決まった
    34

    View Slide

  35. 仕様書などを眺めてみる
    35
    ● ほとんど今までの構成で動きそう
    ● ただ提供されるソフトウェアが以下でしか動かない
    ○ Windows Server
    ○ メインフレーム

    View Slide

  36. Windows !?
    36

    View Slide

  37. Windows の懸念
    37
    ● そもそもデスクトップ版しか触ったことがない
    ● どうやって運用するのかすら不明
    ● インスタンス必要では?

    View Slide

  38. インスタンスを利用しないで済む方法はないだろうか?
    38
    ● CodeBuild
    ○ Windows 対応
    ○ そもそも提供されるソフトウェアが GUI 必須
    ● Fargate
    ○ Windows 非対応
    ■ 今は利用できるが GUI はおそらく非対応 (未検証)

    View Slide

  39. 諦めて「インスタンス」を導入することに
    39

    View Slide

  40. インスタンスがあると何をしないといけないのか
    40
    ● Windows アップデート
    ● 脆弱性検知
    ● ファイル改ざん検知
    ● リアルタイムウイルススキャン
    ● 管理アカウントのパスワード

    View Slide

  41. さらにインスタンスの運用負荷をできる限り下げたい
    41
    ● 構成管理はコードで管理できないのか
    ● セキュリティパッチ適用の自動化
    ● インスタンスのログを CloudWatch に集約
    ● GUI アプリケーションを何とかできないか
    ○ バッチ実行

    View Slide

  42. いろいろがんばりました...
    42

    View Slide

  43. Windows アップデート、セキュリティパッチの自動適用
    43
    ● AWS Systems Manager - State Manager を利用
    ○ パッチが配信されたら自動適用
    ○ 毎日、Windows アップデートが配信されているかを確認

    View Slide

  44. 脆弱性検知
    ● Amazon Inspector を採用
    ○ 毎日定時に Inspector を起動して脆弱性確認
    ● 実行結果はすべて Slack に通知
    44

    View Slide

  45. ファイル改ざん検知
    ● osquery をデーモンとして動かす
    ○ 事前にファイルが書き込まれる場所を定義
    ○ 書き込みログをすべて CloudWatch に集約
    ○ メトリクスフィルターで許可していない挙動を監視
    ■ Slack に通知
    45

    View Slide

  46. その他
    ● ウイルススキャン
    ○ Windows Defender
    ● Windows Server のイベントログなど
    ○ CloudWatch のログエージェントにより記録
    46

    View Slide

  47. その他
    ● 管理アカウント
    ○ パスワードは固定
    ○ 閲覧には権限が必要
    ■ 閲覧者は操作記録が CloudTrail から確認可能
    ○ RDP は Session Manager の機能で利用
    ■ 誰が RDP をしたか特定可能
    47
    固定パスワードでも安全性を担保

    View Slide

  48. 構成管理について
    ● Ansible を採用
    ○ Chef も候補だったが Ruby の依存を嫌って不採用
    ● VPC 内に CodeBuild を用意しそこから Ansible を適用
    ○ 踏み台インスタンスを不要に
    ● インスタンスの構成自体は CloudFormation で定義
    ○ インスタンスタイプ
    ○ ネットワークインターフェース
    48

    View Slide

  49. GUI アプリケーションについて
    ● 設定に関しては GUI を利用する必要がある
    ● バッチ処理の実行は BAT ファイルからもできる
    ● 実行ログは特定のディレクトリの特定のファイルに書き
    込まれる仕組み
    49

    View Slide

  50. そこで、BAT ファイルを呼び出すエージェントを作成
    ● エージェントが HTTP で待ち受ける
    ○ リクエストを受けるとエージェントが BAT ファイルを実行
    ○ ログを CloudWatch に転送
    ○ VPC内でのみアクセスを受け付けるような設定
    ● 定時処理
    ○ CodeBuild からエージェントへ HTTP リクエストを行う
    50

    View Slide

  51.  何とかインスタンス動いた
    51

    View Slide

  52. 監査も問題なし
    52

    View Slide

  53. Windows インスタンス導入編のまとめ
    ● 意外と Linux インスタンスに近い構成で運用できる
    ○ だがそこまで Windows の機能を使っていないだけだからかも
    ○ 台数も1台しか管理していないし...
    ● AWS Systems Manager はいろんな機能がある
    ○ Fleet Manager で設定されているレジストリをみて編集できる
    ■ 特定のレジストリを設定する必要がある時にいちいち RDP しなくてよい
    ○ Session Manager の RDP はWebブラウザ経由でできるようになった
    ■ リモートデスクトップクライアントは不要
    ● 構成管理は重要です
    ○ 構築後に誤ってインスタンスを壊したこともあったが簡単に再構築
    53

    View Slide

  54. 全体のまとめ
    ● 構成は大きく変わらずにすみました
    ● 完全フルマネージド、サーバーレス構成オススメ
    ● クラウド環境外のリソースのことを忘れがちなので注意
    ○ しっかり構成図を書いておくことよいです
    ● 構成管理はしっかりやろう
    54

    View Slide