Похоже, что для этой команды 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
нам просто нужно было //
перед дорожкой