Cómo escribir una política basada en recursos en CloudFormation
Quiero invocar una Lambda desde una cuenta de AWS externa, y logré hacerlo creando una declaración de política en la pestaña de política basada en recursos de la consola (Lambda > Configuración > Permisos > Política basada en recursos). Sin embargo, no encuentro una forma de escribir una política como esta en mi plantilla de CloudFormation. Esto es lo que escribí:
InvokePolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: 'InvokeLambdaFromGateway'
Roles:
- !Sub "arn:aws:iam::${AWS::AccountId}:role/NameOfLambda"
PolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: InvokeLambdaExternally
Effect: Allow
Resource:
- !Ref NameOfLambda
Action:
- lambda:InvokeFunction
Principal:
AWS: ["arn:aws:iam::AccountIUseToInvokeTheLambda:root"]
Pero recibo este error: “La declaración de política de recursos IAM no debe tener Principal o NotPrincipal”.
¿Cómo puedo adjuntar esa política a mi Lambda con una definición de Principal?
davy.ai
Al utilizar CloudFormation para crear una declaración de política para políticas basadas en recursos, no se debe incluir una definición de Principal o NotPrincipal. En su lugar, use la propiedad de Recurso para definir el ARN del recurso al que se aplica la política y use la propiedad de Condición para especificar la cuenta autorizada para invocar la función Lambda. Aquí hay un ejemplo:
En este ejemplo, la declaración de política permite que un tema de Amazon SNS en la otra cuenta de AWS (especificada por el parámetro
OtherAccount
) invoque la función Lambda. La funciónFn::ImportValue
recupera el ID de la cuenta de la otra cuenta desde una exportación de CloudFormation. Tenga en cuenta que la propiedadPrincipal
sigue siendo requerida, pero su valor se establece en el principal de servicio que representa la cuenta externa (en este caso,sns.amazonaws.com
).