LoginSignup
3
0

More than 3 years have passed since last update.

AWS CLIでポリシーのjsonファイルを指定するとMalformedPolicyエラー

Posted at

常識の範疇かもしれないけど、数時間悩んだ挙句に解決した時には「これ半年ぐらい前にもやった気がする」と思ったので、僕が3回目に悩んだときのためにメモしておく。

AWS CLIでポリシーのjsonファイルを指定するとMalformedPolicyエラー

AWS CLIでS3バケットにポリシーを設定する put-bucket-policy では、ポリシードキュメントをJSONファイルとしてあらかじめ用意しており、 --policy オプションで指定する。公式ドキュメントのExampleは以下のようになっている。

aws s3api put-bucket-policy --bucket MyBucket --policy file://policy.json

きっとフルパスで指定するのが無難だろう、でもWindowsの場合区切り文字やドライブはどう描くのが正解かなと思いながらいくつかやってみると、次のようなエラーになる。

A client error (MalformedPolicy) occured: policies must be valid JSON and the first byte must be '{'

正しいJSON形式ではないというのだから、JSONLintでチェックしたり、文字コードや改行コード疑ったりもしたが、解決しない。

Windowsでは file://C:\Temp\policy.json のように指定

答えはStackoverflowに書かれてた。問題はJSONファイルの内容ではなくて、ファイルパスの指定方法だった。

ポリシーファイルパスには file:// プロトコルをつけることが必要

$ aws s3api put-bucket-policy --bucket kryptonite \
   --policy file:///home/superman/aws-example/public-bucket-policy.json

もしくは(Windows)
$ aws s3api put-bucket-policy --bucket kryptonite \
   --policy file://C:\Temp\public-bucket-policy.json

もしくは(相対パス)
$ aws s3api put-bucket-policy --bucket kryptonite \
   --policy file://public-bucket-policy.json

Windowsでは file://C:\Temp\policy.json のようにフルパスを指定するらしい。 file://C:\Temp ってまさかと思うけど、これでポリシーの設定ができた。まさかと思うけど、これでいいのだ。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0