在 Azure 容器实例中装载机密卷
可以使用机密卷向容器组中的容器提供敏感信息。 机密卷将机密存储在该卷内的文件中,然后容器组中的容器可以访问这些机密。 将机密存储在机密卷中,可以避免将敏感数据(例如,SSH 密钥或数据库凭据)添加到应用程序代码中。
- 与机密一起部署到容器组中后,机密卷将为只读。
- Tmpfs(由 RAM 支持的文件系统)为所有机密卷提供支持;其内容永远不会写入非易失性存储。
注意
机密卷目前仅限于 Linux 容器。 在设置环境变量中了解如何为 Linux 容器传递安全环境变量。
装载机密卷 - Azure CLI
若要使用 Azure CLI 部署包含一个或多个机密的容器,请在 az container create 命令中包含 --secrets
和 --secrets-mount-path
参数。 此示例在 /mnt/secrets
处装载一个机密卷,该卷由两个包含机密“mysecret1”和“mysecret2”的文件组成:
az container create \
--resource-group myResourceGroup \
--name secret-volume-demo \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--secrets mysecret1="My first secret FOO" mysecret2="My second secret BAR" \
--secrets-mount-path /mnt/secrets
以下 az container exec 输出演示在运行的容器中打开 shell,列出机密卷中的文件,然后显示其内容:
az container exec \
--resource-group myResourceGroup \
--name secret-volume-demo --exec-command "/bin/sh"
/usr/src/app # ls /mnt/secrets
mysecret1
mysecret2
/usr/src/app # cat /mnt/secrets/mysecret1
My first secret FOO
/usr/src/app # cat /mnt/secrets/mysecret2
My second secret BAR
/usr/src/app # exit
Bye.
装载机密卷 - YAML
还可以使用 Azure CLI 和 YAML 模板部署容器组。 在部署由多个容器组成的容器组时,通过 YAML 模板进行部署是首选方法。
使用 YAML 模板进行部署时,模板中的机密值必须已进行 Base64 编码。 但是,机密值会以明文形式显示在容器的文件中。
以下 YAML 模板定义了一个容器组,其中包含一个容器,该容器在 /mnt/secrets
处装载了一个机密卷。 机密卷有两个包含机密“mysecret1”和“mysecret2”的文件。
apiVersion: '2019-12-01'
location: chinaeast2
name: secret-volume-demo
properties:
containers:
- name: aci-tutorial-app
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-helloworld:latest
ports: []
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /mnt/secrets
name: secretvolume1
osType: Linux
restartPolicy: Always
volumes:
- name: secretvolume1
secret:
mysecret1: TXkgZmlyc3Qgc2VjcmV0IEZPTwo=
mysecret2: TXkgc2Vjb25kIHNlY3JldCBCQVIK
tags: {}
type: Microsoft.ContainerInstance/containerGroups
若要使用 YAML 模板进行部署,请将前面的 YAML 保存到名为 deploy-aci.yaml
的文件中,然后使用 --file
参数执行 az container create 命令:
# Deploy with YAML template
az container create \
--resource-group myResourceGroup \
--file deploy-aci.yaml
装载机密卷 - 资源管理器
除了 CLI 和 YAML 部署外,还可以使用 Azure 资源管理器模板部署容器组。
首先,在模板的容器组 properties
节中填充 volumes
数组。 使用资源管理器模板进行部署时,模板中的机密值必须已进行 Base64 编码。 但是,机密值会以明文形式显示在容器的文件中。
接下来,针对容器组中希望装载机密卷的每个容器,在容器定义的 properties
节中填充 volumeMounts
数组。
以下资源管理器模板定义了一个容器组,其中包含一个容器,该容器在 /mnt/secrets
处装载了一个机密卷。 机密卷有两个机密:“mysecret1”和“mysecret2”。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "microsoft/aci-helloworld:latest"
},
"resources": [
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2021-03-01",
"name": "secret-volume-demo",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "secretvolume1",
"mountPath": "/mnt/secrets"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
]
},
"volumes": [
{
"name": "secretvolume1",
"secret": {
"mysecret1": "TXkgZmlyc3Qgc2VjcmV0IEZPTwo=",
"mysecret2": "TXkgc2Vjb25kIHNlY3JldCBCQVIK"
}
}
]
}
}
]
}
若要使用资源管理器模板进行部署,请将前面的 JSON 保存到名为 deploy-aci.json
的文件中,然后使用 --template-file
参数执行 az deployment group create 命令:
# Deploy with Resource Manager template
az deployment group create \
--resource-group myResourceGroup \
--template-file deploy-aci.json
后续步骤
卷
了解如何在 Azure 容器实例中装载其他卷类型:
安全环境变量
向容器(包括 Windows 容器)提供敏感信息的另一种方法是通过使用安全环境变量。