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カスタムリソースで
updateServiceSettingAPI を呼び出して対応可能 - 実際のログ出力には、Runbook実行ユーザーへの追加IAM権限が必要
 - デフォルトでは 
/aws/ssm/automation/executeScriptロググループが自動作成される 
おわりに
今回は、AWS CDKカスタムリソースを使ってSystems Manager AutomationのCloudWatch Logs ログ設定を有効化する方法についてご紹介しました。この記事が、Security Hub運用のお役に立てれば幸いです!






