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

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

IAM ロールを引き受ける

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

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

IAM ロールを使用すると、アプリケーションで認証情報の管理について気にする必要がなくなります。Amazon EC2 インスタンスのメタデータサーバーから一時認証情報を取得することで、インスタンスはロールを「継承する」ことができるようになります。

一時的な認証情報。通常はインスタンスプロファイルの認証情報ロールのポリシーで許可されているアクションとリソースへのアクセス権を許可します。Amazon EC2 は、IAM サービスに対してインスタンスを安全に認証してロールを引き継ぐこと、および取得したロールの認証情報を定期的に更新することの細部をすべて処理します。これにより、ユーザーはほとんど何もしなくてもアプリケーションの安全性が保たれます。

注記

インスタンスプロファイルの認証情報および AWS Security Token Service (AWS STS) によって生成された他の一時認証情報は、一部のサービスではサポートされていません。使用しているサービスで一時認証情報がサポートされているかどうかを確認するには、AWSSupport されるサービスAWS STS

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

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 コンソールではなく、IAM コンソールを使用する場合AWSSDK 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 ]);

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

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

Amazon Elastic Container Service (Amazon ECS) タスクの IAM ロールを使用すると、タスクのコンテナで使用できる IAM ロールを指定できます。Amazon EC2 インスタンスプロファイルから Amazon EC2 インスタンスに認証情報を提供する場合と同じような方法で、アプリケーションで使用する認証情報を管理できます。

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

注記

インスタンスプロファイルの認証情報および AWS STS によって生成された他の一時認証情報は、一部のサービスではサポートされていません。使用しているサービスで一時認証情報がサポートされているかどうかを確認するには、AWSSupport されるサービスAWS STS

詳細については、「Amazon EC2 Container Service タスクの IAM ロール」を参照してください。

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

あなたが作業するときAWSアカウント (アカウント A) でロールを引き継ぐ場合は、まず、アカウント B に IAM ロールを作成する必要があります。このロールにより、アカウント B でIAM ロールを作成する必要があります。このロールにより、アカウント A のエンティティがアカウント B で特定のアクションを実行できるようになります。クロスアカウントアクセスに関する詳細は、チュートリアル: アクセス権の委任AWSIAM ロールを使用するアカウント

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

を作成する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'] ] ]);

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

ウェブ ID を使用した IAM ロールの使用

ウェブ ID フェデレーションにより、お客様はにアクセスする際に認証にサードパーティー ID プロバイダを使用できるようになります。AWSリソースの使用料金を見積もることができます。ウェブ ID があるロールを継承できるようになるには、その前に IAM ロールを作成してウェブ ID プロバイダー (dP) を設定する必要があります。詳細については、「ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)」を参照してください。

ID プロバイダーを作成しウェブ ID のロールを作成した後、AWS STS クライアントを使用してユーザーを認証します。ID の webIdentityToken と ProviderId、およびユーザーのアクセス許可を持つ IAM ロールのロールの ARN を提供します。

サンプルコード

$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-ウェブベースの ID プロバイダを経由したフェデレーションまたはAssumeRoleWithWebIdentity()AWSSDK for PHP API リファレンス。