こんにちは。CI部の島村です。
現地でProtecting production with Amazon ECS security featuresを試聴してきました!
訳:Amazon ECS セキュリティ機能による本番環境の保護
英語力はないものの、ないなりに備忘のため記録に残したいと思います。
サマリー
内容をすべて記載すると長くなるので、簡単にサマリです。
Protecting production with Amazon ECS security featuresのタイトルからお察しできると思いますが、
ECSに関するセキュリティに関するセッションです。
セキュリティといえども、ECSの起動タイプ、コンポーネントごとにセキュリティ対策を実施する内容は変わってきます。
6つのケース紹介と、ケースごとにAWSのセキュリティサービスを組み合わせたセキュリティ対策の紹介がありました。
各ケースで紹介されたセキュリティ対策はざっくり以下の通りです。
OSやパッケージの脆弱性対応
各起動タイプにおけるパッチ適用の方法の紹介
2.権限設定
- サービスごとのタスク設定
- AWSタグ制御によるユーザーアクセスコントロール
- タスク定義オプションによるランタイム権限の制御
3.ネットワークセキュリティ
- セキュリティグループを利用してネットワークレベルのアクセスコントロール
- Elastic network interface trunkingを利用したタスクレベルのネットワーク分離
4.データベースアクセスセキュリティ
- Sercret Managerを利用したDBアクセス
当セッションを見れば、ECSのセキュリティで気をつけるべき点がクリアになります。
ECSのセキュリティに関して興味があるけど、どういった点に気をつければいいかわからない方などが試聴すると
よく理解できるかと思います。
以降に6つのケースをより詳細に記載していきます。興味があればご覧ください。
1.Security vulnerability found in an OS level package.How do I patch it?
ケース1はOS レベルのパッケージにセキュリティの脆弱性が見つかりました。パッチを適用するにはどうすればよいですか?
DevOpsエンジニアになった体で考えていきましょうという内容です。
起動タイプごとに見ていきます。
まず、Fargateの場合です。
パッチの適用はユーザーではなくAWSによって実施されます。
そのため、ユーザーでは実施することがありません。
パッチ適用はプラットフォームのバージョンアップという形で実施されます。
リタイア通知という内容で、AWS Pesonal Health Dashboardとメールで通知されます
バージョンアップされたプラットフォームの新しいタスクが起動されます。
複数のタスクが起動している場合は、必要な容量のタスクが起動されるのでダウンタイムは発生しないですが、
1つのタスクの場合は停止してしまうので注意が必要です。※参考①
次にEC2の場合です。
EC2の場合、コンテナ最適化AMIの更新もしくは、自身で脆弱性のあるコンポーネントのパッチを適用する必要があります。
なお、コンテナ最適化AMIは以下の理由がなければ、利用することが推奨されています。※参考②
- 特定のオペレーティング システム
- カスタム セキュリティ エージェントと監視エージェントがインストールされている
- ルート ボリュームの暗号化が有効
- Amazon ECS 最適化 AMI でまだ利用できない Docker バージョン
AMIの更新を行うことで、クラスターの脆弱性対応を行うことができます。
新しいAMIの更新は、Auto Scalingを使用してまとめて更新することが可能です。
キャパシティプロパイダーを使用することでより柔軟に更新されたタスクを展開することも可能です
オンプレミスやAWS外に存在するECSの場合、すべての脆弱性対応を自身で行う必要があります
2.I want to provide fine grained permissions to my different services such as Auth Service,OrderSerice etc, and have a way to audit their access.
様々なサービスにきめ細かいアクセス許可を提供し、アクセスを監査する方法が必要です。
この方法を実現するにはどうしたら良いのでしょうか。
図のように異なるサービスのタスクごとにアクセスするAWSサービスが異なっている場合で考えてみましょう。
サービス1はSystems Managerへ、サービス2はS3へアクセスが必要の場合、それぞれのタスクに付与する
IAM Roleへ適切な権限を適用することで解決できます。
また、アクセス監査に関してはCloudTrailを使用します。
3.Better networks security for services,sparate service traffic from one another and have traffic monitoring capability
サービスごとにインバウンドまたはアウトバウンドのトラフィックを制御し、
さまざまなネットワーキング、監視、およびデバッグ機能も必要としています。
課題を解決するためにはどのようにECSを構成すれば良いでしょうか。
まずはネットワークをサービスごとに分離するため、タスクレベルでENIを付与する必要があります。
ENIを分割すればタスクごとにセキュリティグループを付与できるため、それぞれ通信制御が可能になります。
FargateクラスターはENIがプライマリENIに加えて、追加で2つまでしかアタッチすることができないため、2つのコンテナのみ追加できます。EC2の起動タイプであればElastic network interface trunkingを利用することでENIのアタッチを増やすことが可能です。
c5.xlargeであれば12のENIが付与できます。1つはプライマリ、ENI trunking用のポートで2つ消費するので、10個のタスク用のENIをアタッチし、通信制御が可能になります。
4.How do Securely Provide access to sensitve data like database password to my container
データベースパスワードなどの機密データへのアクセスをコンテナに安全に提供する方法
コンテナで稼働しているアプリケーションにデータベース認証情報をセキュアに提供するにはどうしたら良いでしょうか。
Systems Manager Paramater StoreもしくはSercret Managerを利用します。
値の渡し方は2パターンあります。
- 1.タスク定義の環境変数としてSystems Manager Paramater StoreもしくはSercret Managerの値を取得/登録する
- 2.ログ設定のsecretOptionsにてSystems Manager Paramater StoreもしくはSercret Managerの値を取得/登録する。
5.Without using previleged mode for containers,how do I provide them speciffc permissions to perform previleged kernel operations?
コンテナーの特権モードを使用せずに、特権カーネル操作を実行するためのアクセス許可をコンテナーに提供するにはどうすればよいですか?
コンテナは特権モードで起動しないことが推奨となっています。
そのためTask定義のコンテナprivilegedオプションを使用して機能の追加、削除を行う必要があります。※参考4
ECS on EC2の場合はprivilegedで機能の追加削除の内容を検討します。
ECS on Fargateの場合、SYS_PTRACEのみ機能追加が対応しています。
6.Provide access control to DevOps Application developers to access diffrent Amazon ECS resouces.
DevOps アプリケーション開発者にアクセス制御を提供して、さまざまな Amazon ECS リソースにアクセスします。
開発を進める上で、すべての環境を開発者に渡すと起こり得るのが、誤った環境の削除などの問題です。
そこで、環境ごとにアクションを制御できるようにタグ制御を行うことで防ぎます。
最後に
いかがでしたでしょうか。
ECSではEC2,Fargateの起動タイプがありますが、それぞれセキュリティ面で注意が必要なスコープが変わってきます。
起動タイプごとに説明があったため非常にわかりやすいセッションだったと思いました。
▼ 11月28日〜12月2日 AWS re:Invent 2022開催中!▼
米・ラスベガスで開催されるAWS最大のカンファレンスイベント!
ご登録はこちらから:
参考
① docs.aws.amazon.com ② aws.amazon.com ③ docs.aws.amazon.com ④ aws.amazon.com ⑤ docs.aws.amazon.com
島村 輝 (Shimamura Hikaru) 記事一覧はコチラ
最近ECS周りをキャッチアップ中。趣味は車・バイク全般。
一応、AWS12冠です。