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

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

代入 IAM 角色

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

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

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

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

注意

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

有关如何使用开发工具包开发 Amazon EC2 应用程序的更多信息,请参阅对 Amazon EC2 实例使用 IAM 角色中的Amazon开发工具包和工具参考.

为 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 控制台而不是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 实例配置文件。使用您的 IAM 角色的实例配置文件名称。

    示例代码

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

有关更多信息,请参阅 Amazon EC2 的 IAM 角色

使用 IAM 角色执行适用于 Amazon ECS 任务

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

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

有关接受临时安全凭证的服务的列表,请参阅Amazon使用 IAM 的服务中的IAM 用户指南.

代入 IAM 角色Amazon Web Services 账户

当你在一家公司工作时Amazon Web Services 账户(账户 B)如果希望在另一个账户(账户 B)代入角色,则必须先在账户 B 中创建一个 IAM 角色。此角色允许账户 A 中的实体执行账户 B 中的特定操作。此角色允许账户 A 中的实体执行账户 B 中的特定操作。教程:将访问权限委派访问权限Amazon使用 IAM 角色的账户.

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

创建Amazon STS客户的凭证并为您提供了凭证Amazon Web Services 账户. 在以下示例中,我们使用了一个凭证配置文件,但您可以使用任何方法。对于新创建的 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 参考。

使用 IAM 角色并入 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'] ] ]);

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