我有一个CloudFormation模板,其中包括使用OpenAPI 3.0主体配置的API网关。我想向我的API用户提供OpenAPI规范。理想情况下,在一个不错的GUI中,但是this answer表示不可能。我不想建立开发人员门户。
我的CFT包含一个DocumentationVersion元素,该元素为API创建文档。
这样的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"}
建议使用正确的令牌。
This page显示您可以使用策略控制对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" ]
}
}
}
]
}
}
},
但是,我仍然收到“缺少身份验证令牌”。我相信“条件”部分是正确的,因为它在CFT的其他地方使用过。
我想做的是可能的吗?如果是这样,我在哪里出错了?
编辑,在上述政策声明中添加"Principal": "*"
并将其直接移至APIGateway的政策似乎也无济于事。