投稿

AWS豆知識: IAM Policy の Version がいつも 2012-10-17 なのはなぜか

AWS IAM Policy の Version がなぜ 2012-10-17 なのかを解説します。Version の意味、各 AWS サービスの API バージョンとの違い、Version を省略した場合の挙動までまとめて確認できます。

AWS豆知識: IAM Policy の Version がいつも 2012-10-17 なのはなぜか

AWS を使っていると、IAM Policy の Version2012-10-17 が指定されているのをよく見かけます。

1
2
3
4
5
6
7
8
9
10
{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}

初めて見ると、次のような疑問を持つ人も多いと思います。

  • なぜいつもこの日付なのか
  • AWS は更新され続けているのに、なぜ Version は変わらないのか

この記事では、この日付が何を意味しているのかを、よくある疑問に沿って整理していきます。

IAM Policy の Version が 2012-10-17 なのはなぜか

結論から言うと、2012-10-17 は IAM Policy Language のバージョンです。AWS の全サービスで共通して使われる API バージョンではありません。

AWS の API バージョンはサービスごとに異なります。たとえば、次のようなものがあります。

つまり、IAM Policy でよく使われる Version は 2012-10-17 ですが、AWS の API がすべて同じバージョンという意味ではありません。

なぜ 2012-10-17 という日付なのか

もっともよく知られている説明は、2012-10-17 が IAM Policy Language の大きなアップデートを示す日付だ、というものです。

このバージョンでは ${aws:username}${aws:PrincipalTag} のような Policy Variables が導入され、1 つのポリシーを多くのユーザーやロールに対して柔軟に使い回しやすくなりました。

そのため、IAM Policy では 2012-10-17 が事実上の標準として広く使われています。

Version を書かないとどうなるか

Version を省略すると、AWS は古い 2008-10-17 のルールでポリシーを解釈します。

その場合、${aws:username} のような文字列は変数として解釈されず、ただの文字列として扱われることがあります。

どこで 2008-10-17 をまだ見かけるのか

2012 年以前に作成され、その後あまり手が入っていない AWS アカウントでは、Version フィールドを持たない Inline Policy が今でも多く残っていることがあります。

公式には、JSON ポリシードキュメントで Version を完全に省略した場合、IAM は 2008-10-17 の解釈ルールを使います。

そのため、表からは見えにくいものの、2008 世代のポリシーが今もそのまま使われているケースがあります。

また、AWS Console で一部のリソース向けアクセスポリシーを作成すると、自動生成される JSON テンプレートが 2008-10-17 を初期値にしていることがあります。これは 2012-10-17 が使えないからではなく、既存システムや API との互換性を優先しているためです。

  • SQS Queue Policies: SQS コンソールで「ポリシーを編集」を開くと、初期テンプレートが 2008-10-17 のままになっていることがあります。
  • SNS Topic Policies: SQS と同じく、SNS の既定ポリシー JSON でも 2008 形式が表示されることがあります。
  • VPC Endpoint Policies (Gateway タイプのみ): S3 や DynamoDB 向けの Gateway Endpoint では、既定ポリシーが 2008 と記載されることがあります。

なぜこれらの古い Version は自動的に更新されないのか

これは、サービス側 API の設計、たとえば SQS の SetQueueAttributes などと関係しています。

  • API 互換性: 多くの Resource Policy は IAM API ではなく、各サービスの API 経由で管理されます。古くからある API との互換性を壊さないために、AWS は既定値をあえて維持しています。
  • 求められる要件が比較的シンプル: SQS や SNS では、多くの場合、特定の ARN に対して Allow または Deny を設定できれば十分で、2012 版の高度な変数機能が必須とは限りません。

将来 Version は更新されるか

今後新しいバージョンが出る可能性はありますが、現時点では公式な発表はありません。

仮に新バージョンが登場しても、AWS は通常、既存との互換性を保つために旧バージョンをしばらく残します。実運用では、可能な範囲で新しいバージョンを使うのがよいでしょう。

参考資料

この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。

トレンドのタグ