【问题标题】:Using AWS Terraform How to enable s3 backend authentication with assumed role MFA credentials使用 AWS Terraform 如何使用代入角色 MFA 凭证启用 s3 后端身份验证
【发布时间】:2021-01-25 18:57:48
【问题描述】:

我使用 Terraform 使用通过 shell 调用 terraform 的 python 脚本预置 AWS 资源

os.system('terraform apply')

在启用 MFA 并担任角色后,我发现启用 terraform 身份验证的唯一方法是发布这些环境变量:

os.system('export ASSUMED_ROLE="<>:botocore-session-123";
export AWS_ACCESS_KEY_ID="vfdgdsfg";
export AWS_SECRET_ACCESS_KEY="fgbdzf";
export AWS_SESSION_TOKEN="fsrfserfgs";
export AWS_SECURITY_TOKEN="fsrfserfgs"; terraform apply')

这工作正常,直到我将 s3 配置为后端,执行 terraform 操作,但在状态可以存储在存储桶中之前,我得到标准(非常混乱)异常:

Error: error configuring S3 Backend: Error creating AWS session: AssumeRoleTokenProviderNotSetError: assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.

我读到这个excellent answer 解释说出于安全和其他原因后端配置是分开的。

由于我不想将实际密钥添加到源代码(如帖子所建议的那样),我尝试添加对配置文件的引用,当失败时,我添加了实际密钥只是为了查看它是否可以工作,这它没有。

我的工作理论是,terraform 在幕后启动另一个进程,该进程不访问或继承凭证 e 环境变量。

如何使用 s3 后端,并承担 MFA 角色?

【问题讨论】:

  • 这是否也会在init 期间引起问题?
  • @MattSchuchard 没有

标签: amazon-web-services terraform multi-factor-authentication


【解决方案1】:

必须将后端指向所需的配置文件。在我的情况下,用于配置本身的配置文件相同。

这是一个最小的 POC

terraform {

  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }

  backend "s3" {
    bucket = "unique-terraform-state-dev"
    key    = "test"
    region = "us-east-2"

    profile = "the_role_assumed_in_aws_credentials"
  }
}

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

resource "aws_s3_bucket" "s3_bucket" {

  bucket = var.bucket_name
}

我提醒一下,它是由具有以下环境变量的 shell 运行的:

os.system('export ASSUMED_ROLE="<>:botocore-session-123";
export AWS_ACCESS_KEY_ID="vfdgdsfg";
export AWS_SECRET_ACCESS_KEY="fgbdzf";
export AWS_SESSION_TOKEN="fsrfserfgs";
export AWS_SECURITY_TOKEN="fsrfserfgs"; terraform apply')

【讨论】:

    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 2019-09-14
    • 2016-12-22
    • 2023-02-16
    • 2021-09-03
    • 1970-01-01
    • 2021-10-17
    • 2022-11-02
    相关资源
    最近更新 更多