Секреты безопасно внедряются в Dockerfile во время сборки .NET

Я использую dockerfile и Azure Devops для создания и отправки образа в реестр. У меня есть файл appsettings.development, а также производственные файлы. Мне нужно безопасно внедрить их в свой образ во время сборки.

  • Мои настройки приложения содержат как секретные, так и несекретные данные, но я слышал, что помещать их в репозиторий — плохая практика. Я делаю это (а не настоящие секреты, мои применяются во время выполнения, некоторые из них используют env), например, docker run -e

  • Я также видел в других сообщениях использование --build-arg небезопасно.

  • Итак, как мне реализовать вышеизложенное с точки зрения передовой практики? Я бы предпочел, может быть, пример без хранилища ключей и один с ним. В краткосрочной перспективе возможно использование переменных Azure Devops. Или любые другие рекомендуемые подходы.

  • Я хочу сделать это во время сборки, поскольку у меня больше контроля над этим пространством.

Докерфайл

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
ARG ASPNETCORE_ENVIRONMENT=Production
ENV ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT}

WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "API.dll"]

Конвейер Azure Devops


trigger: none

pool:
  vmImage: 'ubuntu-latest'

steps:

- task: Docker@2
  displayName: login
  inputs:
    containerRegistry: 'docker_registry'
    command: login

- task: Docker@2
  displayName: build
  inputs:
    containerRegistry: 'docker_registry'
    repository: web/api
    command: build
    tags: |
      latest
    arguments: '--build-arg ASPNETCORE_ENVIRONMENT=Development

- task: Docker@2
  displayName: push
  inputs:
    containerRegistry: 'docker_registry'
    repository: web/api
    command: push
    tags: |
      latest

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1. Используйте Azure DevOps секретные переменные

  • Перейдите на страницу «Конвейеры», выберите соответствующий конвейер и нажмите «Изменить».
  • Найдите переменные для этого конвейера.
  • Добавьте или обновите переменную.
  • Выберите параметр «Сохранить это значение в секрете», чтобы сохранить переменную в зашифрованном виде.
  • Сохраните трубопровод.
  • Используйте секрет в аргументах с --build-arg, например:
- task: Docker@2
  displayName: build
  inputs:
    containerRegistry: 'docker_registry'
    repository: web/api
    command: build
    tags: |
      latest
    arguments: '--build-arg ASPNETCORE_ENVIRONMENT=$(secret)'

2. Используйте секретную переменную в группах переменных или связывайте секреты из хранилища ключей Azure в группах переменных.

variables:
- group: my-variable-group

steps:
- task: Docker@2
  displayName: build
  inputs:
    containerRegistry: 'docker_registry'
    repository: web/api
    command: build
    tags: |
      latest
    arguments: '--build-arg ASPNETCORE_ENVIRONMENT=$(secret_name_in_variable_group )'

3. Используйте секреты Azure Key Vault. Вы можете следовать инструкциям здесь. Затем вы можете использовать его как следующий yaml

steps:
- task: AzureKeyVault@2
  displayName: Azure Key Vault
  inputs:
    azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
    KeyVaultName: 'YOUR_KEY_VAULT_NAME'
    SecretsFilter: '*'
    RunAsPreJob: false
- task: Docker@2
  displayName: build
  inputs:
    containerRegistry: 'docker_registry'
    repository: web/api
    command: build
    tags: |
      latest
    arguments: '--build-arg ASPNETCORE_ENVIRONMENT=$(your_secret_name_in_key_vault)'

Другие вопросы по теме

Похожие вопросы

Хранилище ключей, созданное с использованием политики доступа с использованием BICEP, создает составную идентификацию
Назначение политики срока службы токена приложению в Microsoft EntraID, похоже, не имеет никакого эффекта
Azure — назначение участника сети в PIM
Как создать набор данных для пользовательской речи Azure с помощью Spx (speechCLI)
Скрипт инициализации на блоках данных
Загрузите зарегистрированный компонент в Azure ML для конвейера с помощью пакета SDK Python v2
Функция Azure работает локально, но не в Azure
KQL Query работает при расширенном поиске, но не работает, если превратить его в правило обнаружения
Как преобразовать общий файловый ресурс уровня «Премиум» в учетную запись хранения блочных BLOB-объектов уровня «Премиум» или стандартную учетную запись хранения общего назначения версии 2?
Ожидается модуль службы Azure Kubernetes — 4 Недостаточно процессора