Slide 1

Slide 1 text

© 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. 前任者が残したコンテナサービスを突然任された! はじめてのコンテナ運用 ~Amazon ECS の運用ベストプラクティス~ 堀内 保大 アマゾン ウェブ サービス ジャパン 合同会社 Solutions Architect Digital Native Business

Slide 2

Slide 2 text

© 2022, Amazon Web Services, Inc. or its affiliates. 自己紹介 2 堀内 保大 (Yasuhiro Horiuchi) • AWS Japan G.K. ソリューションアーキテクト • 主に Digital 関連企業様を担当 バックグラウンド • 前職:SIerで多岐にわたるシステムへの性能関連の技術支援 (性能試験、監視、チューニング、非機能設計 etc) 好きなAWSサービス コンテナ関連、特に • Amazon Elastic Kubernetes Service (EKS) • AWS Fargate • Amazon Managed Service for Prometheus (AMP) 趣味 • スノーボード、旅行 @ka_shino_ki [email protected]

Slide 3

Slide 3 text

© 2022, Amazon Web Services, Inc. or its affiliates. 本日話すこと • 話すこと ▪ Amazon ECS の運用で対応すべき課題 ▪ ベストプラクティスによる ECS 運用改善 • 話さないこと ▪ AWS のコンテナサービスのそれぞれの説明 ▪ ECS の仕組みや細かいコンポーネントの説明 – こちらを見てください • AWS Black Belt コンテナシリーズのあるきかた 2021年まとめ | Amazon Web Services ブログ 3

Slide 4

Slide 4 text

© 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. 前任者が残したコンテナ サービスを突然任された! 4

Slide 5

Slide 5 text

© 2022, Amazon Web Services, Inc. or its affiliates. 想像してください、、 • Amazon ECS on Fargate を中心としたWebサービス • 前任の管理者が離職、あなたが引継ぎ先に • とにかく動けば良い、と作られたサービスで不安 ▪ セキュリティ上のリスクがどこにあるのか不明 ▪ 監視やログもどこをそもそも出ているのか不明 • 引き継いだからには上手く運用したい 5 ECS service ECS cluster

Slide 6

Slide 6 text

© 2022, Amazon Web Services, Inc. or its affiliates. 想像してください、、 • Amazon ECSを中心としたWebサービス • 前任の管理者が離職、あなたが引継ぎ先に • とにかく動けば良い、と作られたサービスで不安 ▪ セキュリティ上のリスクがどこにあるのか不明 ▪ 監視やログもどこをそもそも出ているのか不明 • 引き継いだからには上手く運用したい • 以下、観点で改善していきます ▪ セキュリティ強化 ▪ Observabilityの確保 6 ECS service ECS cluster

Slide 7

Slide 7 text

© 2022, Amazon Web Services, Inc. or its affiliates. Agenda • 前任者が残したコンテナサービスを突然任された! ▪ 何はともあれセキュリティ ▪ 観測せよ、Observability • まとめ 7

Slide 8

Slide 8 text

© 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. 何はともあれ、セキュリティ 8

Slide 9

Slide 9 text

© 2022, Amazon Web Services, Inc. or its affiliates. ここから確認していきます • 観点 ▪ ネットワーク → 外部公開する箇所を局所的にする ▪ 機密情報の管理 → ハードコードしない ▪ IAM → 最小権限を割り当てる ▪ コンテナイメージ → イメージ内の脆弱性検知 ▪ ログ・モニタリング → AWS APIのログ 9

Slide 10

Slide 10 text

© 2022, Amazon Web Services, Inc. or its affiliates. アーキテクチャ(再掲) ECS service ECS cluster 10

Slide 11

Slide 11 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 1: セキュリティグループ ECS service 11

Slide 12

Slide 12 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 1: セキュリティグループ ECS service sg-ALB sg-ECSTask sg-AuroraDB Allowed type and port HTTPS: 443 HTTP: 80 MySQL/Aurora: 3306 Allowed source 0.0.0.0/0 (Public access) 10.0.0.0/16 (From within the VPC) 10.0.0.0/16 (From within the VPC) 12

Slide 13

Slide 13 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 1: セキュリティグループ ECS service sg-ALB sg-ECSTask sg-AuroraDB Allowed type and port HTTPS: 443 HTTP: 80 MySQL/Aurora: 3306 Allowed source 0.0.0.0/0 (Public access) sg-ALB (Only from the ALB) sg-ECSTask (Only from the ECS tasks) 13

Slide 14

Slide 14 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 2: 機密情報の管理 ECS service { ... snip ... "containerDefinitions":[{ "name":"my-web-app", "image":"my-web-app:v1", ... snip ... "environment": [{ "name": "DB_USER", "value": "myappdbuser" },{ "name": "DB_PASSWD", "value": "mysupersecretpasswd" },{ "name": "DB_HOST", "value": "my-db...rds.amazonaws.com" },{ "name": "DB_PORT", "value": "3306" }], ... snip ... }], ... snip ... } ECS task definition 14

Slide 15

Slide 15 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 2: 機密情報の管理 ECS service { ... snip ... "containerDefinitions":[{ "name":"my-app", "image":"my-web-app:v1", ... snip ... "secrets": [{ "name": "DB_USER", "valueFrom": ”...secretsmanager:...:my-db-secret:username::" },{ "name": "DB_PASSWD", "valueFrom": ”...secretsmanager:...:my-db-secret:password::" }], "environment": [{ "name": "DB_HOST", "value": ”my-db...rds.amazonaws.com" },{ "name": "DB_PORT", "value": ”3306" }] ... snip ... } ECS task definition AWS Secrets Manager Secrets injected by ECS at task runtime 15

Slide 16

Slide 16 text

© 2022, Amazon Web Services, Inc. or its affiliates. アーキテクチャ(再掲) ECS service ECS cluster 16

Slide 17

Slide 17 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 3: IAM ロール ECS service 17

Slide 18

Slide 18 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 3: ECS タスクロール ECS service { ... snip ... "taskRoleArn": “AdministratorAccessRole", "executionRoleArn": "", "containerDefinitions":[{ ... snip ... }], ... snip ... } ECS task definition 18

Slide 19

Slide 19 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 3: ECS タスクロール ECS service { ... snip ... "taskRoleArn": “AdministratorAccessRole", "executionRoleArn": "", "containerDefinitions":[{ ... snip ... }], ... snip ... } ECS task definition 19 許可されてしまう (意図通り?)

Slide 20

Slide 20 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 3: ECS タスクロール • できるだけ最小権限にする ▪ サービスとアクションの限定 ▪ 対象リソースの限定 { ... snip ... "taskRoleArn": ”TaskRole-ARN-here", "executionRoleArn": "", "containerDefinitions":[{ ... snip ... }], ... snip ... } ECS task definition { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::your-bucket"] },{ "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::your-bucket/*"] }] } S3 write-only policy { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:...:your-queue-name" }] } SQS write-only policy { "AttachedPolicies": [{ "PolicyName": "S3WriteOnlyPolicy", "PolicyArn": "S3WriteOnlyPolicy-ARN-here" },{ "PolicyName": "SQSWriteOnlyPolicy", "PolicyArn": "SQSWriteOnlyPolicy-ARN-here" }] } ECS task role 20

Slide 21

Slide 21 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 3: ECS タスクロール 🚫 拒否 IAM role 21 ECS service

Slide 22

Slide 22 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 3: “タスク実行ロール”? タスク実行ロール EC2 instance Amazon ECS container agent Container runtime ECS task Amazon ECR registry Logs Amazon CloudWatch Logs AWS Secrets Manager EC2 instance Amazon ECS container agent Container runtime ECS task タスクロール 22

Slide 23

Slide 23 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 4: ECSクラスターへのアクセス制御 • Allow Access to specific Resources Amazon ECS ECS users API calls { "Version": "2012-10-17", "Statement": [{ "Sid": ”ReadOnlyAccess", "Effect": "Allow", "Action": [ "ecs:DescribeCluster” ], "Resource": "arn:aws:ecs:region:account-id:cluster/our-cluster" }] } IAM policy

Slide 24

Slide 24 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 4: ECSクラスターへのアクセス制御 • Using “Condition” Amazon ECS ECS users API calls { "Version": "2012-10-17", "Statement": [{ "Sid": ”ReadOnlyClusterResources", "Effect": "Allow", "Action": [ "ecs:Describe*", "ecs:List*" ], "Condition": { "ArnEquals": { "ecs:cluster": "arn:aws:ecs:region:account-id:cluster/our-cluster" } }, "Resource": "*" }] } IAM policy

Slide 25

Slide 25 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 5: ECR の機能活用 1.タグのイミュータビリティ • 通常イメージタグはプッシュで上書き可能 • タグのイミュータビリティを有効して、意図したコンテナイ メージを利用できるようにする 2. イメージスキャン • 基本スキャン: • プッシュする度にイメージスキャン(OS パッケージの脆弱性のみ) • 拡張スキャン: • OS とプログラミングライブラリ両方の脆弱性を検出 • push 時のスキャン / 継続的なスキャン 25

Slide 26

Slide 26 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 6: AWS API のログ • AWS CloudTrail は AWS API 呼び出しを記録 • レコード ▪ eventTime ▪ userIdentity ▪ eventSource (represents an AWS service) ▪ eventName (represents an API action name) ▪ and more! • AWS CloudTrail の活用 参照: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/ cloudtrail-event-reference-record-contents.html 26

Slide 27

Slide 27 text

© 2022, Amazon Web Services, Inc. or its affiliates. Step 6: AWS API のログ AWS CloudTrail S3 bucket Amazon Athena Ad hoc auditing Regular analysis and auditing 27

Slide 28

Slide 28 text

© 2022, Amazon Web Services, Inc. or its affiliates. 更なるセキュリティ強化のために • 観点 ▪ ネットワーク → 外部公開する箇所を局所的にする ▪ 機密情報の管理 → ハードコードしない ▪ IAM → 最小権限を割り当てる ▪ コンテナイメージ → イメージ内の脆弱性検知 ▪ ログ・モニタリング → AWS APIのログ 28

Slide 29

Slide 29 text

© 2022, Amazon Web Services, Inc. or its affiliates. 更なるセキュリティ強化のために • 観点 ▪ ネットワーク → 外部公開する箇所を局所的にする – Private Subnetの検討 ▪ 機密情報の管理 → ハードコードしない ▪ IAM → 最小権限を割り当てる – 継続的な棚卸と最小権限化 ▪ コンテナイメージ → イメージ内の脆弱性検知 – セキュアなコンテナイメージ開発、、Dockerfileの実装 ▪ ログ・モニタリング → AWS APIのログ – アプリケーションのログ(次のセクション)、設定のモニタリング(AWS Config) 29 参考: Best practices for writing Dockerfiles | Docker Documentation ベストプラクティス-セキュリティ - Amazon Elastic Container Service

Slide 30

Slide 30 text

© 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. 観測せよ、Observability 30

Slide 31

Slide 31 text

© 2022, Amazon Web Services, Inc. or its affiliates. 想像してください、、 ECS service ECS cluster Resp. 5.0 sec. Req. POST /something 31

Slide 32

Slide 32 text

© 2022, Amazon Web Services, Inc. or its affiliates. あのとき、どこで、何が起きていた? ECS service ECS cluster Resp. 5.0 sec. Req. POST /something ① ② ③ ④ 32

Slide 33

Slide 33 text

© 2022, Amazon Web Services, Inc. or its affiliates. システムを観測可能にする「3 つの柱」 • ある時点のなんらかのシステム状態を表現する 数値情報 • 一定間隔ごとの時系列データとして記録される • 1 つ以上のディメンション/ラベルをメタデータとして持つ • 例) CPU 使用率、リクエストレート、ストレージ残容量、など • システム内で発生した イベント情報 • 各イベントが独立したレコードとして記録される • メトリクスよりも多くの情報を含むケースが多い • 例) アクセスログ、 エラー情報、など • 1 つのトランザクションを複数システムで構成する フロー情報 • トランザクションごとにユニークな識別子をもって記録される • システム間のやりとりに関するメタ情報付与も • 例) とある HTTP リクエストの受け取りからレスポンスまで

Slide 34

Slide 34 text

© 2022, Amazon Web Services, Inc. or its affiliates. システムの内部を観測する - メトリクス ECS service ECS cluster Resp. 5.0 sec. Req. POST /something タスクA CPU Util. 25 % Mem Util. 40 % ... 34 TargetResponseTime 4.8秒 サービスでの平均 CPU Util. 50 % Mem Util. 40 % ... タスクB CPU Util. 99 % Mem Util. 40 % ... タスクC CPU Util. 25 % Mem Util. 40 % ...

Slide 35

Slide 35 text

© 2022, Amazon Web Services, Inc. or its affiliates. システムの内部を観測する - メトリクス ECS service ECS cluster Resp. 5.0 sec. Req. POST /something タスクA CPU Util. 25 % Mem Util. 40 % ... 35 TargetResponseTime 4.8秒 サービスでの平均 CPU Util. 50 % Mem Util. 40 % ... タスクB CPU Util. 99 % Mem Util. 40 % ... タスクC CPU Util. 25 % Mem Util. 40 % ...

Slide 36

Slide 36 text

© 2022, Amazon Web Services, Inc. or its affiliates. Amazon CloudWatch Container Insights • コンテナアプリケーションの メトリクス 収集、集計 • タスクレベル でのメトリクスの収集が可能 • CPU やメモリ、ディスク、ネットワークなど、多数のリソースのメトリクス • 自動的に作成されるダッシュボードにメトリクスは集約 36 ECS サービス タスク A タスク B タスク C CPU使用率: 25% CPU使用率: 99% CPU使用率: 25%

Slide 37

Slide 37 text

© 2022, Amazon Web Services, Inc. or its affiliates. システムの内部を観測する - ログ ECS service ECS cluster Resp. 5.0 sec. Req. POST /something . . [11/05:09:00:13] target: Aurora: xxx, Table name: yyy [11/05:09:00:14] ”POST /something" 200 4750ms . . . 37

Slide 38

Slide 38 text

© 2022, Amazon Web Services, Inc. or its affiliates. システムの内部を観測する - ログ ECS service ECS cluster Resp. 5.0 sec. Req. POST /something . . [11/05:09:00:13] target: Aurora: xxx, Table name: yyy [11/05:09:00:14] ”POST /something" 200 4750ms . . . 38

Slide 39

Slide 39 text

© 2022, Amazon Web Services, Inc. or its affiliates. awslogs ログドライバー • コンテナ化されたアプリケーションログを CloudWatch Logs に送信 ➢ STDOUT および STDERR をログイベントとして取得 • タスク定義に logConfiguration パラメータを追加するだけで有効化が可能 ➢ 追加のエージェントなどのインストールは不要 ➢ ECS on EC2, ECS on Fargate のいずれでも利用可能 コンテナ Amazon CloudWatch Logs Container Runtime STDOUT / STDERR ログイベント送信 39

Slide 40

Slide 40 text

© 2022, Amazon Web Services, Inc. or its affiliates. Amazon ECS 対応 FireLens Fluentd / Fluent Bit を利用した柔軟なログルーティング Fluentd/Fluent Bit コンテナ アプリケーション コンテナ コンテナランタイム etc. タスクロール ECS タスク AWS CloudWatch Logs S3 外部サービス データプレーン ENI etc. Datadog Splunk https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html 40

Slide 41

Slide 41 text

© 2022, Amazon Web Services, Inc. or its affiliates. システムの内部を観測する - トレース ECS service ECS cluster Resp. 5.0 sec. Req. POST /something ALB 4,800 ms アプリケーション on ECS 4,750 ms time SQL 100 ms 41

Slide 42

Slide 42 text

© 2022, Amazon Web Services, Inc. or its affiliates. AWS X-Ray 分散アプリケーションの分析と調査のための分散トレーシングサービス 総処理時間 最も時間を要した処理 呼び出し順 42

Slide 43

Slide 43 text

© 2022, Amazon Web Services, Inc. or its affiliates. AWS X-Ray の概要 トレースデータのサービスマップやセグメントの処理時間などを分析可能 43

Slide 44

Slide 44 text

© 2022, Amazon Web Services, Inc. or its affiliates. ECS での AWS X-Ray セットアップ 1. X-Ray SDK でアプリケーションをインストルメント (計装) する 2. X-Ray daemon をサイドカーコンテナとしてタスク定義に追加 3. タスク IAM ロールに必要な権限を追加 ECS タスク アプリケーション タスク IAM ロール X-Ray daemon X-Ray API X-Ray SDK 44

Slide 45

Slide 45 text

© 2022, Amazon Web Services, Inc. or its affiliates. ECS における Observability 3本柱 まとめ ECS cluster Resp. 5.0 sec. Req. POST /something End to end のHTTPレスポンス アプリケーション on ECS time SQL to Aurora ECS service . [11/05:09:00:13] target: Aurora: xxx, Table name: yyy [11/05:09:00:14] ”POST /something" 200 2950ms . . CPU Util. 30 % Mem Util. 40 % ... CloudWatch Logs 45

Slide 46

Slide 46 text

© 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. まとめ 46

Slide 47

Slide 47 text

© 2022, Amazon Web Services, Inc. or its affiliates. まとめ • コンテナサービスを任されたら、まずは! ▪ 何はともあれセキュリティ – コンテナのライフサイクル各ポイントで強化 • ネットワーク、機密情報の管理、コンテナイメージ、ログ・モニタリング ▪ 把握せよ、Observability – 3本柱 • メトリクス(CloudWatch Container Insights)、ログ(awslogs, Firelens)、トレース(AWS X-Ray) 47

Slide 48

Slide 48 text

© 2022, Amazon Web Services, Inc. or its affiliates. ECS service ECS cluster 48 #これがこう

Slide 49

Slide 49 text

© 2022, Amazon Web Services, Inc. or its affiliates. #これがこう ECS service ECS cluster CloudWatch Logs タスク ロール セキュリティグループ AWS Secrets Manager ECR セキュリティグループ イメージスキャン イミュータブルタグ AWS CloudTrail 49

Slide 50

Slide 50 text

© 2022, Amazon Web Services, Inc. or its affiliates. 継続的改善 ぜひ、ご自身のECSを振り返ってみましょう! Amazon ECS のご利用で、 発生したお悩みや課題や要望はぜひお近くの Solutions Architect まで!! 50