IAM ロールを引き受ける - AWS SDK for PHP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IAM ロールを引き受ける

Amazon EC2インスタンス可変認証情報のIAMロールの使用

Amazon EC2インスタンスでアプリケーションを実行している場合は、 を呼び出すための認証情報を提供する方法 AWS として、IAMロールを使用して一時的なセキュリティ認証情報を取得することをお勧めします。

IAM ロールを使用する場合、アプリケーションからの認証情報管理を心配する必要はありません。これにより、Amazon インスタンスのメタデータサーバーから一時的な認証情報を取得することで、EC2インスタンスがロールを「引き受け」できるようになります。

一時認証情報 (インスタンスプロファイルの認証情報とも呼ばれます) は、ロールのポリシーで許可されているアクションとリソースへのアクセスを可能にします。Amazon は、 IAM サービスに対してインスタンスを安全に認証してロールを引き受け、取得したロール認証情報を定期的に更新するすべてのレッグワークEC2を処理します。これにより、ユーザーはほとんど何もしなくてもアプリケーションの安全性が保たれます。一時的なセキュリティ認証情報を受け入れるサービスのリストについては、IAM「 ユーザーガイド」のAWS 「 で動作するサービスIAM」を参照してください。

注記

メタデータサービスから毎回取得することを回避するために、Aws\CacheInterface のインスタンスをクライアントコンストラクタの 'credentials' オプションとして渡すことができます。これにより、 は代わりにキャッシュされたインスタンスプロファイル認証情報SDKを使用できます。詳細については、「AWS SDK for PHP バージョン 3 の設定」を参照してください。

を使用して Amazon EC2アプリケーションを開発する方法の詳細についてはSDKs、AWS SDKs「」およびツールリファレンスガイド「Amazon EC2インスタンスのIAMロールの使用」を参照してください。

Amazon EC2インスタンスにIAMロールを作成して割り当てる

  1. IAM クライアントを作成します。

    インポート

    require 'vendor/autoload.php'; use Aws\Iam\IamClient;

    サンプルコード

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. 使用するアクションとリソースのアクセス許可を持つIAMロールを作成します。

    サンプルコード

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. IAM インスタンスプロファイルを作成し、結果から Amazon リソースネーム (ARN) を保存します。

    注記

    の代わりに IAMコンソールを使用すると AWS SDK for PHP、コンソールは自動的にインスタンスプロファイルを作成し、対応するロールと同じ名前を付けます。

    サンプルコード

    $IPN = 'InstanceProfileName'; $result = $client->createInstanceProfile([ 'InstanceProfileName' => $IPN , ]); $ARN = $result['Arn']; $InstanceID = $result['InstanceProfileId'];
  4. Amazon EC2クライアントを作成します。

    インポート

    require 'vendor/autoload.php'; use Aws\Ec2\Ec2Client;

    サンプルコード

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. 実行中または停止した Amazon インスタンスにEC2インスタンスプロファイルを追加します。IAM ロールのインスタンスプロファイル名を使用します。

    サンプルコード

    $result = $ec2Client->associateIamInstanceProfile([ 'IamInstanceProfile' => [ 'Arn' => $ARN, 'Name' => $IPN, ], 'InstanceId' => $InstanceID ]);

詳細については、IAM「Amazon ユーザーガイド」の「Amazon のロールEC2」を参照してください。 EC2

Amazon ECSタスクのIAMロールの使用

Amazon Elastic Container Service (Amazon ECS) のタスクは、呼び出しを行うIAM AWS APIロールを引き受けることができます。これは、Amazon EC2インスタンスプロファイルが Amazon EC2インスタンスに認証情報を提供する方法と同様に、使用するアプリケーションの認証情報を管理するための戦略です。

長期 AWS 認証情報を作成してコンテナに配布したり、Amazon EC2インスタンスのロールを使用する代わりに、一時的な認証情報を使用するIAMロールをECSタスク定義またはRunTaskAPIオペレーションに関連付けることができます。

コンテナタスクが引き受けることができるIAMロールの使用の詳細については、「Amazon ECSデベロッパーガイド」の「タスクIAMロール」トピックを参照してください。タスク定義で の形式でタスクIAMロールを使用する例については、Amazon ECSデベロッパーガイドtaskRoleArn「タスク定義の例」も参照してください。

別の でIAMロールを引き受ける AWS アカウント

( AWS アカウント アカウント A) で作業し、別のアカウント (アカウント B) でロールを引き受ける場合は、まずアカウント B でIAMロールを作成する必要があります。このロールにより、アカウント (アカウント A) 内のエンティティがアカウント B で特定のアクションを実行できるようになります。クロスアカウントアクセスの詳細については、「チュートリアル: IAM ロールを使用して AWS アカウント間でアクセスを委任する」を参照してください。

アカウント B でロールを作成したら、ロール を記録しますARN。これは、アカウント A からロールを引き受けるARNときに使用します。アカウント A のエンティティに関連付けられた AWS 認証情報を使用してロールを引き受けることになります。

の認証情報を使用して AWS STS クライアントを作成します AWS アカウント。以下では認証情報プロファイルを使用しますが、任意の方法を使用できます。新しく作成された AWS STS クライアントで、 assume-role を呼び出し、カスタム を指定しますsessionName。結果から新しい一時認証情報を取得します。認証情報の有効期間は 1 時間です。

サンプルコード

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $result = $stsClient->AssumeRole([ 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

詳細については、「 リファレンスAssumeRole」のIAM「ロールの使用」または AWS SDK for PHP API「」を参照してください。

ウェブ ID でのIAMロールの使用

Web Identity Federation を使用すると、お客様は AWS 、リソースにアクセスするときに認証にサードパーティーの ID プロバイダーを使用できます。ウェブ ID でロールを引き受ける前に、IAMロールを作成し、ウェブ ID プロバイダー (IdP ) を設定する必要があります。詳細については、「ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)」を参照してください。

ID プロバイダーを作成しウェブ ID のロールを作成したら、 AWS STS クライアントを使用してユーザーを認証します。ID ProviderId の webIdentityToken と と、ユーザーのアクセス許可を持つARNIAMロールのロールを指定します。

サンプルコード

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $duration = 3600; $result = $stsClient->AssumeRoleWithWebIdentity([ 'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN", 'ProviderId' => "graph.facebook.com", 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

詳細については、AssumeRoleWithWebIdentity「ウェブベースのアイデンティティプロバイダー経由のフェデレーション」または AWS SDK for PHP API「 リファレンスAssumeRoleWithWebIdentity」を参照してください。

プロファイルのあるロールを継承する

~/.aws/credentials でプロファイルを定義する

でプロファイルを定義することで、IAMロールを使用する AWS SDK for PHP ように を設定できます~/.aws/credentials

継承するロールの role_arn 設定を持つ新しいプロファイルを作成します。また、IAMロールを引き受けるアクセス許可を持つ認証情報を持つ別のプロファイルsource_profileの設定を含めます。これらの設定の詳細については、「」および「ツールリファレンスガイド」の「ロール認証情報の引き受け」を参照してください。 AWS SDKs

たとえば、以下の ~/.aws/credentials では、project1 プロファイルが role_arn を設定し、default プロファイルを認証情報のソースとして指定して、そのプロファイルに関連付けられているエンティティがロールを引き継ぐことができることを確認しています。

[project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

AWS_PROFILE 環境変数を設定するか、サービスクライアントをインスタンス化する際に profile パラメーターを使用することで、project1 で特定されたロールは、default プロファイルをソース認証情報を使用して継承されます。

次のスニペットは、S3Client コンストラクタでの profile パラメーターの使用方法を示しています。S3Client には、project1 プロファイルに関連付けられたロールに関連する権限が付与されます。

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);

~/.aws/config でプロファイルを定義する

~/.aws/config ファイルには、継承するプロファイルを含めることもできます。環境変数 を設定するとAWS_SDK_LOAD_NONDEFAULT_CONFIG、 SDK for は config ファイルからプロファイルをPHPロードします。AWS_SDK_LOAD_NONDEFAULT_CONFIG が設定されている場合、 は ~/.aws/configと の両方からプロファイルをSDKロードします~/.aws/credentials~/.aws/credentials のプロファイルは最後にロードされ、~/.aws/config から同じ名前でロードされたプロファイルよりも優先されます。どちらの場所からロードされたプロファイルも、source_profile または引き受けるプロファイルとして使用できます。

次の例では、config ファイルに定義されている project1 プロファイルと credentials ファイル内の default プロファイルを使用しています。AWS_SDK_LOAD_NONDEFAULT_CONFIG も設定されています。

# Profile in ~/.aws/config. [profile project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME
# Profile in ~/.aws/credentials. [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

次のスニペットが表示されている S3Client コンストラクタを実行すると、project1 プロファイルで定義されたロールは、default プロファイルに関連付けられた認証情報を使用して引き継がれます。

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);