在Kubernetes部署文件中使用Azure密钥保管库

rseugnpd  于 2024-01-06  发布在  Kubernetes
关注(0)|答案(1)|浏览(197)

我已经为我的webapp应用程序配置了ci/cd管道。没有什么特别的。构建并推送docker hub,然后在Azure Kubernetes Service上应用k8s部署。Escherign工作finde,但我直接将env变量存储在deployment.yaml文件中,这是不安全的,因为有db连接字符串。配置Azure管道我可以使用Azure Key Vault,这不是问题,但我如何传递这些密钥-对我的Kubernetes部署有什么价值?
基本上在我的deployment.yaml中,我喜欢这样的东西:

env:
  - name: ASPNETCORE_ENVIRONMENT
    value: ${Development_variableFromAzure}
  - name: ASPNETCORE_URLS
    value: ${URLS_variableFromAzure}

字符串

rfbsl7qr

rfbsl7qr1#

若要将Azure Key Vault中的环境变量安全地注入到Kubernetes部署中,您可以在AKS群集中启用Secrets Store CSI Driver的Azure Key Vault提供程序作为附加组件。
首先,使用Azure CLI为您的AKS群集启用Azure Key Vault提供程序加载项:

az aks enable-addons --addons azure-keyvault-secrets-provider --name <clustername> --resource-group <resourcegroupname>

字符串


的数据
此命令将为AKS群集中的Secrets Store CSI驱动程序设置Azure Key Vault提供程序,并创建用户分配的托管身份,以便使用Azure Key Vault进行身份验证。接下来,为加载项创建的托管身份分配必要的权限,以访问Azure Key Vault:

az keyvault set-policy -n <yourkeyvaultname> --secret-permissions get --spn <'clientIDwhichyouwillgetfromtheoutputoftheabovecommand'>



在Kubernetes集群中定义一个SecretProviderClass资源,以引用Azure Key Vault和特定的secret。

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: my-azure-kv
spec:
  provider: azure
  parameters:
    usePodIdentity: "false"
    keyvaultName: "YourKeyVaultName"
    objects: |
      array:
        - |
          objectName: Development-variableFromAzure
          objectType: secret
        - |
          objectName: URLs-variableFromAzure
          objectType: secret
    tenantId: "YourTenantId/DirectoryIDofAzureVault"


修改deployment.yaml以使用SecretProviderClass并将secret作为环境变量引用

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      containers:
      - name: azure-vote-front
        image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
        env:
        - name: azure-vote-front_ENVIRONMENT
          valueFrom:
            secretKeyRef:
              name: my-azure-kv
              key: Development-variableFromAzure
        - name: azure-vote-front_URLS
          valueFrom:
            secretKeyRef:
              name: my-azure-kv
              key: URLs-variableFromAzure
        volumeMounts:
        - name: my-azure-kv-volume
          mountPath: /mnt/secrets-store
          readOnly: true
      volumes:
      - name: my-azure-kv-volume
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "my-azure-kv"


应用程序现在可以像往常一样访问这些环境变量。机密将从Azure Key Vault注入到Pod中,并且不会在部署清单中公开。



只要确保你的Azure Pipeline is configured to have the necessary permissions to access the Azure Key Vault
参考文件:
Use Azure KV in your pipeline
Use Azure KV for Secret Store CSI Driver in AKS

相关问题