所有文章 > 日积月累 > 快速上手 Azure Key Vault:实用技巧与最佳实践
快速上手 Azure Key Vault:实用技巧与最佳实践

快速上手 Azure Key Vault:实用技巧与最佳实践

Azure Key Vault 是微软提供的云端密钥和秘密管理解决方案,专注于帮助开发者安全存储敏感数据。本文将带你全面了解 Azure Key Vault 的核心功能,从零信任安全策略到实践操作,助你轻松管理 API 密钥、数据库连接字符串等应用秘密。通过本教程,你将学会如何在虚拟机和 Kubernetes 集群中访问和使用 Key Vault 中的秘密,为云端开发保驾护航。

什么是零信任安全策略?

零信任安全策略是一种现代化的网络安全方法,强调不信任任何内部或外部请求,无论其来源或访问的资源如何。零信任的基础是不断验证每个访问请求,以确保系统的安全性和完整性。

零信任的核心原则解析:不信任,始终验证

零信任模型的核心在于“从不信任,始终验证”。与传统的安全方法不同,零信任假设安全防护的周界已经受到威胁,因此每个访问请求都需要经过严格的验证。这个策略包括三个主要原则:

  1. 明确验证:基于所有可用的数据点进行身份验证和授权。
  2. 最小权限访问:使用Just-In-Time (JIT) 和 Just-Enough-Access (JEA)来限制用户访问权限,并根据风险进行访问控制。
  3. 假设已经被攻破:通过划分访问区域和完善加密措施来最小化潜在的攻击面。

引用的图片展示了零信任策略的核心思想:

零信任的核心原则

零信任如何适用于云端应用和数据保护

在云环境中,应用和数据的安全性是零信任策略的重点。Azure Key Vault等工具提供了一个强大的平台,可以帮助管理和保护应用所需的机密信息。它不仅限于密钥管理,还包括证书管理和应用程序的安全性。

Azure Key Vault通过以下方式支持零信任策略:

  1. 提供中央存储来管理应用程序机密,减少意外泄露的风险。
  2. 通过Azure Active Directory和Azure RBAC确保正确的身份验证和授权。
  3. 使用软件或硬件安全模块(HSMs)保护密钥和机密。

下图展示了Azure Key Vault在管理机密方面的作用:

Azure Key Vault的应用

零信任策略在保护云端应用和数据方面提供了一个全面的框架,通过持续验证和最小化权限确保数据始终受到保护。通过Azure Key Vault的集成,云环境中的安全性得到了进一步提升。

Azure Key Vault 的主要功能与优势

全面了解 Key Vault 的秘密管理、密钥管理和证书管理

Azure Key Vault 是一个综合性的密钥管理解决方案,不仅限于秘密管理,还包括密钥管理和证书管理。通过集中存储应用程序的秘密信息,Azure Key Vault 有效地减少了意外泄露的风险,并消除了在应用程序代码中嵌入安全信息的必要性。密钥和秘密可以通过软件或硬件安全模块(HSMs)进行保护,以增强安全性。借助 Azure Active Directory 和 Azure RBAC,Azure Key Vault 提供了正确的身份验证和授权机制,从而确保了安全存储和访问控制。

通过上图可以看出,Azure Key Vault 提供了强大的功能来保护敏感信息的安全,支持零信任安全策略的实施。

如何利用 Azure Key Vault 与其他 Azure 服务集成

Azure Key Vault 不仅自身提供了强大的安全管理功能,还能轻松集成到其他 Azure 服务中,例如 Azure Disk Encryption、SQL Server 和 Azure App Service。这种集成能力使得 Azure Key Vault 成为 Azure 生态系统中不可或缺的一部分,帮助用户实现更高效的资源管理和安全策略。通过与其他服务的无缝集成,Azure Key Vault 可以简化管理流程,提升整体系统的安全性和可用性。

在 Azure Key Vault 的广泛应用中,其核心优势在于能够确保数据的安全加密、便捷的访问控制以及与现有 Azure 服务的深度集成。这些功能不仅满足了企业对于安全管理的高标准要求,还提升了整个云环境的运营效率。

通过 Azure CLI 创建 Key Vault 资源

使用 Azure CLI 创建资源组和 Key Vault

在使用 Azure CLI 创建 Azure Key Vault 资源之前,首先需要创建一个资源组。资源组是 Azure 中管理和组织资源的逻辑容器。通过以下命令,可以在指定区域创建一个名为 myResourceGroup 的资源组:

az group create --name "myResourceGroup" --location "EastUS"

创建资源组后,即可通过 Azure CLI 创建 Key Vault。确保 Key Vault 的名称在 Azure 中是唯一的。以下命令将在 myResourceGroup 中创建一个名为 myKeyVault 的 Key Vault:

az keyvault create --name "myKeyVault" --resource-group "myResourceGroup" --location "EastUS"

如何在 Key Vault 中创建和管理秘密

Azure Key Vault 提供了安全存储和管理秘密(如密码和连接字符串)的功能。要在 Key Vault 中创建一个秘密,可以使用以下命令,将名称为 ExampleSecret 的秘密设置为 MySecretValue

az keyvault secret set --vault-name "myKeyVault" -n ExampleSecret --value MySecretValue

创建秘密后,可以通过以下命令查看其详细信息,以验证秘密是否成功存储:

az keyvault secret show --vault-name "myKeyVault" -n ExampleSecret

利用 Azure Key Vault 的秘密管理功能,可以将应用程序的敏感数据安全地存储在云端,减少因意外泄露而导致的风险。通过合理的访问控制策略,Azure Key Vault 确保只有经过授权的用户和应用程序能够访问这些关键信息。

在虚拟机中访问 Key Vault 中的秘密

在本节中,我们将介绍如何在虚拟机中访问 Azure Key Vault 中存储的秘密,并确保操作的安全性和有效性。Azure Key Vault 是一个强大的工具,用于管理和保护应用程序所需的敏感信息,如密码和 API 密钥。

创建虚拟机并配置系统分配身份

首先,我们需要创建一个虚拟机并为其分配系统身份,以便它能够访问 Azure Key Vault 中的秘密。使用以下命令创建虚拟机,并自动生成 SSH 密钥:

az vm create 
  --resource-group myResourceGroup 
  --name myVM 
  --image UbuntuLTS 
  --admin-username azureuser 
  --generate-ssh-keys

创建虚拟机后,我们需要为其分配一个系统分配身份,以便能够获得访问 Key Vault 的权限:

az vm identity assign --name "myVM" --resource-group "myResourceGroup"

接下来,使用以下命令为该身份分配访问 Key Vault 的权限:

az keyvault set-policy --name "myKeyVault" --object-id "" --secret-permissions get list

编写 Python 应用程序访问 Key Vault 中的秘密

在虚拟机上,我们将编写一个简单的 Python 应用程序以读取 Key Vault 中的秘密。首先,连接到虚拟机,并安装所需的 Python 库:

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip
python3 -m pip install --upgrade pip
pip3 install azure-keyvault-secrets
pip3 install azure.identity

然后,创建一个名为 main.py 的 Python 应用程序,该应用程序将使用 Azure Key Vault SDK 来检索秘密:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

key_vault_name = "myKeyVault"
key_vault_uri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "ExampleSecret"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=key_vault_uri, credential=credential)
retrieved_secret = client.get_secret(secret_name)

print(f"The value of secret '{secret_name}' in '{key_vault_name}' is: '{retrieved_secret.value}'")

最后,运行 main.py。如果一切正常,您将看到存储在 Key Vault 中的秘密值被成功检索并打印出来。

通过这种方式,您可以使用 Azure Key Vault 来安全地在虚拟机中管理和访问敏感信息,从而确保应用程序的安全性和完整性。

通过 AKS 集群访问 Key Vault 中的秘密

在现代云环境中,安全地管理和访问机密信息至关重要。Azure Key Vault 提供了一种集中化的解决方案,能够安全地存储和管理机密。通过 Azure Kubernetes Service (AKS),您可以轻松地在容器化的应用程序中访问这些机密。本文将指导您如何通过 AKS 集群访问 Azure Key Vault 中的机密。

创建 AKS 集群并启用 Secrets Store CSI Driver

为了在 AKS 中访问 Azure Key Vault 中的机密,首先需要创建一个 AKS 集群,并启用 Secrets Store CSI Driver。这一驱动程序允许 Kubernetes 可以直接从 Azure Key Vault 中提取和管理机密。

首先,使用以下命令创建一个启用了 Azure Key Vault Secrets Provider 插件的 AKS 集群:

az aks create -n myAKSCluster -g myResourceGroup --node-count 1 --enable-addons azure-keyvault-secrets-provider

该命令创建了 AKS 集群,并启用了用于访问 Azure 资源的 azureKeyvaultSecretsProvider 身份。请记录输出中的 clientId,它将在后续步骤中用于访问 Key Vault。

接下来,验证安装是否成功:

kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)'

配置 SecretProviderClass 和测试 Kubernetes Pod

一旦 AKS 集群创建并配置好,下一步是创建 SecretProviderClass,以便将机密作为文件挂载到 Kubernetes Pod 中。

首先,创建一个名为 spc.yaml 的 YAML 文件,内容如下:

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: azure-keyvault-secrets
spec:
  provider: azure
  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "true"
    userAssignedIdentityID: 
    keyvaultName: 
    cloudName: ""
    objects:  |
      array:
        - |
          objectName: ExampleSecret
          objectType: secret
          objectVersion: ""
    tenantId: 

确保替换 YOUR-IDENTITY-IDYOUR-KEYVAULT-NAMEYOUR-TENANT-ID 为您自己的值。然后应用此配置:

kubectl apply -f spc.yaml

接下来,创建一个示例 Pod 来验证 SecretProviderClass 的配置。创建一个名为 pod.yaml 的文件:

kind: Pod
apiVersion: v1
metadata:
  name: busybox-secrets-store-inline
spec:
  containers:
    - name: busybox
      image: registry.k8s.io/e2e-test-images/busybox:1.29-1
      command:
        - "/bin/sleep"
        - "10000"
      volumeMounts:
      - name: secrets-store01-inline
        mountPath: "/mnt/secrets-store"
        readOnly: true
  volumes:
    - name: secrets-store01-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "azure-keyvault-secrets"

应用该配置文件:

kubectl apply -f pod.yaml

完成后,您可以验证机密是否成功挂载到 Pod 中:

kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/ExampleSecret

如果一切配置正确,您将看到从 Azure Key Vault 中检索的机密值。这种方法保证了在 Kubernetes 环境中安全地管理和访问 Azure Key Vault 中的机密,符合现代化的安全需求。

#你可能也喜欢这些API文章!