クラウドインテグレーション事業部 セキュリティセクションの日下です。
今回は、Amazon InspectorとEventBridgeを使って、SBOMを自動出力する方法を簡単ではありますが記載していきます。
はじめに
SBOMとは、アプリケーションやサービスに含まれるすべてのライブラリやコンポーネントの一覧を表すものであり、ソフトウェアの構成管理や脆弱性管理、コンプライアンス対応の基盤となる情報です。
特に、「どのソフトウェアがどんな部品で構成されているのか」を把握できることは、セキュリティ対策の一つともいえます。
本記事では、Amazon InspectorとEventBridgeを活用して、SBOMを自動的に出力・保存する仕組みを構築する方法をご紹介します。
構成に必要なAWSリソース
前提として、Amazon Inspector は SBOM(Software Bill of Materials)を出力機能はあります。
しかし今回は、定期的にSBOMの自動出力を実現するためには、複数のAWSサービスを組み合わせて構成を行う必要があります。
以下が必要となるリソースと、その役割です。
- Amazon Inspector
SBOMの生成を実際に行うサービスです。Amazon Inspector では、リソースのソフトウェア構成をスキャンし、SBOM形式でエクスポートする機能が提供されています。 - Amazon EventBridge
SBOM出力処理の自動化に利用します。Amazon Inspectorに対してSBOMの生成をリクエストするためのスケジュールトリガーを設定します。 - Amazon S3
SBOMファイルの保存先として使用します。 - AWS KMS(Key Management Service)
Amazon InspectorからSBOMファイルを出力するにあたって、KMSキーで暗号化し、安全性を確保します。 - IAM(Identity and Access Management)
Amazon InspectorやEventBridge SchedulerがS3やKMSへアクセスできるように、適切なIAMポリシーとロールを作成します。
各リソースの作成手順
必要なAWSリソースごとの作成手順とポイントについて記載していきます。
S3バケットの作成
まず、SBOMファイルの保存先となるS3バケットを作成します。
バケット名の命名以外、特別な設定を加えず、デフォルトの設定で作成します。
Inspectorがこのバケットへファイルをアップロードできるよう、以下のバケットポリシーを設定します。
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Service”: “inspector2.amazonaws.com”
},
“Action”: “s3:PutObject”,
“Resource”: “arn:aws:s3:::#出力先のバケット名/*”
}
]
}
このポリシーにより、Amazon Inspector が PutObject
アクションで対象バケット内にSBOMファイルを保存できるようになります。
KMSキーの作成
SBOMファイルの暗号化用に、KMSキーを作成します。
Inspectorがこのキーを利用できるように、以下のようなキーポリシーを設定します。
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “Enable IAM User Permissions”,
“Effect”: “Allow”,
“Principal”: {
“AWS”: “arn:aws:iam::アカウントID:root”
},
“Action”: “kms:*”,
“Resource”: “*”
},
{
“Sid”: “Allow Inspector to use this KMS key”,
“Effect”: “Allow”,
“Principal”: {
“Service”: “inspector2.amazonaws.com”
},
“Action”: [
“kms:Encrypt”,
“kms:GenerateDataKey”
],
“Resource”: “*”,
“Condition”: {
“StringEquals”: {
“aws:SourceAccount”: “アカウントID”
},
“ArnLike”: {
“aws:SourceArn”: “arn:aws:inspector2:*:アカウントID:*”
}
}
}
]
}
これにより、InspectorはKMSキーを利用してファイルの暗号化および鍵生成が可能になります。
IAMロールとポリシーの作成
InspectorのSBOM出力を自動化するEventBridgeスケジュールからの呼び出しを許可するIAMロールとポリシーを作成します。
- ポリシー設定
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“inspector2:CreateSbomExport”
],
“Resource”: “*”
},
{
“Effect”: “Allow”,
“Action”: [
“s3:PutObject”
],
“Resource”: “arn:aws:s3:::出力先のバケット名/*”
},
{
“Effect”: “Allow”,
“Action”: [
“kms:Encrypt”,
“kms:GenerateDataKey”
],
“Resource”: “arn:aws:kms:ap-northeast-1:アカウントID:key/作成したKMSキーID”
}
]
}
Amazon Inspector の SBOM 出力機能を EventBridge で自動実行するために必要な、Inspector・S3・KMSへのアクセス権限をこの1つのポリシーにまとめて付与しています。
- 信頼ポリシー(ロールに紐づけ)
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Service”: “scheduler.amazonaws.com”
},
“Action”: “sts:AssumeRole”
}
]
}
EventBridge Scheduler によって IAM ロールを引き受け(Assume)できるようにする設定です。
EventBridgeでのスケジュール設定
Amazon EventBridgeを用いて、定期的にInspectorへSBOM出力をリクエストするスケジュールを作成します。
設定例
- スケジュール名:Export_SBOM_Schedule
- 説明:InspectorによるSBOM自動エクスポート
- 頻度:定期的なスケジュール
- cron式:
0 12 21 4 ? *
(例:4月21日12:00 UTCに1回実行) - フレックスタイムウィンドウ:15分
- ターゲットの詳細:Amazon Inspector V2 CreateSbomExport
- Json
{
“ReportFormat”: “CYCLONEDX_1_4”,#出力する形式次第
“S3Destination”: {
“BucketName”: “アップ先のバケット名”,
“KmsKeyArn”: “arn:aws:kms:キーのリージョン:アカウントID:key/#作成したKMSキーID”
}
}
- 実行ロール:作成したIAMロール
実行結果の確認
無事S3にSBOMファイルが出力されました!
生成されたSBOMは、そのままだとAWSアカウントIDやインスタンスID、パス情報などが含まれていて、対外的に共有するにはちょっと気が引ける構成になっています。
そこで今回は、外部共有を前提に、ライブラリ名・バージョン・purlといった必要最低限の要素だけに整形してみました。
以下はその一部抜粋です
{
“components”: [
{
“type”: “application”,
“name”: “flashrom”,
“purl”: “pkg:rpm/flashrom@1.2-10.el9”,
“version”: “1.2”
},
{
“type”: “application”,
“name”: “dmidecode”,
“purl”: “pkg:rpm/dmidecode@3.6-1.el9”,
“version”: “3.6”
},
{
“type”: “library”,
“name”: “python-dateutil”,
“purl”: “pkg:pypi/python-dateutil@2.8.1”,
“version”: “2.8.1”
}
]
}
このように、各コンポーネントには以下のようなフィールドを保持しています。
- type: コンポーネントが「アプリケーション」なのか「ライブラリ」なのかを区別します。たとえば、OSに直接関わるバイナリとPythonなどのアプリケーションレベルの依存関係を分離して管理したい場合に有効です。
- name: パッケージやライブラリの名前です。脆弱性データベース(例:NVD)との照合や、SCAツールとの連携時に、正確な特定を可能にします。
- version: 利用しているコンポーネントのバージョン情報です。
- purl:CycloneDXなどで採用されている一意な識別子で、名前やバージョンだけでは特定できないコンポーネントを明確に識別できます。
これらの項目を含むSBOMを定期的に出力し、S3などに保存して管理することで、脆弱性対応の優先順位づけや影響範囲の特定がスムーズになり
将来的なソフトウェア更新の計画立案にも利用可能です。
またSBOMを「ただ出力する」だけで終わらせず、「整理・活用する」ことで、セキュリティ対応や品質管理の精度が格段に向上します。
まとめ
Amazon InspectorとEventBridgeを組み合わせることで、SBOMの自動出力を実現しました。
これにより、手動作業を排除しつつ、セキュリティ監査や脆弱性対応を効率化できます。
今後も運用の手間を減らしつつ、セキュリティ水準の維持・向上につながる仕組みづくりを進めていきたいと思います!