Azure Terraform(十四)Azure Key Vault 的机密管理
一,引言
最近有网友私信我,将 Terraform 部署到 Azure 是一种将基础结构作为代码进行管理的好方法,但是如何使用 Azure Key Vault 来存储我们的 Secret ?在这篇博文中,我将给大家展示一下展示如何使用 Terraform 引用 Azure Key Vault Secret。
1)这个时候就有人问了,Secret 信息为什么要存储在 Azure Key Vault ?
Azure Key Vault 是在 Azure 中存储机密的好方法。它是存储和访问 Secret 的安全场所。您可以生成、存储和控制对令牌、密码、证书、API 密钥和其他秘密的访问。
让我们一起开始今天的内容来展示如何做到这一点 ?
二,正文
1,使用 Terraform 创建 Azure Key Vault
让我们使用Terraform 创建一个 Key Vault
data "azurerm_resource_group" "cnbate_resource_group" {
name = "Web_Test_TF_RG"
}
resource "azurerm_key_vault" "keyvault1" {
name = "cnbateblogwebkv"
resource_group_name = data.azurerm_resource_group.cnbate_resource_group.name
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
location = data.azurerm_resource_group.cnbate_resource_group.location
access_policy {
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = data.azurerm_client_config.current.object_id
secret_permissions = [
"Get",
"List",
"Set",
"Delete"
]
}
}
2,使用 Terraform 和 Azure CLI 创建 Secret
Terraform:
resource "azurerm_key_vault_secret" "keyvault_secret1" {
name = "Name1"
value = "cnbatelisi"
key_vault_id = azurerm_key_vault.kv.id
}

使用 Azure CLI 创建第二个 Key Vault 机密
az keyvault secret set --vault-name cnabteblogwebkv --name Name2 --value cnbatewangwu

登录 Azure Portal,找到资源组 " Web_Test_TF_RG " 下的名字叫 “” 的 Key vault
下面创建的两个 Secret :

3,引用 Terraform 中的两个秘密
在这个例子中,我在上面添加了两个 Secret 。我现在将展示如何在 Terraform 中引用它们。
第一个将根据 Terraform 创建的 Secret 创建一个 Storage Account。第二个将根据 Azure CLI 创建的机密创建一个存储帐户。
resource "azurerm_storage_account" "storage_account1" {
name = azurerm_key_vault_secret.keyvault_secret1.value
resource_group_name = data.azurerm_resource_group.cnbate_resource_group.name
location = data.azurerm_resource_group.cnbate_resource_group.location
account_tier = "Standard"
account_replication_type = "LRS"
depends_on = [
data.azurerm_resource_group.cnbate_resource_group,
azurerm_key_vault_secret.keyvault_secret1
]
}
对于第二个示例,我将使用 datasource 来引用 Azure CLI 创建的 keyvault_secret2
完整代码:

terraform {
# backend "azurerm" {
# storage_account_name = "cnbatestorestatefile004"
# container_name = "terraform-state"
# key = "cnbate.terraform.stats"
# }
required_providers {
azurerm = {
}
}
}
provider "azurerm" {
features {}
}
locals {
location_eastAsia = "East Asia"
}
data "azurerm_client_config" "current" {
}
data "azurerm_resource_group" "cnbate_resource_group" {
name = "Web_Test_TF_RG"
}
resource "azurerm_key_vault" "keyvault1" {
name = "cnbateblogwebkv"
resource_group_name = data.azurerm_resource_group.cnbate_resource_group.name
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
location = data.azurerm_resource_group.cnbate_resource_group.location
access_policy {
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = data.azurerm_client_config.current.object_id
secret_permissions = [
"Get",
"List",
"Set",
"Delete"
]
}
}
resource "azurerm_key_vault_secret" "keyvault_secret1" {
name = "Name1"
value = "cnbatelisi"
key_vault_id = azurerm_key_vault.keyvault1.id
}
resource "azurerm_storage_account" "storage_account1" {
name = azurerm_key_vault_secret.keyvault_secret1.value
resource_group_name = data.azurerm_resource_group.cnbate_resource_group.name
location = data.azurerm_resource_group.cnbate_resource_group.location
account_tier = "Standard"
account_replication_type = "LRS"
depends_on = [
data.azurerm_resource_group.cnbate_resource_group,
azurerm_key_vault_secret.keyvault_secret1
]
}
data "azurerm_key_vault_secret" "keyvault_secret2" {
name = "Name2"
key_vault_id = azurerm_key_vault.keyvault1.id
}
resource "azurerm_storage_account" "storage_account2" {
name = data.azurerm_key_vault_secret.keyvault_secret2.value
resource_group_name = data.azurerm_resource_group.cnbate_resource_group.name
location = data.azurerm_resource_group.cnbate_resource_group.location
account_tier = "Standard"
account_replication_type = "LRS"
depends_on = [
data.azurerm_resource_group.cnbate_resource_group
]
}
Terraform Code
登录 Azure Portal,查看利用Terraform 创建好的 Storage Account

Bingo!!!!! ️️
三,结尾
在这篇博文中,主要向大家展示了如何使用 Azure Key Vault 来存储 Terraform 创建的 Secret。我希望您觉得这很有用。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,望包含,并且指出不足之处!!!!!
参考链接:Terraform Key vault
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Terraform(十四)Azure Key Vault 的机密管理的更多相关文章
- VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机
VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...
- Azure Terraform(四)状态文件存储
一,引言 我们都知道在执行部署计划之后,当前目录中就产生了名叫 "" 的 Terraform 的状态文件,该文件中记录了已部署资源的状态.默认情况下,在执行部署计划后,Terraf ...
- Azure Devops(十四) 使用Azure的私有Nuget仓库
哈喽大家好,最近因为工作的原因没有时间写文章,断更了俩月,今天我们开始继续研究Azure上的功能. 今天我们开始研究一下Azure的制品仓库,在之前的流水线的相关文章中,我们都使用到了制品仓库用来保存 ...
- linux(十四)之linux NFS服务管理
学到这里差不多就结束了linux的基础学习了,其实linux的内容并不难,我们要经常的反复的去操作它,多多和它去联络感情才能很好的掌握这个linux. 加油!今天是星期二.没有什么比努力让人更加热血沸 ...
- Linux系列教程(十四)——Linux用户和用户组管理之相关配置文件
前面我们介绍了软件包管理.首先介绍了rpm包的相关命令,但是我们发现直接安装rpm包会被其依赖性折磨的不行,然后解决办法是yum在线管理,通过yum命令安装rpm包能自动帮助我们解决依赖性.最后又介绍 ...
- (二十四)JDBC应用的事务管理(转账事例)
目录 利用 Dbutils 进行事务操作(以转账为例) 转账实现方式(不优雅的方式) ThreadLocal 类 转账实现方式(优雅的方式) 利用 Dbutils 进行事务操作(以转账为例) 我们只在 ...
- Android核心分析之二十四Android GDI之显示缓冲管理
Android GDI之屏幕设备管理-动态链接库 万丈高楼从地起,从最根源的硬件帧缓冲区开始.我们知道显示FrameBuffer在系统中就是一段内存,GDI的工作就是把需要输出的内容放入到该段内存的某 ...
- Java开发笔记(八十四)文件与目录的管理
程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘.固定在机箱中的硬盘.插在光驱中的光盘.插在USB接口上的U盘 ...
- spring boot(十四)shiro登录认证与权限管理
这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...
- 一百三十四:CMS系统之版块管理二
编辑 html,将数据渲染到tr上,方便js取值 js //编辑板块$(function () { $('.edit-board-btn').click(function (event) { var ...
随机推荐
- Docker compose单机编排工具
Docker compose单机编排工具 目录 Docker compose单机编排工具 docker-compose介绍 Docker Compose使用的三步: docker-compose安装部 ...
- 2023-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver
2023-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver ...
- 2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +-------+------+ | 4.
2022-11-23: 分数排名.输出结果和表的sql如下.请写出输出结果的sql语句? ±------±-----+ | score | rank | ±------±-----+ | 4.00 | ...
- 2020-12-07:go中,slice的底层数据结构是什么?
福哥答案2020-12-07: 源码位于runtime/slice.go文件中的slice结构体. type slice struct { array unsafe.Pointer len int c ...
- 2020-12-05:go中,map的扩容流程是什么?
福哥答案2020-12-05:[答案来自此链接:](https://www.bilibili.com/video/BV1Nr4y1w7aa?p=13) 源码位于runtime/map.go文件中的ha ...
- 2022-02-14:k8s安装gogs,yaml如何写?
2022-02-14:k8s安装gogs,yaml如何写? 答案2022-02-14: yaml如下: apiVersion: v1 kind: Service metadata: labels: a ...
- 【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题
问题描述 当使用Azure Redis服务时,需要把一个Redis服务的数据导入到另一个Redis上,因为Redis服务没有使用高级版,所以不支持直接导入/导出RDB文件. 以编程方式来读取数据并写入 ...
- C# 中的“智能枚举”:如何在枚举中增加行为
目录 枚举的基本用法回顾 枚举常见的设计模式运用 介绍 智能枚举 代码示例 业务应用 小结 枚举的基本用法回顾 以下是一个常见的 C# 枚举(enum)的示例: enum Weekday { Mond ...
- 《啊哈C语言——逻辑的挑战》学习笔记
第一章 梦想启航 第1节 让计算机开口说话 1.基础知识 1)计算机"说话"的两种方式 显示在屏幕上 通过喇叭发出声音 2)计算机"说话"之显示在屏幕上 格式: ...
- k8s资源对象(二)
Configmap和Secret资源介绍 secret和configmap资源都是通过挂载的方式将对应数据挂载到容器内部环境中去使用,两者的使用没有太多的不同 ,configmap资源通常用于为pod ...