この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
大栗です。
先程既存のEC2に対してIAM Roleを設定することができるようになりました!早速試してみます。
- New! Attach an AWS IAM Role to an Existing Amazon EC2 Instance by Using the AWS CLI
- Attach an IAM role to your existing Amazon EC2 instance
2017年3月6日現在 Management ConsoleでもIAM Roleの設定が可能になっています。 [アップデート] EC2コンソールで既存のEC2インスタンスに対してIAM Roleをアタッチ、変更ができるようになりました
IAM Roleとは?
IAM Roleとは、AWSのサービスに対してアクセス権限を付与する機能です。IAM Roleでは対象サービスのみにアクセス権限を設定できアクセスキーの自動ローテーションなどを行うためセキュアにAWSの権限管理を行えます。
EC2では起動時にしかIAM Roleを設定できませんでした。そのため途中でIAM Roleが必要になった場合などは再作成が必要でした。今回のアップデートで既存のEC2を起動したままIAM Roleが設定可能になり、既存環境へ簡単に設定することができます。
なお、正確にはEC2に設定するのはIAM Roleではなくインスタンスプロファイルになるので注意が必要です。Management ConsoleでIAM Roleを作成する場合はインスタンスプロファイルが同じ名前で自動作成されるため問題ありませんが、CLIやCloudFormationで作成する場合は名前が異なる場合があります。
IAM Roleを設定してみる
IAM Roleの設定はConsoleから行えないためCLIから設定します。
まずIAM Roleが無いEC2を起動します。ここでは東京リージョンでAmazon Linux 2016.09を起動しています。
EC2にログインして、awsコマンドを実行してみましょう。自分のアカウントIDを確認するためにaws sts get-caller-identity
を実行してみると、以下のようにクレデンシャルがないと言われてしまいます。
$ aws sts get-caller-identity
Unable to locate credentials. You can configure credentials by running "aws configure".
またインスタンスメタデータを確認すると、IAMの項目がありません。
$ curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
ここで、AWS CLIが実行できる別環境でaws ec2 associate-iam-instance-profile
を実行します。なおAWS CLIは最新にしてください。
これでEC2にIAM Roleが設定されました。
$ aws ec2 associate-iam-instance-profile --instance-id <インスタンスID> --iam-instance-profile Name=<プロファイル名>
{
"IamInstanceProfileAssociation": {
"InstanceId": "i-1a2b3c4d5e6f7g8h9",
"State": "associating",
"AssociationId": "iip-assoc-a1b2c3d4e5f6g7h8i",
"IamInstanceProfile": {
"Id": "A1B2C3D4E5F6G7H8I9J0K",
"Arn": "arn:aws:iam::123456789012:instance-profile/admin-role"
}
}
}
IAM Roleが付与されたか確認してみます。
自分のアカウントIDを確認してみます。普通に実行できます。
$ aws sts get-caller-identity
{
"Account": "123456789012",
"UserId": "A1B2C3D4E5F6G7H8I9J0K:i-1a2b3c4d5e6f7g8h9",
"Arn": "arn:aws:sts::123456789012:assumed-role/admin-role/i-1a2b3c4d5e6f7g8h9"
}
インスタンスメタデータも確認しましょう。iam/
が増えており、インスタンスプロファイルの情報を確認できます。
$ curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
$ curl http://169.254.169.254/latest/meta-data/iam/
info
security-credentials/
$ curl http://169.254.169.254/latest/meta-data/iam/info
{
"Code" : "Success",
"LastUpdated" : "2017-02-10T03:36:21Z",
"InstanceProfileArn" : "arn:aws:iam::123456789012:instance-profile/admin-role",
"InstanceProfileId" : "A1B2C3D4E5F6G7H8I9J0K"
}
さいごに
IAM Roleが発表されてから5年がたち、ようやく既存のEC2にIAM Roleを設定できるようになりました。この機能によって、今までやむを得ずIAM Userのアクセスキーを使用していた環境を無くすことができるのではないでしょうか。アクセスキーの管理を止めてセキュアな環境にしていきましょう!