🧪

cdk-nagの使い方やError・Warningの対処について勉強してみた

2024/05/26に公開

cdk-nag 概要

以下、cdk-nagに関するドキュメントやソースになります。
ページ後半にcdk-nagについて先人がわかりやすく纏められた記事リンクも置いています。
https://github.com/cdklabs/cdk-nag
https://constructs.dev/packages/cdk-nag/v/2.28.124?lang=typescript
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html
https://aws.amazon.com/jp/blogs/news/manage-application-security-and-compliance-with-the-aws-cloud-development-kit-and-cdk-nag/


Rules Packについて

https://aws.amazon.com/jp/solutions/
現在以下のようなRules Packが存在するようですが、今回はこの中でAwsSolutions Rules Packを主に見ています。


AwsSolutions Rules Pack

以下リポジトリに飛んでページ翻訳したものと変わりませんが、ページ内で眺めていただく用に転記しました。
※正しくは最新のものをご確認ください。

Warning(※2024/05/26時点)
ルールID 原因 説明
Awsc-APIG3 REST API ステージは AWS WAFv2 Web ACL に関連付けられていません。 AWS WAFv2 は、定義されたカスタマイズ可能なルールと条件に基づいて、設定されたルールで Web リクエストを許可、ブロック、または監視 (カウント) できるようにすることで、Web アプリケーションと API を攻撃から保護する Web アプリケーションファイアウォールです。
AwsSolutions-CB3 CodeBuild プロジェクトでは特権モードが有効になっています。 Privileged はシステムに昇格した権限を付与するため、追加のリスクが生じます。Privileged モードは、ビルド プロジェクトを使用して Docker イメージをビルドする場合にのみ true に設定する必要があります。それ以外の場合、Docker デーモンと対話しようとするビルドは失敗します。
AwsSolutions-CB5 Codebuild プロジェクトでは、CodeBuild サービスによって提供されるイメージは使用されず、カスタム イメージの必要性を説明する cdk-nag 抑制ルールもありません。 Docker イメージの相違点や編集内容を説明すると、オペレーターがシステムの依存関係をよりよく理解できるようになります。
AwsSolutions-CFR1 CloudFront ディストリビューションでは、地理的制限が必要になる場合があります。 特定の場所のユーザーによるコンテンツへのアクセスを許可または制限するために、国を許可または拒否するには、配信に対して地理的制限を有効にする必要がある場合があります。
AwsSolutions-CFR2 CloudFront ディストリビューションでは、AWS WAF との統合が必要になる場合があります。 Web アプリケーション ファイアウォールは、システムのセキュリティを侵害したり、システムに不必要な負荷をかけたりする可能性のあるアプリケーション層攻撃から保護するのに役立ちます。
AwsSolutions-COG2 Cognito ユーザー プールでは MFA は必要ありません。 多要素認証 (MFA) は、ユーザー名とパスワードだけに依存せず、別の認証方法を追加することでアプリケーションのセキュリティを強化します。
AwsSolutions-DDB3 DynamoDB テーブルではポイントインタイムリカバリが有効になっていません。 DynamoDB の継続的バックアップは、オンデマンド バックアップに加えて、偶発的なデータ損失に対する追加の保険層となります。DynamoDB サービスは、1 秒単位の粒度でデータをバックアップし、PITR が有効になった時点から過去 35 日間までの任意の 1 秒にデータを復元できます。
AwsSolutions-EB4 Elastic Beanstalk 環境では、EC2 インスタンス ログが S3 にアップロードされません。 将来の監査や履歴目的でログデータを保持したり、EB アプリケーション環境の動作を長期間にわたって追跡および分析したりするために、Beanstalk 環境ログを保持して Amazon S3 にアップロードする必要があります。
AwsSolutions-GL1 Glue クローラーまたはジョブは、CloudWatch Log 暗号化が有効になっているセキュリティ設定を使用していません。 保存時の暗号化を有効にすると、権限のないユーザーが CloudWatch Logs に公開されたログデータにアクセスするのを防ぐことができます。
AwsSolutions-GL3 Glue ジョブは、ジョブ ブックマークの暗号化が有効になっているセキュリティ構成を使用しません。 ジョブ ブックマークの暗号化では、ブックマーク データが Amazon S3 に送信されて保存される前に暗号化されます。
AwsSolutions-KDA3 Kinesis Data Analytics Flink アプリケーションではチェックポイントが有効になっていません。 チェックポイントは、KDA が定期的に自動的に作成し、障害からの復元に使用するアプリケーション状態のバックアップです。
AwsSolutions-KDS3 Kinesis Data Stream はサーバー側の暗号化を指定し、「aws/kinesis」キーを使用しません。 カスタマー管理キーでは、コンシューマーとプロデューサーの数に応じて追加コストが発生する可能性があります。カスタマー管理キーを使用する前に、コンプライアンスのためにカスタマー管理キーが必要であることを確認してください ( https://docs.aws.amazon.com/streams/latest/dev/costs-performance.html )。
AwsSolutions-MS4 MediaStore コンテナは、メトリクスを CloudWatch に送信するためのメトリクス ポリシーを定義していません。 MediaStore メトリクスと CloudWatch アラームを組み合わせて使用​​すると、オペレーターはコンテナ操作に関するより優れた洞察を得ることができます。
AwsSolutions-MS7 MediaStore コンテナはコンテナ ポリシーを定義しません。 コンテナ ポリシーを使用すると、最小限の権限を付与する、つまりコンテナへの必要なアクセスを許可するために必要な権限のみを付与するという標準的なセキュリティ アドバイスに従うことができます。
AwsSolutions-MS8 MediaStore コンテナは CORS ポリシーを定義していません。 CORS ポリシーを使用すると、最小限の権限を付与する、つまりコンテナーへの必要なアクセスを許可するために必要な権限のみを付与するという標準的なセキュリティ アドバイスに従うことができます。
AwsSolutions-MS10 MediaStore コンテナはライフサイクル ポリシーを定義しません。 多くのユースケースでは、ライフサイクル構成を使用してコンテナ オブジェクトの有効期間中にそれらを管理する必要があります。
AwsSolutions-TS3 Timestream データベースは、保存時の暗号化に顧客管理 KMS キーを使用しません。 データベース内のすべての Timestream テーブルは、デフォルトで AWS マネージドキーを使用して保存時に暗号化されます。これらのキーは 3 年ごとにローテーションされます。キーのアクセス許可とライフサイクルをより細かく制御する必要がある場合 (キーを毎年自動的にローテーションする機能など)、保存中のデータは CMK を使用して暗号化する必要があります。
AwsSolutions-VPC3 ネットワーク ACL またはネットワーク ACL エントリが実装されました。 ネットワーク ACL は、管理が複雑になる可能性があり、ステートレスであり、すべての IP アドレスを各方向 (インバウンド/アウトバウンド) で明示的に開く必要があり、サブネット全体に影響するため、慎重に使用する必要があります。セキュリティ グループはステートフルで管理が容易なため、可能な場合は使用してください。
Error(※2024/05/26時点)
ルールID 原因 説明
AwsSolutions-AEC1 ElastiCache クラスターは VPC 内にプロビジョニングされていません。 VPC 内でクラスターをプロビジョニングすると、キャッシュ クラスターのセキュリティ、可用性、トラフィック ルーティングなどに対する柔軟性と制御が向上します。
AwsSolutions-AEC3 ElastiCache Redis クラスターでは、転送中と保存中の両方の暗号化が有効になっていません。 転送中の暗号化は、クラスターへの通信のセキュリティ保護に役立ちます。保存中の暗号化は、保存中のデータを不正アクセスから保護するのに役立ちます。
AwsSolutions-AEC4 ElastiCache Redis クラスターは、マルチ AZ 構成でデプロイされていません。 高可用性のために、クラスターはマルチ AZ 配置構成を使用する必要があります。
AwsSolutions-AEC5 ElastiCache クラスターはデフォルトのエンドポイント ポートを使用します。 ポート難読化 (デフォルト以外のエンドポイント ポートを使用) により、非標的型攻撃 (Redis ポート 6379 および Memcached ポート 11211 など) に対する防御層が追加されます。
AwsSolutions-AEC6 ElastiCache Redis クラスターは、ユーザー認証に Redis AUTH を使用しません。 Redis 認証トークンを使用すると、クライアントがコマンドを実行する前に Redis がトークン (パスワード) を要求することができるため、データのセキュリティが向上します。
AwsSolutions-APIG1 API ではアクセス ログが有効になっていません。 アクセス ログを有効にすると、オペレーターは API にアクセスしたユーザーと、呼び出し元がどのように API にアクセスしたかを確認できます。
AwsSolutions-APIG2 REST API ではリクエストの検証が有効になっていません。 API では基本的なリクエスト検証が有効になっている必要があります。API がバックエンドでカスタム ソース (Lambda、ECS など) と統合されている場合は、実装のためにより詳細な入力検証を検討する必要があります。
AwsSolutions-APIG4 API は認証を実装しません。 ほとんどの場合、API には認証と承認の実装戦略が必要です。これには、IAM、Cognito ユーザー プール、カスタム承認などのアプローチの使用が含まれます。
AwsSolutions-APIG6 REST API ステージでは、すべてのメソッドに対して CloudWatch ログが有効になっていません。 ステージ レベルで CloudWatch ログを有効にすると、オペレーターは API ステージ レベルで実行動作を追跡および分析できるようになります。
AwsSolutions-AS1 Auto Scaling グループにはクールダウン期間はありません。 クールダウン期間では、新しく起動された EC2 インスタンスがアプリケーション トラフィックの処理を開始する時間を確保するために、スケーリング アクティビティが一時的に停止されます。
AwsSolutions-AS2 Auto Scaling グループにヘルスチェックが適切に構成されていません。 ヘルスチェック機能により、サービスは登録された EC2 インスタンスが正常かどうかを検出できます。
AwsSolutions-AS3 Auto Scaling グループには、すべてのスケーリング イベントに対する通知が設定されていません。 EC2 インスタンスの起動、起動エラー、終了、終了エラーに関する通知により、オペレーターはアクティビティや健全性などのシステム属性に関するより優れた洞察を得ることができます。
AwsSolutions-ASC3 GraphQL API ではリクエスト レベルのログ記録が有効になっていません。 CloudWatch Logs を使用して、GraphQL API にアクセスしたユーザー、呼び出し元が API にアクセスした方法、無効なリクエストなどのメトリクスをログに記録することが重要です。
AwsSolutions-ATH1 Athena ワークグループはクエリ結果を暗号化しません。 S3 に保存されているクエリ結果を暗号化すると、保存データの暗号化に関するコンプライアンス要件を満たすためにデータを保護するのに役立ちます。
AwsSolutions-CB4 CodeBuild プロジェクトでは、暗号化に AWS KMS キーを使用しません。 AWS KMS キーを使用すると、プロジェクトによって生成されたオブジェクトに最小限の権限を付与するという標準的なセキュリティアドバイスに従うことができます。
AwsSolutions-C91 Cloud9 インスタンスは、AWS Systems Manager で非イングレス EC2 インスタンスを使用しません。 SSM は、オペレーターが IAM 権限を通じてアクセスを制御でき、受信ポートを開く必要がないため、追加の保護レイヤーを追加します。
AwsSolutions-CFR3 CloudFront ディストリビューションではアクセス ログが有効になっていません。 アクセス ログを有効にすると、オペレーターはコンテンツ配信ネットワークを通じて配信されるコンテンツに対するすべての視聴者のリクエストを追跡できます。
AwsSolutions-CFR4 CloudFront ディストリビューションでは、HTTPS ビューア接続に SSLv3 または TLSv1 を使用できます。 廃止された SSL および TLS プロトコルには脆弱性が発見されており、今後も発見される可能性があります。セキュリティ ポリシーで TLSv1.1 または TLSv1.2 を最低限適用するビューア証明書を指定して、ビューア接続を保護してください。デフォルトの CloudFront ビューア証明書を使用するか、または 'vip' を使用するディストリビューションは、SslSupportMethod指定された証明書に関係なく、最低限のセキュリティ ポリシーが TLSv1 に設定されるため、このルールに準拠していません。MinimumProtocolVersion
AwsSolutions-CFR5 CloudFront ディストリビューションは、オリジンとの通信に SSLv3 または TLSv1 を使用します。 廃止された SSL および TLS プロトコルには脆弱性が発見されており、今後も発見され続けるでしょう。最低限 TLSv1.1 または TLSv1.2 を使用したセキュリティ ポリシーと、HTTPS 用の適切なセキュリティ暗号を使用すると、視聴者の接続を保護するのに役立ちます。
AwsSolutions-CFR6 CloudFront ディストリビューションは、S3 オリジンのオリジン アクセス ID を使用しません。 オリジン アクセス ID は、S3 URL を介したオブジェクトへの直接アクセスを制限することでセキュリティを強化します。
AwsSolutions-COG1 Cognito ユーザー プールには、少なくとも 8 文字のパスワードの長さを指定し、大文字、数字、特殊文字を要求するパスワード ポリシーがありません。 強力なパスワード ポリシーは、ユーザーに信頼性が高く安全なパスワードの作成を促すことで、システムのセキュリティを強化します。
AwsSolutions-COG3 Cognito ユーザー プールでは、AdvancedSecurityMode が ENFORCED に設定されていません。 高度なセキュリティ機能により、システムは悪意のあるサインイン試行を検出し、対処することができます。
AwsSolutions-COG4 API GW メソッドでは、Cognito ユーザー プール オーソライザーは使用されません。 API Gateway は、成功したユーザープール認証からのトークンを検証し、それらを使用して、Lambda 関数や独自の API などのリソースへのアクセスをユーザーに許可します。
AwsSolutions-COG7 Cognito アイデンティティ プールでは、認証されていないログインが許可されており、理由による cdk-nag ルールの抑制はありません。 多くの場合、アプリケーションは認証されていないゲスト アクセス アプリケーションを保証しません。ユース ケースを説明するメタデータにより、オペレーターに透明性がもたらされます。
AwsSolutions-DDB4 DAX クラスターではサーバー側の暗号化が有効になっていません。 基盤となるストレージへの不正アクセスから保護するために、キャッシュ内のデータ、構成データ、およびログ ファイルは、サーバー側暗号化を使用して暗号化する必要があります。
AwsSolutions-DOC1 Document DB クラスターでは保存時の暗号化が有効になっていません。 保存データの暗号化により、データの機密性が保護され、権限のないユーザーが機密情報にアクセスするのを防ぐことができます。
AwsSolutions-DOC2 Document DB クラスターはデフォルトのエンドポイント ポートを使用します。 ポート難読化 (デフォルト以外のエンドポイント ポートを使用) により、非標的型攻撃 (MongoDB ポート 27017 など) に対する防御層が追加されます。
AwsSolutions-DOC3 Document DB クラスターには、Secrets Manager に保存されているユーザー名とパスワードがありません。 Secrets Manager を使用すると、オペレーターは、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API 呼び出しに置き換えて、プログラムでシークレットを取得できます。これにより、コード内にシークレットが存在しなくなるため、システム コードを調べる誰かによってシークレットが侵害されることがなくなります。また、オペレーターは、指定されたスケジュールに従ってシークレットを自動的にローテーションするように Secrets Manager を構成することもできます。これにより、長期のシークレットを短期のシークレットに置き換えることができるため、侵害のリスクが大幅に軽減されます。
AwsSolutions-DOC4 Document DB クラスターには、適切な最小バックアップ保持期間が設定されていません。 保持期間は、自動スナップショットを保持する日数を表します。最小保持期間は 7 日間が推奨されますが、システム要件に合わせて調整できます。
AwsSolutions-DOC5 Document DB クラスターでは、authenticate、createIndex、および dropCollection ログ エクスポートが有効になっていません。 これにより、オペレーターは CloudWatch を使用してログを表示し、データベースの問題の診断に役立てることができます。AWS DocumentDB 監査ログに記録されるイベントには、認証の成功と失敗、インデックスの作成、DocumentDB クラスター内のデータベースでのコレクションの削除などがあります。これは、 で抑制できる個別の検出結果を返す詳細なルールですappliesTo。検出結果は、エクスポートされたログの形式ですLogExport::<log>。例: appliesTo: ['LogExport::authenticate']。
AwsSolutions-EB1 Elastic Beanstalk 環境は、特定の VPC を使用するように設定されていません。 環境をデフォルトのリソースから分離するには、デフォルト以外の VPC を使用します。
AwsSolutions-EB3 Elastic Beanstalk 環境では管理された更新が有効になっていません。 バグ修正、ソフトウェア更新、新機能を受け取るには、Beanstalk 環境の管理対象プラットフォーム更新を有効にします。管理対象プラットフォーム更新は、不変の環境更新を実行します。
AwsSolutions-EC23 セキュリティ グループでは、0.0.0.0/0 または ::/0 の受信アクセスが許可されます。 大きなポート範囲が開いていると、インスタンスが望ましくない攻撃にさらされることになります。それだけでなく、脆弱性の追跡が非常に困難になります。たとえば、Web サーバーでは 80 番ポートと 443 番ポートのみを開く必要がありますが、すべてを開く必要はありません。最もよく見られる間違いの 1 つは、インスタンスへのアクセスを急いでいるときに 0.0.0.0/0 の範囲のすべてのポートを開くことです。EC2 インスタンスは、対応するセキュリティ グループ レベルで有効になっているポートのみを公開する必要があります。
AwsSolutions-EC26 リソースは、暗号化が無効になっている 1 つ以上の EBS ボリュームを作成します。 EBS 暗号化を使用すると、独自のキー管理インフラストラクチャを構築、維持、保護する必要がありません。EBS 暗号化では、暗号化されたボリュームとスナップショットを作成するときに KMS キーを使用します。これにより、保存中のデータを保護できます。
AwsSolutions-EC27 セキュリティ グループには説明がありません。 説明は操作を簡素化し、オペレーターのエラーの可能性を排除するのに役立ちます。
AwsSolutions-EC28 EC2 インスタンス/AutoScaling 起動構成では詳細な監視が有効になっていません。 データを監視すると、コンピューティング リソースの設計と管理に関するより適切な意思決定が可能になります。
AwsSolutions-EC29 EC2 インスタンスは ASG の一部ではなく、終了保護が無効になっています。 インスタンスが誤って終了されるのを防ぐために、終了保護の安全機能が有効になっています。
AwsSolutions-ECR1 ECR リポジトリではオープン アクセスが可能です。 ECR リポジトリ内の * プリンシパルを削除すると、不正アクセスから保護するのに役立ちます。
AwsSolutions-ECS2 ECS タスク定義には、環境変数を直接指定するコンテナ定義が含まれています。 プレーンテキストの環境変数を直接指定する代わりに、シークレットを使用して、コンテナの起動時に AWS Systems Manager パラメータストアまたは Secrets Manager から環境変数を挿入します。直接環境変数を更新するには、オペレーターがタスク定義を変更し、新しいデプロイメントを実行する必要があります。
AwsSolutions-ECS4 ECS クラスターでは CloudWatch Container Insights が無効になっています。 CloudWatch Container Insights を使用すると、オペレーターはクラスターのアプリケーションとマイクロサービスのパフォーマンスをより適切に把握できます。
AwsSolutions-ECS7 ECS タスク定義内の 1 つ以上のコンテナでコンテナ ログが有効になっていません。 コンテナ ログを使用すると、オペレーターはコンテナからのログを表示および集計できます。コンテナでは、少なくとも「awslogs」ドライバーを使用する必要があります。
AwsSolutions-EFS1 EFS は保存時の暗号化用に構成されていません。 暗号化されたファイル システムを使用すると、データとメタデータはファイル システムに書き込まれる前に自動的に暗号化されます。同様に、データとメタデータが読み取られる際は、アプリケーションに提示される前に自動的に復号化されます。これらのプロセスは、アプリケーションを変更することなく、EFS によって透過的に処理されます。
AwsSolutions-EKS1 EKS クラスターの Kubernetes API サーバー エンドポイントではパブリック アクセスが有効になっています。 プライベートデータの公開を回避し、セキュリティリスクを最小限に抑えるために、クラスターの Kubernetes API サーバーエンドポイントはインターネットからパブリックにアクセスできないようにする必要があります。API サーバーエンドポイントは、AWS Virtual Private Cloud (VPC) 内からのみアクセスできるようにする必要があります。
AwsSolutions-EKS2 EKS クラスターは、「api」、「audit」、「authenticator」、「controllerManager」、および「scheduler」コントロール プレーン ログを公開しません。 EKS コントロールプレーンのログ記録では、Amazon EKS コントロールプレーンからアカウントの CloudWatch Logs に監査ログと診断ログが直接提供されます。これらのログを使用すると、クラスターのセキュリティ保護と実行が容易になります。これは、 で抑制できる個別の検出結果を返す詳細なルールですappliesTo。検出結果は、エクスポートされたログの形式ですLogExport::<log>。例: appliesTo: ['LogExport::authenticate']。
AwsSolutions-ELB1 CLB は、受信 HTTP/HTTPS トラフィックに使用されます。代わりに ALB を使用してください。 HTTP/HTTPS アプリケーション (モノリシックまたはコンテナ化) では、着信トラフィックの分散を強化し、パフォーマンスを向上させ、コストを削減するために、CLB ではなく ALB を使用する必要があります。
AwsSolutions-ELB2 ELB ではアクセス ログが有効になっていません。 アクセス ログを使用すると、オペレーターはトラフィック パターンを分析し、セキュリティの問題を特定してトラブルシューティングできます。
AwsSolutions-ELB3 CLB では接続ドレインが有効になっていません。 接続ドレイン機能を有効にすると、EC2 バックエンド インスタンスがヘルス チェックに失敗した場合、CLB は正常でないインスタンスに新しいリクエストを送信しません。ただし、設定されたタイムアウト期間中は、既存の (処理中の) リクエストが完了することを許可します。
AwsSolutions-ELB4 CLB は、クロスゾーン負荷分散機能が有効になっている 2 つ以上の AZ を使用しません。 CLB は、すべてのバックエンド インスタンスにトラフィックを均等に分散できます。クロスゾーン負荷分散を最適なレベルで使用するには、ロードバランサーに登録されている各 AZ で、システムが EC2 容量を均等に分散している必要があります。
AwsSolutions-ELB5 CLB リスナーは、クライアント通信用の安全なプロトコル (HTTPS または SSL) 用に構成されていません。 HTTPS または SSL プロトコルは、クライアントとロード バランサ間の通信を暗号化することで安全な通信を可能にします。
AwsSolutions-EMR2 EMR クラスターでは S3 ログが有効になっていません。 ログを S3 にアップロードすると、システムは履歴目的でログデータを保持したり、クラスターの動作を追跡および分析したりできるようになります。
AwsSolutions-EMR4 EMR クラスターは、ローカル ディスク暗号化が有効になっているセキュリティ構成を使用しません。 ローカル ディスク暗号化では、オープン ソースの HDFS 暗号化と LUKS 暗号化を組み合わせて使用​​し、保存中のデータを保護します。
AwsSolutions-EMR5 EMR クラスターは、転送中の暗号化が有効になって構成されたセキュリティ設定を使用しません。 EMR クラスターには、トランスポート層セキュリティ (TLS) を使用して転送中のデータを暗号化する方法が必要です。
AwsSolutions-EMR6 EMR クラスターは、EC2 キーペアまたは Kerberos による認証を実装しません。 SSH クライアントは、EC2 キーペアを使用してクラスターインスタンスを認証できます。または、EMR リリースバージョン 5.10.0 以降では、ソリューションで Kerberos を設定して、ユーザーとマスターノードへの SSH 接続を認証できます。
AwsSolutions-EVB1 イベント バス ポリシーではオープン アクセスが許可されます。 オープンポリシー (条件のない「*」プリンシパル) は、イベントバスへの匿名アクセスを許可します。条件を使用して、特定の AWS 組織のメンバーであるなど、特定の要件を満たすアカウントにアクセス許可を制限します。
AwsSolutions-IAM4 IAM ユーザー、ロール、またはグループは AWS 管理ポリシーを使用します。 AWS 管理ポリシーは、AWS によって作成および管理されるスタンドアロン ポリシーです。現在、多くの AWS 管理ポリシーではリソース スコープが制限されません。AWS 管理ポリシーをシステム固有 (顧客) の管理ポリシーに置き換えます。これは、 で抑制できる個別の検出結果を返す詳細なルールですappliesTo。検出結果は、AWS 管理ポリシーの形式ですPolicy::<policy>。例: appliesTo: ['Policy::arn:AWS::Partition:iam::aws:policy/foo']。
AwsSolutions-IAM5 IAM エンティティにはワイルドカード権限が含まれており、それらの権限の証拠を含む cdk-nag ルール抑制がありません。 ワイルドカード権限の証拠を説明するメタデータ (サポート リンクなど) により、オペレーターの透明性が向上します。これは、 で抑制できる個別の検出結果を返す詳細なルールです。検出結果は、ポリシー アクションおよびリソースのappliesTo形式です。例: 。Action::<action>Resource::<resource>appliesTo: ['Action::s3:*']
AwsSolutions-KDF1 Kinesis Data Firehose 配信ストリームでは、サーバー側の暗号化が有効になっていません。 これにより、システムは厳格な規制要件を満たし、システム データのセキュリティを強化できます。
AwsSolutions-KDS1 Kinesis Data Stream ではサーバー側の暗号化が有効になっていません。 データは Kinesis ストリーム ストレージ レイヤーに書き込まれる前に暗号化され、ストレージから取得された後に復号化されます。これにより、システムは厳格な規制要件を満たし、システム データのセキュリティを強化できます。
AwsSolutions-KMS5 KMS 対称キーでは自動キーローテーションが有効になっていません。 KMS キーのローテーションにより、システムは KMS キーの年間ローテーションスケジュールを設定できるため、新しいデータを暗号化するために AWS KMS キーが必要な場合、KMS サービスは HSA バッキングキーの最新バージョンを自動的に使用して暗号化を実行できます。
AwsSolutions-L1 非コンテナ Lambda 関数は、最新のランタイム バージョンを使用するように構成されていません。 技術的負債を回避するには、対象言語で利用可能な最新のランタイムを使用します。言語またはフレームワークのバージョンに固有のランタイムは、そのバージョンのサポートが終了すると非推奨になります。このルールは、コンテナ以外の Lambda 関数にのみ適用されます。
AwsSolutions-LEX4 Lex 会話ログは有効になっており、KMS キーで暗号化されていません。 暗号化を使用すると、会話ログの内容を保護できます。テキストログと音声ログの場合、AWS KMS カスタマー管理 CMK を使用して、CloudWatch Logs ロググループと S3 バケット内のデータを暗号化できます。
AwsSolutions-MS1 MediaStore コンテナではコンテナ アクセス ログが有効になっていません。 コンテナに対して行われたリクエストの詳細な記録を提供するには、コンテナでアクセス ログを有効にする必要があります。
AwsSolutions-MS3 MediaStore コンテナでは、SSL を使用するためのリクエストは必要ありません。 HTTPS (TLS) を使用すると、潜在的な攻撃者が中間者攻撃や類似の攻撃を使用してネットワーク トラフィックを盗聴したり操作したりするのを防ぐことができます。MediaStore コンテナ ポリシーの aws:SecureTransport 条件を使用して、HTTPS (TLS) 経由の暗号化された接続のみを許可する必要があります。
AwsSolutions-MSK2 MSK クラスターは、クライアントとブローカー間のプレーンテキスト通信を使用します。 TLS のみの通信では、クライアントとブローカー間の接続を暗号化することで、転送中のデータを保護します。
AwsSolutions-MSK3 MSK クラスターはブローカー間のプレーンテキスト通信を使用します。 TLS 通信は、ブローカー間の接続を暗号化することで転送中のデータを保護します。
AwsSolutions-MSK6 MSK クラスターは、サポートされている宛先にブローカー ログを送信しません。 ブローカー ログを使用すると、オペレーターは Apache Kafka アプリケーションのトラブルシューティングを行い、MSK クラスターとの通信を分析できます。クラスターは、CloudWatch ログ グループ、S3 バケット、Kinesis Data Firehose 配信ストリームなどのリソースにログを配信できます。
AwsSolutions-N1 Neptune DB クラスターは、マルチ AZ 構成でデプロイされていません。 高可用性のために、クラスターはマルチ AZ 配置構成を使用する必要があります。
AwsSolutions-N2 Neptune DB インスタンスでは自動マイナー バージョン アップグレードが有効になっていません。 Neptune サービスは定期的にエンジンのアップデートをリリースします。自動マイナー バージョン アップグレードを有効にすると、サービスによってこれらのアップグレードが DB インスタンスに自動的に適用されます。
AwsSolutions-N3 Neptune DB クラスターには、適切な最小バックアップ保持期間が設定されていません。 保持期間は、自動スナップショットを保持する日数を表します。最小保持期間は 7 日間が推奨されますが、システム要件に合わせて調整できます。
AwsSolutions-N4 Neptune DB クラスターでは保存時の暗号化が有効になっていません。 保存データの暗号化により、データの機密性が保護され、権限のないユーザーが機密情報にアクセスするのを防ぐことができます。
AwsSolutions-N5 Neptune DB クラスターでは IAM データベース認証が有効になっていません。 IAM データベース認証を有効にすると、システムはクラスターに接続するときにパスワードを使用する必要がなくなります。
AwsSolutions-OS1 OpenSearch Service ドメインは VPC 内にプロビジョニングされません。 VPC 内でドメインをプロビジョニングすると、VPC と OpenSearch ドメイン間のすべてのトラフィックがパブリックインターネットを経由せずに AWS ネットワーク内に保持されるため、クラスターのアクセスとセキュリティに対する柔軟性と制御が向上します。
AwsSolutions-OS2 OpenSearch サービス ドメインではノード間の暗号化が有効になっていません。 ノード間暗号化機能を有効にすると、HTTPS クライアントからクラスターへの暗号化や保存データの暗号化などの既存の ES セキュリティ機能に加えて、データ保護の層が追加されます。
AwsSolutions-OS3 OpenSearch サービス ドメインは、許可リストに登録された IP アドレス経由でのみアクセスを許可するわけではありません。 許可リストに登録された IP アドレスを使用すると、ドメインを不正アクセスから保護できます。
AwsSolutions-OS4 OpenSearch サービス ドメインでは専用のマスター ノードは使用されません。 専用のマスターノードを使用すると、データノードからすべての管理タスクがオフロードされ、環境の安定性が向上します。
AwsSolutions-OS5 OpenSearch サービス ドメインでは、署名されていないリクエストまたは匿名アクセスが許可されます。 パブリック アクセスを制限すると、不正アクセスを防ぎ、署名されていないリクエストがリソースに対して行われるのを防ぐことができます。
AwsSolutions-OS7 OpenSearch サービス ドメインではゾーン認識が有効になっていません。 ゾーン間レプリケーション (ゾーン認識) を有効にすると、ノードを割り当てて同じリージョン内の 2 つの AZ 間でデータを複製することで、OpenSearch サービス ドメインの可用性が向上し、ノードまたは AZ に障害が発生した場合でもデータの損失を防ぎ、ダウンタイムを最小限に抑えることができます。
AwsSolutions-OS8 OpenSearch サービス ドメインでは保存時の暗号化が有効になっていません。 保存データの暗号化により、データの機密性が保護され、権限のないユーザーが機密情報にアクセスするのを防ぐことができます。
AwsSolutions-OS9 OpenSearch Service ドメインは、SEARCH_SLOW_LOGS と INDEX_SLOW_LOGS を CloudWatch Logs に最低限公開しません。 これらのログにより、オペレーターはこれらの操作のパフォーマンスを完全に把握できます。 これは、 で抑制できる個別の検出結果を返す詳細なルールですappliesTo。 検出結果は、エクスポートされたログの形式ですLogExport::<log>。 例: appliesTo: ['LogExport::SEARCH_SLOW_LOGS']。
AwsSolutions-QS1 Quicksight データ ソース接続は SSL を使用するように構成されていません。 SSL は、特にパブリック ネットワークを使用する場合に、データ ソースへの通信を保護します。QuickSight で SSL を使用するには、公的に認められた証明機関によって署名された証明書を使用する必要があります。
AwsSolutions-RDS2 RDS インスタンスまたは Aurora DB クラスターでストレージ暗号化が有効になっていません。 ストレージ暗号化は、データベースの基盤となるストレージ、自動バックアップ、読み取りレプリカ、スナップショットを暗号化することで、保存データの保護に役立ちます。
AwsSolutions-RDS3 Aurora 以外の RDS DB インスタンスでは、マルチ AZ サポートが有効になっていません。 AWS によって完全に管理される高可用性と自動フェイルオーバーのサポートのために、マルチ AZ デプロイメント構成を使用します。
AwsSolutions-RDS6 RDS Aurora MySQL/PostgresSQL クラスターでは IAM データベース認証が有効になっていません。 IAM データベース認証を有効にすると、システムは MySQL/PostgreSQL データベース インスタンスに接続するときにパスワードを使用する必要がなくなり、代わりに認証トークンが使用されます。
AwsSolutions-RDS8 RDS DB セキュリティ グループでは、0.0.0.0/0 の受信アクセスが許可されます。 RDS DB セキュリティ グループでは、不正アクセスのリスクを軽減するために、0.0.0.0/0 (つまり、接続を確立できるすべてのマシン) からのアクセスを許可しないでください。
AwsSolutions-RDS10 RDS インスタンスまたは Aurora DB クラスターでは削除保護が有効になっていません。 Amazon Aurora データベースのクラスター レベルまたは Aurora 以外のインスタンスのインスタンス レベルで削除保護を有効にすると、誤って削除されるのを防ぐことができます。
AwsSolutions-RDS11 RDS インスタンスまたは Aurora DB クラスターはデフォルトのエンドポイント ポートを使用します。 ポート難読化 (デフォルト以外のエンドポイント ポートを使用) により、非標的型攻撃 (MySQL/Aurora ポート 3306、SQL Server ポート 1433、PostgreSQL ポート 5432 など) に対する防御層が追加されます。
AwsSolutions-RDS13 RDS インスタンスは自動バックアップ用に構成されていません。 自動バックアップにより、ポイントインタイムリカバリが可能になります。
AwsSolutions-RDS14 RDS Aurora MySQL クラスターではバックトラックが有効になっていません。 バックトラックは、バックアップを使用せずに、クラスター テーブルを特定の時点まで巻き戻すのに役立ちます。
AwsSolutions-RDS16 RDS Aurora MySQL サーバーレス クラスターでは、監査、エラー、一般、およびスロークエリのログ エクスポートが有効になっていません。 これにより、オペレーターは CloudWatch を使用してログを表示し、データベースの問題を診断できるようになります。これは、 で抑制できる個々の検出結果を返す詳細なルールです。検出結果は、エクスポートされたログのappliesTo形式になります。例: 。LogExport::<log>appliesTo: ['LogExport::audit']
AwsSolutions-RS1 Redshift クラスターでは TLS/SSL 暗号化は必要ありません。 「require_ssl」パラメータを有効にすると、クライアントと Redshift クラスター間の接続が暗号化され、転送中のデータが保護されます。
AwsSolutions-RS2 Redshift クラスターは VPC 内にプロビジョニングされていません。 VPC 内でクラスターをプロビジョニングすると、Redshift クラスターのセキュリティ、可用性、トラフィック ルーティングなどに対する柔軟性と制御が向上します。
AwsSolutions-RS3 Redshift クラスターはデフォルトの「awsuser」ユーザー名を使用します。 デフォルトのマスター ユーザー名 (つまり「awsuser」) の代わりにカスタム マスター ユーザー名を使用すると、非標的型攻撃に対する防御層が追加されます。
AwsSolutions-RS4 Redshift クラスターはデフォルトのエンドポイント ポートを使用します。 ポート難読化 (デフォルト以外のエンドポイント ポートを使用) により、非標的型攻撃 (Redshift ポート 5439 など) に対する防御層が追加されます。
AwsSolutions-RS5 Redshift クラスターでは監査ログが有効になっていません。 監査ログは、オペレーターが問題をトラブルシューティングし、セキュリティを確保するのに役立ちます。
AwsSolutions-RS6 Redshift クラスターでは保存時の暗号化が有効になっていません。 保存データを暗号化すると、データの機密性が保護されます。
AwsSolutions-RS8 Redshift クラスターはパブリックにアクセス可能です。 パブリックアクセシビリティを無効にすると、セキュリティリスクを最小限に抑えることができます。
AwsSolutions-RS9 Redshift クラスターではバージョン アップグレードが有効になっていません。 メンテナンス期間中にクラスターが自動的にアップグレードを受信できるようにするには、バージョン アップグレードを有効にする必要があります。
AwsSolutions-RS10 Redshift クラスターには、自動スナップショットの保持期間は設定されていません。 保持期間は、自動スナップショットを保持する日数を表します。この機能を構成するには、正の保持期間を設定する必要があります。
AwsSolutions-RS11 Redshift クラスターではユーザー アクティビティのログ記録が有効になっていません。 ユーザー アクティビティ ログは、クラスター データベースで実行される前に各クエリをログに記録します。この機能を有効にするには、Redshift クラスター パラメータ グループを関連付け、"enable_user_activity_logging" パラメータを "true" に設定します。
AwsSolutions-S1 S3 バケットではサーバー アクセス ログが無効になっています。 バケットに対して行われたリクエストの詳細な記録を提供するには、バケットでサーバー アクセス ログを有効にする必要があります。
AwsSolutions-S2 S3 バケットではパブリック アクセスが制限およびブロックされていません。 不正アクセスを防ぐために、バケットのパブリック アクセスを制限およびブロックする必要があります。
AwsSolutions-S5 S3 静的ウェブサイト バケットには、オープン ワールド バケット ポリシーが適用されているか、制限された getObject および/または putObject 権限のバケット ポリシーで CloudFront Origin Access Identity (OAI) が使用されていません。 OAI を使用すると、オープンバケットポリシーによるパブリックアクセスの有効化、S3 ブロックパブリックアクセス設定の無効化、および/またはオブジェクト ACL によるパブリックアクセスの有効化を行わずに、CloudFront URL を介して S3 静的ウェブサイトバケット内のコンテンツへのアクセスを提供できます。
AwsSolutions-S10 S3 バケットまたはバケット ポリシーでは、リクエストに SSL を使用する必要はありません。 HTTPS (TLS) を使用すると、潜在的な攻撃者が中間者攻撃や類似の攻撃を使用してネットワーク トラフィックを盗聴したり操作したりするのを防ぐことができます。Amazon S3 バケット ポリシーの aws:SecureTransport 条件を使用して、HTTPS (TLS) 経由の暗号化された接続のみを許可する必要があります。
AwsSolutions-SF1 Step Function は、すべてのイベントを CloudWatch Logs に記録しません。 「すべての」イベントを CloudWatch ログに記録すると、オペレーターがシステムのトラブルシューティングや監査を行うのに役立ちます。
AwsSolutions-SF2 Step Function では X-Ray トレースが有効になっていません。 X-Ray は、アプリケーションのパフォーマンスをエンドツーエンドで表示します。これにより、オペレーターはパフォーマンスの問題を発見し、権限の問題を検出し、他の AWS サービスとの間で行われたリクエストを追跡できます。
AwsSolutions-SM1 SageMaker ノートブックインスタンスは VPC 内にプロビジョニングされません。 VPC 内でノートブック インスタンスをプロビジョニングすると、ノートブックは EFS ファイル システムなどの VPC 専用リソースにアクセスできるようになります。
AwsSolutions-SM2 SageMaker ノートブック インスタンスには暗号化されたストレージ ボリュームがありません。 ストレージ ボリュームを暗号化すると、SageMaker の保存データを保護するのに役立ちます。
AwsSolutions-SM3 SageMaker ノートブック インスタンスでは、直接インターネット アクセスが有効になっています。 パブリックアクセシビリティを無効にすると、セキュリティリスクを最小限に抑えることができます。
AwsSolutions-SMG4 シークレットには自動ローテーションがスケジュールされていません。 AWS Secrets Manager は、保護されたサービスまたはデータベースのシークレットを自動的にローテーションするように設定できます。
AwsSolutions-SNS2 SNS トピックではサーバー側の暗号化が有効になっていません。 サーバー側の暗号化により、サブスクライバーにメッセージとして配信される機密データの保護が強化されます。
AwsSolutions-SNS3 SNS トピックでは、パブリッシャーが SSL を使用する必要はありません。 HTTPS (TLS) がないと、ネットワークベースの攻撃者が中間者攻撃などの攻撃を使用してネットワーク トラフィックを盗聴したり操作したりする可能性があります。aws:SecureTransport 条件とトピック ポリシーの「sns:Publish」アクションを使用して、HTTPS (TLS) 経由の暗号化された接続のみを許可し、パブリッシャーに SSL の使用を強制します。SSE がすでに有効になっている場合は、このコントロールが自動的に適用されます。
AwsSolutions-SQS2 SQS キューではサーバー側の暗号化が有効になっていません。 サーバー側の暗号化により、サブスクライバーにメッセージとして配信される機密データの保護が強化されます。
AwsSolutions-SQS3 SQS キューはデッドレターキュー (DLQ) として使用されず、DLQ が有効になっていません。 DLQ を使用すると、障害やサービスの中断を適時に検出して軽減することで、キュー フローを維持し、データの損失を防ぐことができます。
AwsSolutions-SQS4 SQS キューでは、SSL を使用するリクエストは必要ありません。 HTTPS (TLS) がないと、ネットワークベースの攻撃者が中間者攻撃などの攻撃を使用してネットワーク トラフィックを盗聴したり操作したりする可能性があります。キュー ポリシーの aws:SecureTransport 条件を使用して HTTPS (TLS) 経由の暗号化された接続のみを許可し、リクエストで SSL を使用するように強制します。
AwsSolutions-VPC7 VPC には関連付けられたフローログがありません。 VPC フローログは、VPC、サブネット、またはネットワークインターフェイスのネットワークフロー情報をキャプチャし、Amazon CloudWatch Logs に保存します。フローログデータは、ネットワークの問題のトラブルシューティングに役立ちます。たとえば、特定のトラフィックがインスタンスに到達しない理由を診断できます。これは、セキュリティグループのルールが厳しすぎることが原因である可能性があります。

対応する場合の項目を確認してみる

これらのエラーまたは警告を見て実際に抑制せず対応するとした場合、どこの項目を修正すべきかを試しに確認してみます。

リポジトリのcdk-nag/src/packs/aws-solutions.tsを見ると、該当しているIDの最後部分(「EB1」 etc)がありました。

🔻
同部分から該当するルールのリソースも確認出来ます。

🔻
上記aws-solutions.tsのimport部分にRuleのソースとなるファイルのパスがありますが、cdk-nag/src/rules/配下から該当するファイルを見つけます。

🔻
NON_COMPLIANT(非準拠)になる条件をどのように定義しているかを確認して対応する ものと認識しました。(間違いがあればご指摘ください。)

サプレス(抑制)する場合は

リポジトリのREADMEの記載を拝借しました。


以上でした

下に読ませていただいた記事リンクを並べています。
有難うございました。


(おまけ)記事・資料色々

cdk-nag

https://qiita.com/kiyoshi999/items/38a5c753f06d3e92934a
https://zenn.dev/ncdc/articles/7aa0d9928689c4
https://qiita.com/asw_hoggge/items/45df2a39c285b823d73f
https://zenn.dev/lea/articles/cafa94350d8d57
https://qiita.com/yust0724/items/d06be4439c61d4067c20
https://qiita.com/konta74315/items/0f2d8b67c6cf214f6e06
https://zenn.dev/ozen/articles/8df070e85990ca
https://qiita.com/y_matsuo_/items/6ef17964ff3c557f6d1e
https://tech.nri-net.com/entry/cdk_nag_basic
https://dev.to/aws-builders/improve-aws-security-and-compliance-with-cdk-nag-4h5g
https://chariosan.com/2021/12/13/cdk_nag_use/
https://dev.to/yvthepief/check-and-secure-cdk-code-with-cdk-nag-2gcg
https://tech.dentsusoken.com/entry/introducing_cdk_nag
https://speakerdeck.com/kinyok/sekiyuriteisukiyanturu-cdk-nag-woshi-tutemita
https://speakerdeck.com/kazuyasa/jaws-ug-cdkzhi-bu-number-13-bleatocdk-nagdeshi-xian-surufa-jian-de-tong-zhi
https://speakerdeck.com/87ram/cdk-nag-woji-cun-huan-jing-nishi-yong-sitemiru

関連

https://aws.amazon.com/jp/blogs/devops/align-with-best-practices-while-creating-infrastructure-using-cdk-aspects/
https://docs.aws.amazon.com/cdk/v2/guide/use_cfn_template.html#use_cfn_template_install

Discussion