目次
BeeXの榊原です。前にAWS CLIを用いてIAMロールを作成した際、インスタンスプロファイルの仕組みで躓きましたので、今回はインスタンスプロファイルの基本説明と検証の様子をブログにまとめました。
インスタンスプロファイルの基本説明
それぞれAWSの公式ドキュメントから引用します。
■EC2インスタンスが使用するのはIAMロールそのものではなく、インスタンスプロファイルである
Amazon EC2 は、IAM ロールのコンテナとしてインスタンスプロファイルを使用します。
細かいですがEC2インスタンスはIAMロールそのものではなく、IAMロールの内容が詰まったインスタンスプロファイルを使用しています。実際にEC2インスタンスにロールをアタッチする際はIAMロールのARNではなくインスタンスプロファイルのARNを指定しています。後ほどの検証画面で確認します。
■IAMロールをコンソールで作成する際、自動生成される
AWS Management Console を使用して Amazon EC2 のロールを作成する場合、コンソールはインスタンスプロファイルを自動的に作成し、そのインスタンスプロファイルにロールと同じ名前を付けます。
AWS CLI または AWS API からロールを管理する場合、ロールとインスタンスプロファイルを別個のアクションとして作成します。
今までコンソールでの作業が大半だったため、インスタンスプロファイルの存在はあまり気にしていませんでした。しかしEC2用のIAMロールをIaC等で作成する際IAMロールだけでなく、インスタンスプロファイルの作成とロールとの紐づけが必要です。
■インスタンスプロファイルに含められるIAMロールの数は1つのみ
インスタンスプロファイルに含めることができる IAM ロールの数は 1 つのみです。この制限を増やすことはできません。
EC2に付与したい権限は1つのIAMロールにまとめておく必要があります。
まとめ
以上の内容を図にまとめました。IAMロールをコンソールで作成する際、緑部分はあまり意識せずとも使えますが、AWS CLI等で作成される際は注意です。詳しくは検証パートで触れます。
実際にIAMロールを作成して検証
コンソールを用いた作成時
コンソールでIAMロールを作成するとリソースは下記のように表示されます。ARN項目とインスタンスプロファイルのARN項目が存在します。赤マスク部分の表記が違います。
続いてEC2にアタッチできるか試します。問題なさそうです。ここでよく見るとConsole-EC2-roleの下のARNはIAMロールのARNではなく、インスタンスプロファイルのARNとなっています。冒頭の説明と一致します。
AWS CLIでの作成時
次はAWS CLIでリソースを作成して試します。aws configure等の事前設定は本筋でないので割愛します。
# IAMロールを作成
$ aws iam create-role \
--role-name CLI-EC2-role \
--assume-role-policy-document file:/assumeRole.json
# 作成したIAMロールにポリシーをアタッチ
$ aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess \
--role-name CLI-EC2-role
上記コード内にある"assumeRole.json"の内容は以下の通りです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ここで一旦CLIで作成したIAMロールを見てみます。確かにコンソール作成で表示されていたインスタンスプロファイルのARNが存在しません。なのでインスタンスにロールをアタッチする画面にも表示されません。
よって冒頭の引用文通り、ロールとは別でインスタンスプロファイルを作成する必要があります。下記コマンドを入力します。
# インスタンスプロファイルを作成
$ aws iam create-instance-profile \
--instance-profile-name CLI-EC2-role
# インスタンスプロファイルにロールを追加
$ aws iam add-role-to-instance-profile \
--role-name CLI-EC2-role \
--instance-profile-name CLI-EC2-role
改めてコンソールを見ると、インスタンスプロファイルのARNが作成されていました。
EC2へのアタッチも無事できました。
以上で検証は終了です。
最後に
今回はインスタンスプロファイルの説明と検証を行いました。細かい部分ではありますが、コードでEC2用にIAMロールを作成される際は、ご注意いただけたらと思います。ここまでお読みいただきありがとうございました。