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

10 minutos de lectura
0

Quiero conceder acceso de lectura y escritura a una función específica de AWS Lambda que se identifique mediante su nombre de recurso de Amazon (ARN). ¿Cómo puedo proporcionar acceso detallado a funciones de Lambda?

Breve descripción

Puede configurar los permisos para funciones de Lambda mediante políticas de AWS Identity and Access Management (IAM) con el fin de:

  • Crear una función de Lambda
  • Eliminar una función de Lambda
  • Ver los detalles de configuración de una función de Lambda
  • Modificar una función de Lambda
  • Invocar una función de Lambda
  • Supervisar 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 están restringidas a una función de Lambda concreta, detallada en el elemento Recurso de cada declaración. En el elemento Condición para acciones de API compatibles con esos elementos se utiliza un nombre de función concreto.

Las acciones de API incompatibles con permisos a nivel de recurso requieren un comodín («*») en el elemento Recurso y no pueden aplicar claves de condición específicas del servicio de Lambda. Para obtener más información sobre las acciones, los recursos y las condiciones de IAM compatibles con Lambda, consulte Acciones, recursos y claves de condición para AWS Lambda.

El valor del elemento Recurso de una declaración utiliza el ARN para identificar los recursos a los que se aplica la declaración. Por ejemplo, si la Acción es Invocar, el Recurso será el ARN de una función. IAM compara este ARN con el ARN de la función identificada por los parámetros FunctionName y Qualifier de una solicitud Invocar. Para obtener más información, consulte Versiones de la función de AWS Lambda.

Nota: Si utiliza varias versiones y alias, puede que tenga que incluir «arn:aws:lambda:region:AccountID:function:function_name:*» en el elemento del recurso.

Resolución

Permisos necesarios para crear una función de Lambda

Nota: Si aparecen errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Los permisos lambda:CreateFunction e iam:PassRole son necesarios para crear una función de Lambda con la Interfaz de la línea de comandos de AWS (AWS CLI) o un SDK. Para ver ejemplos de políticas, consulte Políticas de IAM basadas en identidades para AWS Lambda. La siguiente política permite al intermediario de la API crear una función de Lambda, transferir el rol de IAM como rol de ejecución de Lambda para la función y, a continuación, cargar el código desde su máquina local:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/role_name"
    }
  ]
}

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Si carga el código desde un bucket de Amazon Simple Storage Service (Amazon S3), añada una política parecida a la siguiente a la política de IAM existente para conceder los permisos necesarios para Amazon S3:

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

Nota: Actualice la política de modo que incluya los nombres relevantes de archivo y bucket de S3.

Como el código no se puede proporcionar al crear la función en la consola de Lambda, se requieren permisos de API, por ejemplo, para acciones de API en el nivel de lectura, así como para ver y actualizar la función. Agregue una política parecida a la siguiente para conceder estos permisos:

{
  "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:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/role_name"
    }
  ]
}

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

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

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

Permisos necesarios para eliminar una función de Lambda

Para eliminar una función de Lambda mediante AWS CLI o un SDK, añada permisos similares a los siguientes:

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

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Para eliminar una función de Lambda mediante la consola de Lambda, añada permisos de acceso de lectura de Lambda similares a los siguientes:

{
  "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:region:AccountID:function:function_name"
      ]
    }
  ]
}

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

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

Para conceder a un usuario permiso para ver los detalles de configuración de una función de Lambda, añada permisos similares a los siguientes:

Nota: Según el nivel de acceso de lectura que desee conceder, es posible que tenga que conceder todos los permisos que se indican a continuación o un subconjunto de los mismos mediante AWS CLI o un SDK.

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

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Para ver los detalles de configuración de una función mediante la consola de Lambda, añada permisos similares a los siguientes:

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

La consola de Lambda utiliza las funciones de etiquetado de Lambda, lo que permite filtrar las funciones de Lambda por etiquetas. Para usar el servicio de etiquetado de AWS, añada permisos similares a los siguientes:

...
{
  "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 IAM de la función. Para ver estos detalles, añada permisos similares a los siguientes:

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

Nota: Según sus requisitos y los servicios integrados con su función de Lambda, es posible que necesite conceder permisos adicionales para otros servicios de AWS. Para obtener más información, consulte Permisos de AWS Lambda.

Permisos necesarios para modificar una función de Lambda

Para conceder permiso a un usuario para modificar una función de Lambda, añada permisos similares a los siguientes:

Nota: Según el nivel de acceso de escritura que desee conceder, es posible que tenga que otorgar todos los permisos que se indican a continuación o un subconjunto de los mismos cuando utilice AWS CLI o un SDK.

{
  "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"
      ],
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:region:AccountID:function:function_name"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Puede restringir aún más el acceso mediante lambda:AddPermission y lambda:RemovePermission en el caso de una entidad principal incluida en una política transferida. También puede limitar lambda:UpdateEventSourceMapping y lambda:DeleteEventSourceMapping a la asignación de orígenes de eventos concretos. Para obtener más información, consulte Políticas de IAM basadas en identidad para AWS Lambda.

Para especificar una clave de AWS Key Management Service (AWS KMS) administrada por el cliente para cifrar las variables de entorno, añada permisos de KMS adicionales mediante un fragmento de política de IAM similar al siguiente:

...
{
  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:region:AccountID:key/keyID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}
...

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Para modificar la configuración de una función de Lambda mediante la consola de Lambda, añada permisos similares a los siguientes:

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

Permisos necesarios para invocar una función de Lambda

Para invocar manualmente una función de Lambda con fines de prueba mediante AWS CLI o un SDK, añada permisos similares a los siguientes:

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

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Para crear un listado de las funciones de Lambda mediante la consola de Lambda, añada permisos similares a los siguientes:

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

Para permitir que otros servicios invoquen una función de Lambda, utilice políticas basadas en recursos para AWS Lambda. También puede usar políticas de funciones para proporcionar acceso entre cuentas a las funciones de Lambda. El siguiente ejemplo de política se puede utilizar para permitir que un usuario de otra cuenta de AWS invoque manualmente una función de Lambda:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ExternalAccountID:user/username"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    }
  ]
}

Nota: Actualice la política de modo que incluya los valores relevantes para la región, el ID de cuenta, el nombre de la función, el ARN, etc.

Permisos necesarios para supervisar las funciones de Lambda

Para ver las métricas de CloudWatch en la vista de Supervisión de la consola de Lambda, añada permisos similares al siguiente:

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

Si desea conceder permisos para métricas específicas de Cloudwatch e información de registros de CloudWatch, consulte Referencia para permisos de Amazon CloudWatch y Referencia para permisos de registros de CloudWatch.