AWS Identity and Access Management
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon EC2 和 IAM 问题排查

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

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

请检查以下事项:

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

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

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

    注意

    如果您使用 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 无法再为您的实例继续提供凭证。您需要终止实例,使用有效的实例配置文件重新启动。

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

验证实例配置文件状态的方法:

  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"]}]}

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