假定 IAM 角色 - Amazon适用于 PHP 的开发工具包
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

假定 IAM 角色

使用 IAM 角色作为 Amazon EC2 实例变量凭证

如果您正在 Amazon EC2 实例上运行您的应用程序,则是提供凭证来调用Amazon的目标是使用IAM 角色获取临时安全凭证。

使用 IAM 角色时,您将无需担忧因热门内容发布而从您的应用程序进行凭证管理。它们允许实例通过从 Amazon EC2 实例的元数据服务器中检索临时凭证来 “代入” 角色。

这些临时凭证通常称为实例配置文件凭证,允许访问该角色的策略允许的操作和资源。Amazon EC2 将处理为 IAM 服务对实例进行安全身份验证以代入角色的所有调查工作,并定期刷新检索到的角色凭证。这样,您几乎无需承担任何工作,便可保证应用程序的安全。

注意

并非每个服务都支持实例配置文件凭证和 Amazon Security Token Service (Amazon STS) 生成的其他临时凭证。要确定您使用的服务是否支持临时凭证,请参阅AmazonSupport 的服务Amazon STS

要避免每次都击中元数据服务,可将 Aws\CacheInterface 的实例作为 'credentials' 选项传递给客户端构造函数。这样,开发工具包便可改用缓存的实例配置文件凭证。有关详细信息,请参阅。的配置AmazonSDK for PHP 版本 3

创建 IAM 角色并将其分配给 Amazon EC2 实例

  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 控制台代替AmazonSDK 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 角色

使用 IAM 角色执行 Amazon ECS 任务

通过使用 IAM 角色执行 Amazon Elastic Container Service (Amazon ECS) 任务,您可以指定一个 IAM 角色,该角色任务中的容器可以使用。这是管理可供应用程序使用的凭证的策略,与 Amazon EC2 实例配置文件为 Amazon EC2 实例提供凭证的方式相似。

而不是创建和分发Amazon凭证或使用 Amazon EC2 实例的角色,您可以将 IAM 角色与 ECS 任务定义或RunTask APIoperation.

注意

并非每个服务都支持实例配置文件凭证和 Amazon STS 生成的其他临时凭证。要确定您使用的服务是否支持临时凭证,请参阅AmazonSupport 的服务Amazon STS

有关更多信息,请参阅适用于 Amazon EC2 Container Service 任务的 IAM 角色

代入另一个 IAM 角色Amazon账户

当你在Amazon账户(账户 A)并希望代入其他账户(账户 B)的角色,您必须首先在账户 B 中创建 IAM 角色。此角色允许您账户(账户 A)中的实体执行账户 B 中的特定操作。有关跨账户访问的详细信息,请参阅教程:委托跨部门的访问Amazon使用 IAM 角色的账户

在账户 B 中创建了角色之后,请记录角色 ARN。当您从账户 A 代入角色时将使用此 ARN。您将使用此 ARN。Amazon与账户 A 中您的实体关联的凭据。

创建Amazon STS客户端的凭证Amazonaccount. 在以下示例中,我们使用了一个凭证配置文件,但您可以使用任何方法。对于新创建的 Amazon STS 客户端,请调用 assume-role 并提供一个自定义的 sessionName。从结果中检索新的临时凭证。默认情况下,凭证有效期为一个小时。

示例代码

$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中的AmazonSDK for PHP 参考。

将 IAM 角色用于 Web 身份

Web 联合身份验证使客户能够在访问 Web 联合身份验证Amazon资源的费用。在您代入具备 Web 身份的角色之前,您必须先创建一个 IAM 角色并配置 Web 身份提供商 (IdP)。有关更多信息,请参阅 创建用于 Web 联合身份验证或 OpenID Connect 联合身份验证的角色(控制台)

创建身份提供商创建用于 Web 身份验证的角色之后,请使用 Amazon STS 客户端来对用户进行身份验证。请提供针对您身份的 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'] ] ]);

有关更多信息,请参阅 。假设与温室 — 通过基于 Web 的身份提供程序进行联合身份验证或者AssumeRoleWithWebIdentity中的AmazonSDK for PHP 参考。