Quiero crear un script de implementación para algunas funciones lambda usando AWS SAM. Dos de esas funciones se implementarán en una cuenta (cuenta A), pero se activarán mediante un evento de creación de objeto de depósito s3 en una segunda cuenta (cuenta B). Por lo que sé, la única forma de hacerlo es mediante la adición de una política basada en recursos a mi lambda. Pero no sé cómo hacerlo en AWS SAM. Mi archivo yaml actual se ve así.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > deploy-test-s3-triggered-lambda Parameters: AppBucketName: Type: String Description: "REQUIRED: Unique S3 bucket name to use for the app." Resources: S3TriggeredLambda: Type: AWS::Serverless::Function Properties: Role: arn:aws:iam::************:role/lambda-s3-role Handler: src/handlers/s3-triggered-lambda.invokeAPI CodeUri: src/handlers/s3-triggered-lambda.js.zip Runtime: nodejs10.x MemorySize: 128 Timeout: 60 Policies: S3ReadPolicy: BucketName: !Ref AppBucketName Events: S3NewObjectEvent: Type: S3 Properties: Bucket: !Ref AppBucket Events: s3:ObjectCreated:* AppBucket: Type: AWS::S3::Bucket Properties: BucketName: !Ref AppBucketName¿Qué debo agregar a este archivo yaml para vincular una política basada en recursos que permita el acceso entre cuentas a mi función lambda?
Esto se puede lograr con la ayuda de AWS::Lambda::Permission mediante aws_cdk.aws_lambda.CfnPermission .
Por ejemplo, para permitir que se llame a su lambda desde un rol en otra cuenta, agregue lo siguiente a su CDK:
from aws_cdk import aws_lambda aws_lambda.CfnPermission( scope, "CrossAccountInvocationPermission", action="lambda:InvokeFunction", function_name="FunctionName", principal="arn:aws:iam::111111111111:role/rolename", )Si su cubo y su función Lambda existen en cuentas separadas, no sé si es posible modificarlos desde SAM/una sola plantilla de CloudFormation.
No creo que el evento s3 de cuentas cruzadas sea posible con SAM, es posible que deba volver a CFN.