首页 > 其他分享 >Azure Terraform(十四)Azure Key Vault 的机密管理

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

时间:2023-08-07 16:56:11浏览次数:40  
标签:resource azurerm Terraform Key vault Azure group data name

一,引言

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

标签:resource,azurerm,Terraform,Key,vault,Azure,group,data,name
From: https://www.cnblogs.com/AllenMaster/p/17420450.html

相关文章

  • [Microsoft Azure] Microsoft Azure VM IP地址更换的方法和步骤详解
    在本文中,我们将详细介绍如何更改MicrosoftAzureVM的IP地址。对于使用AzureVM的用户来说,有时可能需要更改IP地址,以满足特定的网络需求或解决IP地址冲突问题。以下是更改AzureVMIP地址的方法和步骤详解。概述:登录到Azure门户打开虚拟机详细信息页面创建新......
  • autoHotKey
    autoHotKey快捷指令(自用)自用的写代码快捷键指令,存档设置当前脚本自启动的方式<!i::SendInput{Up};发送上方向键的信号return<!m::SendInput{Down};发送下方向键的信号return<!j::SendInput{Left};发送左方向键的信号return<!l::SendInput{Right};发送......
  • 异常: java.security.InvalidKeyException: Illegal key size
    问题描述importorg.apache.commons.codec.digest.DigestUtils;importorg.bouncycastle.jce.provider.BouncyCastleProvider;importjavax.crypto.Cipher;importjavax.crypto.spec.SecretKeySpec;importjava.security.Security;importjava.util.Base64;publicclass......
  • [迎风奔雨] terraform create pubsub and inputs
    terragrunt.hcl---------------------------------------------------------------------------------------------------------------------------------------inputs={topics=[{name="my-topic-1"subscriptions=[{......
  • [Microsoft Azure] 使用 Microsoft Azure VM 快速创建宝塔面板并安装 WordPress 博客
     视频演示:[MicrosoftAzure]使用MicrosoftAzureVM快速创建宝塔面板并安装WordPress博客-Bilibili概述:创建AzureVM配置AzureVM安装宝塔面板安装WordPress步骤1:创建AzureVM首先,登录到MicrosoftAzure门户(https://portal.azure.com/)并使用您的Micros......
  • [Microsoft Azure] 基于Microsoft Azure VM 虚拟机快速搭建宝塔管理面板
    如果您正在使用MicrosoftAzure虚拟机(VM),并需要快速搭建Web管理面板,那么本文将介绍如何在其中安装宝塔面板。视频演示:[MicrosoftAzure]基于MicrosoftAzureVM虚拟机快速搭建宝塔管理面板-Bilibili1.创建虚拟机首先,您需要创建AzureVM实例。可以选择Linux或W......
  • A small keychain has so many details
    Keychainsarefamiliartoallofusandcanbeusedbasicallyinourdailylife.Atfirst,weusedkeychainssimplytocollectkeyssothattheywouldnotbelosteasily.Gradually,therearemoreandmoretypesandpatternsofkeychains,andtheyhavegr......
  • 【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
    问题描述在昨天的文章中,创建了Disk+PV+PVC+POD方案(https://www.cnblogs.com/lulight/p/17604441.html),那么如何进入到POD之中去查看文件呢?如PVCVolumeMounts中文件? 问题解答第一步:进入POD内部(查看文件)使用  kubectlexec-it <yourpodname>--/bin/sh ......
  • 获取Bucket网址和key
        ......
  • redis删除key
    [root@izuf6byjhd4wd8vdncreg8z~]#locateredis-server/usr/local/redis/bin/redis-server/usr/local/redis/src/redis-server[root@izuf6byjhd4wd8vdncreg8z~]#/usr/local/redis/bin/redis-cli127.0.0.1:6379>keys"SCHEDULED:SKU"(emptyarray)127......