Estoy intentando actualizar una política de recursos en mi instancia de API Gateway a través de la CLI y parece que no puedo encontrar la sintaxis correcta para el JSON. En la documentación dice usar "operaciones de parches" y, por lo que entiendo, necesita una cadena de JSON para la política. Probé JSON minimizado, JSON escapado, comillas simples, sin comillas, y nada parece funcionar. La documentación no tiene un ejemplo de JSON real en el campo de valor para las operaciones de parche, por lo que me siento un poco perdido.
He estado probando variaciones de este comando:
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"]}}}]}'
Me sale un error cada vez que dice:
Error parsing parameter '--patch-operations': Expected: '=', received: '{' for input:
Documentación pertinente aquí .
El siguiente comando ha sido probado en mi entorno - (usando 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%
La clave es convertir el objeto JSON en texto en cadena, he usado este sitio . Básicamente, pegue su JSON en el cuadro de texto de entrada y copie el texto en cadena en el comando AWS CLI.
Más información aquí .
Aquí hay una respuesta para una situación en la que tiene una política en un archivo , por ejemplo, policy.json
:
{ "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" ] } } } ] }
Luego, usando jq , puedes encadenarlo :
aws apigateway update-rest-api \ --rest-api-id <api-id> \ --patch-operations op=replace,path=/policy,value=$(jq tostring policy.json)