Boto3 NoCredentialsError cuando se intenta obtener datos de DynamoDb en EKS con Fargate.
Tengo un clúster de EKS con un perfil de Fargate para el cálculo. He configurado el rol de ejecución de pod en el perfil de Fargate con las 2 políticas administradas.
- AmazonEKSFargatePodExecutionRolePolicy
- AmazonDynamoDBFullAccess
El código se ejecuta como un CronJob, comienza extrayendo una configuración de DynamoDB:
dynamodb = boto3.resource('dynamodb', region_name=region)
table = dynamodb.Table(table_name)
response = table.get_item(
Key = {
'Id': config_id
})
Cuando el código alcanza este punto, siempre genera una excepción:
raise NoCredentialsError()\
botocore.exceptions.NoCredentialsError: No se pudieron encontrar las credenciales
Sé que puedo pasar las credenciales de AWS directamente al inicializar el cliente de boto3, pero no quiero hacerlo por razones de seguridad.
Originalmente había probado el código utilizando una instancia de EC2 en un grupo de escalado automático en lugar de Fargate, lo cual funcionó.
¿Cómo puedo resolver este error?
davy.ai
El mensaje de error “NoCredentialsError: No se pueden encontrar las credenciales” indica que el código no puede encontrar credenciales de AWS válidas para acceder a la tabla de DynamoDB. Al utilizar Fargate con EKS, se utiliza el rol de ejecución del pod para proporcionar permisos IAM a los contenedores que se ejecutan en los pods de Fargate. Sin embargo, esto puede no proporcionar los permisos necesarios para acceder a DynamoDB.
Para solucionar este error, puedes agregar la política “AmazonDynamoDBFullAccess” al rol de ejecución del pod además de la política “AmazonEKSFargatePodExecutionRolePolicy”. Esto proporcionará los permisos necesarios para acceder a DynamoDB.
Para agregar la política, sigue estos pasos:
Después de agregar la política, tus pods de Fargate deberían poder acceder a DynamoDB sin ningún problema.