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

AWS Summit Tokyo 2023

Safie
April 21, 2023

AWS Summit Tokyo 2023

18 万台のカメラが接続する
Safie のモダナイゼーションへの取り組み

Safie

April 21, 2023
Tweet

More Decks by Safie

Other Decks in Technology

Transcript

  1. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 18 万台のカメラが接続する Safie のモダナイゼーションへの取り組み 佐伯 航 C U S - 5 1 セーフィー株式会社 開発本部 第1開発部 インフラグループ
  2. 自己紹介 ◼名前 • 佐伯 航(さいき こう) ◼所属 • セーフィー株式会社 開発本部

    第1開発部 インフラグループ テックリード ◼略歴 • 監視オペレーターからサポートエンジニア、ネットワークエンジニアを経て AWS エンジニアに。2021年7月にセーフィーに入社。 2 ©️ Safie Inc. |
  3. 会社概要 5 ©️ Safie Inc. | 企業情報 会社名 セーフィー株式会社 代表者名

    佐渡島 隆平 所在地 東京都品川区西五反田 設立年月 2014年10月 従業員数 353名(2023年1月現在) 上場概要 2021年9月29日 東京証券取引所グロース市場へ上場 製品・サービスの概要 事業内容 クラウド録画型映像プラットフォーム 「Safie(セーフィー)」開発・運営
  4. Safie の紹介 6 ©️ Safie Inc. | 6 ◼ クラウド経由で複数のカメラを管理/制御

    ◼ ライブ映像や録画映像をどこからでも視聴可 ◼ アカウントベースでカメラや映像へのアクセ ス権をコントロール クラウド
  5. チームで行った改善一覧(抜粋) ◼コンテナ移行(AWS Fargate への移行) ※現在も移行中 ◼IAM ユーザーの利用をクロスアカウントアクセスに移行 ◼Amazon EBSボリュームタイプ(gp2 ->

    gp3)の変更 ◼NAT Gateway 冗長化 ◼Amazon EC2 Auto Scaling Group, AWS CodeDeploy の導入 ◼AWS Systems Manager Session Manager 導入 ◼Amazon RDS のデータ共有に AWS Lake Formation を採用 ◼AWS WAF Classic から AWS WAF V2 へ移行 ◼AWS Cost Categories によるコスト可視化 ◼一部の SSL/TLS 証明書を ACM へ移行 ◼AWS Config の標準設定を定め Terraform モジュール化 14 ©️ Safie Inc. |
  6. ◼コンテナ移行(AWS Fargate への移行) ※現在も移行中 ◼IAM ユーザーの利用をクロスアカウントアクセス方式に移行 ◼Amazon EBSボリュームタイプ(gp2 -> gp3)の変更

    ◼NAT Gateway 冗長化 ◼Amazon EC2 Auto Scaling Group, AWS CodeDeploy の導入 ◼AWS Systems Manager Session Manager 導入 ◼Amazon RDS のデータ共有に AWS Lake Formation を採用 ◼AWS WAF Classic から AWS WAF V2 へ移行 ◼AWS Cost Categories によるコスト可視化 ◼一部の SSL/TLS 証明書を ACM へ移行 ◼AWS Config の標準設定を定め Terraform モジュール化 15 ©️ Safie Inc. | チームで行った改善一覧(抜粋)
  7. 背景と課題 ◼権限の分離や請求情報の明確化のため複数の AWS アカウントを利用 ◼IAM ユーザーが各 AWS アカウントに作成されていた • 複数の

    AWS アカウントにアクセスするユーザーは複数の IAM ユーザーを管理 ◼エンジニアは強い権限を持った IAM ユーザーでアクセスキーを発行し作 業しており、漏洩した場合のリスクが高い状態だった 17 ©️ Safie Inc. |
  8. 改善内容 ◼IAM 管理用の AWS アカウントを作成 • パスワード、アクセスキー、 MFA デバイスの自己管理権限および sts:AssumeRole

    のみ可能な権限を付与した IAM グループを作成 • すべての IAM ユーザーは上記 IAM グループに所属する ◼IAM 管理用 AWS アカウントから作業対象の AWS アカウントの IAM ロールに スイッチロール(AssumeRole)する • 役割ごとに IAM ロールを作成し、信頼関係ポリシーで各 IAM ユーザーを許可 - MFA は必須とするが、利便性を考慮し最大セッション期間は 12 時間に変更 ⁃ AWS CloudTrail イベントでユーザーを識別できるようロールセッション名に IAM ユー ザー名を使用するよう強制 18 ©️ Safie Inc. |
  9. 改善内容 ◼IAM ポリシーの例は AWS ドキュメントに記載あり 19 ©️ Safie Inc. |

    https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_iam_credentials_console.html より引用
  10. ポイント ◼AWS CLI などの CLI ツールを利用するユーザー向けに一時クレデンシャ ルの取得方法をドキュメントに書くことでスムーズに移行することができ た • direnv

    と AWS CLI や aws-vault を組み合わせて一時クレデンシャルを取得し環境 変数へセットするサンプルコードを記載 21 ©️ Safie Inc. |
  11. ◼AWS Fargate 移行も進めている中ではあるが Amazon EC2 で動作する アプリケーションが多く、Ansible でデプロイ作業を行っていた • Web

    API などのアプリケーションは頻繁に変更が入るためデプロイに時間を取ら れ、開発者体験も低下 ◼OS パッケージ更新に伴う Amazon EC2 インスタンスの入れ替えも手動 対応しており、運用コストが高かった 24 ©️ Safie Inc. | 背景と課題
  12. 改善内容 ◼Auto Scaling Group 管理へ移行と AWS CodeDeploy による CD を導入

    ◼GitHub Actions でワークフローを作成 • Amazon S3 に AppSpec ファイルを含んだアーティファクトをアップロードし、 create-deployment を実行 • デフォルトブランチへのマージでステージング環境へデプロイ実行 • リリース作成時にプロダクション環境へデプロイ実行 25 ©️ Safie Inc. |
  13. ◼デプロイが成功したリビジョンが存在しない場合 AWS CodeDeploy によ るデプロイは実行されない • Auto Scaling Group で

    Amazon EC2 インスタンス起動後、Elastic Load Balancing ヘルスチェック失敗によって Amazon EC2 インスタンスが Terminate されてしま う ◼サービスのリクエストがルーティングされないテスト用のターゲットグ ループなどを作成し、事前に AWS CodeDeploy でのデプロイを成功させ ておく • Amazon EC2 インスタンス起動後にタイミングを見計らって手動で AWS CodeDeploy でのデプロイを実行する 26 ©️ Safie Inc. | ポイント
  14. ◼開発効率の向上 ◼運用コストの低減 • Elastic Load Balancing ヘルスチェック失敗時における Amazon EC2 インスタンス

    再作成の自動化 • AMI 更新時におけるインスタンス入れ替えも Auto Scaling Group のインスタンスリ フレシュ機能で自動化できた 27 ©️ Safie Inc. | 効果
  15. ◼セキュリティの向上 • インバウンド SSH の許可が不要になる ◼Bastion サーバーの OS ユーザーと公開鍵の管理コスト低減 •

    シェルアクセスの可否は IAM の権限で制御 ◼監査目的のロギング向上 • オペレーションログを Amazon S3 に自動保存可能 • セッション履歴が AWS CloudTrail に記録される 29 ©️ Safie Inc. | モチベーション
  16. ◼オペレーションログ取得のため以下の AWS Systems Manager ドキュメ ントは利用を禁止 • AWS-StartSSHSession • AWS-StartPortForwardingSessionToSocket

    • AWS-StartPortForwardingSessionToRemoteHost • AWS-StartPortForwardingSession ⁃ (ただし、当社の監査要件によるものなので利用できたほうが便利です) ◼ファイル転送のために Amazon S3 を作成、AWS CLI を全ての Amazon EC2 インスタンスにインストール、インスタンスプロファイルで AWS Systems Manager, Amazon S3 の権限を付与 30 ©️ Safie Inc. | ポイント
  17. ◼サービスレベル向上を目的に分析のためにデータ分析基盤へ Amazon RDS(Amazon Aurora) のデータを共有 • サービスが稼働する AWS アカウントとデータ分析基盤の AWS

    アカウントは異なる ◼Jenkins(実体はシェルスクリプト)で以下の処理を行っていた • Amazon Aurora クラスターのクローンを作成 • センシティブな情報をマスキング、不要テーブルの削除 • クローンからスナップショットを作成 • データ分析基盤 AWS アカウントへスナップショットを共有 • スナップショットから Amazon S3 エクスポートを実行し、Amazon S3 にデータを 格納 32 ©️ Safie Inc. | 背景
  18. ◼Amazon Aurora クラスターごとにクローンを作成するため単純に時間が かかる • サービスで使用している Amazon Aurora クラスターは 19

    クラスター( 2023年3 月時点) ◼データ分析基盤で分析、可視化したい項目が増えるたびに共有するテーブ ルを追加(シェルスクリプトの変更)が必要であり、属人化していた 33 ©️ Safie Inc. | 課題
  19. 34 ©️ Safie Inc. | ◼AWS Step Functions と AWS

    Lake Formation を使った構成に変更 ◼自動スナップショット取得をトリガーに AWS Step Functions を実行 ◼AWS Step Functions の処理 • Amazon S3 エクスポートの実行 • Amazon S3 エクスポートで作成されたオブジェクトを AWS Glue クローラーがク ロールするパスへコピー • AWS Glue クローラーの実行 改善内容
  20. 35 ©️ Safie Inc. | ◼AWS Lake Formation は AWS

    Glue データカタログを他の AWS アカウ ントに共有することが可能 • AWS Glue 単体でもクロスアカウントアクセスは可能だが、AWS Lake Formation ではタグベースのアクセス制御(TBAC)が可能であり、データベース、テーブル、カ ラムなどの粒度でアクセス制御が可能 改善内容 AWS Step Functions workflow ① Amazon S3 エクスポート実行 ② Amazon S3 オブジェクトをコピー AWS Lake Formation AWS Lake Formation AWS Glue
  21. 36 ©️ Safie Inc. | ◼仕組み上ニアリアルタイムな分析が要件の場合はマッチしないが、 Amazon S3 エクスポート ->

    オブジェクトコピー -> AWS Glue クロー ラーの実行にかかる時間は1時間程度 • Amazon S3 エクスポートの同時実行数制限(デフォルト: 5)は上限緩和可能 ◼AWS Step Functions, AWS Lake Formation は Terraform で管理して おり、属人化もある程度解消できた 効果
  22. 今後の取り組み ◼トイルの撲滅活動を継続する • まだまだレガシーな部分や整理が必要な部分が多い • 今後も Amazon EC2 インスタンスは増える傾向にある ◼コンテナ移行も推進する

    • アプリケーションの特性によって Amazon EC2 インスタンスを選択する場合もあり ◼AWS Control Tower などを利用したマルチアカウント統制についても検 討したい 38 ©️ Safie Inc. |
  23. © 2023, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved.