簡體   English   中英

AWS Control Tower 創建的 aws 多賬戶環境中的 Terraform

[英]Terraform in aws multi account env created by AWS Control Tower

我剛剛轉移到使用 Control Tower 設置的多賬戶,並且正在使用 Terraform 在不同賬戶中部署資源。

我的(簡化的)賬戶結構是:

|--Master
   |--management (backends etc)
   |--images     (s3, ecr)
   |--dev
   |--test

作為一個簡化的實驗,我正在嘗試在圖像帳戶中創建一個 ecr。 所以我想我需要創建一個策略來啟用角色切換並在目標帳戶內提供權限。 現在我手忙腳亂,只是想切換到管理員訪問權限。 AWSAdministratorAccess 角色由 Control Tower 在配置時創建。

provider "aws" {
   region  = "us-west-2"
   version = "~> 3.1"
}

data "aws_iam_group" "admins" { // want to attach policy to admins to switch role
   group_name = "administrators"
}


// Images account
resource "aws_iam_policy" "images-admin" {
  name        = "Assume-Role-Images_Admin"
  description = "Allow assuming AWSAdministratorAccess role on Images account"
  policy      = <<EOP
  {
     "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::<Images_Account_ID>:role/AWSAdministratorAccess"
          }
        ]
      }
    EOP
   }

 resource "aws_iam_group_policy_attachment" "assume-role-images-admin" {
  group      = data.aws_iam_group.admins.group_name
  policy_arn = aws_iam_policy.images-admin.arn
 }

部署了這個堆棧后,我然后嘗試部署另一個堆棧,它在圖像帳戶中創建一個資源。

provider "aws" {
  region  = var.region
  version = "~>3.1"
}

provider "aws" { 
  alias   = "images"
  region  = var.region
  version = "~> 3.1"
  assume_role {
     role_arn = "arn:aws:iam::<Images_Account_ID>:role/AWSAdministratorAccess"
  }
}

resource "aws_ecr_repository" "boot-images" {
  provider             = aws.images
  name                 = "boot-images"
}

在部署時我得到:

> Error: error configuring Terraform AWS Provider: IAM Role (arn:aws:iam::*********:role/AWSAdministratorAccess) cannot be assumed.

There are a number of possible causes of this - the most common are:
  * The credentials used in order to assume the role are invalid
  * The credentials do not have appropriate permission to assume the role
  * The role ARN is not valid

Error: NoCredentialProviders: no valid providers in chain. Deprecated.
    For verbose messaging see aws.Config.CredentialsChainVerboseErrors

第一個:提供的信用來自始終在單個帳戶環境中工作的主帳戶

第二:這是我認為通過附加政策實現的

第三:對此不太確定,但帳戶中存在 AWSAdministratorAccess defo,我認為 arn 格式是正確的,而 AWS Single Sign On 將其稱為權限集,控制台也將其描述為角色。

我發現使用 Terraform 部署到多個 AWS 賬戶? 這很有幫助,但我在這里遺漏了一些東西。

我也不知道如何將這個想法擴展到將 s3 遠程后端部署到我的“管理”帳戶中。

Terraform 版本 0.12.29

結果發現這里有幾個問題:

  1. 輪廓

憑據配置文件不正確。 在 Env Vars 中設置正確的 creds 可以讓我在僅使用 creds 文件失敗時運行一個簡單的測試。 這里仍然存在一個問題,我不明白,因為更新 creds 文件也失敗了,但我有一個可以工作的系統。

  1. AWS 創建的角色

雖然我的假設是正確的,權限集被定義為角色,但它們有一個信任關系,沒有擴展到我的主管理員用戶(我的壞)並且它不能被修改,因為它是由 AWS 自動創建的並且被鎖定。

  1. 手動授予權限

因此,雖然我可以通過 Terraform 以編程方式授予組權限以承擔角色,但我需要在 Target 帳戶中手動創建一個角色,以擴展信任,從而擴展主帳戶的權限。

根據我自己的經驗,並考慮到您已經擁有一個可用的 AWS 基礎設施,我會排除並離開 Control Tower,並考慮使用 CloudFormation StackSets 做同樣的事情。 它們讓您可以定位 OU 或個人賬戶。

Control Tower 已多次向我推薦,但擁有超過 25 個帳戶和生產工作負載的 AWS 生態系統,我非常不願意事件嘗試。 我想從頭開始很棒,但當您在 AWS 中已經擁有相當數量的工作負載和賬戶時就不行了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM