Aks pods env variables keyvault



我希望有人能帮帮我。

我在azure中有一个基本配置,其中包括一个web应用程序和数据库。

web应用程序能够使用托管身份连接到数据库,这里的一切都工作得很好,但我想尝试使用aks进行相同的配置。

我部署了AKS并启用了受管理的身份。我将一个pod部署到集群中,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-deployment
labels:
app: webapp
spec:
replicas: 1
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: dockerimage
ports:
- containerPort: 80
env:
- name: "ConnectionStrings__MyDbConnection"
value: "Server=server-url; Authentication=Active Directory Managed Identity; Database=database-name"
- name: "ASPNETCORE_ENVIRONMENT"
value: "Development"
securityContext:
allowPrivilegeEscalation: false
restartPolicy: Always 

部署进行得很顺利,一切都很好。但这就是我的问题所在,我想不出最好的解决办法。

env块是纯文本的,我想通过将它们存储在密钥库中来保护这些环境变量。

我一直在寻找不同的论坛和文档和选项开始困惑我。在这种情况下,有什么好的方法来实现安全性吗?

在我的web应用程序中,在配置下,我启用了受管理的身份,并使用它可以访问密钥库中的秘密并检索它们。我可以用AKS做同样的事情吗?

非常感谢你能提供的任何帮助。

如果我的问题不是100%清楚,请告诉我

  1. 使用Azure密钥库提供程序升级现有AKS集群,以支持秘密存储CSI驱动程序
  2. 使用用户分配的受管身份访问KV
  3. 设置一个环境变量来引用Kubernetes secrets

您将需要做一些阅读,但过程很简单。KV秘密将存储在k8s秘密中,您可以在pods环境变量中引用k8s秘密。

您可以尝试像使用Azure Configuration那样替换环境键值。使用Azure应用程序配置,您可以添加"ConnectionStrings__MyDbConnection"作为"密钥库参考"到您的kv密钥。然后使用DefaultAzureCredential或ManagedIdentityCredential类为app配置和密钥库资源设置认证凭据。

var builder = WebApplication.CreateBuilder(args);
var usermanaged_client_id = "";

var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = usermanaged_client_id });

// Add services to the container.
builder.Configuration.AddAzureAppConfiguration(opt =>
{
opt.Connect(new Uri("https://your-app-config.azconfig.io"), credential)
.ConfigureKeyVault(kv =>
{
kv.SetCredential(credential);
});
});

确保将Key Vault的访问权限授予用户管理的身份。

最新更新