当前位置: 首页 > news >正文

Terraform实战(三)-在AWS上尝试Terraform的Vault Provider

使用自Terraform 0.8起添加的Vault Provider后,aws云基础设施尝试从Vault而不是tfvars或环境变量中读取AWS凭证。

1 什么是vault?

vault是一种由Hashicorp发布的用于管理机密信息的工具。

2 aws使用Terraform的Vault Provider

2.1 创建静态密钥

以开发模式启动Vault。

在开发模式下,机密会记录在内存中,并在停止时清除。

$ vault server -dev 

设置VAULT_ADDR环境变量以从客户端操作Vault。

$ export VAULT_ADDR=http://127.0.0.1:8200

在开发模式下,没有TLS,并且您在启动时以Unseal或root用户身份登录。
在实际环境中,访问保管库要求使用解锁密钥和用户身份验证进行解锁。
有关此区域的图像,我认为您应该体验官方的交互式教程。

静态写入AWS访问密钥/秘密访问密钥。

$ vault write secret/aws_test access_key=xxxxxxxxxxxxxx secret_key=xxxxxxxxxxxxxxxxxxxxSuccess! Data written to: secret/aws_test

如果您不想将其保留在shell历史记录中,请以JSON格式编写,并使用@指定文件

$ vault write secret/aws_test @data.json

2.2 创建一个TF文件

vault_generic_secret使用数据源。

我使用Terraform Module Registry中的ec2-instance模块启动了EC2。

data "vault_generic_secret" "aws_test" {path = "secret/aws_test"
}provider "aws" {access_key = "${data.vault_generic_secret.aws_test.data["access_key"]}"secret_key = "${data.vault_generic_secret.aws_test.data["secret_key"]}"region     = "ap-northeast-1"
}# fileter latest AMI
data "aws_ami" "amazon_linux" {most_recent = truefilter {name = "name"values = ["amzn-ami-hvm-*-x86_64-gp2",]}filter {name = "owner-alias"values = ["amazon",]}
}module "ec2-instance" {source = "terraform-aws-modules/ec2-instance/aws"name  = "aws_test_ec2"count = 1ami                    = "${data.aws_ami.amazon_linux.id}"instance_type          = "t2.micro"key_name               = "keyname"vpc_security_group_ids = ["sg-12345678"]
}

2.3  运行

  • terraform init
  • terraform plan
  • terraform apply
$terraform plan
Refreshing Terraform state in-memory prior to plan...
T he refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.data.vault_generic_secret.aws_test: Refreshing state...
data.aws_ami.amazon_linux: Refreshing state...
以下略..

如果未设置vault为unseal,则将输出以下错误 :

$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.Error refreshing state: 1 error(s) occurred:* provider.vault: failed to create limited child token: Error making API request.URL: POST http://127.0.0.1:8200/v1/auth/token/create
Code: 503. Errors:* Vault is sealed

很重要的一点,从vault读取的数据以明文形式记录在tfstate中。因此TFstate管理必须严格。

相关文章:

  • MySQL用心总结
  • Linux嵌入式开发+驱动开发-中断
  • Kylin系统下Qt的各种中文问题解决思路
  • 力扣刷题之旅:进阶篇(三)
  • 【原创】MQTT开发笔记(四)- 压力测试
  • 单片机基础入门:简单介绍51单片机的工作原理
  • 【原创 附源码】Flutter海外登录--Tiktok登录最详细流程
  • [论文总结] 深度学习在农业领域应用论文笔记12
  • 第十七篇【传奇开心果系列】Python的OpenCV库技术点案例示例:自适应阈值二值化处理图像提取文字
  • vue3 之 商城项目—一级分类
  • Python编写远程控制工具--被控端的编写
  • 哈工大团队顶刊发布!由单偏心电机驱动的爬行机器人实现多方向运动传递
  • DDoS攻击激增,分享高效可靠的DDoS防御方案
  • 使用Arcgis裁剪
  • HttpClient | 支持 HTTP 协议的客户端编程工具包
  • [LeetCode] Wiggle Sort
  • 【个人向】《HTTP图解》阅后小结
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • angular学习第一篇-----环境搭建
  • HTML5新特性总结
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Leetcode 27 Remove Element
  • leetcode讲解--894. All Possible Full Binary Trees
  • Linux链接文件
  • mysql innodb 索引使用指南
  • Quartz初级教程
  • SOFAMosn配置模型
  • uni-app项目数字滚动
  • vue数据传递--我有特殊的实现技巧
  • 反思总结然后整装待发
  • 简单实现一个textarea自适应高度
  • 每天10道Java面试题,跟我走,offer有!
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 用Python写一份独特的元宵节祝福
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #define 用法
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (南京观海微电子)——COF介绍
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .gitignore文件---让git自动忽略指定文件
  • .jks文件(JAVA KeyStore)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 6 redis操作类
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core 中插件式开发实现
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net framework 4.0中如何 输出 form 的name属性。
  • @GlobalLock注解作用与原理解析
  • @我的前任是个极品 微博分析