AWS CLIでAPI Gatewayのリソースポリシーを変更する(2019-06-03時点で公式ドキュメント不備あり)
AWS CLIを利用して、API Gatewayのリソースポリシーを変更する方法です。
前提
- API自体の作成は完成している
- リージョンは東京(ap-northeast-1)
手順
1. リソースポリシーをJSONの形にする
ポリシーの書き方がわからない場合は、コンソール画面で試してみると良いです。
JSONへの変換は適当におこなってください。
私は、ターミナルから実行しました。
$ node > a = { ... "Version": "2012-10-17", ... "Statement": [ ... { ..... "Effect": "Allow", ..... "Principal": "*", ..... "Action": "execute-api:Invoke", ..... "Resource": "arn:aws:execute-api:ap-northeast-1:xxxxxxxxx:xxxxxxxxx/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}", ..... "Condition": { ....... "NotIpAddress": { ......... "aws:SourceIp": [ ......... "{{sourceIpOrCIDRBlock}}", ......... "{{sourceIpOrCIDRBlock}}" ......... ] ......... } ....... } ..... } ... ] ... } { Version: '2012-10-17', Statement: [ { Effect: 'Allow', Principal: '*', Action: 'execute-api:Invoke', Resource: 'arn:aws:execute-api:ap-northeast-1:xxxx:xxxx/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}', Condition: [Object] } ] } > console.log(JSON.stringify(a).replace(/\"/g, '\\"')) {\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"arn:aws:execute-api:ap-northeast-1:xxxxxxxxx:xxxxxxxxx/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}\",\"Condition\":{\"NotIpAddress\":{\"aws:SourceIp\":[\"{{sourceIpOrCIDRBlock}}\",\"{{sourceIpOrCIDRBlock}}\"]}}}]}
注意点としては、ダブルクオート(")はバックスラッシュ()でエスケープしておく必要があります。
最後に出力された値を利用します。
2. AWS CLIを実行する
あとは、以下のコマンドで実行すればOKです。
aws apigateway update-rest-api \ --rest-api-id xxxx \ --region ap-northeast-1 \ --patch-operations "op=replace,path=/policy,value='{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"arn:aws:execute-api:ap-northeast-1:xxxx:xxxx/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}\",\"Condition\":{\"NotIpAddress\":{\"aws:SourceIp\":[\"{{sourceIpOrCIDRBlock}}\",\"{{sourceIpOrCIDRBlock}}\"]}}}]}'"
xxxx
の箇所は実際の値を入れるようにしてください。
注意
--patch-operations
の引数で"op=....
と記載しています。
2019-06-03時点の公式ドキュメントでは、
とダブルクオートの記載がありません。
ダブルクオートがないとエラーになるため、注意が必要です。