У меня есть шаблон CloudFormation, включающий шлюз API, настроенный с использованием тела OpenAPI 3.0.Я хотел бы сделать спецификацию OpenAPI доступной для пользователей моего API.В идеале в хорошем графическом интерфейсе, но этот ответ предполагает, что это невозможно.Я не хочу настраивать портал разработчика.
Мой CFT содержит элемент DocumentationVersion, который создает документацию для API.
Согласно this и this Я должен быть в состоянии загрузить свою документацию с URL-адреса, например
https://apigateway.[my_aws_region].amazonaws.com/restapis/[my_api_id]/stages/[my_api_stage]/exports/oas30
Действительно, когда я перехожу на этот URL-адрес, я получаю что-то вроде
{"logref":"56f5173b-a329-11e9-a8d5-e97c525eb634","message":"Missing Authentication Token"}
Что говорит о том, что это будет работатьс правильным токеном.
На этой странице показано, что вы можете управлять доступом к документации API с помощью политики.(Хотя, как ни странно, это говорит о том, что для использования account_id используется один из пользователей, которым вы хотите предоставить доступ - это правильно?)
Поэтому я попытался добавить следующий ресурс в свой CFT:
"ApiDocumentationAccessPolicy": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"Description": "Read access to API documentation restricted by IP",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:GET"
],
"Resource": {
"Fn::Join": [
"",
[
"arn:aws:apigateway::",
{ "Ref": "AWS::AccountId" },
":/restapis/",
"*/documentation/*"
]
]
},
"Condition" : {
"IpAddress": {
"aws:SourceIp": ["xxx.xxx.xxx.xxx" ]
}
}
}
]
}
}
},
Тем не менее, я все еще получаю «Missing Authentication Token».Я уверен, что часть «условие» является правильной, поскольку она используется в других местах в CFT.
Возможно ли то, что я хочу сделать, и если да, то где я иду не так?
EDIT Добавление "Principal": "*"
к приведенному выше заявлению о политике, а также перемещение его непосредственно в политику APIGateway, похоже, тоже не помогают.