Постановка проблемы
Мое доменное имя R53 и размещенная зона находятся в учетной записи A. Я хочу создать API для учетной записи B (модель Thru SAM), в которой будет иметься собственное доменное имя, объявленное в учетной записи 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
Интересно, когда я смотрю роль (XXX-DEPLOYPROJECT-ROLE-dev) в IAM и смотрю на советник по доступу, он говорит, что мой pRoute53AssumedRoleArn даже не доступен. Я не уверен, что я делаю не так.
Кроме того, если бы я создал свой API через шаблон SAM в учетной записи A, он был бы создан совершенно нормально, с пользовательским доменным именем, именно так, как я этого хотел.
Кажется проблематичным c только с доступом к доменному имени для нескольких учетных записей.