はじめに
AdministratorAccess
権限では権限が強すぎるので、AWSのインフラ運用者にPowerUserAccess
権限やSystemAdministrator
権限を与えて、それらの権限で触ることができないIAM系の権限を追加で設定してインフラ運用者側でIAMロールやIAMポリシーを管理・運用しているシステムは多いのではないかと思います。
そんなシステムで私が経験した問題を共有しようと思います。
IAMポリシーバージョンとは
IAMポリシーは過去のIAMポリシー設定をバージョン管理しており、IAMポリシー画面の、「ポリシーのバージョン」のタブより、過去5世代前までのバージョンの設定に戻すことができるようになっています。
IAMポリシーを作成する権限となるCreatePolicy
などと比べると分かりづらい権限とはなりますが、IAMポリシーを運用するためには必要な権限となります。
IAMポリシーバージョンのアクションは全部で以下5つとなりますのでAWSマネジメントコンソール上から操作する際にどの部分の設定に当たるかをそれぞれ紹介します。
アクション | 内容 |
---|---|
ListPolicyVersions | IAMポリシーバージョンのリストを表示するのに必要 |
GetPolicyVersion | IAMポリシー内容の表示に必要 |
CreatePolicyVersion | 新しいIAMポリシーバージョンを作成する場合に必要 |
DeletePolicyVersion | IAMポリシーバージョンを削除する場合に必要 |
SetDefaultPolicyVersion | デフォルトのIAMポリシーバージョンを変更する場合に必要 |
ListPolicyVersions
「ポリシーのバージョン」から存在するポリシーバージョン一覧を確認するために必要な権限となります。
GetPolicyVersion
「許可」から現在のポリシー設定を表示させるために必要な権限となります。
また、権限がない場合、ポリシー設定の「編集」画面にも遷移できなくなるため、AWSマネジメントコンソール上でIAMポリシーを設定するためには必須となる権限となります。
CreatePolicyVersion
IAMポリシーを更新する際に必要な権限となります。
なお、CreatePolicyVersion
の権限が必要となるのはIAMポリシーを更新する場合であり、IAMポリシーを新規作成する際には不要となります。
DeletePolicyVersion
「ポリシーのバージョン」から古いバージョンを削除する場合に必要な権限となります。
SetDefaultPolicyVersion
「ポリシーのバージョン」から最新以外のバージョンをデフォルトとして設定する場合に必要な権限となります。
IAMポリシーを管理・運用していくために最低限必要なIAMポリシーバージョン権限
AWSマネジメントコンソールでIAMポリシーの作成・更新を行うことを前提とした最低限の権限としては最低限以下2つあれば、ある程度のIAMポリシーの運用を行うことが可能となります。
CreatePolicyVersion
GetPolicyVersion
最低限の権限で運用したい方は上記のみの権限でも可能ですが、後述の問題が発生することを理解したうえで検討してください。
最低限の権限での問題
最低限の権限でもIAMポリシーの作成・更新ができますが、以下のような問題が発生します。
許可画面で表示されるIAMポリシー設定と編集画面で表示されるIAMポリシーが異なる
ListPolicyVersions
のアクションは「ポリシーのバージョン」タブのバージョン一覧の表示に必要となる権限となりますが、バージョン一覧の表示だけではなく、IAMポリシーの編集にも関わってくる問題となります。
「許可」タブで表示されるIAMポリシーの設定は、前述の通りGetPolicyVersion
の権限があれば以下のように画面表示され、デフォルトのポリシーバージョンの設定が表示されます。
IAMポリシーの編集画面に遷移するとポリシー設定が以下のように表示されますが、ListPolicyVersions
の権限が無いと、デフォルトのポリシーバージョンの設定ではなく、最初のポリシーバージョンの設定(つまりバージョン1の設定)が表示されます。
推測となりますが、おそらく編集画面でIAMポリシーの設定を表示する際、ListPolicyVersions
権限で、存在するポリシーバージョンを取得し、デフォルトとなるIAMポリシーの設定を画面表示していると思われます。
その際、ListPolicyVersions
権限が無いと、存在するポリシーバージョンが分からないため、IAMポリシー新規作成時に作られるバージョン1の設定が読み込まれます。
※編集画面の設定には最新バージョンに存在する「s3:*
」の設定が無い
ちなみにListPolicyVersions
権限が無く、5世代以上更新していて最初のバージョン1が削除されている場合は以下のようにv1が無いと表示されることからバージョン1を読み込みに行っていることが確認できます。
編集画面でListPolicyVersions
に関するエラーが表示されるのであれば気づくことができますが、バージョン1のポリシー設定を読み込む際の権限はGetPolicyVersion
権限で読み込まれ、もちろんポリシーの編集画面までたどり着けているのであればGetPolicyVersion
権限は付与されていることからエラーも表示されません。
エラーも表示されないことから気づくのが困難なので個人的にこの問題が一番事故につながる問題だと感じています。
IAMポリシーを5回更新したら更新できなくなる
IAMポリシーのバージョンは過去5世代分しか保持できないため、IAMポリシー更新時に5世代を超える場合、一番古いバージョンの削除が行われます。
そのためListPolicyVersions
とDeletePolicyVersion
権限が付与されていない場合、古いバージョンの削除が行えず、以下のようにIAMポリシーの更新ができなくなります。
DeletePolicyVersion
権限だけではなくListPolicyVersions
の権限も必要となる理由としては、前述の「許可画面で表示されるIAMポリシー設定と編集画面で表示されるIAMポリシーが異なる」と同様の理由で必要となると思われます。
SetDefaultPolicyVersion権限は無くても何とかなる?
「全て許可するべし!」とタイトルをつけていますが、他の権限に比べればSetDefaultPolicyVersion
の権限は無くても何とかなります。
SetDefaultPolicyVersion
権限が使われる場面としては、別バージョンに変更する場合となるため、常に最新バージョンを使う限りは影響ありません。
あるとすればIAMポリシー更新時に「この新しいバージョンをデフォルトとして設定します。」のチェックを外して更新した後、バージョン変更するときには多少影響がありますが、SetDefaultPolicyVersion
以外の権限が許可されていれば、「この新しいバージョンをデフォルトとして設定します。」のチェックを行ったうえで再度ポリシーを更新し直すことでデフォルトバージョンが最新バージョンに切り替わるので、無くても何とかなります。
ただ、SetDefaultPolicyVersion
以外の権限を付与しているのであれば、あえてSetDefaultPolicyVersion
だけ除外する必要もないかと思うので、全て許可しておいたほうが良いでしょう。
おわりに
ポリシーバージョン系のアクションは、SetDefaultPolicyVersion
以外は、どれを抜いたとしても運用に大きく支障が出てしまうものとなります。
許可画面と編集画面のポリシー設定差異の問題については知っていないと大事故に繋がる可能性があり、さらに過去の設定に戻ってしまっている(デグレード)ことで作業品質や作業ミスを疑われてしまう可能性もあるため、IAMポリシーを運用する立場の場合、ポリシーバージョン系アクションは全て許可するようにしましょう。