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

ヘルスケアサービスにおけるEC2⇒ECSへの転換とDevOpsの推進【DeNA TechCon...

ヘルスケアサービスにおけるEC2⇒ECSへの転換とDevOpsの推進【DeNA TechCon 2022】

ヘルスケアで求められるセキュリティ要件をクリアしつつ、開発のスピードをあげるためクラウドのマネージドサービスへどのように転換し、活用していくか。

長らくオンプレで運用していたヘルスケアシステム kencom を昨年クラウドに移行しました。しかしオンプレと同構成のまま移行したため、依然としてオンプレベースの運用となっており、クラウドをうまく活用できている状態ではありませんでした。

このような状況の中で新たなバッチシステムを構築することになり、既存とは異なる ECS on Fargate を中心とした AWS マネージドサービスを活用した新しいアーキテクチャの上で構築していくことにしました。

本セッションではクラウドネイティブの第一歩として新たなアーキテクチャ上にバッチサービスを構築していくなかで、どのように既存の課題やヘルスケアならではのセキュリティ要件に対応していったのかを中心にお話しします。

◆ You Tube
https://youtu.be/Yzz0Pn40ZDY

◆ You Tube チャンネル登録はこちら↓
https://youtube.com/c/denatech?sub_confirmation=1

◆ Twitter
https://twitter.com/DeNAxTech

◆ DeNA Engineering
https://engineering.dena.com/

◆ DeNA Engineer Blog
https://engineering.dena.com/blog/

◆ DeNA TechCon 2022 公式サイト
https://techcon2022.dena.dev/spring/

DeNA_Tech

March 17, 2022
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. 自己紹介 • 木田 貴大 (Takahiro Kida) • DeNA ヘルスケア事業本部 •

    サーバーサイドエンジニア ◦ 主にヘルスケアサービス kencom の機能開発〜運用・保守
  2. • 2020年春にオンプレからクラウドに移行 • オンプレでの構成のまま AWS に移行した、所謂クラウドリフト kencom のクラウド移行 ⇨ 旧環境(オンプレミス)

    • 物理ネットワーク / ファイアウォール • 物理サーバー + 仮想マシン • 内製ツールによる構成管理 • DBやメールサーバー等も自前で構築・運用 新環境(AWS) • VPC / SG • EC2 • 内製ツールによる構成管理 • DBやメールサーバー等も自前で構築・運用
  3. 開発チームの方針を転換 • 開発チームもインフラの運用をする ◦ インフラチームに全てお任せにしない ◦ 開発で出来ることは開発でやることでスピード感を上げる • 一気にリプレイスせずに徐々に改善していく ◦

    スモールスタートしてチームにノウハウを蓄える ◦ 失敗しても元に戻せば良いという精神 • マネージドサービスを積極的に使う ◦ マネージドサービスファーストで考える。 ◦ 自分たちで頑張らない ◦ 運用負荷を減らして改善活動に当てる
  4. • アプリケーション実行基盤 ◦ ECS on Fargate • ジョブ管理 ◦ ECS

    Scheduled Task • CI/CD ◦ GitHub + CircleCI • ログ基盤 ◦ FireLens ◦ CloudWatch Logs ◦ S3 • 監視・通知 ◦ Subscription Filter ◦ EventBridge ◦ SNS / Lambda アーキテクチャ概要
  5. スケーラブルでアジリティの高いシステム EC2 ではなく ECS on Fargate を採用 • アプリケーションはコンテナ化 ◦

    開発でアプリケーション実行環境を管理 ◦ 環境構築が不要 • コンテナオーケストレーションの活用 ◦ スケーラビリティの確保 ◦ デプロイの容易性 • データプレーンに Fargate を採用 ◦ サーバーインスタンス管理から解放 ◦ 必要な時に必要なリソースを確保するのため、バッチ処理との相性も◎ • ECS Scheduled Task によるタスクの定期実行が可能
  6. スケーラブルでアジリティの高いシステム ECS Scheduled Task の活用 • cron ライクな記述で管理 ◦ 設定ファイルが

    json でやや扱いにくい • 管理ツール ecschedule ◦ ECS Scheduled Task を管理する OSS ツール ◦ yaml による記述で設定をコード化 ▪ 開発者でも分かりやすい記述が可能に ▪ cron ライクな実行時間 ▪ タスク定義でのコンテナ設定を上書き • 実行コマンド • 環境変数
  7. スケーラブルでアジリティの高いシステム アプリケーションリポジトリで インフラコードを管理・変更 • インフラコードの管理 ◦ Dockerfile ▪ OSミドルウェア管理 ◦

    ECS タスク定義 ▪ Secrets 管理 ▪ CPU/メモリのリソース管理 ◦ Scheduled Task 定義(ecschedule yaml) ▪ cron 設定 ▪ 環境変数 • 変更作業 ◦ CI/CD を通じて変更 ◦ コード修正 & PRレビュー ◦ 特定のブランチに Push でデプロイ
  8. 開発チームでも運用可能に 新しい仕組みを試しながら、いつでも戻れる状態に • FireLens ◦ ECS で利用可能なログルーター ◦ 柔軟なログ転送が可能 ◦

    複数の転送先を設定可能 • ログの転送先 ◦ CloudWatch Logs ▪ フルマネージドなログサービス ▪ ログの蓄積・検索・閲覧 • S3 ◦ ストレージサービス ◦ 暗号化 ◦ ログの長期保管 ◦ ライフサイクル管理
  9. 開発チームでも運用可能に マネージドサービスを活用して実装 開発だけで設定可能に • タスクの異常終了の検知 ◦ EventBridge ▪ ECS タスクの異常終了イベントを検知

    ◦ SNS ▪ イベント内容をメール送信 • ログ監視 ◦ CloudWatch Logs Subscription Filter ▪ 特定のパターンのログを検知 ▪ 検知したログを lambda に転送 ◦ lambda ▪ Slack 通知
  10. 高いセキュリティの担保 ヘルスケアで求められるセキュリティ要件はさまざま • アプリケーション実行環境 ◦ サーバーへのアクセス管理 ◦ OS / ミドルウェアバージョンの最新化

    ◦ ユーザーアカウントの管理 • ネットワーク ◦ 本番ネットワークへのアクセス制限 ◦ インターネットからのアクセス制限 • 権限管理 ◦ 最低限の権限のみを付与 ◦ アクセスキーの管理 • データ保護 ◦ 暗号化 ◦ 鍵管理 ◦ Secretsの管理 • 監査 ◦ 操作ログの取得 ◦ ネットワーク関連ログの取得
  11. Amazon ECS on Fargate 責任共有モデルを理解 守るべき場所を把握して、しっかりと守る • クラスタやサーバーインスタンスのセキュリティ ◦ AWS

    が担保 • コンテナ、IAM、ネットワーク、データ保護 ◦ 自身で管理 ▪ AWS サービスをフル活用して対応 引用元:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/bestpracticesguide/security-shared.html 高いセキュリティの担保
  12. 高いセキュリティの担保 うまく AWS サービスを活用して適切にセキュリティを担保 • アプリケーション実行環境 ◦ サーバーへのアクセス管理 ◦ OS

    / ミドルウェアバージョンの最新化 ◦ ユーザーアカウントの管理 • ネットワーク ◦ 本番ネットワークへのアクセス制限 ◦ インターネットからのアクセス制限 • 権限管理 ◦ 最低限の権限のみを付与 ◦ アクセスキーの管理 • データ保護 ◦ 暗号化 ◦ 鍵管理 ◦ Secretsの管理 • 監査 ◦ 操作ログの取得 ◦ ネットワーク関連ログの取得
  13. • データ保護 ◦ データの暗号化 ▪ S3 SSE-KMS ◦ 鍵管理 ▪

    KMS ◦ Secrets 管理 ▪ AWS Secrets Manager • 監査 ◦ 操作ログの取得 ▪ CloudTrail ◦ ネットワーク関連ログの取得 ▪ VPC flow logs うまく AWS サービスを活用して適切にセキュリティを担保 • アプリケーション実行環境 ◦ コンテナの保護 ▪ ECR イメージスキャン ▪ ライフサイクルポリシー(古いイメージの削除) • ネットワーク ◦ VPC ネットワークの制限 ▪ AWS Private Link ▪ Security Group • 権限管理 ◦ IAM ポリシー / ロールの適切な設定 ▪ ECS Task の権限 / 実行権限 ▪ 各 AWS リソースへのアクセス権限 ▪ ソース IP による制限 高いセキュリティの担保
  14. 開発チームの方針転換 (再掲) • 開発チームもインフラの運用をする ◦ インフラチームに全てお任せにしない ◦ 開発で出来ることは開発でやることでスピード感を上げる • 一気にリプレイスせずに徐々に改善していく

    ◦ スモールスタートしてチームにノウハウを蓄える ◦ 失敗しても元に戻せば良いという精神 • マネージドサービスを積極的に使う ◦ マネージドサービスファーストで考える。 ◦ 自分たちで頑張らない ◦ 運用負荷を減らして改善活動に当てる
  15. 目指すべき姿 (再掲) • スケーラブルでアジリティの高いシステム ◦ ECS on Fargate を活用してスケーラビリティを確保した ◦

    開発チームも運用することでアジリティを向上できた • 開発チームでも運用可能にする ◦ マネージドサービスを活用することで、運用コストを最小にする ◦ スモールスタートして徐々に開発チームでも運用可能にする • ヘルスケアならではの高いセキュリティの担保 ◦ AWS との責任共有モデルを理解して、出来るだけ AWS に任せる ◦ AWS サービスをうまく活用してセキュリティを担保する