我正在寻找一种将机密/证书注入Amazon ECS容器的方法。就我而言,这是一个简单的nginx容器。
我一直在使用AWS Parameter Store关注此帖子: https://aws.amazon.com/blogs/compute/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles-for-tasks/
以下是基本要点:
Dockerfile
FROM nginx:1.16.0
...
ENTRYPOINT ["/var/run/fetch.sh", "nginx", "-g", "daemon off;"]
fetch.sh
aws ssm get-parameter \
--name ${key} \
--with-decryption \
--region us-east-1 \
--output text \
--query Parameter.Value
{
"portMappings": [
{
"hostPort": 0,
"protocol": "tcp",
"containerPort": 443
}
],
"cpu": 0,
"environment": [],
"mountPoints": [],
"memoryReservation": 256,
"memory": 512,
"volumesFrom": [],
"image": "url/some_image:latest",
"essential": true,
"name": "my-container"
}
我能够通过docker exec手动运行正在运行的任务上的键,但是在启动任务时我无法获取它们(特别是当我将脚本附加到入口点上时,如上面的代码所示) 。
ECS任务是否可以在入口点访问IAM角色?它何时真正承担IAM角色?
答案 0 :(得分:1)
您现在可以使用任务定义的secrets
中的containerDefinitions
轻松地从SSM或Secrets Manager注入秘密。使用此解决方案,您无需再运行/管理自定义脚本即可获取秘密。
它看起来像这样:
{
"containerDefinitions": [{
"secrets": [{
"name": "environment_variable_name",
"valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
}]
}]
}
{
"containerDefinitions": [{
"secrets": [{
"name": "environment_variable_name",
"valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
}]
}]
}
看看AWS Launches Secrets Support for Amazon Elastic Container Service和Specifying Sensitive Data。
您必须具有任务执行角色,并在任务定义中引用它。政策示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"secretsmanager:GetSecretValue",
"kms:Decrypt"
],
"Resource": [
"arn:aws:ssm:<region>:<aws_account_id>:parameter/parameter_name",
"arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name",
"arn:aws:kms:<region>:<aws_account_id>:key/key_id"
]
}
]
}