Azure Terraform(十四)Azure Key Vault 的机密管理

azure,terraform,十四,key,vault,机密,管理 · 浏览次数 : 71

小编点评

**引言** Terraform 是一个强大的工具用于管理基础设施的代码。然而,密钥管理是一个复杂的过程,需要对密钥进行存储、访问和控制。Azure Key Vault 是 Azure 中一个安全的地方存储和访问密钥的解决方案。 **使用 Terraform 创建 Azure Key Vault** 首先,我们需要创建一个 azurerm provider 并定义资源组名称和 location。 ```terraform provider "azurerm" { features { } } locals { location_eastAsia = "East Asia" } ``` **创建 Key Vault 数据** 创建 Key Vault 数据包含名称、资源组名称、 location 和访问政策。 ```terraform 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"] } } ``` **使用 Key Vault 存储 Secret** 最后,我们创建一个 azurerm_storage_account 数据,并将 Key Vault 数据作为其存储数据。 ```terraform 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 = [ azurerm_key_vault.keyvault1 ] } ``` **总结** 通过使用 Azure Key Vault 来存储 Terraform 创建的 Secret,我们可以在确保密钥的安全性并简化基础设施管理流程。

正文

一,引言

  最近有网友私信我,将 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 的机密管理相似的内容:

Azure Terraform(十四)Azure Key Vault 的机密管理

一,引言 最近有网友私信我,将 Terraform 部署到 Azure 是一种将基础结构作为代码进行管理的好方法,但是如何使用 Azure Key Vault 来存储我们的 Secret ?在这篇博文中,我将给大家展示一下展示如何使用 Terraform 引用 Azure Key Vault Sec

Azure Terraform(十三)提升 Azure Web App Plan 的性能

一,引言 一,引言 我们是否正在为部署在云主机上的应用程序性能缓慢和停机问题而苦恼?我们是否正在因为云主机上仅仅部署了应用程序,在流量平缓的时候而浪费大量的计算资源而心疼荷包。那么让我们来一起看看 Azure Web App Plan 吧!今天我们以 IAC 的方式来控制资源的创建,通过使用 Ter

Azure Terraform(十二)利用 Terraform 将文件上传到 Azure Blob Storage

一,引言 本篇文章中,我门将学习如何利用 Terraform 将 文件以及文件夹上传到 Azure Blob Storage,这个对于我们来说很方便,可以将一些不重要的内容也存储在源代码管理工具中! 开始今天的内容之前,我们先来看看今天的主角 Terraform fileset Function 根

【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)

在前一篇文章中,我们是把.NET 8应用读取SSL证书(X509)示例部署在App Service Windows环境中,那么如果部署在Linux环境,以及Linux Container中呢? 根据前文中的第一种方法,直接在把证书文件包含在源文件中,通过相对路径读取证书文件的方式,经测试,可以正常工

【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)

在使用App Service服务部署业务应用,因为有些第三方的接口需要调用者携带TLS/SSL证书(X509 Certificate),在官方文档中介绍了两种方式在代码中使用证书: 1) 直接使用证书文件路径加载证书 new X509Certificate2 2) 从系统的证书库中通过指纹加载...

Azure Service Principals ----- Azure 上最好保守的秘密的服务

一,引言 Azure Service Principals 是 Azure Active Directory (AAD) 中的一种标识,代表应用程序,服务,自动化流程。Service Principals 支持各种 Azure 服务和资源之家的安全通信,为应用程序提供了一种进行身份验证并于 Azur

【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码

问题描述 对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答 当然可以,Azure Portal上操作的所有资源都是通过REST API来实现的,所以只要找到正确的API,就可以通过浏览器中抓取

【Azure APIM】列举几种在APIM 策略中的主动生产的错误语句

问题描述 在为APIM服务配置了诊断日志(Diagnostic Setting),把日志收集在Log A Workspace中,需要验证日志中是否能查看到请求的错误信息。 所以想人为的来制造一些错误。经过网络搜索,参考Policy的文档介绍后,完成了以下3种错误 第一种:使用 return-resp

【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG

问题描述 看见一个有趣的页面,可以把输入的文字信息,直接输出SVG图片,还可以实现动图模式。 示例URL: https://readme-typing-svg.demolab.com/?font=Fira+Code&pause=1000&color=F7F7F7&background=233911F

Azure DevOps Server 入门实践与安装部署

一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习。本着学习的目的,我也就开始学习在测试服务器上安装 Azure DevOps Server 2022 Express 以及测试的 D