各種AWSサービスの参照情報をJSONから取得できる様になりました
しばたです。
先日AWSより「 Streamline automation of policy management workflows with service reference information 」というタイトルの更新がアナウンスされました。
こちらを日本語にすると「 サービス参照情報を使用してポリシー管理ワークフローの自動化を合理化する 」といったところですが、初見ではちょっとわかりにくかったので本記事で解説したいと思います。
どういうことか?
はじめに何が起きたかを説明すると、今回、AWSから各サービスの一覧とサービス毎で利用可能なアクションの一覧がJSONの形で公開されたというのが更新内容となります。
この公開されたJSONをIAMポリシー管理などの自動化のために使って欲しい意図だそうです。
AWSの更新としてはあくまでもJSONの公開(と今後のメンテナンス)だけであり、JSONの利用方法はユーザーに委ねられています。
より具体的な内容は以下のドキュメントにまとめられているのでご一読ください。
サービスの一覧は
で公開されており、curl
コマンドでアクセスするとこんな感じのレスポンスを返します。
# サービス一覧を取得
$ curl -sS https://servicereference.us-east-1.amazonaws.com/
[ {
"url" : "https://servicereference.us-east-1.amazonaws.com/v1/a2c/a2c.json",
"service" : "a2c"
}, {
"url" : "https://servicereference.us-east-1.amazonaws.com/v1/a4b/a4b.json",
"service" : "a4b"
}, {
"url" : "https://servicereference.us-east-1.amazonaws.com/v1/access-analyzer/access-analyzer.json",
"service" : "access-analyzer"
}, {
# ・・・中略・・・
}, {
"url" : "https://servicereference.us-east-1.amazonaws.com/v1/xray/xray.json",
"service" : "xray"
} ]
service
に対象サービスの名前空間とurl
に各サービスの詳細情報へのリンクが記載されています。
続けて最初にリストアップされたa2c (App2Container)
のJSONにアクセスすると以下の通りの結果を返します。
# App2Container の詳細情報を取得
$ curl -sS https://servicereference.us-east-1.amazonaws.com/v1/a2c/a2c.json
{
"Name" : "a2c",
"Actions" : [ {
"Name" : "GetContainerizationJobDetails"
}, {
"Name" : "GetDeploymentJobDetails"
}, {
"Name" : "StartContainerizationJob"
}, {
"Name" : "StartDeploymentJob"
} ],
"Version" : "v1.00"
}
ファイル自体のバージョンを表すVersion
の他にActions
でApp2Containerで許可されたアクションの一覧を取得できます。
従来ドキュメントにしか無かった一覧をJSON化しただけとも言えますが、プログラムで扱いやすい形式が増えるメリットは非常に大きいでしょう。
注意点と個人的に気になったポイント
ここからは注意点と個人的に気になったポイントをいくつか紹介していきます。
1. サービス側の更新が反映されるまでに最大24時間かかることがある
先述のドキュメントに
Changes to the service reference information may take up to 24 hours to be reflected in the list of action-level permissions for the service.
とある様に、AWSサービス側で新しいアクションが増えた際にJSONに反映されるまで最大24時間かかることがあります。
リアルタイム性を求められるケースでは使えませんのでご留意ください。
2. 全てのサービスが対象ではない + 名前空間とサービスIDが一致しない場合がある
残念ながら現時点で取得できるサービスはAWSのすべてのサービスではありませんでした。
基本的には上記ドキュメントの内容がベースに見えるものの完全同期はしていませんでした。
加えてJSONで定義されているキーはあくまでもポリシー定義で使う名前空間を使っており、AWS CLIや各種SDKで使うサービスIDとは異なることがあります。
たとえばAmazon DocumentDBの場合、サービスIDはdocdb
ですが、ポリシー定義はRDSを流用しているためdocdb
という名前空間はありません。
Amazon DocumentDB Elastic Clustersであれば独自の名前空間docdb-elastic
を持っているため、JSONではdocdb-elastic
だけ公開される形になっていました。
またAmazon EFSはサービスIDがefs
で名前空間がelasticfilesystem
とシンプルに差異があります。
この場合JSONのキーはelasticfilesystem
になります。
あと、Amazon SESの様な「APIはV1、V2の2バージョンあるが名前空間はses
で変わらない」場合は両バージョンまとめられた形になっています。
対してAWS WAFの様なバージョン毎で名前空間が分かれるものはそれぞれのバージョン(waf
とwafv2
)が公開されています。
サービスIDではなく名前空間を起点にしている点は要注意ポイントだと思います。
3. 終了済みサービスも含まれている
理由は不明ですが、既に終了しているサービスの情報もいくつか存在しています。
たとえば今年終了したばかりのAmazon Honeycode(honeycode
)や2022年に終了済みのAmazon WorkLink(worklink
)、謎サービスのAWS Backup Storage(backup-storage
)が存在しています。
ドキュメント上でもこれらのサービスがまだ残り続けているので、多分ですが、単なる更新漏れな予感がします...
最後に
簡単ですが以上となります。
「JSONで公開してくれるのは嬉しいけど、もう少し取得できる情報が欲しい。」というのが率直な感想です。
現時点では、一覧では「サービスの名前空間」だけ、各サービスでは「アクション名」だけしか取得できず、自動化のために必要な情報がまだまだ不足しています。
例えば一覧では「サービス名」等のメタ情報があると嬉しいですし、サービス毎の情報では各アクションにおけるアクセスレベルやCondition Keyが取得できないと使いにくいと思います。
この点に関しては今後の更新で改善されることを期待したいですね。