ロールが存在しない
IAMロールの名称がイケてなかったので変更しようとした時の話です。
まずはアタッチされているロールを確認しようと、アクションからロールを確認してみました。
するとそこにはハッシュ値のついたロールがアタッチされていました。
IAMロールは名称の変更ができない(面倒くさいから名称変更できるようにしてほしい......)ので、アタッチされているIAMロールの名称を変更したい場合は、新たに作成する必要があります。新たに作成するために、アタッチされているポリシーを確認しようとIAMロールを検索したところ、なんと当該IAMロールが存在していませんでした!!
さらに、EC2のコンソールから当該EC2のチェックボックスをクリックした際に画面下部に現れるペインのセキュリティタブに表示されるロールは上記とは別のものでした。
実は、「EC2」のIAMロールを変更する画面で表示されているのは、IAMロールではなくインスタンスプロファイルだったのです!!
とても分かりやすいQiita記事があったので、詳しくはこちらをご参照↓ください
一言でいえば、インスタンスプロファイルは「EC2インスタンスとIAMロールを結びつけるための箱」です。 コンソールからEC2用のIAMロールを作成する場合はIAMロールと同名のインスタンスプロファイルが同時作成されているため、インスタンスプロファイルのことを全く意識していなくても問題ありません。
今回詰まってしまったのは、当該インスタンスがCloudFormationから作成されたものであり、IAMロールとインスタンスプロファイルで名前が違っていたからでした。
EC2でのロールの付け替え
おまけです。
コンソールから新たなIAMロールを作成し、いざロールを付け替えようとしたらエラーが出ました。(ちゃんとIAMロールではなくインスタンスプロファイルと書かれていますね)
IAMロールの付け替えはEC2が起動中でないとできないらしいです。
インスタンスプロファイルがEC2の中に存在するので、EC2が起動中でないとインスタンスプロファイルを操作できないってことなんでしょうか。そんな気がする。
そういえばAWSを一切いじっていなくて試験勉強だけをしていた時に、EC2にはそのままIAMロールをアタッチするんじゃなくてインスタンスプロファイルを媒介させる、みたいな話があったのを思い出しました。当時は意味不明で記憶していましたが、その時のおかげで今調査した際の理解度が全然違っている気がします。ありがとう過去の自分。
ちなみに、なぜこのような仕様になっているのかはよくわかりませんでした。特別な理由があるのか、合わせたほうがいいけど今更変更するのは面倒なのか、どちらなのでしょうか。