AWS ECS DescribeContainerInstances генерирует InvalidParameterException из-за несоответствия accountId - PullRequest
0 голосов
/ 10 октября 2019

Из задания контейнера, запущенного в пакетном режиме, я пытаюсь извлечь идентификатор экземпляра экземпляра EC2, в котором выполняется это пакетное задание AWS:

Я выполняю следующее:

  • В скрипте задания я беру переменную окружения AWS_BATCH_JOB_ID и вызываю boto3.client('batch').describe_jobs(jobs=[job_id])
  • Я извлекаю containerInstanceArn из предыдущего ответа. Это имеет вид: "arn:aws:ecs:us-west-2:55555555:container-instance/3364c30a-aaaa-bbbb-cccc-03e68c347f00"
  • Я звоню boto3.client('ecs').describe_container_instances(...) с полученным Арном. в этом ответе должен содержаться идентификатор экземпляра EC2:

     # this is run from the batch job environment -- inside the container instance
     instances = ecs.describe_container_instances(
        cluster=config['cluster_arn'],
        containerInstances=[this_container_instance_arn],
        include=['TAGS'])
    

Однако при вызове DescribeContainerInstances выдается ошибка:

botocore.errorfactory.InvalidParameterException:
  An error occurred (InvalidParameterException) when calling the 
  DescribeContainerInstances  operation:  Identifier is for 12345678. 
  Your accountId is 55555555

I 'Мы отредактировали числа, но 55555555 соответствует префиксу в containerInstanceArn. 12345678 соответствует идентификатору во всех моих ролях iam, например, arn:aws:iam::12345678:role/my-ecs-job-role.

Задание было запущено из CLI (из моей основной учетной записи пользователя). Я предполагаю, что при выполнении задания предполагается другая роль, потому что экземпляр запускается автоматически какой-либо учетной записью службы AWS?

Что мне нужно изменить в IAM, чтобы разрешить моему сценарию задания запрашивать ECSэкземпляр с boto?

Вот роль задания, которую я настроил в своем определении пакетного задания:

{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "",
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs-tasks.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            },
            {
                "Sid": "",
                "Effect": "Allow",
                "Principal": {
                    "Service": "ecs.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
}

У меня также есть следующий документ политики, прикрепленный к роли задания. без него вызов describe_container_instances отклоняется:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:DescribeContainerInstances"
            ],
            "Resource": "*"
        }
    ]
}

Есть ли еще одна роль, которую мне нужно отредактировать. Я заметил, что есть также роль экземпляра ECS, которая отличается от роли задания.

1 Ответ

0 голосов
/ 10 октября 2019

Это на самом деле не решает проблему с разрешениями, но если нужен только идентификатор экземпляра, вы можете полностью избежать вызовов boto.

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

GET http://169.254.169.254/latest/meta-data/instance-id
...