Montar um volume secreto em Instâncias de Contêiner do Azure
Use um volume secreto para fornecer informações confidenciais aos contêineres em um grupo de contêineres. O volume secreto armazena os segredos em arquivos no volume, permanecendo acessíveis pelos contêineres no grupo de contêineres. Armazenando segredos em um volume secreto, é possível evitar adicionar dados confidenciais, como chaves SSH ou credenciais de banco de dados, ao código do aplicativo.
- Depois de implantado com segredos em um grupo de contêineres, um volume secreto é somente leitura.
- O Tmpfs, um sistema de arquivos com backup de RAM, faz backup de todos os volumes secretos; seu conteúdo nunca é gravado no armazenamento não volátil.
Observação
Volumes secretos são atualmente restritos a contêineres do Linux. Saiba como passar variáveis de ambiente seguras para contêineres do Windows e do Linux em Definir variáveis de ambiente. Enquanto trabalhamos para trazer todos os recursos para os contêineres do Windows, você pode encontrar as diferenças entre as plataforma atuais na Visão geral.
Montar um volume secreto - CLI do Azure
Para implantar um contêiner com um ou mais segredos usando a CLI do Azure, inclua os parâmetros --secrets
e --secrets-mount-path
no comando az container create. Este exemplo monta um volume secreto que consiste em dois arquivos que contêm segredos, “mysecret1” e “mysecret2”, em /mnt/secrets
:
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
A seguinte saída az container exec mostra a abertura de um shell no contêiner em execução, listando os arquivos dentro do volume secreto e, em seguida, exibindo o conteúdo:
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.
Montar um volume secreto - YAML
Também é possível implantar grupos de contêineres com a CLI do Azure e um modelo YAML. A implantação pelo modelo YAML é o método preferencial ao implantar grupos de contêineres que consistem em vários contêineres.
Na implantação com um modelo YAML, os valores secretos devem ser codificados em Base64 no modelo. No entanto, os valores secretos aparecem em texto não criptografado dentro dos arquivos no contêiner.
O modelo YAML a seguir define um grupo de contêineres com um contêiner que monta um volume secreto em /mnt/secrets
. O volume secreto tem dois arquivos que contêm segredos, “mysecret1” e “mysecret2”.
apiVersion: '2019-12-01'
location: eastus
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
Para implantar com o modelo YAML, salve o YAML anterior em um arquivo nomeado deploy-aci.yaml
e, em seguida, execute o comando az container create com o parâmetro --file
:
# Deploy with YAML template
az container create \
--resource-group myResourceGroup \
--file deploy-aci.yaml
Montar o volume secreto - Resource Manager
Além da implantação de CLI e YAML, é possível implantar um grupo de contêineres usando um modelo do Azure Resource Manager.
Primeiro, popule a matriz volumes
na seção properties
do grupo de contêineres do modelo. Ao implantar com um modelo YAML, os valores secretos devem ser codificados em Base64 no modelo. No entanto, os valores secretos aparecem em texto não criptografado dentro dos arquivos no contêiner.
Em seguida, para cada contêiner do grupo de contêineres no qual você deseja montar o volume secreto, popule a matriz volumeMounts
na seção properties
da definição de contêiner.
O seguinte modelo do Resource Manager define um grupo de contêineres com um contêiner que monta um volume secreto em /mnt/secrets
. O volume secreto tem dois segredos, "mysecret1" e "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"
}
}
]
}
}
]
}
Para implantar com o modelo do Resource Manager, salve o JSON anterior em um arquivo chamado deploy-aci.json
e execute o comando az deployment group create com o parâmetro --template-file
:
# Deploy with Resource Manager template
az deployment group create \
--resource-group myResourceGroup \
--template-file deploy-aci.json
Próximas etapas
Volumes
Saiba como montar outros tipos de volume em Instâncias de Contêiner do Azure:
- Montar um compartilhamento de arquivos do Azure em Instâncias de Contêiner do Azure
- Montar um volume emptyDir em Instâncias de Contêiner do Azure
- Montar um volume gitRepo em Instâncias de Contêiner do Azure
Variáveis de ambiente seguro
Outro método para fornecer informações confidenciais aos contêineres (incluindo contêineres do Windows) é usando variáveis de ambiente seguro.