1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Control Tower,AFT 管理基盤

Last updated at Posted at 2025-06-20

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 管理基盤

  1. aft-setup/ Terraform プロジェクト作成(State: tano‑tfstate‑aft‑setup)
  2. main.tf に公式モジュール aws-ia/control_tower_account_factory/aws を記述
  3. 変数 ct_management_account_id, aft_management_account_id, ct_home_region 設定
  4. terraform init / apply で CodePipeline & CodeBuild & Step Functions デプロイ
  5. 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-version1.12.21.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テーブルを指定。
  • 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-setupaft-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 (ローカル)
    └── (アプリ側ファイル一式)
    

・aws

  • 証跡: terraform apply の結果、AWSコンソール上で確認できるリソース群。
  • 成果物:
    • Control Tower (前日までの作業):
      • ランディングゾーンの展開が完了し、SecuritySandboxのOU、およびLogArchive, Auditの共有アカウントがEnrolled(登録済み)状態であることを確認。
    • Amazon S3 (本日作成):
      • TerraformのState管理用に、以下の3つのS3バケットをTerraformで作成。
        • tano-tfstate-aft-setup
        • tano-tfstate-accounts
        • tano-tfstate-prd
    • Amazon DynamoDB (本日作成):
      • TerraformのStateロック用に、以下の3つのDynamoDBテーブルをTerraformで作成。
        • tano-tflock-aft
        • tano-tflock-accounts
        • tano-tflock-prd

・次回実施

  • 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)することを確認します。
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?