Concesión de acceso a las funciones de Lambda a otras cuentas
Para compartir una función con otra Cuenta de AWS, agregue una declaración de permisos entre cuentas a la política basada en los recursos de la función. Le recomendamos que use put-resource-policy para crear una política JSON completa. Con put-resource-policy, puede especificar varias entidades principales, agregar condiciones y crear instrucciones de denegación. También se puede utilizar add-permission para casos de uso sencillos.
importante
El uso de put-resource-policy reemplaza cualquier política basada en recursos existente en el recurso. Si el recurso ya tiene los permisos definidos con add-permission, put-resource-policy los sobrescribe. Use get-resource-policy para recuperar la política existente antes de realizar cambios.
Uso de una política JSON completa (recomendado)
El siguiente ejemplo de política concede a dos Cuentas de AWS permiso para invocar una función, uno de ellos restringido a un rol de IAM específico:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-invoke", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:role/cross-account-role" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }
Guarde la política en un archivo denominado policy.json y aplíquela. resource-arn puede especificar una función, versión o alias:
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json
También puede restringir el acceso entre cuentas a versiones específicas mediante un alias. La siguiente política concede el acceso de invocación únicamente a través del alias prod:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-prod-alias", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function:prod" } ] }
Guarde esta política en un archivo denominado alias-policy.json y aplíquela al alias:
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function:prod\ --policy file://alias-policy.json
La política basada en recursos concede permiso a la otra cuenta para obtener acceso a la función, pero no permite a los usuarios de esa cuenta superar sus permisos. Los usuarios de la otra cuenta deben tener los permisos de usuario correspondientes para utilizar la API de Lambda.
Puede conceder acceso entre cuentas para la mayoría de acciones de la API que operen con una función existente. Por ejemplo, puede conceder acceso a lambda:ListAliases para permitir que una cuenta obtenga una lista de alias o a lambda:GetFunction para permitirles que descarguen el código de la función.
Si desea conceder a otras cuentas permiso sobre varias funciones o sobre acciones que no pueden utilizarse con una función, le recomendamos que utilice los roles de IAM.
Uso de add-permission
Para casos de uso sencillos, puede utilizar add-permission para agregar instrucciones individuales. En el siguiente ejemplo, se concede permiso a la cuenta 111122223333 para invocar my-function con el alias prod:
aws lambda add-permission \ --function-name my-function:prod\ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal111122223333\ --output text
Debería ver los siguientes datos de salida:
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
nota
Si llama a add-permission después de put-resource-policy, la nueva instrucción se anexa a la política JSON existente.
Para limitar el acceso a un usuario o función de otra cuenta, especifique el ARN completo de la identidad como el principal. Por ejemplo, arn:aws:iam::123456789012:user/developer.