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 ...
随机推荐
- cryptohack wp day(4)
接上题 第五题(Modular Inverting) 在模运算中,如果我们要解决形如a * x ≡ b mod m的方程,其中a,b,m是已知整数,x是未知整数,我们可以使用扩展欧几里得算法来找到x的 ...
- 【转】内存清零KILL进程
#include <Windows.h> #include <Ntsecapi.h> #include <Aclapi.h> #include <tlhelp ...
- 自动化运维工具-Ansible PlayBook
自动化运维工具-Ansible PlayBook PlayBook基本概念 PlayBook的组成 PlayBook即"剧本","兵书"之意,PlayBook是 ...
- Netty(1)——NIO基础
本篇主要介绍Java NIO的基本原理和主要组件 Netty是由JBOSS提供的Java开源网络应用程序框架,其底层是基于Java提供的NIO能力实现的.因此为了掌握Netty的底层原理,需要首先了解 ...
- Module not found: Error: Can't resolve 'axios' in 'D:\BaiduSyncdisk\vue-cli-project\dc_vue3\src\utils'
Module not found: Error: Can't resolve 'axios' in 'D:\BaiduSyncdisk\vue-cli-project\dc_vue3\src\util ...
- vue全家桶进阶之路14:常用属性和方法
Vue2中常用的属性和方法: 属性 el:用于指定Vue实例挂载的元素,可以是CSS选择器.HTML元素或Vue组件. data:用于存储Vue实例的响应式数据,也可以是一个函数,返回一个对象,用于提 ...
- 鼠标移入select options会触发mouseleave 事件处理方案
近来遇到一项目有一侧边工具菜单,在鼠标mouseenter事件打开对应的详细操作列表,当mouseleave时进行关闭,然操作列表中有一个select , 每当鼠标移入select options 时 ...
- 发布 markdown 小功能:指定图片尺寸
之前园子的 markdown 功能多年落后,这两年我们正在努力赶上. 今天发布一个 markdown 小功能,可以通过 markdown 语法指定图片尺寸. 指定宽度 =200x  阿里开源的Java诊断工具,它可以在运行时对Java应用程序进行动态诊断和调试 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 这个类从哪个 jar 包加 ...
- sqlmap工具学习
tryhackme:sqlmap github:https://github.com/sqlmapproject/sqlmap kali集成 参数介绍 sqlmap -h ___ __H__ ___ ...