

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

# 将 IAM 角色与直接调用 AWS 服务的应用程序配合使用
<a name="emr-iam-roles-calling"></a>

在集群的 EC2 实例上运行的应用程序可以在调用 AWS 服务时使用 EC2 实例配置文件获取临时安全证书。

Amazon EMR 版本 2.3.0 和更高版本上的 Hadoop 版本已经过更新，可以使用 IAM 角色。如果您的应用程序严格在 Hadoop 架构之上运行，并且不直接调用任何服务 AWS，则它应该无需修改即可与 IAM 角色配合使用。

如果您的应用程序 AWS 直接调用服务，则需要对其进行更新以利用 IAM 角色。这意味着，您的应用程序现在不是从集群中 EC2 实例上的 `/etc/hadoop/conf/core-site.xml` 获取账户凭证，而是使用 SDK 以 IAM 角色访问资源，或调用 EC2 实例元数据以获取临时凭证。

**使用软件开发工具包通过 IAM 角色访问 AWS 资源**
+ 以下主题介绍如何使用其中几个通过 IAM 角色 AWS SDKs 访问临时证书。每个主题的开头介绍了不使用 IAM 角色的应用程序的版本，然后向您分步讲解将该应用程序转换为可以使用 IAM 角色的过程。
  +  《适用于 Java 的 AWS SDK 开发人员指南》**中的[使用 SDK for Java 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java-dg-roles.html) 
  +  《适用于 .NET 的 AWS SDK Developer Guide》**中的[使用 SDK for .NET 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-roles.html) 
  +  《适用于 PHP 的 AWS SDK 开发人员指南》**中的[使用 SDK for PHP 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-php/latest/developer-guide/php-dg-roles.html) 
  +  《适用于 Ruby 的 AWS SDK 开发人员指南》**中的[使用 SDK for Ruby 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/ruby-dg-roles.html) 

**从 EC2 实例元数据中获取临时凭证**
+ 从使用指定 IAM 角色运行的 EC2 实例调用以下 URL，该实例会返回关联的临时安全证书（AccessKeyId SecretAccessKey、 SessionToken、和到期）。以下示例使用 Amazon EMR 的默认实例配置文件 `EMR_EC2_DefaultRole`。

  ```
  GET http://169.254.169.254/latest/meta-data/iam/security-credentials/EMR_EC2_DefaultRole
  ```

有关编写使用 IAM 角色的应用程序的更多信息，请参阅[授予在 Amazon EC2 实例上运行的应用程序访问 AWS 资源的](https://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html)权限。

有关临时安全凭证的更多信息，请参阅《使用临时安全凭证》**指南中的[使用临时安全凭证](https://docs.aws.amazon.com/STS/latest/UsingSTS/using-temp-creds.html)。