gpt4 book ai didi

amazon-web-services - AWS SAM 模型在使用跨账户托管区域创建具有自定义域名的 API 时失败

转载 作者:行者123 更新时间:2023-12-05 06:19:11 24 4
gpt4 key购买 nike

问题陈述

我的 R53 域名和托管区域在账户 A 中。我想在账户 B(通过 SAM 模型)中创建一个 API,它将在账户 A 中声明一个自定义域名。

这是我的示例 SAM 模板

AWSTemplateFormatVersion : '2010-09-09'
Globals:
Api:
OpenApiVersion: 3.0.1
Transform: AWS::Serverless-2016-10-31
Resources:
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
Domain:
CertificateArn: pCertificateArn
BasePath:
- pVersion
DomainName: pCustomDomainName
Route53:
HostedZoneId: pHostedZoneId
EndpointConfiguration: REGIONAL
StageName: pStageName
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri:
Handler: hello.lambdaHandler
Runtime: nodejs12.x
Events:
AuthApi:
Type: Api
Properties:
Path: /hello-main
Method: GET
RestApiId: !Ref ApiGatewayApi

我通过管道执行这个 SAM 模板,这里是管道部署角色的代码。这将在账户 B 中执行

 rDeployProjectRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub '${AWS::StackName}-DEPLOYPROJECT-ROLE-${pEnv}'
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- cloudformation.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: !Sub '${AWS::StackName}-DEPLOYPROJECT-POLICY-${pEnv}'
PolicyDocument:
Version: '2012-10-17'
Statement:
<highlighting only the necessary assumed role>
- Effect: Allow
Action:
- sts:AssumeRole
Resource: !Ref pRoute53AssumedRoleArn

现在在我的账户 A 中,我创建了一个角色来像这样授予对账户 B 的访问权限

AWSTemplateFormatVersion: "2010-09-09"
Resources:
CreateRoute53Role:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS:
- arn:aws:iam::<Account B>:root
Action:
- sts:AssumeRole
Path: "/"
Policies:
- PolicyName: Route53Access
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- route53:*
Resource:
- arn:aws:route53:::hostedzone/XXX

每次我运行上面的代码时,它都会因 cfn 堆栈中的错误而失败 -

API: route53:GetHostedZone User: arn:aws:sts::XXX:assumed-role/XXX-DEPLOYPROJECT-ROLE-dev/AWSCloudFormation is not authorized to access this resource

有趣的是,当我在 IAM 中查找角色 (XXX-DEPLOYPROJECT-ROLE-dev) 并查看访问顾问时,它说我的 pRoute53AssumedRoleArn 甚至没有被访问。我不确定我做错了什么。

此外,如果我要通过帐户 A 中的 SAM 模板创建我的 API,它会创建得非常好,使用自定义域名,这正是我想要的方式。

好像只有跨账号域名访问有问题。

最佳答案

我知道这个问题是前一段时间发布的,但也许这会有点帮助,因为它并没有完全满足原始发布者的要求。

我的解决方法是将帐户 A 中的 route53 域委托(delegate)给使用我的 api 的帐户(帐户 B)。这基本上允许我在帐户 B 中设置所有内容,并避免尝试正确设置所有权限以使其跨帐户工作。此设置的一个很好的副作用是,这意味着我不允许账户 B 访问权限以更改账户 A 中的主要 DNS 设置。

委派子域名的说明在这里:https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingNewSubdomain.html

这篇文章描述了如何从根本上实现流程自动化(这比我的项目需要的多得多),但如果您大规模需要此功能,可能会对您有所帮助:https://hitthecloudrunning.com/blog/2020/04/12/managing-cross-account-dns-with-route-53-lambda-and-cloudformation/

关于amazon-web-services - AWS SAM 模型在使用跨账户托管区域创建具有自定义域名的 API 时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com