[アップデート] Account Factory for Terraform (AFT) でVPCの利用有無とAWS Backup復旧ポイント/S3ログアーカイブバケットの保持期間がカスタマイズ可能に

2024.02.19

アップデート内容

Account Factory for Terraform v1.12がリリースされました。

特に注目なのが以下です。

  • VPC及び関連するネットワーキングリソースを使用せずにAFTをデプロイできるように
  • AWS Backup復旧ポイント、S3ログアーカイブバケットの保持期間が設定可能に
  • AFTで作成されるデフォルトセキュリティグループに、インバウンド/アウトバウンドルールがない状態で作成されるように(SecurityHub コントロール EC2.2に準拠)

何が嬉しい?

  • コストを抑えた構成でAFTをデプロイできるようになった
  • AFTで作成されるデフォルトセキュリティグループがSecurityHub コントロール EC2.2で検出されなくなった

コストを抑えた構成でAFTをデプロイできるようになった

AFT関連のLambdaやCodeBuildがVPC内で動作するため、NatGatewayやEIP等のVPC関連リソースが維持コストとして発生します。

これまでは、VPCの有無をAFTのModuleで制御できなかったため、維持コストを下げたい場合は以下のブログのように使っていない時間はNatGatewayやEIPを手動で削除する必要がありました。

今回のアップデートでVPC無しでデプロイできるようになったため、維持コストを下げる手間が大きく減りました。

CloudWatchロググループ、AWS Backup復旧ポイント、S3ログアーカイブバケットの保持期間も設定可能になりました。

今までは、AWS Backup復旧ポイントは永続、S3ログアーカイブバケットが365日となっていました。

AWS Backupの復旧ポイントは割と増えがちです。AFTは4つのDynamoDBテーブル利用して、それぞれに対して1時間に1回バックアップを実行します。

1ヶ月あたり、2880個(4(テーブル数) * 24(時) * 30(日))のAWS Backupの復旧ポイントが作成されます。

データ量自体は少ないため、AWS Backupの料金はそこまで大きくはなりません。

注意したいのが、AWS ConfigやSecurityHub(Backup.1)です。

例えば、AFTを2年程度運用していて、復旧ポイントが70,000個(2880(月) * 24(2年) = 69,120)あったとします。

SecurityHubコントロールBackup.1が有効になっていた場合、280USD/月のコストがかかります。

  • SecurityHubセキュリティチェック: 70USD/月
  • AWS Config: 210USD/月
    • AWS::config::ResourceCompliance(Configルールの準拠非準拠が記録されるリソース)がセキュリティチェックの回数分記録される
    • 設定項目あたり(連続的な記録) 0.003USD * 70,000(復旧ポイントの数)
    • 料金 - AWS Config | AWS

保存期間を設定することで、存在する復旧ポイントの数が減るため料金を抑えることができます。

SecurityHub コントロール EC2.2でデフォルトセキュリティグループが検出されなくなった

既存はデフォルトのセキュリティグループとして、インバウンドとアウトバウンドのルールが付いたものがデプロイされていました。

このセキュリティグループは、SecurityHub EC2.2)で検知されてしまいます。

EC2.2 VPC のデフォルトのセキュリティグループでは、インバウンドトラフィックまたはアウトバウンドトラフィックを許可しないようにする必要があります

今回のアップデートで、作成されるデフォルトのセキュリティグループはルールが付いていないものになったため、検知されなくなりました。

Terraformコードをみてみる

VPC及び関連するネットワーキングリソースを使用せずにAFTをデプロイできるように

AFT用のLambdaやCodeBuildがいくつか作成されます。このリソースはデフォルトでは、AFTで作成されるVPC内で動作します。

AFTモジュールにVPCの作成有無を制御する、aft_enable_vpcというVariableが追加されました。

Name Description Type Default Required
aft_enable_vpc Flag turning use of VPC on/off for AFT bool true no

デフォルトはtruefalseにすることで、VPC関連のリソースなしになります。

VPCについては、以下の箇所で定義されています。

modules/aft-account-request-framework/vpc.tf

LambdaやCodeBuildをみてみるとDynamicを使って、該当の変数の状態によってVPC設定の有り無しを制御していました。

modules/aft-account-request-framework/lambda.tf

CloudWatchロググループ、AWS Backup復旧ポイント、S3ログアーカイブバケットの保持期間

それぞれ以下のVariablesが追加されました。

Name Description Type Default Required
backup_recovery_point_retention Number of days to keep backup recovery points in AFT DynamoDB tables. Default = Never Expire number null no
log_archive_bucket_object_expiration_days Amount of days to keep the objects stored in the AFT logging bucket number 365 no

AWS BackupとS3ログアーカイブの設定はそれぞれ以下です。

AFTで作成されるデフォルトセキュリティグループに、インバウンド/アウトバウンドルールがない状態で作成されるように

aws provideraws_vpcで以下のようにVPCを作ると、デフォルトセキュリティグループも作成されます。

resource "aws_vpc" "my_vpc" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "my-vpc"
  }
}

これを回避するために、aft_vpc_default_sgでデフォルトセキュリティグループを明示的に作成する必要があります。

そのため、VPC定義に"aft_vpc_default_sg"`の定義が追加されていました。

modules/aft-account-request-framework/vpc.tf

おわりに

「NatGatewayの維持コストが気になるんだよな、VPC無しでデプロイできないかな」といった方に、ぜひ確認してほしいアップデートです。

Security Hubのコントロール「Backup.1」は、2023/12に追加されました。

AFTのBackup設定によるSecurity HubとAWS Configの料金増えて気になっている方にも、役立ちそうです。

私自身「AFTの検証したいけど、1回作るのも大変だし、維持しているとコストもかかるから辛いな」と思っていましたが、今回のアップデートにより検証のハードルが下がりました。

AFT関連のブログも増やしていきたいと思います。

以上、AWS事業本部の佐藤(@chari7311)でした。