kenjuの日記

About Programming, Mathematics and Security

CloudFrontのPolicyに複数のStatementを定義することはできない

元ネタ:“Multiple Policy Statements for CloudFront Custom Policy (Signed Cookies) ”

CFのリソースを複数定義したいとする。ドキュメント を読む限り、

{
   "Statement": [
      {
         "Resource":"URL or stream name of the object",
         "Condition":{
            "DateLessThan":{"AWS:EpochTime":required ending date and time in Unix time format and UTC},
            "DateGreaterThan":{"AWS:EpochTime":optional beginning date and time in Unix time format and UTC},
            "IpAddress":{"AWS:SourceIp":"optional IP address"}
         }
      }
   ]
}

のようにStatementは配列型になっているので、以下のように書けそう。

{  
  "Statement":[  
    {  
      "Resource":"https://qssnkgp0nnr9vo.cloudfront.net/foo/*",
      "Condition":{  
        "DateLessThan":{  
          "AWS:EpochTime":1492666203
        }
      }
    },
    {  
      "Resource":"https://qssnkgp0nnr9vo.cloudfront.net/bar/*",
      "Condition":{  
        "DateLessThan":{  
          "AWS:EpochTime":1492666203
        }
      }
    }
  ]
}

しかし、手元で確認する限り、これだとうまく動作しない。GitHubのIssuesでも同様の議論をしている。「配列型だけど、一つの子要素しかValidではない」ケースは稀にある気がする。

そこで、対応策としては、

が考えられる。