Задача Fargate AWSSecurityTokenService Access Denied

Я пытаюсь запустить Prometheus CloudWatch Exporter как задачу Fargate. Я создаю собственное изображение с запеченным файлом конфигурации на основе изображения prom/cloudwatch-exporter.

Когда контейнер поднимается, я вижу в журналах следующую ошибку:

com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: доступ запрещен (служба: AWSSecurityTokenService; код состояния: 403; код ошибки: AccessDenied; идентификатор запроса: REQUEST-ID)

Вызов, вызывающий эту ошибку, выглядит следующим образом:

в com.amazonaws.services.cloudwatch.AmazonCloudWatchClient.listMetrics (AmazonCloudWatchClient.java:684)

И роль выполнения задачи, и роль задачи имеют следующую политику:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        }
    ]
}

Вот определение контейнера:

{
      "dnsSearchDomains": null,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "LOG-GROUP",
          "awslogs-region": "REGION",
          "awslogs-stream-prefix": "LOG-PREFIX"
        }
      },
      "entryPoint": null,
      "portMappings": [
        {
          "hostPort": 9106,
          "protocol": "tcp",
          "containerPort": 9106
        }
      ],
      "command": null,
      "linuxParameters": null,
      "cpu": 0,
      "environment": [],
      "resourceRequirements": null,
      "ulimits": null,
      "dnsServers": null,
      "mountPoints": [],
      "workingDirectory": null,
      "secrets": null,
      "dockerSecurityOptions": null,
      "memory": null,
      "memoryReservation": null,
      "volumesFrom": [],
      "image": "ACCOUNTID.dkr.ecr.REGION.amazonaws.com/mycustomimage:latest",
      "disableNetworking": null,
      "interactive": null,
      "healthCheck": null,
      "essential": true,
      "links": null,
      "hostname": null,
      "extraHosts": null,
      "pseudoTerminal": null,
      "user": null,
      "readonlyRootFilesystem": null,
      "dockerLabels": null,
      "systemControls": null,
      "privileged": null,
      "name": "container-name"
    }

Почему контейнер не аутентифицируется на основе политик IAM? Все остальные политики в настройке работают должным образом. Кластер может вытаскивать кастомный образ из репозитория ECR, ведутся логи и т. Д.


person Aaron M    schedule 24.03.2019    source источник


Ответы (1)


Я понял. CloudWatch Exporter позволяет передавать arn роли IAM через атрибут конфигурации role_arn. Если это значение установлено, приложение использует STSAssumeRoleSessionCredentialsProvider для установки учетных данных. Очевидно, это не поддерживается в Fargate (этот метод работает в контейнерах ECS на основе EC2). Если вы не укажете role_arn, приложение создаст нового клиента с настройками по умолчанию, который использует класс DefaultAWSCredentialsProviderChain, и это работает как шарм.

person Aaron M    schedule 24.03.2019
comment
DefaultAWSCredentialsProviderChain работает, только если ресурс находится в той же учетной записи. Как поддержать доступ между аккаунтами в Fargate с использованием ролей IAM? - person Harini S; 22.05.2020