AWS CDKでSecurity Hubつくってみた
こんにちは!製造ビジネステクノロジー部の小林です。
AWS Security Hubは、AWSリソースのセキュリティ状態を可視化し、セキュリティ標準への準拠を支援するサービスです。今回は、AWS CDKを使用してSecurity Hubの環境を構築し、セキュリティ基準を追加する方法を解説します。
前提条件
本記事の執筆時の環境です。
$ sw_vers
ProductName: macOS Sonoma 14.7.4
ProductVersion: 14.7.4
BuildVersion: 23H420
$ aws --version
aws-cli/2.24.18 Python/3.12.9 Darwin/23.6.0 source/arm64
$ node --version
v20.18.3
$ npm --version
10.8.2
$ cdk --version
2.1005.0 (build be378de)
構築前にコンソールを確認してみる
CDKでSecurity Hubを構築する前にコンソールを確認してみます。
AWS Security Hubが有効化されていないことを確認しました。
やってみる
Security Hub構築用のソースを作成します。
まずは、Security Hubを有効化してみましょう。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkSecurityHub extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Security Hubの有効化
const hub = new cdk.aws_securityhub.CfnHub(this, 'SecurityHub', {
enableDefaultStandards: false, // デフォルトのセキュリティ基準を無効化
autoEnableControls: false, // 自動的にコントロールを有効化しない
});
}
}
パラメーターの説明
今回は以下のパラメーターをfalseで設定しています。理由としては1つずつリソースを作成して確認したいためです。
- enableDefaultStandards: false,
- AWS Security Hub のデフォルトセキュリティ標準(CIS AWS Foundations Benchmark、AWS Foundational Security Best Practices、PCI DSS など)を自動的に有効にするかどうかを制御する。
- autoEnableControls: true,
- 新しいセキュリティコントロールがSecurity Hubに追加された際に、それらを自動的に有効にするかどうかを制御する。
デプロイします
cdk deploy
コンソールを確認してみます。概要の画面が見れるようになりました。
まだ有効化されているセキュリティ基準はありません。
セキュリティ基準を追加する
セキュリティ基準を2つ追加してみます。追加するセキュリティ基準は以下の2つです。(公式ドキュメントから引用)
- AWS Foundational Security Best Practices
AWS Foundational Security Best Practices 標準は、AWSアカウントおよびリソースがセキュリティのベストプラクティスから逸脱した場合を検出する一連のコントロールです。
この標準により、すべての AWS アカウント および ワークロードを継続的に評価し、ベストプラクティスから逸脱する領域をすばやく特定できます。組織のセキュリティ体制を改善および維持する方法について、実践的かつ規範的なガイダンスを提供します。
コントロールには、複数の AWS のサービスからの、リソースに対するセキュリティのベストプラクティスが含まれます。
- CIS AWS Foundations Benchmark
一連のセキュリティ設定のベストプラクティスとして機能します。業界で認められているこれらのベストプラクティスは、明確かつステップバイステップの実装および評価手順を提供します。オペレーティングシステムからクラウドサービスやネットワークデバイスに至るまで、このベンチマークのコントロールは、組織が使用する特定のシステムの保護に役立ちます。
以下のソースで2つのセキュリティ基準の標準を有効化します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkSecurityHub extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Security Hubの有効化
const hub = new cdk.aws_securityhub.CfnHub(this, 'SecurityHub', {
enableDefaultStandards: false, // デフォルトのセキュリティ基準を無効化
autoEnableControls: false, // 自動的にコントロールを有効化しない
});
// AWS Foundational Security Best Practices標準の有効化
const awsFsbp = new cdk.aws_securityhub.CfnStandard(this, 'AWSFoundationalSecurityBestPractices', {
standardsArn: `arn:aws:securityhub:${this.region}::standards/aws-foundational-security-best-practices/v/1.0.0`,
});
awsFsbp.addDependsOn(hub);
// CIS AWS Foundations標準の有効化
const cisAws = new cdk.aws_securityhub.CfnStandard(this, 'CISAWSFoundations', {
standardsArn: `arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0`,
});
cisAws.addDependsOn(hub);
}
}
再度デプロイします
cdk deploy
コンソールを確認してみます。
セキュリティ基準が追加できたことが確認できました。
おわりに
今回は、AWS CDKを利用して、Security Hubを構築してみました。CDKを使うことで、Security Hubの有効化とセキュリティ標準の設定をコードとして管理できるようになります。次回は、検出された脆弱性のレベルに応じてメールに通知する仕組みを作ってみます。