Как передать важные переменные среды в задачи Amazon ECS?

Каков рекомендуемый способ передачи чувствительных переменных среды, например. паролей, задач Amazon ECS? С Docker Compose я могу использовать переменные среды только для ключей, что приводит к тому, что значения считываются из среды ОС. Однако я не вижу соответствующего метода для определений задач ECS.

Ответ 1

В размещенной вами ссылке на определение задачи есть раздел "среда", в котором вы можете это сделать. Они становятся переменными среды внутри контейнера.

Если вы имеете в виду, что хотите сохранить информацию вне определения задачи, и эта задача может ссылаться на нее, вы не сможете этого сделать. В этом случае лучше всего, чтобы ваш контейнер извлек эту информацию из внешнего источника и не пытался ссылаться на конфигурацию задачи ECS.

Редактировать: Я получил отрицательный голос в этот момент, потому что хранилище параметров теперь правильный способ сделать это. В то время этот ответ был наиболее правильным, но другие решения, использующие SSM, сейчас верны.

Ответ 2

Подход 1:

Вы можете использовать хранилище параметров для хранения переменных. Если вы сохраните их как SecureString, значения будут зашифрованы.

Вы можете ссылаться на них как на переменные среды в определении задачи.

Вам нужно получить их в скрипте запуска контейнера

value_from_parameter_store ='aws ssm get-parameter --name $parameter_store_key --with-decryption --output text --query Parameter.Value --region $REGION '

Вы также можете упомянуть parameter_store_key в качестве переменной среды. так что вы можете использовать $parameter_store_key

Пример

Dockerfile:

FROM ubuntu
//some other steps
CMD ["sh","/startup.sh"]

сценарий запуска:

#! /bin/bash
export db_password ='aws ssm get-parameter --name $parameter_store_key --with-decryption --output text --query Parameter.Value --region $REGION '
// Please note that above line has '(backtick) 
// Do other stuff and use this password 

Поместите параметр в SSM:

aws ssm put-parameter --name 'db_password' --type "SecureString" --value '[email protected]%rd#1'

Команда запуска Docker:

docker run -e parameter_store_key=db_password -e REGION=us-east-1 <docker_image>

Подход 2:

Недавно AWS объявил о поддержке секретов в ContainerDefinition для ECS Использование секретов в ECS

Ответ 3

Хранилище параметров - это путь, в котором хранятся переменные, зашифрованные с помощью ключа KMS.

Amazon только что объявил о поддержке указания секретов в определении задачи. Ссылка на значение параметра из SSM и переменная среды для установки с задачей.

{
        ....
        "secrets": [
            {
                "name": "environment_variable_name",
                "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
            }
        ]
    }

Смотрите официальные документы здесь.

Есть также проект под названием Chamber, который может загружать все параметры из заданного пути в SSM и устанавливать их как переменные среды.

Ответ 4

если вы используете переменные среды, они видны при входе в консоль AWS. AWS написали руководство по использованию надлежащих "секретов", чтобы сохранить секретные данные. Контейнеры загружают их при запуске в переменные среды на основе памяти. Вот руководство: https://aws.amazon.com/blogs/security/how-to-manage-secrets-for-amazon-ec2-container-service-based-applications-by-using-amazon-s3-and-docker/