Могу ли я разрешить анонимный доступ к документации AWS API Gateway? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть шаблон 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, похоже, тоже не помогают.

...