v2向けに書き直しおよび追加したものです。DevelopersIOおはようございます、加藤です。CDKでクラウドアプリケーションを開発するためのベストプラクティスというAWSブログではコンプライアンスのためにConstructを使わないという事が推奨されています。Constructsなどが公開している便利なライブラリが利用できなくなるからという理由です。使い方を調べて、セキュリティガードレールを適用しましょう。Guardのようなツールを使用して、デプロイ前にインフラストラクチャのプロパティに関するアサーションを行いましょう。ブログ内でコンプライアンス準拠の手段としていくつか紹介されていますが、そのうちAspectを使った方法をこのブログではご紹介します。AspectとはドキュメントによるとAspectは特定のスコープ内のすべての構成に操作を適用する方法です。タグを追加するなどして構成を変更したり、すべてのバケットが暗号化されていることを確認するなど、構成の状態について何かを検証したりできます。ドキュメントでは下記のようなサンプルコードも公開されており、デザインパターンのVisitorパターンで実装されているようです。v1のコードなので以降の手順ではv2向けに置き換えつつ行います。BucketVersioningChecker());Aspectでコンプライアンス準拠を検証するS3バケットに対してバージョン管理を行うコンプライアンスがあると仮定してそれに準拠できているかを検証します。バージョン管理が設定されているか検証するライブラリを書きます。visitメソッドにはすべてのConstructが流れ込んできます。そのためS3バケットのConstructだけを抽出する必要があります。バージョン管理が無効であること(式としては有効になっていないこと)を確認します。undefinedなので型を絞り込むためにTypeGuard関数や比較をしています。Constructのメタデータにエラーを追加します。エラーを含むConstructが存在するとシンセサイズする際に失敗するためデプロイを防ぐ事ができます。バージョニングを行っていないバケットを作成します。}}ライブラリを使用しつつStack定義を呼び出します。lib.BucketVersioningChecker());Aspects.ofでスタック(上位のConstruct)を指定し作成したライブラリをaddすることで利用ができます。enabledとメッセージが表示されて、デプロイが停止されます。errorsテスト実行時にエラーを検出するデプロイ前にコンプライアンスしたがってエラーを出力し停止してくれるのは便利ですが、そもそもマージする前にエラーを検出し修正してからマージできるとなお便利です。});});単純にテスト内でAspectsを呼び出すだけではエラーが検出されません。スタックのメタデータを確認しエラーが記録されていたらテスト失敗とします。arrayの内容を確認すると、messages[0].entryにエラーが記録されていることがわかります。}に変更するとテストOKに変わることも確認してみてください。パラメーターを上書きするAspectではパラメーターを上書きすることもできます。}が与えられるとバージョニングを有効化します。});});あとがき今回のコードはこちらに公開しております。intercept6/cdk-aspect-demoAspectを使うことでConstructのコンプライアンスを検証および上書きによる準拠が行えます。この方法であればAWSやサードパーティによって配布されているパターンConstructを自分たちにとって最適であるか検証および最適に変更することが簡単におこなえます。AWS/CICD/TypeScript/React・Next.js/Goあたりをやっていますバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。AWS/CICD/TypeScript/React・Next.js/Goあたりをやっていますバッジを贈るバッジを贈るとは?目次はじめにAspectとはAspectでコンプライアンス準拠を検証するテスト実行時にエラーを検出するパラメーターを上書きするあとがきZennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。