Amazon ECS - Отказано в доступе при использовании роли IAM в точке входа Docker - PullRequest
2 голосов
/ 02 мая 2019

Я ищу способ внедрения секретов / сертификатов в контейнеры 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/

Вот основная суть:

  1. В моем Dockerfile я присоединяю скрипт к точке входа , который устанавливает клиент AWS и извлекает ключи из хранилища параметров AWS.

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
  1. Определение задачи предполагает роль IAM, которая имеет доступ к необходимым службам (хранилище параметров kms +). Я могу убедиться, что это работает, потому что если я ssh на сервер и запускаю скрипт на контейнере, я могу получить ключи из хранилища параметров.
  {
    "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"
  }
  1. Когда ECS запускает эту задачу, он должен попасть в точку входа , которая выбирает ключи из хранилища параметров и сохраняет их.

Я могу получить ключи для запущенной задачи, запустив ее вручную через docker exec, но я не могу получить их при запуске задачи (в частности, когда я присоединяю скрипт к точке входа, как в коде выше) ,

Имеет ли задача ECS доступ к ролям IAM на точке входа? Когда он фактически принимает роли IAM?

1 Ответ

1 голос
/ 02 мая 2019

Теперь вы можете легко вводить секреты из SSM или Secrets Manager, используя secrets в containerDefinitions определения задачи. С этим решением вам больше не нужно запускать / управлять своими пользовательскими сценариями, чтобы получать ваши секреты.

Это выглядит так:

{
    "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 запускает поддержку секретов Amazon Elastic Container Service и Указание конфиденциальных данных .

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

{
  "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"
      ]
    }
  ]
}

Подробнее в Необходимые разрешения IAM для секретов Amazon ECS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...