Share
Embed
Transcript
42 slides
-
© 2023, Amazon Web Services, Inc. or its affiliates. All
rights reserved. -
© 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開発部 インフラグループ -
自己紹介 ◼名前 • 佐伯 航(さいき こう) ◼所属 • セーフィー株式会社 開発本部
第1開発部 インフラグループ テックリード ◼略歴 • 監視オペレーターからサポートエンジニア、ネットワークエンジニアを経て AWS エンジニアに。2021年7月にセーフィーに入社。 2 ©️ Safie Inc. | -
会社概要 5 ©️ Safie Inc. | 企業情報 会社名 セーフィー株式会社 代表者名
佐渡島 隆平 所在地 東京都品川区西五反田 設立年月 2014年10月 従業員数 353名(2023年1月現在) 上場概要 2021年9月29日 東京証券取引所グロース市場へ上場 製品・サービスの概要 事業内容 クラウド録画型映像プラットフォーム 「Safie(セーフィー)」開発・運営 -
Safie の紹介 6 ©️ Safie Inc. | 6 ◼ クラウド経由で複数のカメラを管理/制御
◼ ライブ映像や録画映像をどこからでも視聴可 ◼ アカウントベースでカメラや映像へのアクセ ス権をコントロール クラウド -
Safie のアーキテクチャ概要 10 ©️ Safie Inc. | ※他にもコンポーネントが存在しますが省略しています Virtual private
cloud (VPC) Amazon Aurora MySQL Amazon Aurora MySQL Amazon Aurora MySQL Amazon Aurora MySQL -
チームで行った改善一覧(抜粋) ◼コンテナ移行(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. | -
◼コンテナ移行(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. | チームで行った改善一覧(抜粋) -
背景と課題 ◼権限の分離や請求情報の明確化のため複数の AWS アカウントを利用 ◼IAM ユーザーが各 AWS アカウントに作成されていた • 複数の
AWS アカウントにアクセスするユーザーは複数の IAM ユーザーを管理 ◼エンジニアは強い権限を持った IAM ユーザーでアクセスキーを発行し作 業しており、漏洩した場合のリスクが高い状態だった 17 ©️ Safie Inc. | -
改善内容 ◼IAM 管理用の AWS アカウントを作成 • パスワード、アクセスキー、 MFA デバイスの自己管理権限および sts:AssumeRole
のみ可能な権限を付与した IAM グループを作成 • すべての IAM ユーザーは上記 IAM グループに所属する ◼IAM 管理用 AWS アカウントから作業対象の AWS アカウントの IAM ロールに スイッチロール(AssumeRole)する • 役割ごとに IAM ロールを作成し、信頼関係ポリシーで各 IAM ユーザーを許可 - MFA は必須とするが、利便性を考慮し最大セッション期間は 12 時間に変更 ⁃ AWS CloudTrail イベントでユーザーを識別できるようロールセッション名に IAM ユー ザー名を使用するよう強制 18 ©️ Safie Inc. | -
改善内容 ◼IAM ポリシーの例は AWS ドキュメントに記載あり 19 ©️ Safie Inc. |
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_iam_credentials_console.html より引用 -
ポイント ◼AWS CLI などの CLI ツールを利用するユーザー向けに一時クレデンシャ ルの取得方法をドキュメントに書くことでスムーズに移行することができ た • direnv
と AWS CLI や aws-vault を組み合わせて一時クレデンシャルを取得し環境 変数へセットするサンプルコードを記載 21 ©️ Safie Inc. | -
23 ©️ Safie Inc. | Amazon EC2 Auto Scaling Group,
AWS CodeDeploy の導入 -
◼AWS Fargate 移行も進めている中ではあるが Amazon EC2 で動作する アプリケーションが多く、Ansible でデプロイ作業を行っていた • Web
API などのアプリケーションは頻繁に変更が入るためデプロイに時間を取ら れ、開発者体験も低下 ◼OS パッケージ更新に伴う Amazon EC2 インスタンスの入れ替えも手動 対応しており、運用コストが高かった 24 ©️ Safie Inc. | 背景と課題 -
改善内容 ◼Auto Scaling Group 管理へ移行と AWS CodeDeploy による CD を導入
◼GitHub Actions でワークフローを作成 • Amazon S3 に AppSpec ファイルを含んだアーティファクトをアップロードし、 create-deployment を実行 • デフォルトブランチへのマージでステージング環境へデプロイ実行 • リリース作成時にプロダクション環境へデプロイ実行 25 ©️ Safie Inc. | -
◼デプロイが成功したリビジョンが存在しない場合 AWS CodeDeploy によ るデプロイは実行されない • Auto Scaling Group で
Amazon EC2 インスタンス起動後、Elastic Load Balancing ヘルスチェック失敗によって Amazon EC2 インスタンスが Terminate されてしま う ◼サービスのリクエストがルーティングされないテスト用のターゲットグ ループなどを作成し、事前に AWS CodeDeploy でのデプロイを成功させ ておく • Amazon EC2 インスタンス起動後にタイミングを見計らって手動で AWS CodeDeploy でのデプロイを実行する 26 ©️ Safie Inc. | ポイント -
◼開発効率の向上 ◼運用コストの低減 • Elastic Load Balancing ヘルスチェック失敗時における Amazon EC2 インスタンス
再作成の自動化 • AMI 更新時におけるインスタンス入れ替えも Auto Scaling Group のインスタンスリ フレシュ機能で自動化できた 27 ©️ Safie Inc. | 効果 -
◼セキュリティの向上 • インバウンド SSH の許可が不要になる ◼Bastion サーバーの OS ユーザーと公開鍵の管理コスト低減 •
シェルアクセスの可否は IAM の権限で制御 ◼監査目的のロギング向上 • オペレーションログを Amazon S3 に自動保存可能 • セッション履歴が AWS CloudTrail に記録される 29 ©️ Safie Inc. | モチベーション -
◼オペレーションログ取得のため以下の 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. | ポイント -
31 ©️ Safie Inc. | Amazon RDS のデータ共有に AWS Lake
Formation を採用 -
◼サービスレベル向上を目的に分析のためにデータ分析基盤へ Amazon RDS(Amazon Aurora) のデータを共有 • サービスが稼働する AWS アカウントとデータ分析基盤の AWS
アカウントは異なる ◼Jenkins(実体はシェルスクリプト)で以下の処理を行っていた • Amazon Aurora クラスターのクローンを作成 • センシティブな情報をマスキング、不要テーブルの削除 • クローンからスナップショットを作成 • データ分析基盤 AWS アカウントへスナップショットを共有 • スナップショットから Amazon S3 エクスポートを実行し、Amazon S3 にデータを 格納 32 ©️ Safie Inc. | 背景 -
◼Amazon Aurora クラスターごとにクローンを作成するため単純に時間が かかる • サービスで使用している Amazon Aurora クラスターは 19
クラスター( 2023年3 月時点) ◼データ分析基盤で分析、可視化したい項目が増えるたびに共有するテーブ ルを追加(シェルスクリプトの変更)が必要であり、属人化していた 33 ©️ Safie Inc. | 課題 -
34 ©️ Safie Inc. | ◼AWS Step Functions と AWS
Lake Formation を使った構成に変更 ◼自動スナップショット取得をトリガーに AWS Step Functions を実行 ◼AWS Step Functions の処理 • Amazon S3 エクスポートの実行 • Amazon S3 エクスポートで作成されたオブジェクトを AWS Glue クローラーがク ロールするパスへコピー • AWS Glue クローラーの実行 改善内容 -
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 -
36 ©️ Safie Inc. | ◼仕組み上ニアリアルタイムな分析が要件の場合はマッチしないが、 Amazon S3 エクスポート ->
オブジェクトコピー -> AWS Glue クロー ラーの実行にかかる時間は1時間程度 • Amazon S3 エクスポートの同時実行数制限(デフォルト: 5)は上限緩和可能 ◼AWS Step Functions, AWS Lake Formation は Terraform で管理して おり、属人化もある程度解消できた 効果 -
今後の取り組み ◼トイルの撲滅活動を継続する • まだまだレガシーな部分や整理が必要な部分が多い • 今後も Amazon EC2 インスタンスは増える傾向にある ◼コンテナ移行も推進する
• アプリケーションの特性によって Amazon EC2 インスタンスを選択する場合もあり ◼AWS Control Tower などを利用したマルチアカウント統制についても検 討したい 38 ©️ Safie Inc. | -
© 2023, Amazon Web Services, Inc. or its affiliates. All
rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved.