AWS CDK のアルファモジュールで AWS IoT Device Defender のスケジュールによる監査が簡単に実装可能になりました
こんにちは、製造ビジネステクノロジー部の若槻です。
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 実装
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 デプロイします。
参考
デプロイ結果の確認
マネジメントコンソールからデプロイ結果を確認してみます。
デプロイしたスタックのリソース一覧です。監査スケジュールごとにルートの Construct が作成されています。
AWS IoT > Manage > Security > Audit > Schedules から、作成された監査スケジュールの一覧を確認できます。
それぞれの監査スケジュールです。指定したスケジュールとチェック項目が設定されていることが確認できます。タグに CloudFormation のスタック情報が設定されているのが地味に嬉しいですね。
トラブルシュート
監査の構成で無効化されているチェックを指定した場合
次のように、監査の構成で無効化されているチェックをスケジュール監査で指定した場合はどうなるでしょうか。
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 のセキュリティ周りのアップデートが続いているようです。
まだアルファモジュールである点には気を付けつつ活用していきたいですね。
以上