Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

¿Cómo puedo proporcionar acceso detallado a funciones de Lambda?

9 minutos de lectura
0

Quiero conceder permisos de lectura y escritura para una función específica de AWS Lambda a un usuario de AWS Identity and Access Management (IAM).

Resolución

Utiliza las políticas de IAM para configurar los permisos de los usuarios de IAM para crear, eliminar, modificar, invocar y supervisar funciones de Lambda y ver la configuración de una función de Lambda.

En los siguientes ejemplos de políticas, las acciones de la API de Lambda que admiten permisos a nivel de recurso se restringen a una función de Lambda concreta, detallada en el elemento Recurso. Puedes usar el elemento Condición en las acciones de la API para identificar la función de Lambda en la política de IAM.

Para las acciones de la API que no admiten permisos a nivel de recursos, debes usar un comodín (*) en el elemento Recurso. No puedes aplicar claves de condición que sean específicas de Lambda. Para obtener más información, consulta Actions, resources, and condition keys for AWS Lambda (Acciones, recursos y claves de condición de AWS Lambda).

El elemento Recurso usa un ARN para identificar los recursos a los que se aplica la instrucción. Por ejemplo, si la Acción es Invocar, el valor del Recurso será el ARN de una función. IAM compara el ARN con el ARN de la función en los parámetros FunctionName y Qualifier de la solicitud de invocación. Para obtener más información sobre los ARN en diferentes versiones de Lambda, consulta Uso de versiones.

Si usas varias versiones de Lambda, no tienes que añadir cada ARN de Lambda. En su lugar, incluye el comodín (*) en el elemento Recursos:

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

Nota: Sustituye AWS_REGION:AWS_ACCOUNT_ID por el ARN de Lambda y LAMBDA_FUNCTION_NAME por el nombre de la función de Lambda.

En el siguiente ejemplo de políticas de IAM, sustituye los valores siguientes:

  • AWS_ACCOUNT_ID por el ID de la cuenta de AWS
  • LAMBDA_FUNCTION_NAME por el nombre de la función de Lambda
  • IAM_USER_NAME por el usuario de IAM al que proporcionas acceso a Lambda
  • AWS_REGION por tu región de AWS
  • KEY_ID por tu clave de AWS Key Management Service (AWS KMS)
  • IAM_ROLE_NAME por tu rol de IAM
  • S3_BUCKET_NAME por el nombre de tu bucket de Amazon Simple Storage Service (Amazon S3)

Permisos para crear una función de Lambda

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI (Solución de problemas de la AWS CLI). Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Para usar la AWS CLI o la consola de Lambda para crear una función de Lambda, debes tener los permisos lambda:CreateFunction e iam:PassRole. Para ver ejemplos de políticas, consulta Políticas de IAM basadas en identidad para Lambda.

La siguiente política de ejemplo permite a la persona que llama a la API crear una función de Lambda y transferir el rol de IAM como rol de ejecución de Lambda de la función:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Si almacenas el código de la función de Lambda en un bucket de S3, añade una política para conceder permisos de Amazon S3 a la política de IAM.

Ejemplo de política:

{  "Sid": "PermissionToUploadCodeFromS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::S3_BUCKET_NAME/FileName.zip"
}

Nota: Sustituye FileName.zip por el archivo .zip del código de la función de Lambda.

Para ver y actualizar la función, debes añadir acciones y permisos de API a nivel de lectura.

Ejemplo de política:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionsToCreateAndUpdateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Para crear un rol de IAM durante el proceso de creación de la función de Lambda, añade los siguientes permisos de IAM:

{  "Sid": "PermmissionsToCreateAndUpdateARole",
  "Effect": "Allow",
  "Action": [
    "iam:CreateRole",
    "iam:CreatePolicy",
    "iam:PutRolePolicy",
    "iam:AttachRolePolicy"
  ],
  "Resource": "*"
}

Permisos para eliminar una función de Lambda

Para eliminar una función de Lambda, añade los siguientes permisos a la política de IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Para eliminar una función mediante la consola de Lambda, añade permisos de acceso de lectura de Lambda a la política de IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Permisos para ver los detalles de configuración de una función de Lambda

Para permitir que un usuario vea los detalles de configuración de una función de Lambda, añade los siguientes permisos a la política de IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

Nota: Según el nivel de acceso de lectura que desees conceder, puedes añadir todos los permisos anteriores o solo algunos de ellos. Si usas capas de Lambda, también puedes añadir los permisos lambda:GetLayerVersion o lambda:ListLayerVersions.

Para usar la consola de Lambda para ver los detalles de configuración de una función, añade los permisos siguientes a la política de IAM:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

La consola de Lambda utiliza las etiquetas en las funciones de Lambda, lo que permite filtrar las funciones de Lambda por etiqueta. Para usar las etiquetas, añade los siguientes permisos a la política de IAM:

{  "Sid": "PermissionsToFilterFunctionsByTags",
  "Effect": "Allow",
  "Action": [
     "tag:GetResources"
  ],
  "Resource": "*"
}

La consola de Lambda muestra detalles sobre el rol de IAM asociado a una función de Lambda y los recursos a los que tiene acceso el rol de la función. Para ver los detalles, añade los siguientes permisos a la política de IAM:

{  "Sid": "PermissionsToViewRolesAndPolicies",
  "Effect": "Allow",
  "Action": [
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:GetRolePolicy",
    "iam:ListRoles",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
  ],
  "Resource": "*"
}

Si tienes requisitos adicionales, es posible que debas conceder permisos adicionales a otros servicios de AWS.

Permisos para modificar una función de Lambda

Para permitir que un usuario modifique una función de Lambda, añade los siguientes permisos a la política de IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:AddPermission",
        "lambda:RemovePermission",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:DeleteAlias",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:PutFunctionConcurrency",
        "lambda:DeleteFunctionConcurrency",
        "lambda:PublishVersion",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Nota: Según el nivel de acceso de escritura que desees conceder, puedes añadir todos los permisos anteriores o solo algunos de ellos.

Para restringir el acceso, añade lambda:AddPermission y lambda:RemovePermission a una entidad principal que esté incluida en una política adjunta. También puedes restringir lambda:UpdateEventSourceMapping y lambda:DeleteEventSourceMapping a la asignación de orígenes de eventos concretos.

Para usar una clave administrada por el cliente para cifrar variables de entorno, añade los siguientes permisos de AWS KMS a la política de IAM:

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

Para modificar la configuración de una función de Lambda mediante la consola de Lambda, añade los permisos siguientes a la política de IAM:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

Permisos para invocar una función de Lambda

Para invocar manualmente una función de Lambda, añade los siguientes permisos a la política de IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Para crear un listado de las funciones de Lambda mediante la consola de Lambda, añade los permisos siguientes a la política de IAM:

{  "Sid": "PermissionsToViewFunctionsConfigInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings",
    "lambda:GetFunction",
    "lambda:ListTags"
  ],
  "Resource": "*"
}

Para permitir que otros servicios invoquen una función de Lambda, utiliza políticas basadas en recursos para Lambda. También puedes usar políticas de funciones para proporcionar acceso entre cuentas a las funciones de Lambda.

El siguiente ejemplo de política permite que un usuario de otra cuenta invoque manualmente una función de Lambda:

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Nota: Sustituye External_AWS_ACCOUNT_ID por la cuenta a la que deseas permitir invocar la función.

Permisos para supervisar las funciones de Lambda

Para ver las métricas de Amazon CloudWatch en la pestaña Monitoreo de la consola de Lambda, añade los siguientes permisos a la política de IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionForCloudWatchMetrics",
       "Effect": "Allow",
       "Action": [
          "cloudwatch:GetMetricStatistics",
          "cloudwatch:GetMetricData"
        ],
        "Resource": "*"
     }
  ]
}

Si deseas conceder permisos para métricas específicas de Cloudwatch e Información de registros de CloudWatch, consulta Referencia de permisos de Amazon CloudWatch y Referencia de permisos de Registros de CloudWatch.