メニュー
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 コンソールを使用して IAM ロールを作成するには

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

  2. ナビゲーションペインで [Roles]、[Create new role] の順に選択します。

  3. [Select role type] ページで、[Amazon EC2] の隣にある [Select] を選択します。

  4. [Attach Policy] ページで、必要なリソースへのアクセス権をインスタンスに付与する AWS 管理ポリシーを選択します。

  5. [Set role name and review] ページで、ロールの名前を入力し、[Create role] を選択します。

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

AWS CLI を使用して IAM ロールおよびインスタンスプロファイルを作成するには

  • Amazon S3 バケットの使用を許可するポリシーを設定した IAM ロールを作成します。

    1. 以下の信頼ポリシーを作成し、ec2-role-trust-policy.json という名前のテキストファイルに保存します。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
    2. s3access ロールを作成し、作成した信頼ポリシーを指定します。

      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. アクセスポリシーを作成し、ec2-role-access-policy.json という名前のテキストファイルに保存します。たとえば、このポリシーは、インスタンスで実行しているアプリケーションに対し、Amazon S3 の管理権限を与えます。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
    4. アクセスポリシーをロールに付与します。

      Copy
      aws iam put-role-policy --role-name s3access --policy-name S3-Permissions --policy-document file://ec2-role-access-policy.json
    5. 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. s3access-profile インスタンスプロファイルに s3access ロールを追加します。

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

    これらのコマンドの詳細については、AWS Command Line Interface Reference にある create-roleput-role-policy および create-instance-profile を参照してください。

    または、以下の AWS Tools for Windows PowerShell コマンドを使用することもできます。

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

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

重要

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

コンソールから IAM ロールを使用してインスタンスを起動するには

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

  2. ダッシュボードで、[Launch Instance] を選択します。

  3. AMI およびインスタンスタイプを選択し、[Next: Configure Instance Details] を選択します。

  4. [Configure Instance Details] ページの [IAM role] で、作成した IAM ロールを選択します。

    注記

    [IAM role] リストには、IAM ロールの作成時に作成したインスタンスプロファイルの名前が表示されます。コンソールを使用して IAM ロールを作成した場合、インスタンスプロファイルが自動的に作成され、ロールと同じ名前が付けられます。AWS CLI、API、または AWS SDK を使用して IAM を作成した場合、インスタンスプロファイルに異なる名前を付けた可能性があります。

  5. その他の詳細を設定し、ウィザードの残りの部分の指示に従うか、[Review and Launch] を選択してデフォルト設定を受け入れ、直接 [Review Instance Launch] ページに移動します。

  6. 設定を確認して [Launch] を選択し、キーペアを選択してインスタンスを起動します。

  7. アプリケーションで Amazon EC2 API アクションを使用している場合、インスタンスで有効にされている AWS セキュリティ認証情報を取得し、それを使用しリクエストに署名します。これは AWS SDK によって実行されますのでご注意ください。

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

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

AWS CLI を使用して IAM ロールを持つインスタンスを起動するには

  1. run-instances コマンドでインスタンスプロファイルを使用してインスタンスを起動します。以下の例は、インスタンスプロファイルを使用してインスタンスを起動する方法を示しています。

    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

    または、New-EC2Instance Tools for Windows PowerShell コマンドを使用することもできます。

  2. アプリケーションで Amazon EC2 API アクションを使用している場合、インスタンスで有効にされている AWS セキュリティ認証情報を取得し、それを使用しリクエストに署名します。これは AWS SDK によって実行されますのでご注意ください。

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

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

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

コンソールを使用して、IAM ロールをインスタンスにアタッチするには

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

  2. ナビゲーションペインで、[Instances] を選択します。

  3. インスタンスを選択し、[Actions]、[Instance Settings]、[Attach/Replace IAM role] の順に選択します。

  4. インスタンスにアタッチする IAM ロールを選択して、[Apply] を選択します。

AWS CLI を使用して、IAM ロールをインスタンスにアタッチするには

  1. 必要に応じて、インスタンスを記述して、ロールをアタッチするインスタンスの ID を取得します。

    Copy
    aws ec2 describe-instances
  2. associate-iam-instance-profile コマンドでインスタンスプロファイルを指定して、IAM ロールをインスタンスにアタッチします。インスタンスプロファイルの Amazon リソースネーム (ARN) またはプロファイル名を使用できます。

    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 ロールをデタッチできます。

コンソールを使用してインスタンスから IAM ロールをデタッチするには

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

  2. ナビゲーションペインで、[Instances] を選択します。

  3. インスタンスを選択し、[Actions]、[Instance Settings]、[Attach/Replace IAM role] の順に選択します。

  4. [IAM role] で、[No Role] を選択します。[Apply] を選択します。

  5. 確認ダイアログボックスで、[Yes, Detach] を選択します。

AWS CLI を使用してインスタンスから IAM ロールをデタッチするには

  1. 必要に応じて、describe-iam-instance-profile-associations で IAM インスタンスプロファイルの関連付けを記述し、デタッチする IAM インスタンスプロファイルの関連 ID を取得します。

    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. disassociate-iam-instance-profile コマンドで関連 ID を使用して IAM インスタンスプロファイルをデタッチします。

    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 ロールを変更する場合 (インスタンスで実行中のアプリケーションによる API アクションの中断をなくす場合など) に、そうできます。

コンソールを使用してインスタンスの IAM ロールを置き換えるには

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

  2. ナビゲーションペインで、[Instances] を選択します。

  3. インスタンスを選択し、[Actions]、[Instance Settings]、[Attach/Replace IAM role] の順に選択します。

  4. インスタンスにアタッチする IAM ロールを選択して、[Apply] を選択します。

AWS CLI を使用してインスタンスの IAM ロールを置き換えるには

  1. 必要に応じて、IAM インスタンスプロファイルの関連付けを記述し、置き換える IAM インスタンスプロファイルの関連 ID を取得します。

    Copy
    aws ec2 describe-iam-instance-profile-associations
  2. replace-iam-instance-profile-association コマンドで置換元のインスタンスプロファイルの関連 ID と置換先のインスタンスプロファイルの ARN 名またはプロファイル名を指定して、IAM インスタンスプロファイルを置き換えます。

    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 コマンドを使用します。