Desarrollando localmente con Lambda, probé código para subir un archivo a S3. Para eso estoy usando el SDK de AWS al que necesito pasarle ciertas variables

new S3({
	credentials: {
		accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
		secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
	},
	region: process.env.AWS_REGION,
});

y funciona 🚀

Hasta que deployas a Lambda…

En Lambda recibo el error

InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.

Está definido en el Parameter Store de Systems Manager? ✅

Capaz no se está cargando en runtime. El viejo y confiable console.log me hacer ver que es distinto al que tengo configurado localmente

accessKeyId ASIAYZ...

Por suerte existe Michael - sqlbot, que me ayuda a entender de dónde sale este token, lo que me lleva a la respuesta de arriba

The right way is to attach the correct IAM policy to Lambda’s IAM role.

Estoy usando Serverless Framework así que lo busco en la docu y le digo que le permita a mi Lambda tener acceso a esas operaciones de S3

iamRoleStatements:
	- Effect: 'Allow'
	  Action:
	    - 's3:ListBucket'
	    - 's3:GetObject'
	    - 's3:PutObject'
	    - 's3:DeleteObject'
	  Resource: '*'

Ahora ya no son necesarias las credentials en la inicialización del S3

new S3({ region: process.env.AWS_REGION });