Terraform Создать ресурс в учетной записи Child AWS - PullRequest
0 голосов
/ 17 марта 2020

Моя цель - создать модуль Terraform, который создает дочернюю AWS учетную запись , а создает набор ресурсов внутри учетной записи (например, AWS Config rules).

Учетная запись создается со следующим aws_organizations_account определением:

resource "aws_organizations_account" "account" {
  name  = "my_new_account"
  email = "john@doe.org"
}

И пример aws_config_config_rule будет выглядеть примерно так:

resource "aws_config_config_rule" "s3_versioning" {
  name        = "my-config-rule"
  description = "Verify versioning is enabled on S3 Buckets."

  source {
    owner             = "AWS"
    source_identifier = "S3_BUCKET_VERSIONING_ENABLED"
  }

  scope {
    compliance_resource_types = ["AWS::S3::Bucket"]
  }
}

Однако при этом создается правило конфигурации AWS в основной учетной записи, а не во вновь созданной дочерней учетной записи.

Как определить правило конфигурации, применяемое к дочерней учетной записи?

1 Ответ

0 голосов
/ 08 апреля 2020

Итак, я действительно смог добиться этого, определив нового поставщика в модуле, который предполагает OrganizationAccountAccessRole внутри вновь созданной учетной записи.

Вот пример:

// Define new account
resource "aws_organizations_account" "my_new_account" {
  name  = "my_new_account"
  email = "john@doe.org"
}

provider "aws" {
  /* other provider config */
  assume_role {
    // Assume the organization access role
    role_arn = "arn:aws:iam::${aws_organizations_account.my_new_account.id}:role/OrganizationAccountAccessRole"
  }
  alias = "my_new_account"
}

resource "aws_config_config_rule" "s3_versioning" {
  // Tell resource to use the new provider
  provider = aws.my_new_account

  name        = "my-config-rule"
  description = "Verify versioning is enabled on S3 Buckets."

  source {
    owner             = "AWS"
    source_identifier = "S3_BUCKET_VERSIONING_ENABLED"
  }

  scope {
    compliance_resource_types = ["AWS::S3::Bucket"]
  }
}

Однако следует отметить, что определение провайдера внутри модуля приводит к нескольким странностям, особенно после того, как вы запустите этот модуль , вы не сможете удалить этот модуль . Если вы это сделаете, вы получите Error: Provider configuration not present, так как вы также удалили определение провайдера.

Но, если вы не планируете удалять эти учетные записи (или можете делать это вручную, когда это необходимо), тогда это должно быть хорошо!

...