1
0

More than 1 year has passed since last update.

【AWS CDK】GuardDutyの信頼されている IP リストを設定する時のTips

Posted at

はじめに

GuardDutyの信頼されているIPリストはいくつかのフォーマットのファイルで設定することができますが、
基本的にS3バケットにアップロードする必要があります。

CDKには、信頼されているIPリストを設定できる CfnIPSet が用意されています。

CDKでGuardDutyの信頼されているIPリスト を設定するならS3のファイルデプロイまでCDKで行いたいと思いました。

話さないこと

  • Amazon GuardDutyについて
  • AWS CDKの基本的なことについて

環境

CDK 2.86.0(TypeScript)

BucketDeployment

CDKでS3のファイルをデプロイするには、公式で aws_s3_deployment というモジュールが用意されています。
これを使って任意のバケットにファイルをアップロードすることが可能です。

const whiteListIpBucket = new Bucket(this, 'WhitelistIpBucket', {});
const deployment = new BucketDeployment(this, 'WhitelistIp', {
  sources: [Source.asset(path.join(__dirname, './config/guardduty'))],
  destinationBucket: whiteListIpBucket
});

CfnIPSet

上記のリファレンスにも記載されていますが、以下のような記述になります。

const ipSet = new CfnIPSet(this, 'IpSet', {
  activate: true,
  detectorId: detectorId,
  format: 'TXT',
  location: `s3://${whiteListIpBucket.bucketName}/whitelistip.txt`,
});

エラー

上記の設定だけでは、Cloudformationが依存関係を正しく処理できないような挙動になり、エラーとなります。
Cloudformationのスタックを見ていると、 deployment が完了する前に ipSet を実行しようとしています。

このような場合は addDependency を使うと思います。
しかし、以下のように書くとエラーとなります。

ipSet.addDependency(deployment);

型 'BucketDeployment' の引数を型 'CfnResource' のパラメーターに割り当てることはできません。
型 'BucketDeployment' には 型 'CfnResource' からの次のプロパティがありません: cfnOptions, cfnResourceType, _cfnProperties,,,

これは、 addDependency の引数は CfnResource である必要がありますが、 BucketDeployment はそうではないためです(Cloudformationのカスタムリソースが作られます)

対応

aws_s3_deployment を眺めていたら、以下のような説明がありました

If sequenced access to the original destination bucket is required, you may add a dependency on the bucket deployment instead: otherResource.node.addDependency(deployment)

上記の説明から、以下のような書き方になります。

ipSet.node.addDependency(deployment);

このようにすると、 BucketDeployment -> CfnIPSet と依存関係を指定することができ、正しくデプロイすることができます。

おわりに

CDKはプログラミングの知識が浅くても抽象的に書けることがメリットですが、言語仕様など、定期的に壁に当たっています。
深く学習する機会をちゃんと作りたいと思いました。

コードは ksaga9/cdk-sample にアップロードしています。参考にどうぞ。

Appendix

信頼できる IP リストと脅威リストをアップロードするには

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0