使用 TS cdk 进行 SES 的跨账户设置

问题描述 投票:0回答:1

将应用程序拆分为多个环境后,我无法在应用程序中使用 SES。这是我的 AWS 结构: 我在一个 CDK 应用程序下有两个 AWS 账户。帐户 ROOT 是包含使用此类的 SES 资源定义的根帐户:

import * as cdk from 'aws-cdk-lib';
import * as ses from 'aws-cdk-lib/aws-ses';
import { Construct } from 'constructs';
import { ROOT_DOMAIN } from '../../iamphoto.constants';

export class SesStack extends cdk.Stack {
  public constructor(scope: Construct, props: cdk.StackProps) {
    super(scope, SesStack.name, props);

    new ses.EmailIdentity(this, 'Identity', {
      identity: ses.Identity.domain(ROOT_DOMAIN)
    });
  }
}

另一个帐户是帐户 DEV,它是一个托管开发环境的开发帐户,并且有一个名为“emailFunction”的 lambda 服务,其定义如下:

  private getEmailsFunction(): lambdaNodeJs.NodejsFunction {
    const nodejsFunction = new lambdaNodeJs.NodejsFunction(this, 'emailsFunction', {
      functionName: 'emails-function',
      entry: `${projectRoot}/index.ts`,
      environment: {
        SES_REGION: 'eu-central-1',
        SES_EMAIL_FROM: this.envVariables.SES_EMAIL_FROM
      },
      runtime: lambda.Runtime.NODEJS_20_X,
    });

    nodejsFunction.role?.addManagedPolicy(
      iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSESFullAccess')
    );

    nodejsFunction.addPermission('InvokePermission', {
      principal: new iam.ServicePrincipal('lambda.amazonaws.com'),
      action: 'lambda:InvokeFunction'
    });

    new cdk.CfnOutput(this, 'EmailsFunctionArn', {
      value: nodejsFunction.functionArn
    });

    return nodejsFunction;
  }

问题是我的 lambda 函数无法使用 AmazonSESFullAccess,因为 SES 堆栈是在 ROOT 账户中实现的。毕竟ROOT账户可以访问域(在route53下注册)。

typescript aws-cdk amazon-ses
1个回答
0
投票

我会在 lambda 函数中使用假设角色来通过跨帐户发送电子邮件。您可以在根帐户中创建一个角色,该角色将有权访问 SES 并承担角色。

在您的开发帐户中,您可以承担该角色来发送电子邮件。希望这有帮助

参考 javascript_sts_code_examples

© www.soinside.com 2019 - 2024. All rights reserved.