2025年06月20日
Git
リポジトリ: 0603game (private)
主なコミット
- backend‑setup フォルダ追加(Terraform state 用)
- provider.tf / main.tf / backend.tf 初版追加
- S3&DynamoDB バケット ACL / Versioning / SSE 分離対応
- .terraform-version を 1.12.2 → 1.4.6 に更新 (バージョンのみ、ハッシュ・ブランチ名などは伏せ)
Terraform
バージョン: 1.4.6
プロジェクト構成
infra/
└── backend-setup/
├── backend.tf
├── main.tf
└── provider.tf
State Backend
- S3 バケット: 3 つ(tano‑tfstate‑aft‑setup, ‑accounts, ‑prd)
- DynamoDB テーブル: 3 つ(tano‑tflock‑aft / ‑accounts / ‑prd)
- タグ付与: Owner=tano, Project=0603game, environment=root
apply 結果: 1 回目 6 リソース作成 → 警告解消のため 3 段階で追加リソース (SSE, Versioning, ACL) を追加。最終的に CREATE_COMPLETE。
AWS
Control Tower (Phase 1)
- ランディングゾーン ACTIVE
- OU: Root / Security / Sandbox (Security, Root = 成功、Sandbox = Drifted ※空 OU のため想定)
- 共有アカウント: LogArchive / Audit Enrolled
- CloudFormation: 2 つの MASTER スタック (BASELINE‑CLOUDTRAIL / BASELINE‑CONFIG) が CREATE_COMPLETE
- CloudTrail 組織トレイル: aws‑controltower‑organization‑trail → LogArchive バケットへログ確認
S3 ログバケット
- aws‑controltower‑logs‑<org‑id>‑ap‑northeast‑1 → アクセス拒否はサービスロール制御のため正常
ディレクトリ構造(最新)
0603game/
├── .envrc
├── .terraform-version
├── infra/
│ └── backend-setup/
│ ├── backend.tf
│ ├── main.tf
│ └── provider.tf
└── (アプリ側ファイル一式)
次回実施予定
Phase 2 — AFT 管理基盤
- aft-setup/ Terraform プロジェクト作成(State: tano‑tfstate‑aft‑setup)
-
main.tf
に公式モジュールaws-ia/control_tower_account_factory/aws
を記述 - 変数
ct_management_account_id
,aft_management_account_id
,ct_home_region
設定 -
terraform init / apply
で CodePipeline & CodeBuild & Step Functions デプロイ - AFT Bootstrap Pipeline の Succeeded を確認
補足 TODO
- Sandbox OU 下にアカウントが無い状態なので、Phase 3 で dev/stg/prd アカウントを作成後にベースライン状態を再確認
- LogArchive / Audit の root MFA を改めて有効化チェック
備考
- 機密情報(AWS アカウントID, commit hash 等)は一部伏せ字 or 省略
- CloudFormation 詳細は StackSets 配下で 40+ ネストスタックが CREATE_COMPLETE を確認
はい、承知いたしました。
これまでの全ての対話と、共有いただいた最新の状況を踏まえて、本日実施した内容の日報を詳細に作成します。
2025年06月21日
・本日実施した主な内容(サマリー)
本日は、先日来の計画に基づき、Terraformを使用して本格的なマルチアカウント環境を構築する作業に着手しました。具体的には、TerraformのStateを分離管理するための基盤(S3バケット、DynamoDBテーブル)をコードで作成し、AWS上にデプロイしました。また、その次のステップであるAFT(Account Factory for Terraform)基盤をデプロイするためのTerraformプロジェクトの準備とコード修正を行いました。
・git
証跡: ありません。
成果物:
-
リポジトリ:
0603game
(private) -
主なコミット:
-
backend-setup
フォルダ追加(Terraform state 用) -
provider.tf
/main.tf
/backend.tf
初版追加 - S3&DynamoDB バケット ACL / Versioning / SSE 分離対応
-
.terraform-version
を1.12.2
→1.4.6
に更新 - (コミットハッシュやブランチ名などの機密情報は伏せています)
-
・terrafrom
証跡: ターミナルでの terraform plan
, terraform apply
の実行ログ。
成果物:
- バージョン: 1.4.6
-
プロジェクト構成:
-
State Backend用プロジェクト (
infra/backend-setup
):-
main.tf
: 3種類のS3バケットとDynamoDBテーブルを定義。 -
provider.tf
: AWSプロバイダと認証情報を設定。 -
backend.tf
: このプロジェクト自体のStateをローカルに保存する設定。
-
-
AFT基盤用プロジェクト (
infra/aft-setup
):-
main.tf
: 公式AFTモジュールを呼び出すコードを記述。 -
versions.tf
: Terraform本体とAWSプロバイダのバージョンを、~> 1.8
,~> 5.0
といったベストプラクティスに沿って指定。 -
variables.tf
: AFTモジュールが必要とする変数(アカウントIDなど)を定義。 -
provider.tf
: AWSプロバイダの設定を記述。 -
backend.tf
: Stateの保存先として、backend-setup
で作成したS3バケットとDynamoDBテーブルを指定。
-
-
State Backend用プロジェクト (
-
apply
結果:-
backend-setup
プロジェクトのapply
が成功し、TerraformのStateを分離管理するためのS3バケット3つと、Stateロック用のDynamoDBテーブル3つがAWS上に作成されました。 - S3バケットにはバージョニング、サーバーサイド暗号化(SSE-S3)、そして最新のベストプラクティスである「バケット所有者強制(BucketOwnerEnforced)」の所有権制御が設定されました。
-
-
トラブルシューティング:
-
terraform apply
時に発生したS3のAccessControlListNotSupported
エラーに対し、古いaws_s3_bucket_acl
リソースを削除し、代わりにaws_s3_bucket_ownership_controls
リソースを追加することで解決しました。
-
・ディレクトリ構造
-
証跡: ターミナルでの
ls
コマンド実行結果。 -
成果物:
- Terraformのコードを目的別に管理するため、
infra
ディレクトリを作成し、その配下にbackend-setup
とaft-setup
という2つの独立したプロジェクトディレクトリを配置する構成としました。
0603game/ ├── .envrc ├── .terraform-version ├── infra/ │ ├── aft-setup/ │ │ ├── backend.tf │ │ ├── main.tf │ │ ├── provider.tf │ │ ├── variables.tf │ │ └── versions.tf │ └── backend-setup/ │ ├── main.tf │ ├── provider.tf │ └── terraform.tfstate (ローカル) └── (アプリ側ファイル一式)
- Terraformのコードを目的別に管理するため、
・aws
-
証跡:
terraform apply
の結果、AWSコンソール上で確認できるリソース群。 -
成果物:
-
Control Tower (前日までの作業):
- ランディングゾーンの展開が完了し、
Security
とSandbox
のOU、およびLogArchive
,Audit
の共有アカウントがEnrolled
(登録済み)状態であることを確認。
- ランディングゾーンの展開が完了し、
-
Amazon S3 (本日作成):
- TerraformのState管理用に、以下の3つのS3バケットをTerraformで作成。
tano-tfstate-aft-setup
tano-tfstate-accounts
tano-tfstate-prd
- TerraformのState管理用に、以下の3つのS3バケットをTerraformで作成。
-
Amazon DynamoDB (本日作成):
- TerraformのStateロック用に、以下の3つのDynamoDBテーブルをTerraformで作成。
tano-tflock-aft
tano-tflock-accounts
tano-tflock-prd
- TerraformのStateロック用に、以下の3つのDynamoDBテーブルをTerraformで作成。
-
Control Tower (前日までの作業):
・次回実施
-
Phase 2 — AFT 管理基盤のデプロイ
-
タスク2-4:
infra/aft-setup
ディレクトリでterraform apply
を実行し、AFTの基盤となるAWSリソース(CodePipeline, CodeBuild, Step Functionsなど)をデプロイします。-
事前作業:
apply
を実行する前に、ct_management_account_id
,aft_management_account_id
,log_archive_account_id
,audit_account_id
の各変数の値を、AWSコンソールから確認して準備します。
-
事前作業:
- タスク2-5: デプロイ後にAWS CodePipelineのコンソールを開き、AFTのパイプラインが正常に完了(Succeeded)することを確認します。
-
タスク2-4: