📚

Terraformでs3暗号化の差分が出続ける

2023/02/26に公開

概要

TerraformやAWS Providerのバージョンを変更していないにも関わらず、plan/apply時に以下のs3の暗号化設定の差分が出るようになった。

      - server_side_encryption_configuration {
          - rule {
              - bucket_key_enabled = false -> null

              - apply_server_side_encryption_by_default {
                  - sse_algorithm = "AES256" -> null

結論

aws providerのバージョンを以下より新しいものに更新しましょう。

  • v4.49.0
  • v3.76.1
  • v2.70.2

環境

Terraform : 1.3.2
AWS Provider : 3.39.0

事象

terraform planを実行したところ、以下の差分が検出されました。
s3の設定や、TerraformやAWS Providerのバージョンに変更はしていません。当然、Management Consoleから変更もしていません。

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_s3_bucket.test-bucket will be updated in-place
  ~ resource "aws_s3_bucket" "test-bucket" {
        id                          = "test-bucket-XXXXXXXXXX"
        tags                        = {}
        # (10 unchanged attributes hidden)

      - server_side_encryption_configuration {
          - rule {
              - bucket_key_enabled = false -> null

              - apply_server_side_encryption_by_default {
                  - sse_algorithm = "AES256" -> null
                }
            }
        }

        # (1 unchanged block hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

調査

tfstateの状態の確認

            "server_side_encryption_configuration": [
              {
                "rule": [
                  {
                    "apply_server_side_encryption_by_default": [
                      {
                        "kms_master_key_id": "",
                        "sse_algorithm": "AES256"
                      }
                    ],
                    "bucket_key_enabled": false
                  }
                ]
              }
            ],

Bucketの設定

tfstateと一致していそう

AWS公式

そういえば、デフォルトで暗号化が有効化されるとアナウンスが出ていたので、AWS側で仕様変更が入った可能性がありそう。
https://aws.amazon.com/jp/about-aws/whats-new/2023/01/amazon-s3-automatically-encrypts-new-objects/

AWS Providerのissue/PR検索

既に対応版がリリースされていました。
https://github.com/hashicorp/terraform-provider-aws/issues/28701

対応

結論に記載の通りですが、AWS Providerを更新することで、差分が出なくなりました。

Providerのバージョン指定の変更

 terraform {
   required_providers {
     aws = {
       source = "hashicorp/aws"
-      version = "3.39.0"
+      version = "3.76.1"
     }
   }
   required_version = ">= 1.3"
 }

Providerを更新して、再度plan実行

% terraform init -upgrade
% terraform plan
No changes. Your infrastructure matches the configuration.

雑感

  • ちなみに、Providerを更新せずにapplyをしてもfailはしませんが、planを実行すると同じ差分が出続けます。
  • おそらく自分のアカウントにデフォルトで暗号化が有効になる変更が反映されたのではないかと思います。(AWSからアナウンスが出て時間が経っていたので、忘れていました)
  • まだProviderの2系や3系へもアップデートがされており、感謝。(そろそろ4系に更新しないとと思いつつ、s3のリファクタが...)

Discussion