一,引言

  最近有网友私信我,将 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

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 {
# 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 的机密管理的更多相关文章

  1. VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机

    VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...

  2. Azure Terraform(四)状态文件存储

    一,引言 我们都知道在执行部署计划之后,当前目录中就产生了名叫 "" 的 Terraform 的状态文件,该文件中记录了已部署资源的状态.默认情况下,在执行部署计划后,Terraf ...

  3. Azure Devops(十四) 使用Azure的私有Nuget仓库

    哈喽大家好,最近因为工作的原因没有时间写文章,断更了俩月,今天我们开始继续研究Azure上的功能. 今天我们开始研究一下Azure的制品仓库,在之前的流水线的相关文章中,我们都使用到了制品仓库用来保存 ...

  4. linux(十四)之linux NFS服务管理

    学到这里差不多就结束了linux的基础学习了,其实linux的内容并不难,我们要经常的反复的去操作它,多多和它去联络感情才能很好的掌握这个linux. 加油!今天是星期二.没有什么比努力让人更加热血沸 ...

  5. Linux系列教程(十四)——Linux用户和用户组管理之相关配置文件

    前面我们介绍了软件包管理.首先介绍了rpm包的相关命令,但是我们发现直接安装rpm包会被其依赖性折磨的不行,然后解决办法是yum在线管理,通过yum命令安装rpm包能自动帮助我们解决依赖性.最后又介绍 ...

  6. (二十四)JDBC应用的事务管理(转账事例)

    目录 利用 Dbutils 进行事务操作(以转账为例) 转账实现方式(不优雅的方式) ThreadLocal 类 转账实现方式(优雅的方式) 利用 Dbutils 进行事务操作(以转账为例) 我们只在 ...

  7. Android核心分析之二十四Android GDI之显示缓冲管理

    Android GDI之屏幕设备管理-动态链接库 万丈高楼从地起,从最根源的硬件帧缓冲区开始.我们知道显示FrameBuffer在系统中就是一段内存,GDI的工作就是把需要输出的内容放入到该段内存的某 ...

  8. Java开发笔记(八十四)文件与目录的管理

    程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘.固定在机箱中的硬盘.插在光驱中的光盘.插在USB接口上的U盘 ...

  9. spring boot(十四)shiro登录认证与权限管理

    这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...

  10. 一百三十四:CMS系统之版块管理二

    编辑 html,将数据渲染到tr上,方便js取值 js //编辑板块$(function () { $('.edit-board-btn').click(function (event) { var ...

随机推荐

  1. ai问答:使用 Vue3 组合式API 和 TS 配置 axios 拦截器 http错误状态

    通过 axios.create() 可以创建一个 axios 实例 axiosInstance,参数如下: baseURL:请求前缀 timeout:超时时间 headers:请求头 默认配置: im ...

  2. Finalshell

    使用VMware可以得到Linux虚拟机,但是在VMware中操作Linux的命令行页面不太方便 1.内容的复制.粘贴跨越VMware不方便 2.文件的上传.下载跨越VMware不方便 3.也就是和L ...

  3. react之todoList基础小项目

    1.项目最终成品和项目目录快照如图: 2.context.js文件 // 使用context进行多级传递数据 // 1. createContext 创建一个可以多级传递的context数据 // 2 ...

  4. 2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线, 给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围, 给定一个数字m,表示你可以补种多

    2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线, 给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围, 给定一个数字m,表示你可以补种多 ...

  5. blender 3D 建模仿真摄像头视角

    前言 摄像头的视角模拟,可以在产品概念设计阶段提供比较直观的视觉效果,通过将模型与实际环境进行校准,基本上可以通过模型来确定摄像头需要FOV,焦距,景深和安装位置及角度等参数. 由于工作需要,第一次自 ...

  6. L2-004 这是二叉搜索树吗? (25 分)

    1.题目描述: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树都是二叉搜索树 ...

  7. SignalR+Hangfire 实现后台任务队列和实时通讯

    SignalR+Hangfire 实现后台任务队列和实时通讯 1.简介: SignalR是一个.NET的开源框架,SignalR可使用Web Socket, Server Sent Events 和 ...

  8. 尚医通-day10【微信扫码登录】(内附源码)

    第01章-准备工作 1.申请微信登录 https://open.weixin.qq.com (1)注册开发者账号:准备营业执照 (2)邮箱激活 (3)完善开发者资料 (4)开发者资质认证:1-2个工作 ...

  9. 前端Vue仿滴滴打车百度地图定位查找附近出租车或门店信息(更新版)

    前端vue仿滴滴打车百度地图定位查找附近出租车或门店信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12982 效果图如下 ...

  10. LLE算法在自然语言处理中的应用:从文本到实体识别和关系抽取

    目录 文章介绍: 自然语言处理(Natural Language Processing,NLP)是人工智能领域的重要分支,它研究如何将人类语言转化为计算机可理解的格式.NLP的应用非常广泛,从语言翻译 ...