メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Amazon EC2 の IAM ロール

アプリケーションは AWS 認証情報で API リクエストに署名する必要があります。したがって、アプリケーション開発者である場合、EC2 インスタンスで実行するアプリケーションの認証情報を管理する戦略が必要です。たとえば、AWS 認証情報をインスタンスに安全に配布することで、他のユーザーから認証情報を保護しながら、それらのインスタンスのアプリケーションで認証情報を使用してリクエストに署名できます。ただし、各インスタンスに認証情報を安全に配布することは難しく、特に AWS が代理で作成するスポットインスタンスや Auto Scaling グループのインスタンスなどではそれが顕著です。また、AWS 認証情報を循環させる場合、各インスタンスの認証情報を更新できる必要もあります。

アプリケーションが使用するセキュリティ認証情報をお客様が管理する必要なく、アプリケーションがインスタンスから API リクエストを安全に作成できるように、IAM ロールをデザインしました。AWS 認証情報を作成および配布する代わりに、以下の方法で、IAM ロールを使用して API リクエストを作成するアクセス許可を委任できます。

  1. IAM ロールを作成します。

  2. ロールを引き受けるアカウントまたは AWS サービスを定義します。

  3. ロールを引き受けた後で、アプリケーションで使用できる API アクションおよびリソースを定義します。

  4. インスタンスの起動時にロールを指定するか、実行中または停止中のインスタンスにロールをアタッチします。

  5. アプリケーションで一時的な認証情報のセットを取得して使用します。

たとえば、IAM ロールを使用し、Amazon S3 のバケットを使用する必要のあるインスタンスで実行中のアプリケーションに、アクセス許可を与えることができます。JSON 形式のポリシーを作成することにより、IAM ロールのアクセス許可を指定できます。これらのポリシーは、IAM ユーザー用に作成するポリシーに類似しています。ロールを変更すると、その変更はすべてのインスタンスに反映されます。

複数の IAM ロールを 1 つのインスタンスにアタッチすることはできませんが、1 つの IAM ロールを複数のインスタンスにアタッチすることはできます。IAM ロールの作成と使用の詳細については、IAM ユーザーガイド の「Roles」を参照してください。

リソースレベルのアクセス許可を IAM ポリシーに適用して、インスタンスの IAM ロールのアタッチ、置換、またはデタッチをユーザーに許可するかどうを制御できます。詳細については、「Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可」と、「9: IAM ロールを使用する」の例を参照してください。

インスタンスプロファイル

Amazon EC2 は、IAM ロールのコンテナとしてインスタンスプロファイルを使用します。IAM コンソールを使用して IAM ロールを作成すると、コンソールによりインスタンスプロファイルが自動的に作成され、対応するロールと同じ名前が付けられます。Amazon EC2 コンソールを使用して IAM ロールを持つインスタンスを起動する場合、またはインスタンスに IAM ロールをアタッチする場合は、インスタンスプロファイル名のリストに基づいてインスタンスを選択します。

AWS CLI、API、または AWS SDK を使用してロールを作成する場合、ロールとインスタンスプロファイルを別個のアクションとして作成し、基本的に異なる名前を付けます。次に AWS CLI、API、または AWS SDK を使用して IAM ロールを持つインスタンスを起動する場合、またはインスタンスに IAM ロールをアタッチする場合は、インスタンスプロファイル名を指定します。

インスタンスプロファイルに含めることができる IAM ロールの数は 1 つのみです。この制限を増やすことはできません。

詳細については、「インスタンスプロファイル」 (IAM ユーザーガイド) を参照してください。

インスタンスメタデータからセキュリティ認証情報を取得する

インスタンスのアプリケーションは、インスタンスメタデータアイテム iam/security-credentials/role-name のロールから提供されたセキュリティ認証情報を取得します。アプリケーションには、ロールに関連付けられたセキュリティ認証情報によって、ロールに対して定義したアクションおよびリソースのアクセス許可が付与されます。これらのセキュリティ認証情報は一時的なものであり、私たちが自動的に循環させます。新しい認証情報は、古い認証情報が失効する少なくとも 5 分前から有効になるようにします。

警告

IAM ロールでインスタンスメタデータを使用するサービスを使用する場合は、サービスで HTTP 呼び出しが行われるときに認証情報を公開しないように注意する必要があります。認証情報を公開できるサービスの種類には、HTTP プロキシ、HTML/CSS 検証サービス、および XML インクルードをサポートする XML プロセッサーが含まれます。

以下のコマンドでは、s3access という名前の IAM ロールのセキュリティ認証情報を取得します。

Copy
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

出力例を次に示します。

{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}

インスタンスで実行されるアプリケーション、AWS CLI、および Tools for Windows PowerShell コマンドについて、一時的なセキュリティ認証情報を明示的に取得する必要はありません。AWS SDK、AWS CLI、および Tools for Windows PowerShell は EC2 インスタンスメタデータサービスから自動的に認証情報を取得して使用します。一時的なセキュリティ認証情報を使用してインスタンスの外部で呼び出しを行う (IAM ポリシーをテストするなど) には、アクセスキー、秘密キー、およびセッショントークンを提供する必要があります。詳細については、「一時的なセキュリティ認証情報を使用して AWS リソースへのアクセスをリクエストする」 (IAM ユーザーガイド) を参照してください。

インスタンスのメタデータの詳細については、「インスタンスメタデータとユーザーデータ」を参照してください。

IAM ロールをインスタンスに渡すためのアクセス許可を IAM ユーザーに付与する

IAM ユーザーに対して、IAM ロールを持つインスタンスの起動や既存インスタンスの IAM ロールの置換を許可するには、ロールをインスタンスに渡すためのアクセス許可を付与します。

次の IAM ポリシーでは、IAM ロールを持つインスタンス (ec2:RunInstances) を起動したり、既存のインスタンス (ec2:AssociateIamInstanceProfileec2:ReplaceIamInstanceProfileAssociation) の IAM ロールを置換したりするためのアクセス許可をユーザーに付与します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

このポリシーでは、ポリシー内でリソースを「*」と指定することで、お客様のすべてのロールに対するアクセス許可を IAM ユーザーに付与します。ただし、お客様のロール (既存のロールおよび今後作成するロールを含む) を使用してインスタンスを起動するユーザーに、必要ではない、または与えるべきではないアクセス許可が与えられる可能性があることを考慮してください。

IAM ロールの使用

IAM ロールは、インスタンスの起動時または起動後に作成してインスタンスにアタッチできます。インスタンスの IAM ロールは、置換またはデタッチすることもできます。

IAM ロールを作成する

IAM ロールを持つインスタンスを起動したり、IAM ロールをインスタンスにアタッチしたりするには、そのロールを事前に作成する必要があります。

To create an IAM role using the IAM console

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. In the navigation pane, choose Roles, Create new role.

  3. On the Select role type page, choose Select next to Amazon EC2.

  4. On the Attach Policy page, select an AWS managed policy that grants your instances access to the resources that they need.

  5. On the Set role name and review page, type a name for the role and choose Create role.

または、AWS CLI を使用して IAM ロールを作成することもできます。

To create an IAM role and instance profile using the AWS CLI

  • Create an IAM role with a policy that allows the role to use an Amazon S3 bucket.

    1. Create the following trust policy and save it in a text file named ec2-role-trust-policy.json.

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
    2. Create the s3access role and specify the trust policy that you created.

      Copy
      aws iam create-role --role-name s3access --assume-role-policy-document file://ec2-role-trust-policy.json { "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROAIIZKPBKS2LEXAMPLE", "CreateDate": "2013-12-12T23:46:37.247Z", "RoleName": "s3access", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/s3access" } }
    3. Create an access policy and save it in a text file named ec2-role-access-policy.json. For example, this policy grants administrative permissions for Amazon S3 to applications running on the instance.

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
    4. Attach the access policy to the role.

      Copy
      aws iam put-role-policy --role-name s3access --policy-name S3-Permissions --policy-document file://ec2-role-access-policy.json
    5. Create an instance profile named s3access-profile.

      Copy
      aws iam create-instance-profile --instance-profile-name s3access-profile { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2013-12-12T23:53:34.093Z", "InstanceProfileName": "s3access-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/s3access-profile" } }
    6. Add the s3access role to the s3access-profile instance profile.

      Copy
      aws iam add-role-to-instance-profile --instance-profile-name s3access-profile --role-name s3access

    For more information about these commands, see create-role, put-role-policy, and create-instance-profile in the AWS Command Line Interface Reference.

    Alternatively, you can use the following AWS Tools for Windows PowerShell commands:

IAM ロールを持つインスタンスを起動する

IAM ロールを作成した後、インスタンスを起動して、起動中にそのロールをインスタンスに関連付けることができます。

重要

IAM ロールを作成した後、適切なアクセス許可が反映されるまで数秒ほどかかります。ロールを使用した最初のインスタンスの起動が失敗した場合は、数秒待ってからもう一度試してください。詳細については、IAM ユーザーガイド の「IAM ロールのトラブルシューティング」を参照してください。

To launch an instance with an IAM role using the console

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. On the dashboard, choose Launch Instance.

  3. Select an AMI and instance type and then choose Next: Configure Instance Details.

  4. On the Configure Instance Details page, for IAM role, select the IAM role that you created.

    注記

    The IAM role list displays the name of the instance profile that you created when you created your IAM role. If you created your IAM role using the console, the instance profile was created for you and given the same name as the role. If you created your IAM role using the AWS CLI, API, or an AWS SDK, you may have named your instance profile differently.

  5. Configure any other details, then follow the instructions through the rest of the wizard, or choose Review and Launch to accept default settings and go directly to the Review Instance Launch page.

  6. Review your settings, then choose Launch to choose a key pair and launch your instance.

  7. If you are using the Amazon EC2 API actions in your application, retrieve the AWS security credentials made available on the instance and use them to sign the requests. Note that the AWS SDK does this for you.

    Copy
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

または、AWS CLI を使用して起動時にロールをインスタンスに関連付けることもできます。コマンド内でインスタンスプロファイルを指定する必要があります。

To launch an instance with an IAM role using the AWS CLI

  1. Use the run-instances command to launch an instance using the instance profile. The following example shows how to launch an instance with the instance profile.

    Copy
    aws ec2 run-instances --image-id ami-11aa22bb --iam-instance-profile Name="s3access-profile" --key-name my-key-pair --security-groups my-security-group --subnet-id subnet-1a2b3c4d

    Alternatively, use the New-EC2Instance Tools for Windows PowerShell command.

  2. If you are using the Amazon EC2 API actions in your application, retrieve the AWS security credentials made available on the instance and use them to sign the requests. Note that the AWS SDK does this for you.

    Copy
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

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

IAM ロールを作成したら、それを実行中または停止中のインスタンスにアタッチできます。

To attach an IAM role to an instance using the console

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. In the navigation pane, choose Instances.

  3. Select the instance, choose Actions, Instance Settings, Attach/Replace IAM role.

  4. Select the IAM role to attach to your instance, and choose Apply.

To attach an IAM role to an instance using the AWS CLI

  1. If required, describe your instances to get the ID of the instance to which to attach the role.

    Copy
    aws ec2 describe-instances
  2. Use the associate-iam-instance-profile command to attach the IAM role to the instance by specifying the instance profile. You can use the Amazon Resource Name (ARN) of the instance profile, or you can use its name.

    Copy
    aws ec2 associate-iam-instance-profile --instance-id i-1234567890abcdef0 --iam-instance-profile Name="TestRole-1" { "IamInstanceProfileAssociation": { "InstanceId": "i-1234567890abcdef0", "State": "associating", "AssociationId": "iip-assoc-0dbd8529a48294120", "IamInstanceProfile": { "Id": "AIPAJLNLDX3AMYZNWYYAY", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-1" } } }

または、以下の Tools for Windows PowerShell コマンドを使用します。

IAM ロールをデタッチする

実行中または停止中のインスタンスから IAM ロールをデタッチできます。

To detach an IAM role from an instance using the console

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. In the navigation pane, choose Instances.

  3. Select the instance, choose Actions, Instance Settings, Attach/Replace IAM role.

  4. For IAM role, choose No Role. Choose Apply.

  5. In the confirmation dialog box, choose Yes, Detach.

To detach an IAM role from an instance using the AWS CLI

  1. If required, use describe-iam-instance-profile-associations to describe your IAM instance profile associations and get the association ID for the IAM instance profile to detach.

    Copy
    aws ec2 describe-iam-instance-profile-associations { "IamInstanceProfileAssociations": [ { "InstanceId": "i-088ce778fbfeb4361", "State": "associated", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } ] }
  2. Use the disassociate-iam-instance-profile command to detach the IAM instance profile using its association ID.

    Copy
    aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "disassociating", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

または、以下の Tools for Windows PowerShell コマンドを使用します。

IAM ロールを置き換える

実行中のインスタンスの IAM ロールを置き換えることができます。既存の IAM ロールを最初にデタッチすることなく、インスタンスの IAM ロールを変更する場合 (インスタンスで実行中のアプリケーションによる API アクションの中断をなくす場合など) は、IAM ロールを置き換えることができます。

Te replace an IAM role for an instance using the console

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. In the navigation pane, choose Instances.

  3. Select the instance, choose Actions, Instance Settings, Attach/Replace IAM role.

  4. Select the IAM role to attach to your instance, and choose Apply.

To replace an IAM role for an instance using the AWS CLI

  1. If required, describe your IAM instance profile associations to get the association ID for the IAM instance profile to replace.

    Copy
    aws ec2 describe-iam-instance-profile-associations
  2. Use the replace-iam-instance-profile-association command to replace the IAM instance profile by specifying the association ID for the existing instance profile and the ARN or name of the instance profile that should replace it.

    Copy
    aws ec2 replace-iam-instance-profile-association --association-id iip-assoc-0044d817db6c0a4ba --iam-instance-profile Name="TestRole-2" { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "associating", "AssociationId": "iip-assoc-09654be48e33b91e0", "IamInstanceProfile": { "Id": "AIPAJCJEDKX7QYHWYK7GS", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

または、以下の Tools for Windows PowerShell コマンドを使用します。