Saltar al contenido

¿Cómo permito que mi función de Lambda acceda a mi bucket de Amazon S3?

4 minutos de lectura
0

Quiero que mi función de AWS Lambda acceda a mi bucket de Amazon Simple Storage Service (Amazon S3).

Descripción breve

Para que su función de Lambda acceda a un bucket de Amazon S3 en la misma cuenta de AWS, complete los siguientes pasos:

  1. Cree un rol de AWS Identity and Access Management (IAM) para la función de Lambda que también otorgue acceso al bucket de S3.
  2. Configure el rol de IAM como el rol de ejecución de funciones de Lambda.
  3. Compruebe que la política de bucket de S3 no deniegue explícitamente el acceso a la función de Lambda o al rol de ejecución.

Importante: Si el bucket de S3 y el rol de IAM de las funciones se encuentran en cuentas diferentes, conceda también los permisos necesarios en la política de bucket de S3. Para obtener más información, consulte ¿Cómo puedo proporcionar acceso entre cuentas a los objetos que se encuentran en los buckets de Amazon S3?

Resolución

Crear un rol de IAM para la función de Lambda que también otorgue acceso al bucket de S3

Para crear un rol de IAM para la función de Lambda que también otorgue acceso al bucket de S3, complete los siguientes pasos:

  1. Cree un rol de ejecución en la consola de IAM.

  2. En la lista de roles de IAM, elija el rol que ha creado.

  3. Para que la política de confianza permita que Lambda asuma el rol de ejecución, añada lambda.amazonaws.com como servicio de confianza. Seleccione la pestaña Relaciones de confianza y, a continuación, seleccione Editar política de confianza.

  4. Sustituya las variables de la política por las siguientes variables:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
         "Effect": "Allow",
         "Principal": {
         "Service": "lambda.amazonaws.com"
        },
      "Action": "sts:AssumeRole"
      }
     ]
    }
  5. Seleccione Actualizar política.

  6. En la pestaña Permisos, elija Añadir política insertada.

  7. Elija la pestaña JSON.

  8. Introduzca una política de IAM basada en recursos que otorgue acceso al bucket de S3. Para obtener más información, consulte Using resource-based policies for Lambda. El siguiente ejemplo de política de IAM concede acceso a un bucket específico de Amazon S3 con permisos Get. Para acceder a los objetos del bucket de Amazon S3, asegúrese de especificar la ruta correcta o utilice un carácter comodín («*»). Para obtener más información, consulte Writing IAM Policies: how to grant access to an Amazon S3 bucket.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }

    Nota: Sustituya «arn:aws:s3:::EXAMPLE-BUCKET/*» por el ARN de sus buckets de S3. Si el objeto está cifrado con una clave de AWS Key Management Service (AWS KMS), debe otorgar permisos adicionales. Para más información, consulte Mi bucket de Amazon S3 tiene un cifrado predeterminado mediante una clave de AWS KMS personalizada. ¿Cómo puedo permitir que los usuarios realicen operaciones de carga y descarga en el bucket?

  9. Elija Revisar la política.

  10. En Nombre, introduzca un nombre para su política.

  11. Seleccione Crear política.

Configurar el rol de IAM como el rol de ejecución de funciones de Lambda

Para configurar el rol de IAM como el rol de ejecución de funciones de Lambda, complete los siguientes pasos:

  1. Abra la consola de Lambda.
  2. Elija su función de Lambda.
  3. En Rol de ejecución, como Rol existente, seleccione el rol de IAM que ha creado.
  4. Seleccione Guardar.

Comprobar que la política de bucket de S3 no deniegue explícitamente el acceso a la función de Lambda o al rol de ejecución

Para revisar o editar la política de bucket de S3, siga las instrucciones que se indican en Agregar una política de bucket mediante la consola de Amazon S3.

En el siguiente ejemplo de política de IAM, un bucket de S3 recibe acceso entre cuentas a un rol de ejecución de Lambda:

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

**Nota:**Sustituya «arn:aws:s3:::EXAMPLE-BUCKET» por el ARN de su bucket de S3 y «arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012» por el ARN de su rol de ejecución de Lambda.

Información relacionada

AWS Policy Generator