Мы используем ServiceAccounts с аннотацией роли, чтобы модули получали роль и использовали ее для аутентификации AWS SDK. Это работало, но мы настроили новый кластер, и что-то не так в нашей конфигурации...
Ошибка, которую мы видим при попытке использовать SDK (в частности, клиент v2 SQS):
Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1
Когда я проверяю describe pod
, похоже, что установлены правильные переменные среды:
Environment:
AWS_STS_REGIONAL_ENDPOINTS: regional
AWS_DEFAULT_REGION: us-east-1
AWS_REGION: us-east-1
AWS_ROLE_ARN: arn:aws:iam::**************:role/dev-node-api
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
Mounts:
/var/run/secrets/eks.amazonaws.com/serviceaccount from aws-iam-token (ro)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-snv7w (ro)
У меня есть аннотация ServiceAccount следующим образом:
apiVersion: v1
kind: ServiceAccount
metadata:
name: node-api-service-account
namespace: app
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::************:role/dev-node-api
и я прикрепляю учетную запись службы к развертыванию следующим образом:
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-api-deploy
namespace: app
spec:
template:
spec:
serviceAccountName: node-api-service-account
...
Я также установил доверительные отношения для роли, чтобы разрешить федерацию от поставщика OIDC кластера:
$ aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5
> **************************************1F61
trust relationship in IAM role:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::************:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/********************************1F61"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.us-east-1.amazonaws.com/id/********************************1F61:aud": "sts.amazonaws.com",
"oidc.eks.us-east-1.amazonaws.com/id/********************************1F61:sub": "system:serviceaccount:apis:node-api-service-account"
}
}
}
]
}
Итак, из того, что я могу сказать, похоже, что роль правильно получена, но по какой-то причине Javascript SDK не получает учетные данные из AWS_WEB_IDENTITY_TOKEN_FILE
. Есть ли какие-либо журналы, которые я могу использовать для отладки этого?
Проблема заключалась в неправильном пространстве имен в условии доверительных отношений. Мы изменили пространства имен кластера во время этой работы и забыли обновить пространство имен в доверительных отношениях. Обновление этого и перезапуск развертывания привели к успешному использованию SDK.
Да, правильное пространство имен было app
Так
app
вместоapis
?