Каков рекомендуемый способ передачи чувствительных переменных среды, например. паролей, задач Amazon ECS? С Docker Compose я могу использовать переменные среды только для ключей, что приводит к тому, что значения считываются из среды ОС. Однако я не вижу соответствующего метода для определений задач ECS.
Как передать важные переменные среды в задачи Amazon 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/
Ответ 5
Реализация вытесняющих переменных среды из S3, которые Marc Young упоминает:
https://www.promptworks.com/blog/handling-environment-secrets-in-docker-on-the-aws-container-service
Ответ 6
Вы можете получить дополнительную информацию об этом через этот пост в блоге https://medium.com/@niamhbgibbons/using-aws-parameter-store-for-ecs-application-secrets-99b8b0556ca8
Ответ 7
Если AWS выпекается в секретах, это не вариант, Вы также можете использовать точку входа в Docker для ввода секретов во время выполнения контейнера, как в https://medium.com/@zdk/simple-and-secure-way-to-pass-secrets-and-credentials-into-docker-containers-c2f66175b0a4