LoginSignup
3
1

More than 3 years have passed since last update.

AWS CLI で EC2 インスタンスプロファイルを作成する方法

Posted at

はじめに

よくインスタンスプロファイルと IAM ロールを同じものと考えている人がいますが、厳密には異なります。
マネージメントコンソールを使用して EC2 インスタンスに IAM ロールを設定すると、自動的に IAM ロール名と同じインスタンスプロファイルが作成されるので、あまり意識していない人が多いのだと思います。
AWS CLI で EC2 インスタンスに IAM ロールを設定したい場合、インスタンスプロファイルを明示的に作成する必要があります。
イメージとしては以下となります。

image.png

検証

各設定値を予め環境変数に設定

マネージメントコンソールで作成されるインスタンスプロファイルと同様に、IAM ロールと同じ名前のインスタンスプロファイルを作成します。

InstanceProfileName=S3AdministratorForEC2
RoleName=$InstanceProfileName
PolicyArn=arn:aws:iam::aws:policy/AmazonS3FullAccess

IAM ロールを作成

assume-role-policy-document.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
aws iam create-role \
 --role-name $RoleName \
 --assume-role-policy-document file://assume-role-policy-document.json
{
    "Role": {
        "Path": "/",
        "RoleName": "S3AdministratorForEC2",
        "RoleId": "XXXXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::XXXXXXXXXXX:role/S3AdministratorForEC2",
        "CreateDate": "2020-03-27T01:43:30Z",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ec2.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }
    }
}

IAM ロールにポリシーをアタッチ

aws iam attach-role-policy \
--role-name $RoleName \
--policy-arn $PolicyArn

確認

aws iam list-attached-role-policies \
--role-name $RoleName
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonS3FullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AmazonS3FullAccess"
        }
    ]
}

インスタンスプロファイルを作成

aws iam create-instance-profile \
 --instance-profile-name $InstanceProfileName
{
    "InstanceProfile": {
        "Path": "/",
        "InstanceProfileName": "S3AdministratorForEC2",
        "InstanceProfileId": "XXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::XXXXXXXXXXXXXXXXX:instance-profile/S3AdministratorForEC2",
        "CreateDate": "2020-03-27T01:43:59Z",
        "Roles": []
    }
}

インスタンスプロファイルに IAM ロールをアタッチする

aws iam add-role-to-instance-profile \
--instance-profile-name $InstanceProfileName \
--role-name $RoleName

結果

aws iam get-instance-profile \
--instance-profile-name $InstanceProfileName
{
    "InstanceProfile": {
        "Path": "/",
        "InstanceProfileName": "S3AdministratorForEC2",
        "InstanceProfileId": "XXXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::XXXXXXXXXXXXXX:instance-profile/S3AdministratorForEC2",
        "CreateDate": "2020-03-27T01:43:59Z",
        "Roles": [
            {
                "Path": "/",
                "RoleName": "S3AdministratorForEC2",
                "RoleId": "XXXXXXXXXXXXXXXXX",
                "Arn": "arn:aws:iam::XXXXXXXXXXXXXX:role/S3AdministratorForEC2",
                "CreateDate": "2020-03-27T01:43:30Z",
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": "ec2.amazonaws.com"
                            },
                            "Action": "sts:AssumeRole"
                        }
                    ]
                }
            }
        ]
    }
}

まとめ

上記のようにして、AWS CLI でインスタンスプロファイルを作成することが出来ます。
作成したインスタンスプロファイルは、もちろん EC2 インスタンス起動時に指定することも可能ですし、マネージメントコンソールや AWS CLI で既存の EC2 インスタンスにアタッチすることも可能です。
「EC2 インスタンスに設定したい IAM ロールが、EC2 インスタンスに設定する IAM ロールの選択肢に表示されない」という場合は、インスタンスプロファイルが作成されていない可能性があります。
上記を参考にインスタンスプロファイルを作成して、状況が改善しないか試してみてください。

参考ドキュメント

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1