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

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

代入 IAM 角色

使用适用于 Amazon EC2 实例可变凭证的 IAM 角色

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

使用 IAM 角色时,您将无需担心应用程序的凭据管理。它们允许实例通过从 Amazon EC2 实例的元数据服务器中检索临时凭证来 “代入” 角色。

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

注意

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

要避免每次都击中元数据服务,可将 Aws\CacheInterface 的实例作为 'credentials' 选项传递给客户端构造函数。这样,开发工具包便可改用缓存的实例配置文件凭证。有关详细信息,请参阅。的配置Amazon SDK 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 控制台而不是Amazon 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 实例配置文件的 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 实例提供凭证的方式相似。

而不是创建和分发你的Amazon通过容器凭证或使用 Amazon EC2 实例的角色,您可以将 IAM 角色与 ECS 任务定义关联,或者使用 Amazon EC2 实例的角色。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。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中的Amazon SDK for PHPAPI 参考。

使用具备 Web 身份的 IAM 角色

通过 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'] ] ]);

有关更多信息,请参阅 。AssumeRoleWithWebIdentity — 通过基于 Web 的身份提供商进行联合要么AssumeRoleWithWebIdentity中的Amazon SDK for PHPAPI 参考。