Security Hub コントロール [SSM.6] Systems Manager Automation のログをCloudWatch Logsに出力する設定をAWS CDKカスタムリソースで実装してみた
こんにちは!製造ビジネステクノロジー部の小林です。
2025年7月中旬から、Security Hub コントロール [SSM.6] が検知されるようになりました。このコントロールは、Systems Manager Automation のログがCloudWatch Logsへ出力されていないことを検知するものです。
このコントロールに対応するため、今回は AWS CDKカスタムリソースを使ってこのログ設定を有効化する方法についてご紹介します。
現状のAutomationのログ設定を確認
現在のSystems Manager Automationのログ設定がどうなっているか、コンソールで確認してみます。今回はテスト用にRunbookを作成しています。
「Preferences」タブをクリックすると「CloudWatch log stream enabled」がfalseになっていることがわかります。この falseの状態は、現在AutomationのログがCloudWatch Logsに送信されていないことを意味します。
Security Hub コントロール [SSM.6] への対応
このSecurity Hubコントロールに対応するには、Systems Manager AutomationのログをCloudWatch Logsへ出力する設定を有効にする必要があります。手動でコンソールから設定することも可能ですが、今回は AWS CDKカスタムリソースを使ってこの設定を実装します。
AWS CDKカスタムリソースで実装
AWS CDKを使ってAutomationのCloudWatch Logsへのログ設定を有効にするには、'AwsCustomResource'を利用します。AwsCustomResource についての詳細はこちらの記事をご覧ください。
実際にデプロイしたソースは以下の通りです。
import * as cdk from 'aws-cdk-lib';
import * as custom_resources from 'aws-cdk-lib/custom-resources';
import { Construct } from 'constructs';
export class SsmAutomationLoggingCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
/**
* SSM Automation の CloudWatch Logs 出力を有効化するためのカスタムリソース
* この設定により、Automation の aws:executeScript アクションの出力が CloudWatch Logs に送信されます
* @see https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-action-logging.html
*/
new custom_resources.AwsCustomResource(this, 'SsmAutomationLoggingResource', {
/**
* SSM Automation の CloudWatch Logs 出力を有効化
*/
onCreate: {
service: 'SSM', // 呼び出すAWSサービスは Systems Manager
action: 'updateServiceSetting', // 実行するAPIアクションは updateServiceSetting
parameters: {
SettingId: `/ssm/automation/customer-script-log-destination`, // 設定IDは、CloudWatch Logs への出力先を制御するパス形式のID
SettingValue: 'CloudWatch', // 設定値は 'CloudWatch' を指定し、CloudWatch Logs への出力を有効化
},
physicalResourceId: custom_resources.PhysicalResourceId.of('SsmAutomationLogging'),
},
// このカスタムリソースがAPIコールを実行するためのIAMポリシー
policy: custom_resources.AwsCustomResourcePolicy.fromSdkCalls({
resources: custom_resources.AwsCustomResourcePolicy.ANY_RESOURCE,
}),
});
}
}
このカスタムリソースは、内部的に以下のAWS CLIコマンドに相当するAPIを呼び出しています。
aws ssm update-service-setting \
--setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/automation/customer-script-log-destination \
--setting-value CloudWatch
デプロイ後の確認
デプロイ後、再度 Systems Manager Automationのコンソールに戻り、「Preferences」タブを確認してみましょう。
「CloudWatch log stream enabled」がtrueになっていることが確認できました!これで、Security Hubコントロール [SSM.6] も解消されるはずです!
ログはどのCloudWatch Logs ロググループに送られるのだろう?
AutomationのログがCloudWatch Logsに送信される設定が有効になりました。しかし、この設定でログはどのCloudWatch Logs ロググループに送られるのでしょうか?
今回デプロイしたCDKソースでは、ロググループの具体的な指定は行っていません。updateServiceSetting API には、ロググループを指定するための別の SettingId (/ssm/automation/customer-script-log-group-name) が存在しますが、今回のソースではそれを設定していません。
この場合、SSM Automation は以下のデフォルトの動作に従います。
この画面で以下のような記載があります。
If the default log group doesn't exist yet (/aws/ssm/automation/executeScript), Systems Manager creates it for you.
これは、「デフォルトのロググループ(/aws/ssm/automation/executeScript)がまだ存在しない場合、Systems Manager が自動的に作成します。」という意味です。
カスタムリソースでは、ロググループを指定していないため、このデフォルトロググループが自動作成されます。
ロググループが作成されるタイミング
Automationが初めてaws:executeScriptアクションを含むRunbookを実行した際に、Systems Managerが自動的にこのロググループを作成してくれます。aws:executeScriptはこちらのアクションです。
また、aws:executeScriptアクション以外のアクションについてはログが作成されません。以下は公式ドキュメントからの引用です。
aws:executeScriptアクションを使用しないドキュメントに対してはロググループやログストリームを作成しません。ドキュメントが を使用する場合 aws:executeScript、CloudWatch Logs に送信される出力は、それらのアクションに関係するだけです。
IAM 権限について
Systems Manager AutomationがCloudWatch Logsにログを送信するためには、Runbookを実行するユーザーまたはIAM ロールに以下の権限が必要です。
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:DescribeLogGroups
- logs:DescribeLogStreams
- logs:PutLogEvents
しかし今回実装した以下のソースで実現しているのは、「Systems Manager AutomationがCloudWatch Logsにログを送ることを許可する」 部分の許可設定です。
policy: custom_resources.AwsCustomResourcePolicy.fromSdkCalls({
resources: custom_resources.AwsCustomResourcePolicy.ANY_RESOURCE,
}),
CDK コードをデプロイすることと、Runbookが実際にCloudWatch Logsにログを書き込むことは、別々の権限が必要になります。
今回は、Runbookをテスト用に作成し、実際の利用は想定していないため、ログ書き込み用の権限付与は行いませんでした。Runbookを実際に利用しており、ログ出力をしたい方は権限付与を別に行う必要があります。
Tips
Systems Manager Automationを使用していない場合でも、このコントロール [SSM.6]は検知されるのでしょうか?結論として、Automationを使用していなくてもこのコントロールは検知されます。しかし、この場合も今回利用したカスタムリソースで、CloudWatchへのログ設定を有効にできます。
Automationを利用していない場合のログ設定確認は、コンソールで以下のように確認できます。
まとめ
- Security Hub コントロール [SSM.6] は、Systems Manager AutomationのCloudWatch Logs出力設定をチェック
- AWS CDKカスタムリソースで
updateServiceSetting
API を呼び出して対応可能 - 実際のログ出力には、Runbook実行ユーザーへの追加IAM権限が必要
- デフォルトでは
/aws/ssm/automation/executeScript
ロググループが自動作成される
おわりに
今回は、AWS CDKカスタムリソースを使ってSystems Manager AutomationのCloudWatch Logs ログ設定を有効化する方法についてご紹介しました。この記事が、Security Hub運用のお役に立てれば幸いです!