EC2にIAMRole情報を渡すインスタンスプロファイルを知っていますか?

2017.04.05

ご機嫌いかがでしょうか、豊崎です。

AWSマネジメントコンソール(以降、AMC)から利用していると気づかない、 インスタンスプロファイルについて調べましたので、書いていきたいと思います。

インスタンスプロファイルってなに?

インスタンスプロファイルは IAM ロールのコンテナであり、インスタンスの起動時に EC2 インスタンスにロール情報を渡すために使用できます。

参考URL http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

書いてある通り、IAMRoleを納めるための容器であり、EC2にアタッチする時に必要なコネクターの役割をします。

なぜインスタンスプロファイルを意識しないのか?

EC2に対してAWSリソースへの操作権限を与える場合、IAMRoleを作成してEC2にアタッチします。

IAMRoleの作成をAMCから行うとインスタンスプロファイルは自動的に作成されてIAMRoleと紐付けられます。 また、自動的に作成されるインスタンスプロファイルの名前はIAMRoleと同じになるため利用者が意識することはあまりありません。

以下はAMCからIAMRoleを作成した際に自動作成されてIAMRoleに紐づけられたインスタンスプロファイルです。 IAMRoleの名前と同じになっています。

IAM_Management_Console_1

では、どのような時にインスタンスプロファイルを意識することになるのでしょうか? それはAWSCLIやCloudFormationなどAMC以外を利用した構築を行う場合です。

CloudFormationでインスタンスプロファイルを体験

サンプルとしてCloudFormationでEC2にIAMRoleを(実際にはインスタンスプロファイルを)アタッチしている部分を抜き出してみます。

Resources:
### Create IAM Role
myRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Principal:
Service:
- "ec2.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: "/"
RoleName: test-role
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonS3FullAccess
### Create IAM Profile
myInstanceProfile:
Type: "AWS::IAM::InstanceProfile"
Properties:
Path: "/"
Roles:
- !Ref myRole
### Create EC2
myEC2:
Type: "AWS::EC2::Instance"
Properties:
AvailabilityZone: ap-northeast-1a
IamInstanceProfile: !Ref myInstanceProfile
ImageId: ami-56d4ad31
InstanceType: t2.micro
KeyName: test-key
SecurityGroupIds:
- sg-XXXXXXXX
SubnetId: subnet-XXXXXXXX

上記ではIAMRole、InstanceProfile、EC2を作成し、 InstanceProfileのRoleプロパティでIAMRoleを指定、EC2のIamInstanceProfileプロパティでInstanceProfileを指定しています。

作成したIAMRoleとインスタンスプロファイルをAMCで確認すると以下のようになっています。

IAM_Management_Console

さいごに

AMCからの操作ではあまり意識しないインスタンスプロファイルですが、意識していみるとどのようにRoleから権限が渡されているのかがわかって面白いです。また、インスタンスプロファイルの存在を理解していないとEC2とIAMRoleを直接関連づけられると誤認してハマることになりかねません。この記事がだれかのお役に立てば幸いです。