【发布时间】: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