Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

适用于 Amazon EC2 的 IAM 角色

应用程序必须通过 AWS 证书签署 API 请求。因此,如果您是应用程序开发人员,您需要一个策略来为 EC2 实例上运行的应用程序管理证书。例如,您可以安全地将您的 AWS 证书分配至实例,从而允许这些实例上运行的应用程序使用您的证书签署请求,并保护您的证书免受其他用户的影响。但是,要将证书安全地分配至每项实例是有难度的,尤其是以您的名义创建的 AWS,例如竞价型实例或 Auto Scaling 组中的实例。当您更换 AWS 证书时,您还必须能够更新每项实例上的证书。

我们设计了 IAM 角色,以便您的应用程序能够安全地从实例发出 API 请求,而无需管理应用程序使用的安全证书。您可以使用 IAM 角色委托授权以发出 API 请求,而不用创建并分配您的 AWS 证书,如下所示:

  1. 创建一个 IAM 角色。

  2. 定义能够担任此角色的账户或 AWS 服务。

  3. 定义担任角色后应用程序可以使用的 API 操作和资源。

  4. 在您启动您的实例时指定角色,或者将角色附加到正在运行或已停止的实例。

  5. 让应用程序检索一组临时证书并使用它们。

例如,您可以使用 IAM 角色为在实例上运行的应用程序授予使用 Amazon S3 中的存储桶的权限。您可以通过创建 JSON 格式的策略为 IAM 角色指定权限。这些类似于您为 IAM 用户创建的策略。如果您对某个角色进行了更改,系统会将此更改传播到所有实例。

您不可以将多个 IAM 角色附加到一个实例,但是,您可以将一个 IAM 角色附加到多个实例。有关创建和使用 IAM 角色的更多信息,请参阅 IAM 用户指南 中的角色

您可以将资源级权限应用到您的 IAM 策略,以便控制用户为一个实例附加、替换或分离 IAM 角色的能力。有关更多信息,请参阅 Amazon EC2 API 操作支持的资源级权限 以及以下示例:9:使用 IAM 角色

实例配置文件

Amazon EC2 使用实例配置文件 作为 IAM 角色的容器。使用 IAM 控制台创建 IAM 角色时,控制台自动创建实例配置文件,按相应的角色为文件命名。如果您使用 Amazon EC2 控制台启动一个带 IAM 角色的实例或将一个 IAM 角色附加到实例,则请根据实例配置文件列表选择实例。

如果您使用 AWS CLI、API 或 AWS 软件开发工具包创建角色,则以单独操作的形式创建角色和实例配置文件,可以为它们提供不同的名称。如果您使用 AWS CLI、API 或 AWS 软件开发工具包启动带有 IAM 角色的实例,或将 IAM 角色附加到实例,则请指定实例配置文件名称。

一个实例配置文件只能包含一个 IAM 角色。不能提高此限制。

有关更多信息,请参阅 IAM 用户指南 中的实例配置文件

通过实例元数据检索安全证书

实例上的应用程序通过实例元数据条目 iam/security-credentials/role-name 检索角色提供的安全证书。该应用程序具有使用您通过与角色关联的安全证书为其定义的操作和资源的权限。这些安全证书是临时的,我们会自动更换它们。我们会在旧证书过期前至少五分钟提供可用的新证书。

警告

如果您使用的服务采用了带有 IAM 角色的实例元数据,请确保服务代表您进行 HTTP 调用时不会泄露您的证书。可能泄露您的证书的服务类型包括 HTTP 代理、HTML/CSS 验证程序服务和支持 XML 包含的 XML 处理程序。

以下命令检索名为 s3access 的 IAM 角色的安全证书。

Copy
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

下面是示例输出。

{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}

对于实例上运行的应用程序、AWS CLI 和 Windows PowerShell 工具 命令,您不必显式获取临时安全凭证 - AWS 软件开发工具包、AWS CLI和 Windows PowerShell 工具 会自动从 EC2 实例元数据服务获取凭证并使用这些凭证。要使用临时安全凭证在实例外部发出调用 (例如,为了测试 IAM 策略),您必须提供访问密钥、私有密钥和会话令牌。有关更多信息,请参阅 IAM 用户指南 中的使用临时安全凭证以请求对 AWS 资源的访问权限

有关实例元数据的更多信息,请参阅 实例元数据和用户数据

允许 IAM 用户将 IAM 角色传递给实例

若要支持 IAM 用户启动包含 IAM 角色的实例或为现有实例替换 IAM 角色,您必须授予用户将角色传递给实例的权限。

以下 IAM 策略允许用户启动带有 IAM 角色的实例 (ec2:RunInstances),或者为现有实例附加或替换 IAM 角色 (ec2:AssociateIamInstanceProfileec2:ReplaceIamInstanceProfileAssociation)。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

通过在策略中指定资源为“*”,该策略授权 IAM 用户访问所有角色。但是,要考虑启动带有您的角色 (现有的或您即将创建的) 的实例的用户是否会被授予不需要或不应该有的权限。

使用 IAM 角色

在启动过程中或启动之后,您可以创建一个 IAM 角色并将其附加到实例。您也可以为实例替换或分离 IAM 角色。

创建 IAM 角色

您必须先创建 IAM 角色,然后才能启动带有该角色的实例或将其附加到该实例。

使用 IAM 控制台创建 IAM 角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 RolesCreate role

  3. Select role type 页面上,选择 EC2EC2 使用案例。选择 Next: Permissions

  4. Attach permissions policy 页面上,选择向您的实例授予对所需资源的访问权的 AWS 托管策略。

  5. Review 页面上,为角色键入一个名称,然后选择 Create role

或者,您可以使用 AWS CLI 创建 IAM 角色。

使用 AWS CLI 创建 IAM 角色和实例配置文件

  • 使用允许角色使用 Amazon S3 存储桶的策略创建 IAM 角色。

    1. 创建以下信任策略并将其保存在名为 ec2-role-trust-policy.json 的文本文件中。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
    2. 创建 s3access 角色并指定您创建的信任策略。

      Copy
      aws iam create-role --role-name s3access --assume-role-policy-document file://ec2-role-trust-policy.json { "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROAIIZKPBKS2LEXAMPLE", "CreateDate": "2013-12-12T23:46:37.247Z", "RoleName": "s3access", "Path": "/", "Arn": "arn:aws-cn:iam::123456789012:role/s3access" } }
    3. 创建访问策略并将其保存在名为 ec2-role-access-policy.json 的文本文件中。例如,此策略向在实例上运行的应用程序授予针对 Amazon S3 管理员权限。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
    4. 向角色附加访问策略。

      Copy
      aws iam put-role-policy --role-name s3access --policy-name S3-Permissions --policy-document file://ec2-role-access-policy.json
    5. 创建名为 s3access-profile 的实例配置文件。

      Copy
      aws iam create-instance-profile --instance-profile-name s3access-profile { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2013-12-12T23:53:34.093Z", "InstanceProfileName": "s3access-profile", "Path": "/", "Arn": "arn:aws-cn:iam::123456789012:instance-profile/s3access-profile" } }
    6. s3access 角色添加到 s3access-profile 实例配置文件。

      Copy
      aws iam add-role-to-instance-profile --instance-profile-name s3access-profile --role-name s3access

    想要了解更多有关这些命令的信息,请参阅 AWS Command Line Interface Reference 中的 create-roleput-role-policycreate-instance-profile

    或者,您可以使用以下 适用于 Windows PowerShell 的 AWS 工具 命令:

启动带有 IAM 角色的实例

创建一个 IAM 角色之后,您可以启动实例,并在启动过程中将该角色与实例关联。

重要

在创建 IAM 角色之后,可能需要让权限传播几秒钟时间。若您第一次尝试启动带角色的实例失败,请等待几秒然后重试。有关更多信息,请参阅 IAM 用户指南 中的使用角色故障排除

使用控制台启动带有 IAM 角色的实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在控制面板上,选择 Launch Instance

  3. 选择 AMI 和实例类型,然后选择 Next: Configure Instance Details

  4. Configure Instance Details 页面上,为 IAM role 选择您创建的 IAM 角色。

    注意

    IAM role (IAM 角色) 列表显示您在创建 IAM 角色时创建的实例配置文件的名称。如果您是使用控制台创建的 IAM 角色,则为您创建了实例配置文件,并提供了与角色相同的名称。如果使用 AWS CLI、API 或 AWS 开发工具包创建了 IAM 角色,则可能对实例配置指定了不同名称。

  5. 配置其他详细信息,然后按照向导的其余说明操作,或选择 Review and Launch 接受默认设置并直接转到 Review Instance Launch 页面。

  6. 检查设置,然后选择 Launch 以选择密钥对并启动实例。

  7. 如果您的应用程序使用的是 Amazon EC2 API 操作,请检索实例中可用的 AWS 安全证书,并使用它们签署请求。请注意,此操作由 AWS 开发工具包为您执行。

    Copy
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

或者,您可以在启动过程中使用 AWS CLI 将角色关联到实例。您必须在命令中指定实例配置文件。

使用 AWS CLI 启动带有 IAM 角色的实例

  1. 使用 run-instances 命令启动使用实例配置文件的实例。以下示例演示如何使用实例配置启动实例。

    Copy
    aws ec2 run-instances --image-id ami-11aa22bb --iam-instance-profile Name="s3access-profile" --key-name my-key-pair --security-groups my-security-group --subnet-id subnet-1a2b3c4d

    或者,使用 New-EC2Instance Windows PowerShell 工具 命令。

  2. 如果您的应用程序使用的是 Amazon EC2 API 操作,请检索实例中可用的 AWS 安全证书,并使用它们签署请求。请注意,此操作由 AWS 开发工具包为您执行。

    Copy
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

将 IAM 角色连接到实例

在您创建了一个 IAM 角色后,可将其附加到正在运行或已停止的实例。

使用控制台将 IAM 角色连接到实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,再依次选择 ActionsInstance SettingsAttach/Replace IAM role

  4. 选择要附加到您的实例的 IAM 然后选择 Apply

使用 AWS CLI 将 IAM 角色附加到实例

  1. 如果需要,请描述您的实例以获取要附加角色的实例的 ID。

    Copy
    aws ec2 describe-instances
  2. 使用 associate-iam-instance-profile 命令,通过指定实例配置文件,将 IAM 角色附加到实例。您可以使用实例配置文件的 Amazon 资源名称 (ARN),或者使用实例的名称。

    Copy
    aws ec2 associate-iam-instance-profile --instance-id i-1234567890abcdef0 --iam-instance-profile Name="TestRole-1" { "IamInstanceProfileAssociation": { "InstanceId": "i-1234567890abcdef0", "State": "associating", "AssociationId": "iip-assoc-0dbd8529a48294120", "IamInstanceProfile": { "Id": "AIPAJLNLDX3AMYZNWYYAY", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-1" } } }

或者,使用以下 Windows PowerShell 工具 命令:

分离 IAM 角色

您可以将 IAM 角色从正在运行或已停止的实例上断开。

使用控制台从实例上断开 IAM 角色

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,再依次选择 ActionsInstance SettingsAttach/Replace IAM role

  4. 对于 IAM role,选择 No Role。选择 Apply

  5. 在确认对话框中,选择 Yes, Detach

使用 AWS CLI 将 IAM 角色从实例中分离

  1. 如果需要,使用describe-iam-instance-profile-associations描述您的 IAM 实例配置文件关联,并获取要分离的 IAM 实例配置文件的关联 ID。

    Copy
    aws ec2 describe-iam-instance-profile-associations { "IamInstanceProfileAssociations": [ { "InstanceId": "i-088ce778fbfeb4361", "State": "associated", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } ] }
  2. 使用 disassociate-iam-instance-profile 命令分离使用其关联 ID 的 IAM 实例配置文件。

    Copy
    aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "disassociating", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

或者,使用以下 Windows PowerShell 工具 命令:

替换 IAM 角色

您可以替换正在运行的实例的 IAM 角色。如果您想要更改实例的 IAM 角色但又不想先分离现有的角色 (例如,为了确保在此实例上运行的应用程序执行的 API 操作不会中断),则可以执行此操作。

使用控制台替换实例的 IAM 角色

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,再依次选择 ActionsInstance SettingsAttach/Replace IAM role

  4. 选择要附加到您的实例的 IAM,然后选择 Apply

使用 AWS CLI 替换实例的 IAM 角色

  1. 如果需要,请描述您的 IAM 实例配置文件关联情况,以获取要替换的 IAM 实例配置文件的关联 ID。

    Copy
    aws ec2 describe-iam-instance-profile-associations
  2. 使用 replace-iam-instance-profile-association 命令,通过为现有实例配置文件或 ARN 指定关联 ID 或指定替换实例配置文件的名称,替换 IAM 实例配置文件。

    Copy
    aws ec2 replace-iam-instance-profile-association --association-id iip-assoc-0044d817db6c0a4ba --iam-instance-profile Name="TestRole-2" { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "associating", "AssociationId": "iip-assoc-09654be48e33b91e0", "IamInstanceProfile": { "Id": "AIPAJCJEDKX7QYHWYK7GS", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

或者,使用以下 Windows PowerShell 工具 命令: