メニュー
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 のバケットを使用する必要のあるインスタンスで実行中のアプリケーションに、アクセス許可を与えることができます。

Note

Amazon EC2 は、IAM ロールのコンテナとしてインスタンププロファイルを使用します。コンソールを使用して IAM ロールを作成すると、コンソールによりインスタンスプロファイルが自動的に作成され、対応するロールと同じ名前が付けられます。AWS CLI、API、または AWS SDK を使用してロールを作成する場合、ロールとインスタンスプロファイルを別個のアクションとして作成し、異なる名前を付けます。IAM ロールを使用してインスタンスを起動するには、そのインスタンスプロファイルの名前を指定します。Amazon EC2 コンソールを使用してインスタンスを起動する場合、インスタンスと関連付けるロールを選択する必要がありますが、実際に表示されるリストは、インスタンスプロファイル名のリストです。詳細については、『IAM ユーザーガイド』の「インスタンスプロファイル」を参照してください。

JSON 形式のポリシーを作成することにより、IAM ロールのアクセス許可を指定できます。これらのポリシーは、IAM ユーザー用に作成するポリシーに類似しています。ロールに変更を加える場合、変更は認証情報の管理を単純化するためにすべてのインスタンスに反映されます。

Note

ロールを既存のインスタンスに割り当てることはできません。ロールは新しいインスタンスを起動するときのみ指定できます。

IAM ロールの作成と使用の詳細については、IAM ユーザーガイド の「Roles」を参照してください。

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

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

Warning

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

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

$ 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" : "AKIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2012-04-27T22:39:16Z"
}

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

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

IAM ロールを使用してインスタンスを起動するための、IAM ユーザーアクセス許可の付与

IAM ユーザーが IAM ロールでインスタンスを起動できるようにするには、ロールをインスタンスにわたすユーザーアクセス許可を与える必要があります。

たとえば以下の IAM ポリシーは、s3access という名前の IAM ロールを使用してインスタンスを起動するアクセス許可をユーザーに与えます。

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": "iam:PassRole",
        "Resource": "arn:aws:iam::123456789012:role/s3access"
    }]
}

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

詳細については、IAM ユーザーガイド の「Permissions Required for Using Roles with Amazon EC2」を参照してください。

コンソールを使用して IAM ロールを作成する

ロールでインスタンスを起動するには、事前に IAM ロールを作成する必要があります。

IAM コンソールを使用して IAM ロールを作成するには

  1. https://console.aws.amazon.com/iam/ で Identity and Access Management (IAM) コンソールにサインインします。

  2. ナビゲーションペインで [Roles] を選択し、続いて [Create New Role] を選択します。

  3. [Set Role Name] ページで、ロールの名前を入力し、[Next Step] を選択します。

  4. [Select Role Type] ページで、[Amazon EC2 ] の隣にある [Select] を選択します。

  5. [Attach Policy] ページで、AWS 管理ポリシーを選択します。たとえば、Amazon EC2 では以下の AWS 管理ポリシーのいずれかが、ニーズを満たす場合があります。

    • PowerUserAccess

    • ReadOnlyAccess

    • AmazonEC2FullAccess

    • AmazonEC2ReadOnlyAccess

  6. ロール情報を確認し、必要に応じてロールを編集して、[Create Role] を選択します。

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

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

Important

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

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

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

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

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

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

    Note

    [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 によって実行されますのでご注意ください。

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

AWS CLI を使用して IAM ロールを作成する

ロールでインスタンスを起動するには、事前に IAM ロールを作成する必要があります。

AWS CLI を使用して IAM ロールを作成するには

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

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

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

      $ 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 の管理権限を与えます。

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

      $ aws iam put-role-policy --role-name s3access --policy-name S3-Permissions --policy-document file://ec2-role-access-policy.json
      
    5. s3access-profile という名前のインスタンスプロファイルを作成します。

      $ 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 ロールを追加します。

      $ 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 CLI から IAM ロールを使用してインスタンスを起動する

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

Important

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

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

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

    $ 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

    詳細については、AWS Command Line Interface Referencerun-instances を参照してください。

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

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