Organizations連携を使って IAM Access Analyzer を組織レベルで有効化する [Terraform]

2023.08.31

どうも、ちゃだいん(@chazuke4649)です。

基本的にTerraformで、AWS IAM Access Analyzer を組織レベルで有効化してみたいと思います。

以下ブログで紹介していることを、極力Terraformでやってみるといった感じです。

前提

  • すでにAWS Organizationsは有効化済み
  • IAM Acces Analyzer管理者はAuditアカウントへ委任する
  • 対象リージョンは、2リージョン(東京とバージニア北部)

組織管理アカウント

  • AccountId: 000000000000
  • Terraform: v1.0.10
  • aws provider: v4.63.0

Auditアカウント

  • AccountId: 999999999999
  • Terraform: v1.0.10
  • aws provider: v4.67.0

ディレクトリ構成

組織管理アカウントとAuditアカウントで、Stateファイルおよび実行単位は分割している状態です。

% tree -L 2
.
├── audit_account
│   ├── backend.tf
│   ├── provider.tf
│   └── iam_accessanalyzer.tf
├── management_account
│   ├── backend.tf
│   ├── provider.tf
│   └── org.tf

手順

組織管理アカウントとAuditアカウントの両方で作業が必要となりますが、手順は以下の通りです。

  1. 組織管理アカウント) 信頼されたアクセスを有効化する [Terraform]
  2. 組織管理アカウント) Access Analyzer管理者をAuditアカウントに委任する [コンソール]
  3. Auditアカウント) 組織レベルのAnalyzerを有効化する [Terraform]

1. 組織管理アカウント) 信頼されたアクセスを有効化する [Terraform]

AWS OrgazationsのAWSサービス連携にて、Access Analyzerの信頼されたアクセスを有効化させます。
既存のTerraformコードの当該箇所に、 access-analyzer.amazonaws.com を追加します。

org.tf

###############################################################################
# AWS Organizations
###############################################################################
resource "aws_organizations_organization" "org" {
  aws_service_access_principals = [
    "config.amazonaws.com",
    "member.org.stacksets.cloudformation.amazonaws.com",
    "ram.amazonaws.com",
    "sso.amazonaws.com",
    "guardduty.amazonaws.com",
    "securityhub.amazonaws.com",
    "cloudtrail.amazonaws.com",
    "config-multiaccountsetup.amazonaws.com",
    "malware-protection.guardduty.amazonaws.com",
    "inspector2.amazonaws.com",
    "access-analyzer.amazonaws.com" ## <== ここを追加する
  ]
  enabled_policy_types = [
    "SERVICE_CONTROL_POLICY"
  ]
  feature_set = "ALL"
}

これを適用すると、以下の通りになります。

2. 組織管理アカウント) Access Analyzer管理者をAuditアカウントに委任する [コンソール]

続いて、Access Analyzer管理者をAuditアカウントへ委任します。

後述しますが、本作業をTerraformやAWS CLIで実行すると、組織管理アカウントにAccess AnalyzerのSerivce Linked Roleが自動作成されず、別途明示的に作成しなければなりません。
これがマネジメントコンソールで実行すれば、自動生成してくれるので、今回はマネジメントコンソールからの作業としています。

IAMのマネジメントコンソールを開き、アクセスアナライザーのページを開きます。そして「委任された管理者を追加」を押します。

下図の通り現時点では組織管理アカウントが管理者となってますので、これを変更します。

AuditアカウントのアカウントID999999999999を入力し、変更します。

ポイントとしては、マネジメントコンソールから実行することで組織管理アカウントにAccess AnalyzerのSerivce Linked Roleが自動生成してくれます。

変更後は、以下の通りAuditアカウントへ管理者が委任されました。

ちなみに、組織管理アカウントにSerivce Linked Roleも作成されていました。

Auditアカウント) 組織レベルのAnalyzerを有効化する [Terraform]

マネジメントコンソールやTerraform実行環境・ディレクトリ・認証情報をAuditアカウントに切り替えます。

AuditアカウントのIAMコンソールを開くと、まだアナライザーは作成されていないことが確認できます。

それではTerraformコードは以下となります。

iam_accessanalyzer.tf

###############################################################################
# IAM Access Analyzer
###############################################################################
#--------------------------------------------------
# Tokyo
#--------------------------------------------------
resource "aws_accessanalyzer_analyzer" "ap_ne_1" {
  analyzer_name = "ap-northeast-1"
  type          = "ORGANIZATION"
}

#--------------------------------------------------
# Virginia
#--------------------------------------------------
resource "aws_accessanalyzer_analyzer" "us_ea_1" {
  provider      = aws.us-ea-1
  analyzer_name = "us-east-1"
  type          = "ORGANIZATION"
}
  • アナライザーはリージョン数だけ作成する必要があります
  • provider.tfでは東京とバージニア北部の2つのaws providerを定義しています

これを適用すると、以下の通りアナライザーが作成されました。

まとめ

できるだけTerraformにて組織レベルでIAM Access Analyzerを有効化してみました。(といっても2工程だけですが)

後続の作業としては、以下が必要になるかと思われます。

  • アーカイブルールを作成する
  • 通知させる

それでは今日はこの辺で。ちゃだいん(@chazuke4649)でした。