热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Doesn'taskMFAtokencodewhenusingassume_rolewithMFArequired

WhenusingmultipleAWSaccountsitsgoodpracticetoonlyallowaccessviaAssumeRole

When using multiple AWS accounts it's good practice to only allow access via AssumeRole from a master account. This can be done with or without requiring MFA. Terraform supports assume_role with s3 state file and aws provider configurations, but doesn't seem to ask the MFA token code when one is required. This prevents using AssumeRole for credentials when MFA is required.

AWS documentation describing MFA with cross account AssumeRole: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html#MFAProtectedAPI-cross-account-delegation

Terraform Version

1
2
$ terraform --version

Terraform v0.11.0


Affected Resource(s)

Both of these support assume_role, so they should also support asking for MFA token code:
- S3 backend configuration
- AWS provider configuration

Terraform Configuration Files

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
hcl

terraform {

  backend "s3" {

    bucket = "terraform-state-bucket"

    key = "tf-state"

    region = "eu-west-1"

    role_arn = "arn:aws:iam::916005212345:role/OrganizationAccountAccessRole"

  }

}

provider "aws" {

  region = "eu-west-1"

  assume_role {

    role_arn = "arn:aws:iam::916005212345:role/OrganizationAccountAccessRole"

    session_name = "terraform-session"

  }

}


Actual Behavior (with DEBUG)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ TF_LOG=debug terraform init

2017/11/23 13:36:12 [INFO] Terraform version: 0.11.0  

2017/11/23 13:36:12 [INFO] Go runtime version: go1.9.2

2017/11/23 13:36:12 [INFO] CLI args: []string{"/usr/local/Cellar/terraform/0.11.0/bin/terraform", "init"}

2017/11/23 13:36:12 [DEBUG] Attempting to open CLI config file: /Users/***/.terraformrc

2017/11/23 13:36:12 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.

2017/11/23 13:36:12 [INFO] CLI command args: []string{"init"}

2017/11/23 13:36:12 [DEBUG] command: loading backend config file: /Users/***



Initializing the backend...

2017/11/23 13:36:12 [WARN] command: backend config change! saved: 16375281725947963338, new: 2383462577283113429

Backend configuration changed!



Terraform has detected that the configuration specified for the backend

has changed. Terraform will now reconfigure for this backend. If you didn't

intend to reconfigure your backend please undo any changes to the "backend"

section in your Terraform configuration.





2017/11/23 13:36:12 [INFO] Building AWS region structure

2017/11/23 13:36:12 [INFO] Building AWS auth structure

2017/11/23 13:36:12 [INFO] Setting AWS metadata API timeout to 100ms

2017/11/23 13:36:13 [INFO] Ignoring AWS metadata API endpoint at default location as it doesn't return any instance-id

2017/11/23 13:36:13 [INFO] Attempting to AssumeRole arn:aws:iam::***:role/OrganizationAccountAccessRole (SessionName: "", ExternalId: "", Policy: "")

2017/11/23 13:36:13 [INFO] AWS Auth provider used: "SharedCredentialsProvider"

2017/11/23 13:36:13 [DEBUG] plugin: waiting for all plugin processes to complete...

Error initializing new backend:

Error configuring the backend "s3": The role "arn:aws:iam::***:role/OrganizationAccountAccessRole" 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



Please update the configuration in your Terraform files to fix this error

then run this command again.

该提问来源于开源项目:terraform-providers/terraform-provider-aws

1
2
3
4
5
6
7
8
9
10
11
12
13
14
provider "aws" {

  profile = "prod"

  region  = "eu-west-1"

  version = "3.4.0"

}

terraform {

  required_version = "0.13.2"

  backend "s3" {

    profile        = "prod"

    region         = "eu-west-1"

    dynamodb_table = "terraform-locks"

    bucket         = "prod-terraform-states"

  }

}

Also you could check with



1
2
export AWS_SDK_LOAD_CONFIG=1

aws --profile prod sts get-caller-identity

it should use credentials from aws-vault and ask for mfa only once

or run aws-vault directly:



1
env AWS_SDK_LOAD_CONFIG=0 aws-vault --some-backend-options --prompt=osascript exec --region eu-west-1 --duration=1h root --json



   



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 微信平台通过盛派SDK(sdk.weixin.senparc.com)允许服务号和订阅号使用appId和token读取关注用户的个人信息。然而,这一过程需严格遵守隐私保护和数据安全的相关规定,确保用户数据的安全性和隐私性。 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • poj 3352 Road Construction ... [详细]
author-avatar
阳光-沙滩男人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有