Задаче Fargate отказано в доступе к AWSSecurityTokenService

#amazon-web-services #amazon-iam #prometheus #aws-fargate

#amazon-web-services #amazon-iam #prometheus #aws-fargate

Вопрос:

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

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

com.amazonaws.services.securitytoken.model.Исключение AWSSecurityTokenServiceException: доступ запрещен (Сервис: AWSSecurityTokenService; Код состояния: 403; Код ошибки: доступ запрещен; Идентификатор запроса: 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, записываются журналы и т.д.

Ответ №1:

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

Комментарии:

1. Цепочка предоставления учетных записей по умолчанию работает, только если ресурс находится в той же учетной записи. Как поддерживать доступ между учетными записями в Fargate с использованием ролей IAM?