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 backup de todos os volumes secretos é feito por tmpfs, um sistema de arquivos com suporte de RAM. O conteúdo jamais é gravado em 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:

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.