#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?