【问题标题】:How to share AWS infrastructure among multiple accounts using Terraform and AWS SSO?如何使用 Terraform 和 AWS SSO 在多个账户之间共享 AWS 基础设施?
【发布时间】:2021-10-09 17:58:47
【问题描述】:

我使用 AWS SSO 进行了以下多账户设置:

  • 名为“基础设施所有者”的帐户。在此帐户下,有一个名为“SomeAccessLevel”的角色,我可以在其中单击以登录 Web 控制台。
  • 另一个帐户称为“基础设施消费者”。在此帐户下,有一个名为“SomeAccessLevel”的相同角色,我可以在其中单击以登录 Web 控制台。可能还有其他角色。

帐户“infrastructure-owner”拥有通常具有读/写访问权限的资源(例如 S3 存储桶、DynamoDB 表或 VPN)。此帐户受到一定程度的保护,很少使用。帐户“infrastructure-consumer”仅对“infrastructure-owner”中的资源具有读取权限。此帐户经常被多人/服务使用。例如,生产数据管道在“infrastructure-consumer”中运行,并且对“infrastructure-owner”中的 S3 存储桶具有只读权限。但是,有时可能会通过登录“infrastructure-owner”手动将新数据包含在这些 S3 存储桶中。

我想使用 Terraform 配置此基础架构。我无法为“infrastructure-consumer”提供访问“infrastructure-owner”资源的权限。我已经阅读了数十篇关于 AWS 多账户/SSO/Terraform 的博客文章,但我仍然无法做到。此时,我什至无法在 Web 控制台中手动执行此操作。

请注意“SomeAccessLevel”是一个由 AWS 创建的我无法修改的角色(通常称为 AWSReservedSSO_YOURNAMEHERE_RANDOMSTRING)。另外,我不能授予特定用户权限,因为这些用户可能不属于“基础设施消费者”。此外,用户通过 SSO 使用角色访问此帐户。

以下 Terraform 代码是在“infrastructure-owner”中创建的示例 DynamoDB 表,我想在“infrastructure-consumer”帐户(任何角色)中阅读它:

# Terraform config
terraform {
  required_version = ">= 1.0.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.44"
    }
  }

  backend "remote" {
    hostname = "app.terraform.io"
    organization = "YOUR_ORGANIZATION_HERE"

    workspaces {
      name = "YOUR_TF_WORKSPACE_NAME_HERE"  # linked to "infrastructure-owner" 
    }
  }
}

# Local provider
provider "aws" {
  profile = "YOUR_AWS_PROFILE_NAME_HERE"  # linked to "infrastructure-owner" 
  region = "eu-central-1"
}

# Example resource that I would like to access from other accounts like "infrastructure-consumer"
resource "aws_dynamodb_table" "my-database" {

  # Basic
  name           = "my-database"
  billing_mode   = "PAY_PER_REQUEST"
  hash_key       = "uuid"

  # Key
  attribute {
    name = "uuid"
    type = "S"
  }
}

# YOUR CODE TO ALLOW "infrastructure-consumer" TO READ THE TABLE.

这个用例也可能有更好的架构。我正在尝试遵循适用于生产环境的 AWS 多账户的一般做法,以及用于配置它们的 Terraform。

谢谢!

【问题讨论】:

    标签: amazon-web-services terraform amazon-iam


    【解决方案1】:

    我假设您指的是 AWS 账户,而不是 IAM 账户(用户)。

    我记得要通过 AWS SSO 代入的角色有一些称为权限集的东西,它只不过是一种策略,允许在代入角色时执行 API 操作|拒绝执行。我不确切知道 AWS SSO 如何影响角色信任在 AWS 中的工作方式,但您可以在 infrastructure-owner's account 中拥有一个信任 infrastructure-consumer's account 中任何内容的角色>,即信任"arn:aws:iam::${var.infrastructure-consumer's account}:root"

    要使用 Terraform 实现这一目标,您可以在您的管理帐户(SSO 管理员帐户)中运行它并实现这种信任。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 2021-10-25
      • 2021-02-17
      • 2021-04-17
      • 2020-09-25
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      相关资源
      最近更新 更多