AWS CDK のアルファモジュールで AWS IoT Device Defender のスケジュールによる監査が簡単に実装可能になりました

AWS CDK のアルファモジュールで AWS IoT Device Defender のスケジュールによる監査が簡単に実装可能になりました

Clock Icon2024.11.18

こんにちは、製造ビジネステクノロジー部の若槻です。

AWS CDK の最近のリリースである v2.164.0 で、下記の機能アップデートが追加されていました。

iot: scheduled audit (#31776) (366b492), closes #31779

AWS IoT では、AWS IoT Device Defender を利用することで、IoT デバイスのセキュリティを監視し、不正なアクティビティを検出することができます。

この Device Defender の主たる機能の 1 つであるアカウントの 監査 (audit) の構成を作成すると、監査チェック項目ごとに、IoT デバイスやアカウント設定のセキュリティ上のプラクティスに対する準拠状況を監視することができます。

そして監査はの実行方法には、必要に応じて実行する「オンデマンド監査」と、定期的に実行する「スケジュールによる監査」があります。今回のアップデートでは AWS CDK のアルファモジュール (aws-iot-alpha) で AWS IoT Device Defender のスケジュールによる監査が L2 Construct により簡単に実装可能になりました。

試してみた

CDK パッケージのアップデート

AWS CDK モジュールを v2.164.0 以上にアップデートします。

npm i aws-cdk-lib@latest aws-cdk@latest @aws-cdk/aws-iot-alpha@latest

CDK 実装

lib/main-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as iot from '@aws-cdk/aws-iot-alpha';

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // IoT アカウント監査設定
    const accountAuditConfig = new iot.AccountAuditConfiguration(
      this,
      'AuditConfiguration'
    );

    // Daily audit
    new iot.ScheduledAudit(this, 'DailyAudit', {
      accountAuditConfiguration: accountAuditConfig,
      frequency: iot.Frequency.DAILY,
      auditChecks: [
        iot.AuditCheck.AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK,
      ],
    });

    // Weekly audit
    new iot.ScheduledAudit(this, 'WeeklyAudit', {
      accountAuditConfiguration: accountAuditConfig,
      frequency: iot.Frequency.WEEKLY,
      dayOfWeek: iot.DayOfWeek.SUNDAY,
      auditChecks: [iot.AuditCheck.CA_CERTIFICATE_EXPIRING_CHECK],
    });

    // Monthly audit
    new iot.ScheduledAudit(this, 'MonthlyAudit', {
      accountAuditConfiguration: accountAuditConfig,
      frequency: iot.Frequency.MONTHLY,
      dayOfMonth: iot.DayOfMonth.of(1),
      auditChecks: [iot.AuditCheck.CA_CERTIFICATE_KEY_QUALITY_CHECK],
    });
  }
}

スケジュールは frequency で日次、週次、月次のいずれかを指定します。週次の場合は dayOfWeek、月次の場合は dayOfMonth で実行日を指定します。

チェック項目は auditChecks で指定します。以下のチェック項目が利用可能です。ただし、これらのチェック項目を利用するためには、AWS IoT Device Defender 側でそのチェック項目が有効になっている必要があります。

Audit Check Name 説明
AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK 認証されたCognitoロールが過剰な権限を持っているかどうか
CA_CERTIFICATE_EXPIRING_CHECK CA証明書の有効期限が切れそうかどうか
CA_CERTIFICATE_KEY_QUALITY_CHECK CA証明書のキーの品質
CONFLICTING_CLIENT_IDS_CHECK クライアントIDの競合
DEVICE_CERTIFICATE_EXPIRING_CHECK デバイス証明書の有効期限が切れそうかどうか
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK デバイス証明書のキーの品質
DEVICE_CERTIFICATE_SHARED_CHECK デバイス証明書が共有されているかどうか
IOT_POLICY_OVERLY_PERMISSIVE_CHECK IoTポリシーが過剰な権限を持っているかどうか
IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK IoTロールエイリアスが過剰な権限を持っているかどうか
LOGGING_DISABLED_CHECK ロギングが無効になっているかどうか
REVOKED_CA_CERTIFICATE_STILL_ACTIVE_CHECK 取り消されたCA証明書がまだアクティブかどうか
REVOKED_DEVICE_CERTIFICATE_STILL_ACTIVE_CHECK 取り消されたデバイス証明書がまだアクティブかどうか
UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK 未認証のCognitoロールが過剰な権限を持っているかどうか

上記実装を CDK デプロイします。

参考

https://docs.aws.amazon.com/iot-device-defender/latest/devguide/device-defender-audit-checks.html

デプロイ結果の確認

マネジメントコンソールからデプロイ結果を確認してみます。

デプロイしたスタックのリソース一覧です。監査スケジュールごとにルートの Construct が作成されています。

AWS IoT > Manage > Security > Audit > Schedules から、作成された監査スケジュールの一覧を確認できます。

それぞれの監査スケジュールです。指定したスケジュールとチェック項目が設定されていることが確認できます。タグに CloudFormation のスタック情報が設定されているのが地味に嬉しいですね。


トラブルシュート

監査の構成で無効化されているチェックを指定した場合

次のように、監査の構成で無効化されているチェックをスケジュール監査で指定した場合はどうなるでしょうか。

lib/main-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as iot from '@aws-cdk/aws-iot-alpha';

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // IoT アカウント監査設定
    const accountAuditConfig = new iot.AccountAuditConfiguration(
      this,
      'AuditConfiguration',
      {
        checkConfiguration: {
          authenticatedCognitoRoleOverlyPermissiveCheck: false,
        },
      }
    );

    // Daily audit
    new iot.ScheduledAudit(this, 'DailyAudit', {
      accountAuditConfiguration: accountAuditConfig,
      frequency: iot.Frequency.DAILY,
      auditChecks: [
        iot.AuditCheck.AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK,
      ],
    });
  }
}

デプロイを実施すると次のようにエラーが発生します。

11:37:11 PM | CREATE_FAILED        | AWS::IoT::ScheduledAudit            | DailyAudit1160906D
Resource handler returned message: "AuditCheckName=AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
should first be enabled in Account Audit Configuration for your account before it can be consumed by a
ny scheduled audit

スケジュールされた監査で使用したいチェックが有効化されていることを確認してください。

おわりに

AWS CDK のアルファモジュールで AWS IoT Device Defender のスケジュールによる監査が簡単に実装可能になっていたのでご紹介しました。

監査の構成自体の CDK 実装についても最近のアップデートで追加されており、AWS IoT のセキュリティ周りのアップデートが続いているようです。

https://dev.classmethod.jp/articles/aws-cdk-alpha-module-aws-iot-device-defender-audit-setup/

まだアルファモジュールである点には気を付けつつ活用していきたいですね。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.