Подключение тома secret в службе "Экземпляры контейнеров Azure"

Используйте том secret, чтобы предоставить конфиденциальную информацию контейнерам в группе контейнеров. В томе secret в файлах хранятся секреты, к которым у контейнеров в группе контейнеров есть доступ. С помощью секретов в томе secret можно избежать добавления конфиденциальных данных, например ключей SSH или учетных данных базы данных, в коде приложения.

  • После развертывания тома secret с секретами в группе контейнеров он будет доступен только для чтения.
  • Все тома secret поддерживает tmpfs — файловая система, сохраняющая данные в ОЗУ. Их содержимое никогда не записывается в хранилище для долговременного хранения данных.

Примечание

Тома secret сейчас ограничены контейнерами Linux. Сведения о том, как передавать переменные безопасной среды для контейнеров Windows и Linux см. в статье Настройка переменных среды. Мы работаем над тем, чтобы обеспечить все функции для контейнеров Windows, но для текущей платформы имеются отличия, подробнее о которых можно узнать в обзоре службы.

Подключение тома secret в Azure CLI

Чтобы развернуть контейнер с одним или несколькими секретами с помощью Azure CLI, добавьте параметры --secrets и --secrets-mount-path в команду az container create. В этом примере том secret, состоящий из двух файлов с секретами, "mysecret1" и "mysecret2", подключается к /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

В следующих выходных данных az container exec показано открытие оболочки в выполняемом контейнере, список файлов в томе secret, а затем их содержимое:

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.

Подключение тома secret с помощью YAML

Вы также можете развернуть группы контейнеров с помощью Azure CLI и шаблона YAML. При развертывании группы контейнеров, состоящей из нескольких контейнеров, рекомендуется использовать шаблон YAML.

При развертывании с помощью шаблона YAML значения секретов в шаблоне должны быть в кодировке Base64. Тем не менее значения секретов отображаются в виде обычного текста в файлах в контейнере.

Следующий шаблон YAML определяет группу контейнеров с одним контейнером, где том secret подключается к /mnt/secrets. Том secret имеет два файла с секретами, "mysecret1" и "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

Для развертывания с помощью шаблона YAML сохраните предыдущий YAML в файл с именем deploy-aci.yaml, а затем выполните команду az container create с параметром --file:

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

Подключение тома secret с помощью Resource Manager

Помимо развертывания с помощью CLI и шаблона YAML группу контейнеров также можно развернуть с помощью шаблона Azure Resource Manager.

Сначала заполните массив volumes в разделе properties группы контейнеров шаблона. При развертывании с помощью шаблона Resource Manager значения секретов в шаблоне должны быть в кодировке Base64. Тем не менее значения секретов отображаются в виде обычного текста в файлах в контейнере.

Затем для каждого контейнера в группе контейнеров, в которой нужно подключить том secret, заполните массив volumeMounts в разделе properties определения контейнера.

Следующий шаблон Resource Manager определяет группу контейнеров с одним контейнером, где том secret подключается к /mnt/secrets. Том secret имеет два секрета, "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"
            }
          }
        ]
      }
    }
  ]
}

Для развертывания с помощью шаблона Resource Manager сохраните предыдущий JSON в файл с именем deploy-aci.json, а затем выполните команду az deployment group create с параметром --template-file:

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

Дальнейшие действия

Тома

Сведения о подключении других типов томов в службе "Экземпляры контейнеров Azure" см. в следующих статьях:

Защита переменных среды

Другой способ предоставления конфиденциальных данных в контейнеры (включая контейнеры Windows) — воспользоваться защищенными переменными среды.