# IAM Roles for Amazon EC2

Amazon EC2上部署应用时，<mark style="color:red;">**不要**</mark>在应用中**使用users**来调用其他的AWS服务，这种使用方法会将AWS的长期访问凭据写在应用程序中，非常不安全。<mark style="color:green;">**推荐的做法**</mark>是**创建role**来给予EC2上应用程序访问其他服务的权限。

## 举例：role - EC2MeituAPP

假设EC2上部署的应用Meitu是获取照片并进行美化的，需要将照片保存到S3，并且需要调用Lambda进行美化处理。则

step 1: 创建一个role命名为`EC2MeituAPP`，并且绑定的policy中允许上传文件到某个S3，并且允许管理Lambda。

step 2: 创建好role以后，开发者创建EC2实例时将这个role分配给刚才创建的实例。注意：开发者的权限中要能够使用iam:PassRole, 并且指定刚才创建的role允许被传递。选中需要修改的EC2，Actions>Security>Modify IAM role，界面中选择IAM role。

step 3: 应用程序可以直接从 Amazon EC2 实例的实例元数据[获取临时凭证](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials)。凭据和相关值可从元数据的 iam/security- credentials/role-name 类别（在本例中为 iam/security-credentials/`EC2MeituAPP`）获得。如果应用程序从实例元数据中获取凭据，则可以缓存凭据。建议使用IMDSv2，否则未授权访问者也可以获取安全凭据。Actions>Instance Settings>Modify instance metadata options中勾选IMDSv2 Required。

## 为已有EC2添加IAM Role

要将 IAM 角色附加到现有的 EC2 实例，请首先导航到 Amazon EC2 控制台。找到您想要修改的实例，并选择它。点击“操作”按钮，然后导航到“安全性”>“修改 IAM 角色”。在结果界面中，您将看到可用于附加的 IAM 角色列表。选择最适合您应用程序需求的 IAM 角色，例如对于需要访问 S3 和 Lambda 服务的 Meitu 应用程序，则选择“EC2MeituAPP”。选择适当的 IAM 角色后，点击“保存”以应用更改。此操作使 EC2 实例具备与附加角色授权下的其他 AWS 服务交互所需的权限，无需在实例内存储 AWS 凭证。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FHp7xpwomGA4ajToOtR6E%2Fimage.png?alt=media&#x26;token=9734a55e-0e56-467e-98fb-d0410fe09f35" alt=""><figcaption></figcaption></figure>

[Easily Replace or Attach an IAM Role to an Existing EC2 Instance by Using the EC2 Console](https://aws.amazon.com/blogs/security/easily-replace-or-attach-an-iam-role-to-an-existing-ec2-instance-by-using-the-ec2-console/)
