この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
AWS Security Hubとは
AWS Security Hub は、AWSのセキュリティ関連のサービスのアラートや検知した情報を集約、整理、優先順位付けて一元管理できるサービスになります。複数の AWS アカウントに対して管理アカウントで統合して管理することも可能です。
今回はSecurity Hubでセキュリティチェックを行い、SNS通知機能も実装してみると思います。
セキュリティチェック
AWS Security Hubでセキュリティチェックが可能です。セキュリティチェック時に利用できるルールセットがAWS Security Hubでは用意されています。具体的には、下記の基準に沿ってチェックが可能です。
-
CIS AWS Foundations Benchmark
米国の非営利団体である CIS (Center for Internet Security) が公開しているAWS アカウントの基本的なセキュリティを実装するための技術的なベストプラクティスです。 -
AWS 基礎セキュリティのベストプラクティス
AWSが用意しているセキュリティ基準です。クレジットカード情報を扱うなどの特別な要件がなければこちらの『AWS 基礎セキュリティのベストプラクティス』に沿ってチェックを行うことがおすすめです。 -
PCI DSS(Payment Card Industry Data Security Standard)
カード会員情報の保護を目的として、VISAなどのクレジットカードブランド5社が共同で策定したカード情報セキュリティの国際統一基準です。
構築
1.全体像
※SecurityHubがリージョンサービスのため、リージョン毎に有効化が必要
- SecurityHubでのCISベンチマーク、AWSベストプラクティス診断を有効化すると、Configルールが作成され自動診断処理が定期実行される。
- 各メンバーアカウントの検知結果をマスターアカウントに共有される。
- セキュリティ診断は日次で行い、検出結果を更新する。
- EventBridgeのルールにより、Security Hubの特定のイベントを検知して、SNSにパブリッシュしてE-Mailで通知する。
2.前提
セキュリティチェックを行う為には、AWS Configがの有効化が必要となります。
- AWS マネージメントコンソール上部の検索ボックスに Config と入力して、出現した Config を選択します。
- 今すぐ始める を選択します。
- グローバルリソース (AWS IAM リソースなど) を含める にチェックを入れた後に、次へ を押します。
- ルールは何も選択せず、そのまま 次へ を押します。必要に応じて有効化していただいて問題ありません。
- グローバルリソースを含む となっていることを確認して、確認 を押します。
- これで、AWS Config でリソースの記録が有効化できました。
3.マスターアカウント/メンバーアカウントの関係を作る
まずはマスターアカウント/メンバーアカウントSecurity Hubを有効化します。
- AWS マネージメントコンソール上部の検索ボックスに SecurityHub と入力して、出現した SecurityHub を選択します。
- SecurityHubの有効化画面が表示されていて、設定をデフォルトのままSecurityHubの有効化ボタンをクリックする。
- SecurityHubのコンソール画面が表示されました。
※Security Hub を有効にした後、新しく有効になった標準のセキュリティチェックの結果が表示されるまでに最長 2 時間かかることがある。それまでは、コントロールのステータスは「No data」になります。
- ※ 検出結果の例:
- 検出された結果が重要度と共に一覧化されています。タイトルをクリックすると、検出された詳細な情報と、検出対象の AWS リソースを確認できます。また、修復手順をクリックすることで、詳細な AWS Document を確認することもできます。
次はマスターアカウントがメンバーアカウントへ招待を送ります。
- [SecurityHubダッシュボード]→[設定]→[アカウント]→Add accountsをクリックする
- メンバーアカウントの情報を入力し、Addをクリックします。
- 入力したアカウントIDとメールアドレスが表示されていることを確認した上にNextをクリックします。
- 設定画面に戻り、メンバーアカウントへの招待が生成されていることを確認し、Inviteをクリックします。
- もう一度Inviteをクリックする。
招待の状態が「Email verification in progress」になっています。
これで「マスターアカウント側SecurityHubの有効化、メンバーアカウントへの招待」が完了です。
- ※ 検出結果の例:
さいごに、メンバーアカウントがその招待を受諾します。
メンバーアカウントSecurityHub有効化の手順を省略します。
- 招待承認:[SecurityHubダッシュボード]→[設定]→[アカウント]
マスターアカウントからの招待情報が表示されていることを確認して、Accept下にあるボタンをクリックする
- Acceptが"ON"になっていて、Accept invitationを押します。
- これで、メンバーアカウントがその招待を受諾しました。
- マスターアカウント側の招待ステータスも「Enabled」になっています。
- マスターアカウントからメンバーアカウントの検出結果もコンソール画面で確認できるようになりました。
4.EventBridgeルールを作る
検出結果通知機能は、SecurityHubからAmazon EventBridgeに発信される検出結果イベントをトリガーに、EventBridgeイベントルールを設定し、SNSと連携することで実現できます。
今回は例として、通知対象セキュリティチェック基準とコントロールIDが「AWS 基礎セキュリティのベストプラクティス」の["IAM.6","S3.2"]を選定し、EventBridgeルールを作りましょう。
※通知対象選定なしで下記設定を行うと大量のメールが送信される可能性がございます。ご注意ください。
- [Eventダッシュボード]→[ルール]→[ルールを作成]→Add accountsをクリックする
- 「名前」を付けて、「次へ」をクリックします。
–イベントソースとサンプルイベントの設定がデフォルトで、イベントパターンを下記の内容を入力して、次に行きます。
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"],
"detail": {
"findings": {
"Compliance": {
"Status": ["FAILED"]
},
"RecordState": ["ACTIVE"],
"ProductFields": {
"StandardsArn" : [ { "prefix": "arn:aws:securityhub:::standards/aws-foundational-security-best-practices" } ],
"ControlId": ["IAM.6","S3.2"]
},
"Severity": {
"Label": ["HIGH", "CRITICAL"]
},
"Workflow": {
"Status": ["NEW"]
}
}
}
}
- ターゲットをSNSトピック選択して、対象トピックを指定します。追加設定をクリックします。
- SNSと連携して送られてくるSecurityHub検出結果ログは、下図のように、余分なメッセージを含む改行なしのJSON形式で送られてくるため、可読性が低いです。
- EventBridgeイベントルールのSNS連携時に、インプットトランスフォーマー機能を用いてメッセージを読みやすくなるように整形してみましょう。
ターゲット入力を設定は入力トランスフォーマーを選択し、入力トランスフォーマーを設定を押します。 - 入力パスを入力します。
{"ComplianceStatus":"$.detail.findings[0].Compliance.Status", "ControlId":"$.detail.findings[0].ProductFields.ControlId", "Description":"$.detail.findings[0].Description", "Label":"$.detail.findings[0].Severity.Label", "ResourcesId":"$.detail.findings[0].Resources[0].Id", "ResourcesType":"$.detail.findings[0].Resources[0].Type", "StandardsArn":"$.detail.findings[0].ProductFields.StandardsArn", "Title":"$.detail.findings[0].Title", "WorkflowStatus":"$.detail.findings[0].Workflow.Status", "accountId":"$.detail.findings[0].AwsAccountId", "region":"$.region"}
- テンプレートを入力します。
"SecurityHub用イベントルールで次の非準拠(Failed)診断項目が発見されました。" "セキュリティ基準 :<StandardsArn>" "コントロールID:<ControlId>" "タイトル:<Title>" "リソースタイプ:<ResourcesType>" "リソースId:<ResourcesId>" "説明:<Description>" "リージョン:<region>" "AWSアカウントID:<accountId>" "コンプライアンスのステータス :<ComplianceStatus>" "重大度ラベル :<Label>" "ワークフローステータス:<WorkflowStatus>"
- 最後にルールの作成をクリックします。早速ですが、通知メールを確認しましょう。
ちょっと手を加えるだけで通知を見やすくできました!
まとめ
AWS Security Hub は、AWSアカウントのセキュリティ状態を包括的に把握し、ベストプラクティスに沿っているかのチェックに役立ちます。
Security Hub で検出したイベントを SNS (メール) で通知してみました。検出結果を通知手段としてEメールを使いたい場面では、手軽に整形できるので是非利用してみて下さい。