Как передать файл политики ресурсов json в команду aws-cli create gateway? - PullRequest
0 голосов
/ 24 июня 2019

Как передать файл политики ресурсов json в команду AWS CLI create-gateway? В этой ссылке AWS описывается, как сам json передается с помощью команды: Создание и присоединение политики ресурсов шлюза API к API - Amazon API Gateway

Однако лучше передать политику в файл, и я попробовал следующее:

aws apigateway create-rest-api \
    --name "api-name" \
    --policy "file:PolicyDocument.json"

Вот PolicyDocument.json, действительный, когда я копирую его через Консоль управления в политиках ресурсов шлюза API:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "execute-api:/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "100.101.102.103/32"
                    ]
                }
            }
        }
    ]
}

Возвращена следующая ошибка:

Произошла ошибка (BadRequestException) при вызове CreateRestApi операция: недействительный программный документ. Пожалуйста, проверьте синтаксис политики и убедитесь, что Принципы действительны.

1 Ответ

1 голос
/ 29 июня 2019

Похоже, что для этой команды CLI она ожидает строковое значение https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html

- policy (string) Строковый документ политики JSON, который применяется к этому RestApi независимо от конфигурации вызывающего и метода.

Мне удалось сделать это с помощью следующего синтаксиса:

aws apigateway create-rest-api --name 'My First API' --description 'This is my first API' --policy '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":"*","Action":"execute-api:Invoke","Resource":"execute-api:/*","Condition":{"IpAddress":{"aws:SourceIp":["100.101.102.103/32"]}}}]}'

OUTPUT

{
    "id": "1122334455",
    "name": "My First API",
    "description": "This is my first API",
    "createdDate": 1561818588,
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "EDGE"
        ]
    },
    "policy": "{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":\\\"*\\\",\\\"Action\\\":\\\"execute-api:Invoke\\\",\\\"Resource\\\":\\\"arn:aws:execute-api:us-east-1:111122223333:91co7q5lj0\\/*\\\",\\\"Condition\\\":{\\\"IpAddress\\\":{\\\"aws:SourceIp\\\":\\\"100.101.102.103\\/32\\\"}}}]}"
}

Таким образом, в строке JSON должны быть удалены разрывы и пробелы в команде. Я использовал этот онлайн-инструмент для минимизации JSON. https://www.browserling.com/tools/json-minify

Вы также должны быть в состоянии минимизировать JSON с помощью этой команды.

cat PolicyDocument.json | jq -c

{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":"*","Action":"execute-api:Invoke","Resource":"execute-api:/*","Condition":{"IpAddress":{"aws:SourceIp":["100.101.102.103/32"]}}}]}

EDIT Я только что узнал, что это также работает:

aws apigateway create-rest-api --name 'My First API' --description 'This is my first API' --policy file://PolicyDocument.json

нам просто нужно было // перед дорожкой

...