Terraformで管理しているユーザーに初回ログイン時のパスワード変更権限を付ける時。 AWSで予め用意しているポリシーに「IAMUserChangePassword」があります。
これをTerraformから使用する場合の方法として、以下の2通りの方法があるのでそのメモです。
- 「IAMUserChangePassword」のARNを直接指定しアタッチする。
- 作成するポリシーのアクションに、「iam:ChangePassword」と「iam:GetAccountPasswordPolicy」を追加する。
「IAMUserChangePassword」のARNを直接指定しアタッチする。
こちらは簡単なパターン。
アタッチしたいユーザーやグループに直接ARNを指定するだけです
ポリシーに「iam:ChangePassword」と「iam:GetAccountPasswordPolicy」を追加する。
こちらの使いどころとしては、グループにアタッチするポリシーを自作していて、
そのグループに対する権限周りは1つにまとめたい。とかって時(だと思っている。)
要は、「自作したポリシー」と「IAMChangePassword」の2つのアタッチをしたくない時
こんな感じで、ポリシーの内容に追加してあげます。 どうしてこうなるかというと、「IAMUserChangePassword」のポリシー内容の実態が上記だからです。
1つ注意点として、 iam:ChangePasswordのresourcesにuserのARNを指定するのですが以下のように$$もしくは&を使用する必要があります。
arn:aws:iam::*:user/$${aws:username}
arn:aws:iam::*:user/&{aws:username}
理由としては、terraformにより$が展開されてしまうのですが、 最終的なポリシーのJSON上では「arn:aws:iam::*:user/$${aws:username}」となる必要があるためです。
なぜ&でもOKなのかあまりわかってません。(githubのissueに書いてありました)