Montar um volume secreto no Azure Container Instances

Use um volume secreto para fornecer informações confidenciais aos contêineres em um grupo de contêineres. O volume secreto armazena seus segredos em arquivos dentro do volume, acessíveis pelos contêineres no grupo de contêineres. Ao armazenar segredos em um volume secreto , você pode evitar a adição de dados confidenciais, como chaves SSH ou credenciais de banco de dados, ao código do aplicativo.

  • Uma vez implantado com segredos em um grupo de contêineres, um volume secreto é somente leitura.
  • Todos os volumes secretos são apoiados pelo tmpfs, um sistema de arquivos apoiado pela RAM, e seu conteúdo nunca é gravado em armazenamento não volátil.

Nota

Os volumes secretos estão atualmente restritos a contêineres Linux. Saiba como passar variáveis de ambiente seguro para contêineres Windows e Linux em Definir variáveis de ambiente. Enquanto estamos trabalhando para trazer todos os recursos para contêineres do Windows, você pode encontrar as diferenças atuais da plataforma na visão geral.

Montar volume secreto - CLI do Azure

Para implantar um contêiner com um ou mais segredos usando a CLI do Azure, inclua os --secrets parâmetros e --secrets-mount-path no comando az container create . Este exemplo monta um volume secreto que consiste em dois arquivos contendo 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 seu 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.

Monte volume secreto - YAML

Você também pode 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.

Quando você implanta com um modelo YAML, os valores secretos devem ser codificados em Base64 no modelo. No entanto, os valores secretos aparecem em texto sem formatação 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 contendo 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 chamado deploy-aci.yamle, em seguida, execute o comando az container create com o --file parâmetro:

# Deploy with YAML template
az container create \
  --resource-group myResourceGroup \
  --file deploy-aci.yaml

Montar volume secreto - Resource Manager

Além da implantação da CLI e do YAML, você pode implantar um grupo de contêineres usando um modelo do Azure Resource Manager.

Primeiro, preencha a volumes matriz na seção de grupo properties de contêineres do modelo. Quando você implanta com um modelo do Gerenciador de Recursos, os valores secretos devem ser codificados em Base64 no modelo. No entanto, os valores secretos aparecem em texto sem formatação dentro dos arquivos no contêiner.

Em seguida, para cada contêiner no grupo de contêineres no qual você deseja montar o volume secreto, preencha a volumeMounts properties matriz na seção da definição de contêiner.

O modelo do Gerenciador de Recursos 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 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 Gerenciador de Recursos, salve o JSON anterior em um arquivo chamado deploy-aci.jsone, em seguida, execute o comando az deployment group create com o --template-file parâmetro:

# Deploy with Resource Manager template
az deployment group create \
  --resource-group myResourceGroup \
  --template-file deploy-aci.json

Próximos passos

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 a contêineres (incluindo contêineres do Windows) é através do uso de variáveis de ambiente seguro.