AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon EC2 和 IAM 问题排查

使用此处的信息可帮助您排查和修复在使用 Amazon EC2 和 IAM 时可能遇到的拒绝访问或其他问题。

当尝试启动实例时,我没有在 Amazon EC2 控制台的 IAM 角色列表中看到本应看到的角色。

请检查以下事项:

  • 如果您以 IAM 用户身份登录,请验证您是否有调用 ListInstanceProfiles 的许可。有关使用角色所需的权限的信息,请参阅使用 IAM角色向在 Amazon EC2 实例上运行的应用程序授予权限中“在 Amazon EC2 中使用角色所需的权限”。有关为用户添加许可的信息,请参阅 管理 IAM 策略

    如果您无法修改自己的许可,您必须联系可以使用 IAM 的管理员来更新您的权限。

  • 如果您使用 IAM CLI 或 API 创建角色,则验证您已创建了实例配置文件,并将角色添加到了该实例配置文件。另外,如果角色和实例配置文件的名称不同,则无法在 Amazon EC2 控制台的 IAM 角色列表中看到正确的角色名称。Amazon EC2 控制台的 IAM 角色列表列明了实例配置文件的名称,而不是角色名称。您必须选择包含所需角色的实例配置文件的名称。有关实例配置文件的详细信息,请参阅 使用实例配置文件

    注意

    如果您使用 IAM 控制台创建角色,则不需要使用实例配置文件。对于您在 IAM 控制台中创建的每个角色,使用与角色相同的名称创建实例配置文件,而且角色将自动添加到实例配置文件。一个实例配置文件只能包含一个 IAM 角色,不能提高该限制。

我的实例的凭证适用于错误的角色。

如果近期曾经替换实例配置文件中的角色,您的应用程序需要等待下一次证书自动周转,才能使用适用于您的角色的证书。

当时尝试调用 AddRoleToInstanceProfile 时,发生 AccessDenied 错误。

如果您以 IAM 用户身份发出请求,请验证您拥有以下许可:

  • iam:AddRoleToInstanceProfile 对匹配实例配置文件 ARN (例如 arn:aws-cn:iam::999999999999:instance-profile/ExampleInstanceProfile) 的资源执行操作的权限。

有关使用角色所需权限的更多信息,请参阅 使用 IAM角色向在 Amazon EC2 实例上运行的应用程序授予权限 中的“如何入门?”。有关为用户添加许可的信息,请参阅 管理 IAM 策略

Amazon EC2:当我尝试启动引用角色的实例时,发生 AccessDenied 错误。

请检查以下事项:

  • 发布不包含实例配置文件的实例。这样做可以帮助您确认问题的范围在 Amazon EC2 实例的 IAM 角色中。

  • 如果您以 IAM 用户身份发出请求,请验证您拥有以下许可:

    • 对通配符资源 ("*") 执行 ec2:RunInstances 操作的许可

    • iam:PassRole 对匹配角色 ARN (例如 arn:aws-cn:iam::999999999999:role/ExampleRoleName) 的资源执行操作的权限。

  • 调用 IAM GetInstanceProfile 操作,确认您正使用有效的实例配置文件名称或有效的实例配置文件 ARN。有关更多信息,请参见 Using IAM roles with Amazon EC2 instances

  • 调用 IAM GetInstanceProfile 操作,确认实例配置文件中包含角色。空的实例配置文件将发生 AccessDenied 错误,运行失败。有关创建角色的更多信息,请参阅 创建 IAM 角色

有关使用角色所需权限的更多信息,请参阅 使用 IAM角色向在 Amazon EC2 实例上运行的应用程序授予权限 中的“如何入门?”。有关为用户添加许可的信息,请参阅 管理 IAM 策略

我无法访问我的 EC2 实例的临时安全凭证。

请检查以下事项:

  • 您是否可以访问该实例元数据服务 (IMDS) 的其他段? 如果不能,请检查确认没有阻止向 IMDS 发送请求的防火墙规则。

    [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/hostname; echo
  • 是否存在 IMDS 的 iam 树形子目录? 如果不存在,请调用 ec2:DescribeInstances,验证您的实例具有与其关联的 IAM 实例配置文件。

    [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam; echo
  • 检查 IAM 树形子目录中的 info 文档是否指示发生错误。如果发生错误,请参阅 IAM 树形子目录中 info 文档的错误意味着什么? 来了解更多信息。

    [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam/info; echo

IAM 树形子目录中 info 文档的错误意味着什么?

iam/info 文档指示 "Code":"InstanceProfileNotFound".

您的 IAM 实例配置文件已经被删除,Amazon EC2 无法再为您的实例继续提供凭证。您必须将有效的实例配置文件附加到您的 Amazon EC2 实例。

如果存在具有该名称的实例配置文件,请检查是该实例配置文件没有被删除还是以相同名称创建了另一个配置文件:

  1. 调用 IAM GetInstanceProfile 操作,获取 InstanceProfileId

  2. 调用 Amazon EC2 DescribeInstances 操作,获取实例的 IamInstanceProfileId

  3. 验证 IAM 操作的 InstanceProfileId 与 Amazon EC2 操作的 IamInstanceProfileId 是否匹配。

如果两个 ID 不同,那么附加至实例的实例配置文件将失去效力。您必须将有效的实例配置文件附加到该实例。

iam/info 文档指示成功,但指示 "Message":"Instance Profile does not contain a role..."

这意味着已经通过 IAM RemoveRoleFromInstanceProfile 操作从实例配置文件删除了该角色。您可以使用 IAM AddRoleToInstanceProfile 操作为实例配置文件附加一个角色。您的应用程序需要等到下一次更新才能获得适用于该角色的证书。

iam/security-credentials/[role-name] 文档指示 "Code":"AssumeRoleUnauthorizedAccess"

Amazon EC2 没有担任角色的许可。担任该角色的权限受制于该角色附属的信任策略,如下例所示。请使用 IAM UpdateAssumeRolePolicy API 更新信任策略。

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["ec2.amazonaws.com.cn"]},"Action": ["sts:AssumeRole"]}]}

您的应用程序需要等到下一次自动更新才能获得适用于该角色的证书。