Я пытаюсь передать конфиденциальные данные в контейнер, который работает в службе ECS. Я следовал документации AWS для того, как это сделать ( ссылка ). Я сделал следующее:
- определение
my-param
в хранилище параметров SSM - создание TaskRole (см. Ниже)
- использование TaskRole в ExecutionRole задачи
- добавление переменной среды к экземпляру контейнера
Вот определение задачи:
Description: >
An IAM Role that gives tasks access to SSM Parameter store.
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html
Resources:
TaskRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ecs-task-role-${AWS::StackName}
Path: /
AssumeRolePolicyDocument: |
{
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": [ "ecs-tasks.amazonaws.com" ]},
"Action": [ "sts:AssumeRole" ]
}]
}
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
Policies:
- PolicyName: !Sub ecs-task-role-${AWS::StackName}
PolicyDocument: !Sub |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": [
"arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/my-param"
]
}
]
}
Outputs:
TaskRole:
Description: An IAM Role that gives tasks read access to SSM Parameter store parameters.
Value: !Ref TaskRole
Вот определение задачи, в котором я использую эту роль:
TaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: backend
ExecutionRoleArn: !Ref TaskRole <--- TaskRole is passed in as a parameter
ContainerDefinitions:
- Name: backend
Essential: true
Image: !Ref ImageUrl
MemoryReservation: 128
Command:
- '/start_prod.sh'
Secrets: <-- here is where I'm trying to access the parameter
- Name: MY_PARAM
ValueFrom: !Sub "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/my-param"
Environment:
- Name: GIT_SHA
Value: !Ref GitSHA
В мои CloudFormation::Init
метаданные для LaunchConfiguration я добавил следующее:
03_enable_awslogs_executionrole_override:
command: echo ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true >> /etc/ecs/ecs.config
Когда я обновляю стек, он, кажется, зависает, а затем в конечном итоге откатывается с failed to stabilize
ошибка в службе, в которой у меня есть задача, которая пытается использовать определенную мной TaskRole.
Исходный код проекта находится здесь: https://gitlab.com/verbose-equals-true/django-postgres-vue-gitlab-ecs