Security Hubで90日以上非アクティブなIAMユーザーを検出しEventbridgeとSNSを用いて通知してみた
はじめに
こんにちは。AWS事業本部コンサルティング部に所属している和田響です。
クレジットカード業界のセキュリティ基準であるPCI DSSでは、最後のアクティビティから90日以上たったアカウントは削除または無効化することを求めています。
定義されたアプローチの要件
8.2.6 非アクティブなユーザアカウントは、非アクティブ化された日から 90 日以内に削除または無効化される。
引用:https://listings.pcisecuritystandards.org/documents/PCI-DSS-v4_0-JA.pdf
この記事ではAWSにおけるIAMユーザの管理の一環として、非アクティブなIAMユーザーを特定し通知する仕組みの一例を紹介します。
非アクティブなユーザの検出
今回は非アクティブなユーザの検出の方法として、Security Hubを使用します。
Security Hubの検出できるコントロールのうち、[IAM.8]のコントロールを活用します。
[IAM.8] This control checks whether your IAM users have passwords or active access keys that were not used within the previous 90 days.
[IAM.8] 未使用のIAMユーザー認証情報は削除する必要がありますこのコントロールは、IAMユーザーに 90 日間使用されていないパスワードまたはアクティブなアクセスキーがあるかどうかをチェックします。
通知
Security Hubは非常に便利なサービスですが、24時間検出結果を目視し続けることは現実的ではありません。
今回はEventBridgeとSNSを使用して、[IAM.8]のコントロールが失敗になった場合に指定したEメールアドレスに送信します。
やってみる
前提
今回はSecurity Hubが有効になっていることが前提です。
有効化の手順は以下のリファレンスを参照ください。
また検証のために90日以上ログインしていないユーザー(wada-test-pcidss)を準備しました。
本記事ではこのユーザを検出させて通知させることがゴールです。
SNSトピックの作成
まずはSNSトピックを作成し、通知先のメールアドレスを設定します。
「Simple Notification Service」のコンソールを開き、「トピック」をクリックします。
「トピックの作成」をクリックします。
タイプは「スタンダード」を選択し、「名前」は任意の文字列を記入します。
「トピックの作成」をクリックします。
正常に作成できたことを確認し、「サブスクリプションの作成」をクリックします。
プロトコルは「E メール」を選択、エンドポイントは通知先のEメールアドレスを入力し、「サブスクリプションの作成」をクリックします。
正常に作成されたことを確認します。
ステータスが「保留中の確認」となっていますが、これは通知先のメールアドレスの検証が完了していないことを示しています。
設定したメールアドレスに「AWS Notification - Subscription Confirmation」の件名のメールがきていることを確認し、「Confirm subscription」をクリックします。
「Subscription confirmed!」と表示されることを確認します。
先ほどのSNSのサブスクリプションのコンソールを開き、ステータスが「確認済み」になっていることを確認します。
EventBridgeの設定
続いてEventBridgeの設定を行っていきます。
「EventBridge」のコンソールを開き、「ルールを作成」をクリックします。
(デフォルトでイベントブリッジルールが選択されているはずです)
名前は任意の文字列を記入し、次へをクリックします。
作成のメソッドは「カスタムパターン (JSON エディタ)」を選択し、イベントパターンに以下のJSONを記入し、「次へ」をクリックします。
ここでは「Security HubのIAM.8のコントロールのステータスがFAILEDだった場合」という条件と指定しています。
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"],
"detail": {
"findings": {
"GeneratorId": ["aws-foundational-security-best-practices/v/1.0.0/IAM.8"],
"Compliance": {
"Status": ["FAILED"]
}
}
}
}
ターゲットタイプは「AWS のサービス」、ターゲットを選択は「SNS トピック」、トピックは先ほど作成したSNSトピックを選択します。
「追加設定」タブを開き、ターゲット入力を設定から「入力トランスフォーマーを設定」を選択し、「入力トランスフォーマーを設定」をクリックします。
「入力パス」および「テンプレート」に以下のJSONを入力し、「確認」をクリックします。
ここではSNSへ送信するテキストをカスタマイズします。
入力パス
{
"Account_ID": "$.detail.findings[0].AwsAccountId",
"Finding_Type": "$.detail.findings[0].Types[0]",
"Finding_description": "$.detail.findings[0].Description",
"Resource_Id": "$.detail.findings[0].Resources[0].Id",
"region": "$.region",
"severity": "$.detail.findings[0].Severity.Label"
}
テンプレート
"AWS アカウント <Account_ID> に、<region>リージョンで深刻度<severity>の Security Hub 検出結果が見つかりました。"
"検出結果の説明:"
"<Finding_description>."
"影響を受けたリソース:"
"<Resource_Id>"
"詳細はSecurity Hubコンソール (https://<region>.console.aws.amazon.com/securityhub/home?region=<region>#/summary) をご確認ください。"
「次へ」をクリックします。
任意でタグを設定し「次へ」をクリックします。
作成内容を確認し「ルールの作成」をクリックします。
これで通知の設定は完了です。
メールの確認
EventBridge設定以降のセキュリティチェックでIAM.8の検出結果がFAILEDになった場合、
以下のようなメールがSNSに設定したメールアドレスに届きます。
※セキュリティチェックは12または24時間ごとに実施されます。
定期的なセキュリティチェック
定期的なセキュリティチェックは、最新の実行から 12 または 24 時間以内に自動的に実行されます。周期は Security Hub によって決定され、変更はできません。定期的なコントロールは、チェック実行時の評価を反映したものになります。
メール通知のテキストを変更したい場合は、EventBridgeの「入力トランスフォーマーを設定」を変更することで可能です。
最後に
今回は「Security Hub + EventBridge + SNS」の構成で、90日以上非アクティブなユーザーをメールアドレスに通知する仕組みを実装してみました。
本記事では通知までの説明でした。通知後の修正対応は以下の記事を参照ください。
セキュアなIAMユーザー運用の一助になれば幸いです。