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 });