Soy bastante nuevo en AWS CDK y no he tenido mucha experiencia con AWS. En mi pila de CDK que estoy escribiendo, debo otorgar permisos a los recursos que se crean con otras plantillas de CDK y que ya están en AWS.
Digamos que mi pila A contiene una lambda, la lambda se invocará desde otro servicio X. El servicio X debe tener permiso de invocación de lambda. ¿Puedo dar permiso al servicio X desde el código de la pila A o tendré que modificar la pila del servicio X?
En general, la respuesta es sí, puede agregar permisos a los recursos creados fuera de la pila. Pero, debe asegurarse de que el recurso sea importable.
uso de lambdas:
agregue una política al rol lambda:
Más información aquí .
const importedLambda = lambda.Function.fromFunctionArn(scope,`${name}-lambda`,${LAMBDA_ARN}); importedLambda.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, // ... and so on defining the policy }));agregar permiso a lambda:
Más información aquí .
const importedLambda = lambda.Function.fromFunctionArn(scope,`${name}-lambda`,${LAMBDA_ARN}); importedLambda.addPermission('allowInvocation',{ principal: new ServicePrincipal('events.amazonaws.com'), // ... and so on defining the permission sourceArn: ... });No tiene que modificar el servicio X Stack.
Los ejemplos a continuación asumen que está usando mecanografiado.
Si desea permitir que todo el servicio (no recomendado) invoque el permiso en su lambda, puede usar lo siguiente:
Para S3
yourfunction.grantInvoke(new ServicePrincipal('s3.amazonaws.com'));para redes sociales
yourfunction.grantInvoke(new ServicePrincipal('sns.amazonaws.com'));Pero recomendaría especificar el ARN de recurso específico que desea permitir para invocar su lambda. Por ejemplo, si es otra función lambda, puede especificar su función ARN como sigue:
yourfunction.grantInvoke(new ArnPrincipal('arn:aws:iam:region:account-id:role/role-name'));Y como mencionó Amit en su respuesta, también puede usar addPermission si desea especificar permisos más granulares. Puede usar addPermission incluso para permitir que los recursos en otras cuentas de AWS invoquen su lambda.
Puede usar "cdk bootstrap" para rastrear el permiso de clave aws puede cumplir con el requisito de cdk.
cdk bootstrap ⏳ Bootstrapping environment aws://999999999999/us-west-2... ✅ Environment aws://999999999999/us-west-2 bootstrapped (no changes).Arriba está la impresión fina.
Leí la guía de https://cdkworkshop.com/20-typescript/20-create-project/500-deploy.html