es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿La función get-layer-version de AWS Lambda no funciona para cuentas cruzadas?

Tengo una capa de AWS en la cuenta de AWS A y una función Lambda que referencia esa capa en la cuenta B. Creé la capa desde la cuenta A y le di permiso a la cuenta B para acceder a ella usando:

aws lambda add-layer-version-permission \
--layer-name myLayer\
--version-number <#> \
--statement-id sharingWithAccountB \
--principal <accountB-Id> \
--action lambda:GetLayerVersion

Puedo hacer que la función Lambda en la cuenta B acceda a la capa en la cuenta A a través de AWS SAM usando la propiedad Layers en mi plantilla SAM, que se ejecuta asumiendo un rol en la cuenta B:

Layers:
- arn:aws:lambda:us-east-1:<accountA-id>:layer:myLayer:<#>

Sin embargo, cuando intento ejecutar lo siguiente desde la cuenta B:

aws lambda get-layer-version --layer-name myLayer --version-number <#>

Recibo este error:

Se ha producido un error (ResourceNotFoundException) al llamar a la operación GetLayerVersion: El recurso que ha solicitado no existe.

Pregunta 1: Si SAM es solo un envoltorio en AWS Lambda, ¿no debería funcionar el acceso a la capa entre cuentas también para “aws lambda get-layer-version”?

Pregunta 2: ¿El comando add-layer-version-permission solo admite la acción lambda:GetLayerVersion? Cuando lo ejecuto para la acción lambda:ListLayerVersions, obtengo el siguiente error:

Se ha producido un error (ValidationException) al llamar a la operación AddLayerVersionPermission: se han detectado 2 errores de validación: El valor’ lambda: ListLayerVersions’ en’ acción’ no cumple la restricción: el miembro debe cumplir el patrón de expresión regular: lambda:GetLayerVersion; El valor’ lambda:ListLayerVersions’ en el’ acción’ no cumple la restricción: el miembro debe tener una longitud menor o igual a 22

La razón por la que intento dar esta autorización es porque estoy intentando ejecutar esto
aws lambda list-layer-versions --layer-name arn:aws:lambda:us-east-1:<accounta#>:layer:myLayer pero estoy obteniendo este error:

Se ha producido un error (AccessDeniedException) al llamar a la operación ListLayerVersions: El usuario: arn:aws:sts::accountB#:assumed-role/cloud-deployer/accountB-role no está autorizado para realizar: lambda: ListLayerVersions en el recurso: arn:aws:lambda:us-east-1:accountA#:layer:myLayer porque ninguna política con recursos permite la acción lambda: ListLayerVersions

Tags:  , ,

Answer

  1. Avatar for davy.ai
    1. Sí, SAM es un envoltorio de AWS Lambda, pero solo maneja el empaquetado y implementación de la función de Lambda y sus capas. No afecta los permisos y el control de acceso entre diferentes cuentas de AWS. El acceso de capa entre cuentas cruzadas puede funcionar para la función de Lambda referenciada en la plantilla de SAM porque el permiso fue otorgado explícitamente en la plantilla. Sin embargo, al ejecutar el comando aws lambda get-layer-version directamente, el permiso debe otorgarse por separado utilizando AWS Identity and Access Management (IAM).

    2. Sí, el comando add-layer-version-permission solo admite la acción lambda:GetLayerVersion. Está diseñado para otorgar permisos para que funciones o roles específicos accedan a una versión específica de la capa. Sin embargo, puede usar políticas de IAM para otorgar acceso a más acciones en la capa, como lambda:ListLayerVersions. Puede crear una política de IAM que permita la acción ListLayerVersions en el recurso de capa y luego adjuntar la política a la entidad de IAM que necesita el permiso, como un rol o usuario. El mensaje de error que recibió indica que la acción lambda:ListLayerVersions no cumple con las restricciones del comando add-layer-version-permission, pero aún puede otorgar el permiso utilizando políticas de IAM.

Comments are closed.