我正在尝试通过CLI在我的API Gateway实例上更新资源策略,但似乎找不到正确的JSON语法。在文档中,它说使用“补丁操作”,据我了解,它需要该策略的字符串JSON。我尝试了缩小的JSON,转义的JSON,单引号,无引号,而且似乎没有任何作用。该文档在补丁操作的value字段中没有实际JSON的示例,因此我感到有些迷失。
我一直在尝试此命令的变体:
aws apigateway update-rest-api --rest-api-id abcde123 --patch-operations op=replace,path=/policy,value='{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":"*","Action":"execute-api:Invoke","Resource":"arn:aws:execute-api:region:000000000000:*"},{"Effect":"Deny","Principal":"*","Action":"execute-api:Invoke","Resource":"arn:aws:execute-api:region:000000000000:*","Condition":{"StringNotEquals":{"aws:SourceVpce":["vpce-123456789","vpce-987654321"]}}}]}'
我每次都说一个错误:
Error parsing parameter '--patch-operations': Expected: '=', received: '{' for input:
相关文档here。
以下命令已针对我的环境进行了测试-(使用bash)
aws apigateway update-rest-api --rest-api-id %REST_API_ID% --patch-operations op=replace,path=/policy,value='"{\"Version
\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource
\":\"arn:aws:execute-api:region:000000000000:*\"},{\"Effect\":\"Deny\",\"Principal\":\"*\",\"Action\":\"execute-api:Inv
oke\",\"Resource\":\"arn:aws:execute-api:region:000000000000:*\",\"Condition\":{\"StringNotEquals\":{\"aws:SourceVpce\"
:[\"vpce-123456789\",\"vpce-987654321\"]}}}]}"' --region %REGION%
关键是将JSON对象转换为字符串化的文本,我用过this site。基本上,将JSON粘贴到输入文本框中,然后将字符串化的文本复制到AWS CLI命令中。
更多信息here。