IAM 和 Amazon EC2 故障排除 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

IAM 和 Amazon EC2 故障排除

使用此处的信息可帮助您排查和修复在使用 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:iam::999999999999:instance-profile/ExampleInstanceProfile

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

Amazon EC2:在我尝试使用角色启动实例时,出现 AccessDenied 错误

请检查以下事项:

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

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

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

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

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

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

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

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

要访问 EC2 实例上的临时安全凭证,您必须首先使用 IAM 控制台创建角色。然后,您使用该角色启动 EC2 实例并检查运行中的实例。有关更多信息,请参阅 使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限 中的怎样入门?

如果您仍然无法访问 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 API 操作或者使用 aws ec2 aws ec2 describe-instances CLI 命令,验证您的实例是否具有与其关联的 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"]},"Action": ["sts:AssumeRole"]}]}

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