myApplications でアプリケーションごとの Security Hub 検出結果を確認してみた

2024.01.05

いわさです。

先月の AWS re:Invent 2023 で myApplications という機能が発表されています。

今回こちらを使ってアプリケーションごとの Security Hub 検出結果を確認する機会がありました。
myApplications の情報がまだあまり無かったので紹介したいと思います。

はじめに

単一の AWS アカウントを同じ組織内の複数のプロダクトチームで利用している状況を整理する機会がありました。

是正する場合、本来であればプロダクトごとなどで AWS アカウントを分割するべきだと思います。
しかし、対象アカウントはミッションクリティカルなワークロードが複数稼働中で Amazon Cognito ユーザープールなどの移行を行う場合に何かしらの影響が発生し得る状態でした。

このように様々な背景からアカウント分離が難しいケースがあると思いますが、その中でもプロダクト同士の分離性を高めたり、管理性を高めたりしたいところです。

冒頭のブログに記載のとおり、myApplications はタグを使ってアプリケーションを識別し、アプリケーションごとのダッシュボードを提供してくれます。
これによってアプリケーションごとにコストやセキュリティチェックの結果を把握しやすくなります。

特にセキュリティイベントやオペレーションアイテムをアプリケーションごとに管理しやすくなる点が良いなと思いまして、今回は Security Hub の検出項目を myApplication を使ってどのように把握出来るのかを確認してみました。

myApplication の有効化

今回は CloudFormation でデプロイしたスタックと、マネジメントコンソールから作成した EC2 一台をそれぞれ別のアプリケーションと見立ててみます。
それぞれのアプリケーションはセキュリティグループに対するアクセス元などいくつかのセキュリティ上の懸念が残っている状態としています。

マネジメントコンソールから myApplication メニューを開き新しいアプリケーションを作成していきます。
作成の中でリソースを追加するのですが、CloudFormation の場合は次のように Resource types にcloudformation:stackを指定することで対象スタックを見つけることが出来ました。

こちら注意点になると思いますが、デプロイ済みのスタックの各リソースにアプリケーション紐づけ用のタグを設定するために、スタックの更新が発生します。
特に、ドリフトが発生してい場合に巻き戻ってしまうような記述がされているので注意しましょう。CloudFormation のスタック画面からタグの設定をして、プレビューやドリフト検出結果を見ながら操作したほうが安全かもしれません。

アプリケーションリソースとしてスタックを追加すると、awsApplicationというタグが割り当てされます。
これは、AWS Service Catalog の AppRegistry という機能でアプリケーションの関連付けに使用されているタグですね。

myApplications のドキュメントにも AppRegistry が使われていると記述されています。

myApplications makes use of the following services:

  • AppRegistry
  • AppManager
  • Amazon CloudWatch
  • Amazon EC2
  • AWS Lambda
  • AWS Resource Explorer
  • AWS Security Hub
  • Systems Manager
  • AWS Service Catalog
  • Tagging

引用元:What is myApplications on AWS - AWS Management Console

実際に myApplication から作成したアプリケーションは AppRegistry のアプリケーションとして管理されていました。また、myApplication で作成したアプリケーションの削除などはこちらから行う必要があります。

ちなみに今回はアプリケーションを2つ作成しまして、ひとつは先程の CloudFormation スタックを紐づけたもので、もうひとつは手動で EC2 インスタンスを関連付けしました。

ダッシュボードウィジェットを見てみる

マネジメントコンソールにアプリケーションウィジェットが存在しており、こちらからアプリケーションの一覧を確認することが出来ます。
ただし、ここから確認出来るとはアプリケーション名と説明、リージョンとアカウントくらいで、セキュリティやコストの情報は確認出来ません、残念!

コンソールホームの myApplications メニューからアプリケーション一覧が確認出来るのですが、ここからだとセキュリティ検出結果の件数とコストを確認することが出来ます。
このレベルで良いのでマネジメントコンソールウィジェットで見れるようにしたいですね。フィードバックしましょう。

Security Hub へ遷移したときの見え方

アプリケーション画面からだとより詳細な内容を確認することが出来るのですが、重要度は Critical と High の検出結果件数が表示され、リソースタイプも次のようにリストされているものだけ表示されるようです。

先程の myApplications 一覧画面あるいは上記の「Security Hub に移動」リンクから Security Hub に遷移することが出来ます。

この方法で Security Hub へ遷移すると、次のようにリソースタグで対象アプリケーションのみに絞り込まれた検出結果が表示されます。これはかなり良いですね。

どうやら以下の re:Invent 2023 のアップデートで、Security Hub 側でも実現出来るようになったようです。

リソース追加画面にはインデックス作成のタイムラグがあるようだ

単独で作成した EC2 をアプリケーションへ紐づけしたものを確認していたのですが、次のように SSH のポートをフルオープンにしている問題のある状態にしていたのですが、myApplication から遷移した Security Hub 画面では検出結果に表示されていませんでした。

ただし、アプリケーションによるフィルターを解除してみると対象セキュリティグループに関する検出結果としては存在していました。どうやらセキュリティグループをアプリケーションに関連付けすることが出来ていなかったです。

改めて確認してみると、アプリケーションのリソース追加画面でセキュリティグループが表示されていませんでした。むむ?

myApplications のリソース管理方法

myApplications では AWS Resource Explorer の仕組みを使ってリソースを取得しているようです。

AWS Resource Explorer はリソースをインデックスに取り込んでリソース検索機能を提供する機能です。
myApplications の利用開始時に有効化が必須でしたが、なるほどここで使ってるのか。

リソース情報がインデックスへ伝播されるまで時間がかかる場合があるそうで、私はどうやらそのケースを引いたようです。
少し待っていると先程までリソース検索結果が 88 個だったのですが、次のように先程まで存在していなかった色々なタイプが増えてきました。

最終的にはec2:security-groupも選択することが出来るようになりました。

AWS Resource Explorer の仕組みの関係でインデックスへの反映まで時間がかかる場合があることを覚えておきましょう。

無事、EC2 側のアプリケーションでもセキュリティグループの検出結果を確認することが出来ました。
EC2 インスタンスだけでなく関連インスタンスはすべてアプリケーションへ含める必要がありますね。

さいごに

本日は myApplications でアプリケーションごとの Security Hub 検出結果を確認してみました。

同一アカウント内でもアプリケーション単位で管理出来るのが良いですね。 複数サービスや環境が混在せざるを得ない AWS アカウントでは、かなり有効な気がします。

マネジメントコンソールにアプリケーションごとのウィジェット配置出来たらとても良いのではないですかね。これはフィードバックしておきたい。
実際に使ってみるとスタック更新が発生するとか、手動取り込み時に関連リソースを取り込まないといけないとか気づく点が多かったです。