es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

  1. AmazonEKSFargatePodExecutionRolePolicy
  2. 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?

Tags:  , , , ,

Answer

  1. Avatar for 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:

    1. Ve a la consola de Amazon EKS y selecciona tu clúster.
    2. En el menú izquierdo, haz clic en “Perfiles de Fargate”.
    3. Selecciona tu perfil de Fargate y haz clic en “Editar”.
    4. En “Rol de ejecución del pod”, haz clic en “Editar”.
    5. Haz clic en “Adjuntar política” y selecciona “AmazonDynamoDBFullAccess”.
    6. Haz clic en “Guardar”.

    Después de agregar la política, tus pods de Fargate deberían poder acceder a DynamoDB sin ningún problema.

Comments are closed.