メニュー
AWS Identity and Access Management
ユーザーガイド

Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する

EC2 インスタンスで実行されるアプリケーションはそれらの AWS API リクエストに AWS 認証情報を含める必要があります。開発者は EC2 インスタンス内に直接 AWS 認証情報を保存し、そのインスタンス内のアプリケーションに対してそれらの認証情報の使用を許可できます。しかし、開発者は認証情報を管理し、ローテーション時になると各 EC2 インスタンスに渡して、各インスタンスを更新する必要があります。これは、かなりの追加作業です。

代わりに、IAM ロールを使用すると、EC2 インスタンスで実行されるアプリケーションに対して一時的な認証情報を管理するだけで済みます。EC2 インスタンスに長期の認証情報を配布する必要はなくなります。代わりに、ロールは、アプリケーションが他の AWS リソースへの呼び出しを行うときに使用できる一時的なアクセス許可を提供します。EC2 インスタンスを起動するときに、そのインスタンスに関連付ける IAM ロールを指定します。そのインスタンスで実行されるアプリケーションは、そのロールから提供される一時的な認証情報を使用して API リクエストに署名できます。

ロールを使用して、EC2 インスタンスで実行されるアプリケーションにアクセス権限を付与するには、少しの追加設定が必要です。EC2 インスタンスで実行されるアプリケーションは、仮想化されたオペレーティングシステムによって AWS から抽象化されます。この追加の分離のため、AWS ロールとその関連付けられたアクセス権限を EC2 インスタンスに割り当て、アプリケーションに対してそれらの使用を許可する別手順が必要になります。この別手順は、インスタンスにアタッチされるインスタンスプロファイルの作成です。インスタンスプロファイルは、ロールを含んでおり、インスタンスで実行されるアプリケーションにロールの認証情報を提供できます。それらの認証情報は、アプリケーションの API 呼び出しで、リソースへのアクセスを許可するために、または、ロールで指定されたリソースのみにアクセスを制限するために使用できます。同時に EC2 インスタンスに割り当てることができるのは 1 つのロールだけです。インスタンスのすべてのアプリケーションは、同じロールとアクセス権限を共有します。

この方法によるロールの使用には、いくつかの利点があります。ロールの認証情報は一時的なもので、自動的に更新されるため、開発者は認証情報を管理する必要がなく、長期のセキュリティリスクを心配する必要もありません。また、複数のインスタンスに 1 つのロールを使用する場合、その 1 つのロールに変更を加えるとその変更がすべてのインスタンスに自動的に反映されます。

注記

ロールは通常、起動時に EC2 インスタンスに割り当てられますが、既に実行中の EC2 インスタンスにロールをアタッチすることもできます。実行中のインスタンスにロールをアタッチする方法については、 「Amazon EC2 の IAM ロール」を参照してください。

EC2 インスタンスのロールのしくみ

以下の図では、開発者は EC2 インスタンスでアプリケーションを実行しており、そのアプリケーションは photos という名前の S3 バケットにアクセスする必要があります。管理者が Get-pics ロールを作成します。このロールには、バケットの読み取りアクセス権限を付与し、開発者に対して EC2 インスタンスでのロールの起動を許可するポリシーが含まれています。アプリケーションはインスタンスで実行されると、ロールの一時的な認証情報を使用して写真バケットにアクセスできます。管理者は開発者に写真バケットにアクセスする権限を与える必要はなく、開発者が認証情報を共有または管理する必要はありません。

AWS リソースにアクセスする EC2 インスタンス上のアプリケーション

  1. 管理者は、Get-pics ロールの作成に IAM を使用します。ロールの信頼ポリシーでは、EC2 インスタンスのみがロールを引き受けることができることを指定します。ロールのアクセスポリシーでは、photos バケットに対する読み取り専用アクセス権限を指定します。

  2. 開発者は EC2 インスタンスを起動し、Get-pics ロールをそのインスタンスに割り当てます。

    注記

    IAM コンソールを使用する場合、インスタンスプロファイルは自動的に管理され、ほとんど透過的です。ただし、AWS CLI または API を使用してロールと EC2 インスタンスを作成および管理する場合、インスタンスプロファイルを作成し、別の手順でそのプロファイルにロールを割り当てる必要があります。次に、インスタンスを起動するときに、ロール名ではなくインスタンスのプロファイル名を指定する必要があります。

  3. インスタンスメタデータからセキュリティ認証情報を取得する」で説明されているように、アプリケーションは実行時に Amazon EC2 インスタンスメタデータからセキュリティ認証情報を取得します。これらは、ロールを表す一時的なセキュリティ認証情報で、制限された期間の間有効です

    一部の AWS SDK では、開発者は、一時的な認証情報を透過的に管理するプロバイダを使用できます(認証情報を管理するためにその SDK によってサポートされている機能については、各 AWS SDK のドキュメントを参照してください)。

    あるいは、アプリケーションは EC2 インスタンスのインスタンスメタデータから一時的な認証情報を直接取得することもできます。認証情報とその関連する値はメタデータの iam/security-credentials/role-name カテゴリ(この場合は iam/security-credentials/Get-pics)から入手できます。アプリケーションがインスタンスメタデータから認証情報を取得する場合、アプリケーションは認証情報をキャッシュすることができます。

  4. 取得された認証情報を使用して、アプリケーションは写真バケットにアクセスします。Get-pics ロールにアタッチされたポリシーのために、アプリケーションには読み取り専用のアクセス許可があります。

    インスタンスで使用可能な一時的な認証情報は、失効前に自動的に更新されるため、有効な認証情報のセットを常に使用できます。アプリケーションは、現在の認証情報セットが失効する前に、インスタンスメタデータから新しい認証情報セットを取得するだけで済みます。AWS SDK で認証情報を管理する場合、認証情報を更新するための追加のロジックをアプリケーションに含める必要はありません。ただし、アプリケーションがインスタンスメタデータから一時的な認証情報を取得してキャッシュしている場合、1 時間おき、または少なくとも現在のセットが失効する 15 分前までに、更新された認証情報セットを取得する必要があります。失効時刻は、iam/security-credentials/role-name カテゴリに返された情報に含まれます。

Amazon EC2 でのロールの使用に必要なアクセス許可

ロールを割り当てたインスタンスを起動するために、開発者には EC2 インスタンスを起動するアクセス権限と IAM ロールを割り当てるアクセス権限が必要です。

以下のポリシーサンプルは、ロールを使用してインスタンスを起動させるために、ユーザーに AWS マネジメントコンソール を使用することを許可します。ポリシーにアスタリスク(*)を含めることで、任意のロールの割り当てとすべての Amazon EC2 アクションの実行をユーザーに許可します。ListInstanceProfiles アクションでは、AWS アカウントで使用できるすべてのロールの表示をユーザーに許可します。

例 任意のロールが割り当てられたインスタンスを Amazon EC2 コンソールで起動するアクセス権限をユーザーに付与するポリシー

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

EC2 インスタンスに割り当て可能なロールを制限する(PassRole を使用)

PassRole アクセス権限を使用すると、インスタンスの起動時にユーザーが EC2 インスタンスに割り当てることのできるロールを制限できます。これにより、ユーザーに付与されているアクセス許可よりも多くのアクセス許可を持つアプリケーションをユーザーが実行することを回避できます。つまり、ユーザーは、昇格されたアクセス許可を取得することができなくなります。たとえば、ユーザー Alice には、EC2 インスタンスを起動し Amazon S3 バケットを操作するアクセス権限のみがあるが、このユーザーが EC2 インスタンスに割り当てるロールには、IAM と Amazon DynamoDB を操作するアクセス権限があるとします。その場合、Alice はインスタンスを起動してログインし、一時的なセキュリティ認証情報を取得して、彼女には権限がない IAM または DynamoDB アクションを実行できます。

ユーザーが EC2 インスタンスに割り当てることのできるロールを制限するには、PassRole アクションを許可するポリシーを作成します。その後、EC2 インスタンスを起動するユーザー(またはそのユーザーが属する IAM グループ)にそのポリシーをアタッチします。ポリシーの Resource のエレメントに、ユーザーが EC2 インスタンスに渡すことを許可するロールを記載します。ユーザーがインスタンスを起動し、そのインスタンスにロールを割り当てるとき、Amazon EC2 では、ユーザーがそのロールの割り当てを許可されているかどうかが確認されます。もちろん、ユーザーが割り当てることのできるロールに想定外のアクセス権限が含まれていないことを確認する必要があります。

注記

PassRole は、RunInstancesListInstanceProfiles とは異なり、API アクションではありません。それは API にロールの ARN がパラメーターとして渡されるときに、必ず AWS が確認を行う許可です (またはユーザーの代わりにコンソールがこれを行います)。これにより管理者は、渡すことができるロールと、そのロールを渡すことができるユーザーを制御するのに役立ちます。この場合では、ユーザーが特定のロールを Amazon EC2 インスタンスにアタッチできるようにします。

例 特定のロールが割り当てられた EC2 インスタンスを起動するアクセス権限をユーザーに付与するポリシー

以下のポリシーサンプルは、ロールを使用してインスタンスを起動するために、ユーザーに Amazon EC2 API の使用を許可します。Resource エレメントは、ロールの Amazon リソースネーム(ARN)を指定します。ポリシーで ARN を指定することで、Get-pics ロールのみを割り当てるアクセス権限をユーザーに付与します。インスタンスの起動時にユーザーが異なるロールを指定した場合、アクションは失敗します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:role/Get-pics" } ] }

使用を開始する方法をお知りになりたいですか?

EC2 インスタンスでロールがどのように機能するかを理解するには、IAM コンソールでロールを作成し、そのロールが割り当てられた EC2 インスタンスを起動して、実行中のインスタンスを調べる必要があります。インスタンスのメタデータを調べて、ロールの認証情報がインスタンスでどのようにして使用可能になったかを確認できます。また、インスタンスで実行されるアプリケーションがそのロールをどのように使用できるかも確認できます。詳細については、以下のリソースを参照してください。

  • Getting Started with IAM Roles for EC2 Instances。リンクされているビデオでは、IAM ロールを EC2 インスタンスに割り当てて、インスタンスでのアプリケーション実行時に行える操作を制御する方法について説明します。また、アプリケーション(AWS SDK で記述)がロールから一時的な認証情報を取得するしくみについても説明します。

  • SDK ウォークスルー。AWS SDK ドキュメント内のこれらのウォークスルーでは、EC2 インスタンスで実行されるアプリケーションがロールの認証情報を使用して Amazon S3 バケットを読み取る手順について説明しています。以下の各ウォークスルーでは、別のプログラミング言語での同様の手順について説明しています。

ロールの作成または EC2 インスタンスのロールに関する詳細については、以下の情報を参照してください。