EC2にIAMRole情報を渡すインスタンスプロファイルを知っていますか?
ご機嫌いかがでしょうか、豊崎です。
AWSマネジメントコンソール(以降、AMC)から利用していると気づかない、 インスタンスプロファイルについて調べましたので、書いていきたいと思います。
インスタンスプロファイルってなに?
インスタンスプロファイルは IAM ロールのコンテナであり、インスタンスの起動時に EC2 インスタンスにロール情報を渡すために使用できます。
書いてある通り、IAMRoleを納めるための容器であり、EC2にアタッチする時に必要なコネクターの役割をします。
なぜインスタンスプロファイルを意識しないのか?
EC2に対してAWSリソースへの操作権限を与える場合、IAMRoleを作成してEC2にアタッチします。
IAMRoleの作成をAMCから行うとインスタンスプロファイルは自動的に作成されてIAMRoleと紐付けられます。 また、自動的に作成されるインスタンスプロファイルの名前はIAMRoleと同じになるため利用者が意識することはあまりありません。
以下はAMCからIAMRoleを作成した際に自動作成されてIAMRoleに紐づけられたインスタンスプロファイルです。 IAMRoleの名前と同じになっています。
では、どのような時にインスタンスプロファイルを意識することになるのでしょうか? それは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で確認すると以下のようになっています。
さいごに
AMCからの操作ではあまり意識しないインスタンスプロファイルですが、意識していみるとどのようにRoleから権限が渡されているのかがわかって面白いです。また、インスタンスプロファイルの存在を理解していないとEC2とIAMRoleを直接関連づけられると誤認してハマることになりかねません。この記事がだれかのお役に立てば幸いです。