【Terraform学习】保护敏感变量(Terraform配置语言学习)
实验步骤
创建 EC2 IAM 角色
导航到
IAM在左侧菜单中,单击
角色。单击创建角色该按钮以创建新的 IAM 角色。在创建角色部分,为角色选择可信实体类型:
AWS 服务
使用案例:EC2


单击下一步
添加权限:现在,您可以看到策略列表。按名称
AdministratorAccess搜索权限并添加。单击下一步
角色名称:输入
TERRAFORM_EC2您已成功按名称 TERRAFORM_EC2 创建了一个 IAM 角色。
注意:您可以使用其他名称创建角色,然后将其附加到 EC2 实例
启动 EC2 实例
请确保您位于美国东部(弗吉尼亚北部)us-east-1 区域。
顶部菜单导航到 EC2
左侧面板,单击"实例",然后单击"启动新实例"。
(1)控制台启动实例


(2)选择系统镜像

(3)选择实例类型


(4)配置实例
实例数:输入
1IAM角色:从列表中选择我们在上面创建的 IAM 角色。
将所有其他设置保留为默认值。单击"下一步:添加存储"
(5)添加存储

(6)添加标签
添加标签:点击添加标签按钮
键:
Name值:
MyEC2Instance点击
下一步:配置安全组
(7) 配置安全组
添加 SSH:
. 选择类型: 选择 SSH. 协议:TCP. 端口范围:22. 源:选择"任何位置"
点击下一步
审核和启动
(8) 审核启动
检查所有选定的设置,无误点击启动
选择现有密钥对,确认并单击启动实例


环境配置
SSH 连接到 EC2 实例
以下命令切换到root权限。
sudo su以下命令安装本实验所需软件。
yum install git -y安装 Terraform: 地址
下载仓库代码模版部署
您需要使用
git clone https://github.com/hashicorp/learn-terraform-sensitive-variables.git命令将代码模版拉取到EC2实例中确保您这些文件在同一位置。
通过运行以下命令初始化 Terraform:
terraform init注意:
terraform init将检查所有插件依赖项并下载它们。查看生成计划,请运行以下命令:
terraform plan创建在
main.tf配置文件中声明的所有资源 ,请运行以下命令:
terraform apply您将能够看到将要创建的资源,通过输入
yes批准所有资源的创建。
terraform apply命令最多可能需要 2 分钟才能创建资源。
重构数据库凭据
在文本编辑器中打开
main.tf。在文件底部附近,找到定义数据库的块,重构此配置。首先,在
variables.tf中声明数据库管理员用户名和密码的输入变量。
variable "db_username" {description = "Database administrator username"type = stringsensitive = true
}variable "db_password" {description = "Database administrator password"type = stringsensitive = true
}
请注意,您已将变量声明为
sensitive。现在更新main.tf以引用这些变量。
resource "aws_db_instance" "database" {allocated_storage = 5engine = "mysql"instance_class = "db.t2.micro"
- username = "admin"
- password = "notasecurepassword"
+ username = var.db_username
+ password = var.db_passworddb_subnet_group_name = aws_db_subnet_group.private.nameskip_final_snapshot = true
}
如果您现在要执行部署,Terraform 会提示您输入这些新变量的值,因为您尚未为它们分配默认值。但是,手动输入值非常耗时且容易出错。
接下来,您将使用两种不同的方法来设置敏感变量值。
使用tfvars文件设置值
Terraform 支持使用变量定义文件设置变量值。您可以使用多个变量定义文件,使用单独的文件来设置敏感值或机密值。
创建一个新文件
secret.tfvars,用于为新变量赋值。
db_username = "admin" db_password = "insecurepassword"
应用这些更改。
terraform apply -var-file="secret.tfvars"因为您已将新变量标记为敏感变量,所以当您运行计划、应用或销毁命令时,Terraform 会输出
<sensitive value>。
使用环境变量设置值
当Terraform运行时,它会在您的环境中查找与模式匹配的变量,并将这些值分配给配置中相应的Terraform变量。
使用环境变量为数据库管理员用户名和密码分配值。
export TF_VAR_db_username=admin TF_VAR_db_password=adifferentpassword现在,运行
terraform apply,Terraform 会将这些值分配给您的新变量。
引用敏感变量
在 Terraform 配置中使用敏感变量时,可以像使用任何其他变量一样使用它们。
将以下输出值添加到
outputs.tf。
output "db_connect_string" {description = "MySQL database connection string"value = "Server=${aws_db_instance.database.address}; Database=ExampleDB; Uid=${var.db_username}; Pwd=${var.db_password}"
}
现在应用此更改。Terraform 将引发错误,因为输出来自敏感变量。
terraform apply现在将数据库连接字符串输出标记为
sensitive,使 Terraform 将其隐藏。
output "db_connect_string" {description = "MySQL database connection string"value = "Server=${aws_db_instance.database.address}; Database=ExampleDB; Uid=${var.db_username}; Pwd=${var.db_password}"
+ sensitive = true
}
应用此更改以查看 Terraform 现在将数据库连接字符串输出。
terraform apply
## ... Outputs:db_connect_string = <sensitive>
状态中的敏感值
使用本地状态文件运行 Terraform 命令时,Terraform 会将状态存储为纯文本(包括变量值),即使您已将其标记为
sensitive。Terraform 需要将这些值存储在您的状态中,以便它可以告诉您自上次应用配置以来是否更改了它们。
terraform.tfstate"value": "Server=terraform-20210113192204255400000004.ct4cer62f3td.us-east-1.rds.amazonaws.com; Database=ExampleDB; Uid=admin; Pwd=adifferentpassword","password": "adifferentpassword", ## ...
由于 Terraform 状态可能包含敏感值,因此必须确保状态文件的安全以避免泄露此数据。
相关文章:
【Terraform学习】保护敏感变量(Terraform配置语言学习)
实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中,单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分,为角色选择可信实体类型: AWS 服务 使用案例:EC2 单击下一步 添加权限:现在,您可以看到…...
海国图志#1:这一周难忘瞬间,吐血整理,不得不看
这里记录每周值得分享的新闻大图,周日发布。 文章以高清大图呈现,解说以汉语为主,英语为辅,英语句子均来自NYTimes、WSJ、The Guardian等权威媒体原刊。 存档时段:20230731-20230806 乌克兰,波罗当卡 一名妇…...
【Android】okhttp爆java.lang.IllegalStateException: closed的解决方法
解决 java.lang.IllegalStateException: closed异常通常是由于OkHttp中的Response对象在调用response.body().string()后被关闭而导致的。 在代码中,在onResponse()方法中如果两次调用了response.body().string(),每次调用都会消耗掉响应体并关闭Respo…...
Django之定时任务--apscheduler
Django--定时任务apscheduler的使用 apscheduler定时任务的使用1、安装包2、配置settings.py3、在manage.py的文件同级目录下创建文件scheduler.py4、在项目的urls.py中调用这个定时计划5、然后启动项目 python manage.py runserver,在admin中查看就能看到你的定时任务及执行的…...
Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)
一、背景 本章讲述的是在用户下单环节,消息服务器RabbitMQ 的应用 1.1 消息服务器的应用 在写一个电商项目的小demo,在电商项目中,消息服务器的应用: 1、订单状态通知:当用户下单、支付成功、订单发货、订单完成等…...
HBuilderX
HX 简介下载安装 简介 HBuilderX 是一款由 DCloud 开发的集成开发环境 (IDE),主要用于前端开发和移动应用开发。它基于 Visual Studio Code 平台,针对 Web 开发、小程序开发、移动端开发等提供了丰富的功能和插件。 DCloud官网: https://www.dcloud.io …...
C数据结构与算法——常见排序算法时间复杂度比较 应用
实验任务 (1) 掌握常见比较排序算法的实现; (2) 掌握常用比较排序算法的性能及其适用场合。 实验内容 (1) 平均时间复杂度O(n2)和O(nlog2n)的算法至少各选两种实现; (2) 待排序的无重复关键字存放在一维整型数组中,数量为60000个ÿ…...
C++并发多线程--死锁问题及解决方法
1--死锁问题 死锁问题:两个线程访问资源时加锁,但都需要对方的资源才能执行释放锁; 代码实例:下面的代码中,当线程 1 使用 my_mutex1 上锁后,会继续使用 my_mutex2 进行上锁,若此时线程 2 已经使…...
【Spring】纯注解开发
1、简介 在Spring3.0升级了纯注解开发模式,使用Java类来代替配置文件,开启了Spring快速开发赛道。 2、定义bean Component Service Controller Repository 3、纯注解开发 使用Configuration声明一个配置类,使用ComponentScan来扫描作为bea…...
【算法心得】正确估计dfs时间复杂度;剪枝优化不怕重构
https://leetcode.cn/problems/verbal-arithmetic-puzzle/ 这题看到题,“表达式中使用的不同字符数最大为 10”,就觉得dfs就完事了,最多不过10!,10!才1e6,1e7这样。如果字符再少点,6! 7! 8!的,…...
通过网关访问微服务,一次正常,一次不正常 (nacos配置的永久实例却未启动导致)
微服务直接访问没问题,通过网关访问,就一次正常访问,一次401错误,交替正常和出错 负载均衡试了 路由配置检查了 最后发现nacos下竟然有2个order服务实例,我明明只开启了一个呀 原来之前的8080端口微服务还残留&…...
div输入框的文字超过指定行数用省略号表示css
实现效果:超过四行用省略号表示 实现方法: .text{overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 4; // 自定义行数-webkit-box-orient: vertical; }...
STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度
现在学习使用STM32 F103C8T6的定时器PWM模式,使用PWM驱动舵机转动不同角度,文章提供源码,测试工程,测试动态效果图。 目录 基础原理: 实验目标: 测试视频结果: 测试工程下载: 基…...
液体神经网络:LNN是个啥概念?
一、说明 在在人工智能领域,神经网络已被证明是解决复杂问题的非常强大的工具。多年来,研究人员不断寻求创新方法来提高其性能并扩展其能力。其中一种方法是液体神经网络(LNN)的概念,这是一个利用动态计算功能的迷人框…...
开源数据库Mysql_DBA运维实战 (DCL/日志)
SQL(Structured Query Language 即结构化查询语言) a.DDL语句 数据库定义语言: 数据库,表,视图,索引,存储过程,函数,创建删除ALTER(CREATE DROP ALTER) b.DML语句 数…...
神经网络基础-神经网络补充概念-03-逻辑回归损失函数
概念 逻辑回归使用的损失函数通常是"对数损失"(也称为"交叉熵损失")或"逻辑损失"。这些损失函数在训练过程中用于衡量模型预测与实际标签之间的差异,从而帮助模型逐步调整权重参数,以更好地拟合数…...
基于深度信念神经网络的矿石产量预测,基于DBN的矿石产量预测,DBN的详细原理
目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的矿石产量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法进行矿石产量预测 DB…...
JavaWeb-Filter过滤器
目录 Filter过滤器 1. Filter的生命周期 2.Filter的配置 3.拦截路径 4.拦截具体的使用 5.拦截方式配置(资源被访问方式) 6.FilterChain拦截链 Filter过滤器 filter是过滤器,相比于Servlet的发送请求,filter是用于拦截请求。…...
python如何实现1ms内触发两个接口请求
在Python中,可以通过多线程或者协程来实现1ms内触发两个接口请求。以下是两种方法的示例代码: 1.多线程实现: import threading import requestsdef send_request(url):response requests.get(url)print(response.text)# 创建两个线程&…...
深入解析路由与网络:网络的脉络
目录 路由 广域网 公网 外网 局域网 内网 以太网 Wi-Fi CDN IPv4和IPv6 IP地址分类 无类别域间路由(CIDR) 路由 路由是指在计算机网络中,将数据包从源地址传递到目标地址的过程。在一个复杂的网络中,数据包需要经过多…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
