【Terraform学习】保护敏感变量(Terraform配置语言学习)

news2024/9/29 19:28:04

实验步骤

创建 EC2 IAM 角色

  • 导航到IAM

  • 左侧菜单中,单击角色 。单击创建角色该按钮以创建新的 IAM 角色

  • 在创建角色部分,为角色选择可信实体类型

    • AWS 服务

    • 使用案例:EC2

创建IAM

 

 

  • 单击下一步

    • 添加权限:现在,您可以看到策略列表。按名称AdministratorAccess搜索权限并添加。

    • 单击下一步

    • 角色名称:输入 TERRAFORM_EC2

    • 已成功按名称 TERRAFORM_EC2 创建了一个 IAM 角色。

  • 注意:您可以使用其他名称创建角色,然后将其附加到 EC2 实例


启动 EC2 实例

  • 请确保您位于美国东部(弗吉尼亚北部)us-east-1 区域。

  • 顶部菜单导航到 EC2

  • 左侧面板,单击"实例",然后单击"启动新实例"

(1)控制台启动实例

控制台启动实例

 

 

(2)选择系统镜像

选择系统镜像

 

(3)选择实例类型

选择实例类型

  

 

(4)配置实例

  • 实例数:输入 1

  • IAM角色:从列表中选择我们在上面创建的 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        = string
  sensitive   = true
}

variable "db_password" {
  description = "Database administrator password"
  type        = string
  sensitive   = true
}
  • 请注意,您已将变量声明为sensitive。现在更新main.tf以引用这些变量

resource "aws_db_instance" "database" {
  allocated_storage = 5
  engine            = "mysql"
  instance_class    = "db.t2.micro"
-  username          = "admin"
-  password          = "notasecurepassword"
+  username          = var.db_username
+  password          = var.db_password

  db_subnet_group_name = aws_db_subnet_group.private.name

  skip_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 状态可能包含敏感值,因此必须确保状态文件的安全以避免泄露此数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/852830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentieon | 每周文献-Multi-omics(多组学)-第九期

多组学系列文章-1 标题&#xff08;英文&#xff09;&#xff1a; Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题&#xff08;中文&#xff09;&#xff1a; 基于多组学分析和综合模型…

Java使用String来开发验证码

Java使用String来开发验证码 需求分析代码实现小结Time 需求分析 使用String来开发验证码。 实现随机产生验证码&#xff0c;验证码的每位可能是数字、大写字母、小写字母 根据需求分析&#xff0c;步骤如下&#xff1a; 1.首先&#xff0c;设计一个方法&#xff0c;该方法接收…

细胞——求细胞数量 C++详解

细胞——求细胞数量 C详解 求细胞数量题目描述输入格式输出格式样例样例输入样例输出 提示数据规模与约定 解法代码 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还…

产品经理回到三线城市能去干什么?

首先要强调一个重要原则&#xff1a;尽量待在一线城市。我们付出了很多努力&#xff0c;在大城市生活了好几年&#xff0c;如果不能在这里获得成功&#xff0c;真的愿意回到原来的地方吗&#xff1f;我出生在山东农村&#xff0c;家庭条件很普通。自从上大学时&#xff0c;我就…

企业权限管理(二)-环境搭建

环境搭建 项目的基本架构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

Drools用户手册翻译——第四章 Drools规则引擎(十三)复杂事件处理(CEP)会话时钟,事件流和切入点

甩锅声明&#xff1a;本人英语一般&#xff0c;翻译只是为了做个笔记&#xff0c;所以有翻译错误的地方&#xff0c;错就错了&#xff0c;如果你想给我纠正&#xff0c;就给我留言&#xff0c;我会改过来&#xff0c;如果懒得理我&#xff0c;就直接划过即可。 目录 会话时钟…

无货源无技术无专业做跨境电商?Live Market一站式服务助你出海

近年来&#xff0c;我国跨境电商发展取得可喜进展。商务部数据显示&#xff0c;跨境电商货物进出口规模占外贸比重由5年前的不足1%上升到目前的5%左右。越来越多的资本开始重视这一领域&#xff0c;越来越多的玩家开始布局。 然而&#xff0c;对于普通商家来说想要踏足跨境电商…

解决VtsHalLightTargetTest问题

一、问题描述&#xff1a; 二、解决方案&#xff1a; Date: Fri, 14 Jul 2023 11:14:31 0800 Subject: [PATCH] fix: 解决VtsHalLightTargetTest问题Description:依据报错修改代码Self Test:PassChange-Id: Ia0bca62480cd26845b285ae61c3d8264d8555d9a ---diff --git a/aidl/d…

软件开发项目文档清单(多套实际案例)

写在前面&#xff1a; 我花了一些时间整理了这些年从事软件行业以来的文档&#xff0c;将它们分类整理后&#xff0c;电脑瞬间变得更加简洁。我整理了数百份软件开发过程中的常用文档&#xff0c;包括项目计划、立项计划、需求分析、概要设计、详细设计、数据库设计、用户操作手…

mysql不用窗口函数,后面加一列序号

前言 在后端开发中最常用的数据库还是比较稳定的5.8&#xff0c;而窗口函数是只有在mysql8以上才有的&#xff0c;然后在开发中有个需要排序序号的需求&#xff0c;翻找资料&#xff0c;问AI得出结论可以实现。 列出方法 如果你使用的是MySQL 5.7版本&#xff0c;而没有窗口…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理&#xff1f;如果你的组织处理关键或敏感的业务数据&#xff0c;测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%&#xff0c;这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

【雕爷学编程】Arduino动手做(200)---WS2812B幻彩LED灯带6

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

云服务器选什么系统

特网科技是一家领云计算服务提供商&#xff0c;拥有全球性服务&#xff0c;覆盖了超过200个国家和地区&#xff0c;提供多种不同的服务器操作系统&#xff0c;包括常见的Linux和Windows&#xff0c;以及一些非常特殊的OS&#xff0c;如FreeBSD和OpenSUSE。如何选择合适的操作系…

PCB状态字段细分,线程安全问题,加锁,synchronized

补充&#xff1a;之前的线程休眠 sleep &#xff0c;参数是以ms作为单位&#xff0c;但是sleep本身就存在一些误差。sleep(1000),不一定是精确在休眠1000ms&#xff08;线程的调度&#xff0c;也是需要时间的&#xff09; sleep&#xff08;1000&#xff09;的意思是说该线程在…

js案例:1.简单计算器

目录 一.效果图 二.实现思路 整体思路 ​ 1.关键是dom操作 ​ 2.设置点击事件 3.数据类型的隐式转换和赋值 三.完整代码 一.效果图 二.实现思路 整体思路 1.关键是dom操作 通过 document.getElementById(id) 获取html中的dom元素 每一个html标签都是一个对象&…

如何用看板让你的项目管理更上一层楼

项目管理的核心挑战 项目管理始终是一个充满挑战的领域。在多变的环境中&#xff0c;管理一个项目并确保其成功完成是一项巨大的任务。那么&#xff0c;为什么项目管理会如此复杂呢&#xff1f; 概述项目的复杂性 每一个项目都有其独特性&#xff0c;无论是项目的规模、团队…

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上&#xff0c;使用常规命令&#xff1a;systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误&#xff1a; Failed to start mysqld.service: Unit not found. 根据所报错误&#xff0c;在网上搜罗了一圈&#xff0c;未果&#x…

跨境电商B2B2C多用户商城快速搭建(java开源+多语言)

跨境电商已经成为一种重要的商业模式。在跨境电商领域&#xff0c;B2B2C多用户商城是一种常见的商业模式&#xff0c;即面向商家和终端消费者的电商模式。这种模式下&#xff0c;多个商家可以在同一个电商平台上销售商品&#xff0c;终端消费者可以在该平台上购买商品。具体搭建…

【图像去噪的扩散滤波】基于线性扩散滤波、边缘增强线性和非线性各向异性滤波的图像去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

React 入门学习

React 入门 一、基本认识1.1、前言1.2、什么是1.3、编译<br>1.4、特点1.5、高效 二、React环境和基本使用2.1、环境搭建2.2、脚手架项目基本使用2.2.1、src2.2.2、public2.2.3、package.json 三、JSX的理解和使用四、模块与模块化, 组件与组件化的理解4.1、模块与组件4.2…