API网关与DNS记录在另一个帐户



在我们的环境中,有一个专用的AWS帐户,其中包含Route53中的注册域和托管区域。还创建了一个IAM角色,允许特定的其他帐户集在该托管区域中创建记录。

使用AWS CDK (v2)是否有办法在一个帐户中创建API网关,并在该专用帐户中为其创建DNS记录(a记录?)?

这是一个设置的例子:

export class CdkRoute53ExampleStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const backend = new lambda.Function(this, 'HelloHandler', {
runtime: lambda.Runtime.NODEJS_14_X,
code: lambda.Code.fromAsset('src'),
handler: 'hello.handler'
});
const restApi = new apigw.LambdaRestApi(this, 'Endpoint', {
handler: backend,
domainName: {
domainName: `cdk53.${Config.domainName}`,
certificate: acm.Certificate.fromCertificateArn(
this,
"my-cert",
Config.certificateARN
),
},
endpointTypes: [apigw.EndpointType.REGIONAL]
});
new route53.ARecord(this, "apiDNS", {
zone: route53.HostedZone.fromLookup(this, "baseZone", {
domainName: Config.domainName,
}),
recordName: "cdk53",
target: route53.RecordTarget.fromAlias(
new route53targets.ApiGateway(restApi)
),
});

}
}

基本上,我需要在另一个帐户的假定角色的凭据下创建最后一个ARecord构造。

据我所知,CDK堆栈完全是在单个IAM用户(又名身份)的上下文中构建和部署的。也就是说,你不能运行堆栈的不同位作为不同的IAM用户。(顺便说一句,使用常规AWS SDK的代码——比如lambdas——可以使用STS切换身份。)

因此,解决方案是尽可能多地使用CDK(在帐户B中)。完成此操作后,最后一步-注册DNS记录-使用在帐户a中操作的不同身份完成。

注册DNS记录可以使用AWS CLI命令完成,或者您甚至可以为此目的创建另一个(迷你)堆栈。

无论哪种方式,您都可以作为允许将记录写入帐户a的托管区域的身份执行第二步。

这可以通过在CLI或CDK命令中使用不同的--profile来实现。或者您可以使用STS来承担允许在帐户a中创建DNS记录的角色。

使用STS的优点是您不需要知道帐户a的凭据。但是我发现STS有一个陡峭的学习曲线,要正确使用STS可能会有点混乱。

编辑:似乎CDK堆栈在帐户B实际上可以切换角色时,注册一个DNS记录凭借CrossAccountZoneDelegationRecord结构和delegationRole属性-见https://stackoverflow.com/a/72097522/226513这意味着你可以保持所有的代码在帐户B CDK堆栈。

相关内容

最新更新