[AWS] IAMユーザを作成して、初回ログイン時のパスワード変更がエラーにならないようにする。

こんにちは、与儀です。

EC2ReadOnlyAccess権限を付与したIAMユーザを作成して、社内の開発者に使ってもらう場合を想定します。IAMユーザを作成する際の設定で、「次回のサインインで新しいパスワードを作成するようにユーザーに求める」にチェックを入れることで、ユーザがログインしたときにパスワードを変更してもらうことが可能になります。

ですが、この初回ログイン時のパスワード変更が「iam:ChangePassword の実行権がありません。」というエラーでパスワード変更ができず、ログインもできなくなってしまうことがあります。

原因はエラー内容にある通りで、このIAMユーザ自身がパスワードを変更する権限を持っていないためです。この場合、下記のドキュメントにもあるように、パスワード変更権限のポリシーを追加する必要があります。
IAM ユーザーが自分のパスワードを変更できるようにする

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "iam:ChangePassword",
      "iam:GetAccountPasswordPolicy"
    ],
    "Resource": "*"
  }
}

ではまずIAMユーザの作成からしてみます。

「Identity & Access Management」を選択します。

IAMのダッシュボードを開いたら、「ユーザー」を選択します。

「新規ユーザーの作成」を選択します。

ユーザー名を入力して、「ユーザ―ごとにアクセスキーを生成」のチェックを外します。

パスワードを作成するためにユーザーを選択します。

「ポリシーのアタッチ」を選択します。

フィルタの窓で「EC2」と打ち込んで対象を絞り込みます。「AmazonEC2ReadOnlyAccess」を選択します。

ポリシーがアタッチされました。

「パスワードの管理」を選択します。

「カスタムパスワードの割り当て」で任意のパスワードを入力後、「次回のサインインで新しいパスワードを作成するようにユーザーに求める」にチェックを入れます。
これにより、ユーザは初回サインイン時にパスワード変更を求められます。

IAMユーザーとしてログインするには、ダッシュボードの、「IAMユーザーのサインインリンク」のURLを用います。このURLはデフォルトでは、「https://<アカウント番号>.signin.aws.amazon.com/console」となっていますが、ここではカスタマイズで任意の名前を付けています。

「アカウント名、ユーザー名、パスワード」を入力して、「サインイン」を押します。

ここでパスワード変更を求められるので、古いパスワードと新しいパスワードを入力して、「パスワード変更の確認」を押します。

すると、「iam:ChangePasswordの実行権がありません。」とエラーになります。現在このIAMユーザーには、「AmazonEC2ReadOnlyAccess」の権限しか付与されていないためそうなります。これを回避するため権限を追加します。

先ほどと同じように、ポリシーの画面にて「インラインポリシー」の「ここをクリックしてください。」をクリックします。

「カスタムポリシー」を選択します。

ポリシー名を任意の名前にして、ポリシードキュメントに、先ほど記載したポリシーを入力して「ポリシーの適用」を押します。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "iam:ChangePassword",
      "iam:GetAccountPasswordPolicy"
    ],
    "Resource": "*"
  }
}

これにて完了です。再度ログインした際にパスワード変更ができてログインできるようになります。