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

排查一般 IAM 问题

使用此处的信息可帮助您诊断和修复在使用 Amazon Identity and Access Management (IAM) 时出现的访问被拒绝或其他常见问题。

我无法登录我的 Amazon 账户

确认您具有正确的凭证,并且使用正确的方法进行登录。有关更多信息,请参阅 Amazon 登录或账户问题排查

我丢失了访问密钥

访问密钥由两个部分组成:

  • 访问密钥标识符。标识符是公开的,您可以在列出访问密钥的任意 IAM 控制台中进行查看,例如用户摘要页面。

  • 秘密访问密钥。该密钥会在您最初创建访问密钥对时提供。它与密码一样,之后无法检索。如果您丢失了私有访问密钥,则必须创建新的访问密钥对。如果您已达到访问密钥的数量上限,必须删除一个现有的密钥对,然后才可以创建另一个。

有关更多信息,请参阅 重置您丢失或遗忘的 Amazon 密码或访问密钥

当我向某个 Amazon 服务发送请求时,收到了“访问被拒绝”

  • 检查错误消息是否包含与拒绝访问有关的策略类型。例如,如果错误提到由于服务控制策略 (SCP) 而拒绝访问,则可以专注于对 SCP 问题进行故障排除。知晓策略类型后,您还可以检查该策略类型策略中的特定操作是否存在拒绝语句或缺少允许。如果错误消息没有提到与拒绝访问有关的策略类型,请使用本部分中的其余指南进一步排除故障。

  • 验证您是否具有调用您请求的操作和资源的基于身份的策略权限。如果设置了任何条件,您还必须在发送请求时满足这些条件。有关查看或修改用于 IAM 用户、组或角色的策略的信息,请参阅 管理 IAM 策略

  • 如果 Amazon Web Services Management Console 返回消息称您无权执行某个操作,则必须联系您的管理员寻求帮助。您的管理员为您提供了登录凭证或登录链接。

    mateojackson IAM 用户尝试使用控制台查看有关虚构 my-example-widget 资源的详细信息,但不具有虚构 widgets:GetWidget 权限时,会发生以下示例错误。

    User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: widgets:GetWidget on resource: my-example-widget

    在这种情况下,Mateo 必须请求他的管理员更新其策略,以允许他使用 widgets:GetWidget 操作访问 my-example-widget 资源。

  • 您是否尝试访问支持基于资源的策略(如 Amazon S3、Amazon SNS 或 Amazon SQS)的服务? 如果是,请确认策略将您指定为委托人并为您授予访问权限。如果您在您的账户中向服务发出请求,基于身份的策略或基于资源的策略将向您授予相应的权限。如果您在不同的账户中向服务发出请求,则基于身份的策略和基于资源的策略这两者都必须向您授予权限。要查看哪些服务支持基于资源的策略,请参阅使用 IAM 的 Amazon 服务

  • 如果您的策略包含的条件具有键值对,请仔细检查。示例包括 aws:RequestTag/tag-key 全局条件键、Amazon KMS kms:EncryptionContext:encryption_context_key 和多个服务支持的 ResourceTag/tag-key 条件键。确保键名称不与多个结果匹配。由于条件键名称不区分大小写,因为检查名为 foo 的键的条件将与 fooFooFOO 匹配。如果您的请求包含多个键值对,其中的键名称只是大小写形式不同,则您的访问可能会被意外拒绝。有关更多信息,请参阅 IAM JSON 策略元素:Condition

  • 如果您具有权限边界,请验证用于权限边界的策略是否允许您的请求。如果基于身份的策略允许请求,但权限边界不允许,则会拒绝请求。权限边界控制 IAM 委托人(用户或角色)可以拥有的最大权限。基于资源的策略不受权限边界限制。权限边界不常用。有关 Amazon 如何评估这些策略的更多信息,请参阅 策略评估逻辑

  • 如果您手动签署请求(不使用 Amazon SDK),请验证您已正确签署请求

当我使用临时安全凭证发送请求时,收到了“访问被拒绝”

  • 首先,请确保您未因与您的临时凭证无关的原因而被拒绝访问。有关更多信息,请参阅 当我向某个 Amazon 服务发送请求时,收到了“访问被拒绝”

  • 要验证服务是否接受临时安全凭证,请参阅使用 IAM 的 Amazon 服务

  • 验证您的请求是否采用了正确的签名和适当的格式。有关详细信息,请参阅工具包文档或 将临时凭证用于 Amazon 资源

  • 验证您的临时安全凭证没有过期。有关更多信息,请参阅 IAM 临时安全凭证

  • 验证 IAM 用户或角色拥有正确的许可。临时安全证书的权限派生自 IAM 用户或角色。因此,权限限于向您已担任其临时凭证的角色授予的权限。有关如何确定临时安全凭证的权限的更多信息,请参阅 控制临时安全凭证的权限

  • 如果您担任一个角色,您的角色会话可能受会话策略的限制。以编程方式使用 Amazon STS 请求临时安全凭证时,您可以选择传递内联或托管会话策略。会话策略是高级策略,在以编程方式为角色创建临时凭证会话时,这些策略将作为参数进行传递。您可以使用 Policy 参数传递单个 JSON 内联会话策略文档。您可以使用 PolicyArns 参数指定最多 10 个托管会话策略。生成的会话的权限是角色的基于身份的策略与会话策略的交集。或者,如果您的管理员或自定义程序为您提供临时凭证,它们可能已包含会话策略以限制您的访问。

  • 如果您是联合身份用户,您的会话可能受会话策略的限制。您以 IAM 用户身份登录到 Amazon,然后请求联合令牌以成为联合身份用户。有关联合身份用户的更多信息,请参阅GetFederationToken — 通过自定义身份代理进行联合。在请求联合令牌时,如果您或您的身份代理传递了会话策略,则您的会话受这些策略的限制。生成的会话的权限是您的 IAM 用户的基于身份的策略与会话策略的交集。有关会话策略的更多信息,请参阅会话策略

  • 如果您使用角色访问具有基于资源的策略的资源,则验证策略已授予该角色权限。例如,以下策略允许 MyRole 从账户 111122223333 访问 MyBucket

    { "Version": "2012-10-17", "Statement": [{ "Sid": "S3BucketPolicy", "Effect": "Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:role/MyRole"]}, "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::MyBucket/*"] }] }

策略变量不起作用

  • 验证包含变量的所有策略(包括以下策略版本编号):"Version": "2012-10-17"。如果没有正确的版本编号,则在评估过程中不会更换变量。只会从字面上评估这些变量。如果您包含最新的版本号,则不包含变量的任何策略仍将起作用。

    Version 策略元素与策略版本不同。Version 策略元素用在策略之中,用于定义策略语言的版本。另一方面,当您对 IAM 中的客户托管策略进行更改时,将创建一个策略版本。已更改的策略不会覆盖现有策略。而是由 IAM 创建新的托管策略版本。要了解 Version 策略元素的更多信息,请参阅IAM JSON 策略元素:Version。要了解策略版本的更多信息,请参阅IAM 策略版本控制

  • 验证您的策略变量为正确的大小写。有关详细信息,请参阅IAM 策略元素:变量和标签

我所做的更改可能不会立即可见

作为全球数据中心的计算机要访问的服务,IAM 使用称为最终一致性的分布式计算模型。您在 IAM(或其他 Amazon 服务)中所做的任何更改需要一些时间才会对相关终端节点可见。它在服务器与服务器之间、复制区域与复制区域之间,以及全球的区域与区域之间发送数据需要时间,这会造成一定的延迟。IAM 也使用缓存来提高性能,但在某些情况下,这可能增加耗时;在之前缓存的数据超时之前,更改可能不可见。

您在设计全球应用程序时,必须考虑到这些可能的延迟。确保应用程序可以按预期工作,即使在一个位置进行的更改不能立即在其他位置可见。此类更改包括创建或更新用户、组、角色或策略。在应用程序的关键、高可用性代码路径中,我们不建议进行此类 IAM 更改。而应在不常运行的、单独的初始化或设置例程中进行 IAM 更改。另外,在生产工作流程依赖这些更改之前,请务必验证更改已传播。

有关其他某些 Amazon 服务如何受此影响的更多信息,请参阅以下资源:

我没有权限执行:iam:DeleteVirtualMFADevice

当您尝试为自己或其他用户分配或删除虚拟 MFA 设备时,可能会收到以下错误:

User: arn:aws:iam::123456789012:user/Diego is not authorized to perform: iam:DeleteVirtualMFADevice on resource: arn:aws:iam::123456789012:mfa/Diego with an explicit deny

如果某个人以前在 IAM 控制台中开始将虚拟 MFA 设备分配给用户后取消该过程,则可能会发生这种情况。这会在 IAM 中为用户创建一个 MFA 设备,但绝不激活该设备。您必须先删除现有 MFA 设备,然后才能将新设备与用户关联。

Amazon 推荐了一种策略,该策略仅允许用户在通过 MFA 进行身份验证后删除其自己的虚拟 MFA 设备。有关更多信息,请参阅 Amazon:允许经过 MFA 身份验证的 IAM 用户在“My Security Credentials”(我的安全凭证)页面上管理自己的凭证

要修复此问题,管理员不应编辑策略权限。相反,管理员必须使用 Amazon CLI 或 Amazon API 来删除现有但已停用的设备。

删除现有但已停用的 MFA 设备

  1. 查看您账户中的虚拟 MFA 设备。

  2. 在响应中,找到您要修复的用户的虚拟设备的 ARN。

  3. 删除该设备。

如何安全地创建 IAM 用户?

如果您的员工需要访问 Amazon,则可以选择创建 IAM 用户或使用 Amazon Web Services SSO 进行身份验证。如果使用 IAM,Amazon 建议您创建 IAM 用户并将凭证安全地传达给员工。如果您不在员工身旁,请使用安全的工作流程向员工传达凭证。

使用以下工作流程在 IAM 中安全地创建新用户:

  1. 使用 Amazon Web Services Management Console 创建新用户。选择使用自动生成的密码授予 Amazon Web Services Management Console 访问权限。如有必要,请选中 Users must create a new password at next sign-in(用户必须在下次登录时创建新密码)复选框。在用户更改密码之前,不要向用户添加权限策略。

  2. 添加用户后,复制新用户的登录 URL、用户名和密码。要查看密码,请选择 Show(显示)。

  3. 使用贵公司中的安全通信方法(如电子邮件、聊天或支持工单系统)将密码发送给员工。单独为您的用户提供 IAM 用户控制台链接及其用户名。在授予员工权限之前,告诉员工确认他们可以成功登录。

  4. 员工确认后,添加他们所需的权限。作为安全最佳实践,添加一个策略,要求用户使用 MFA 进行身份验证以管理其凭证。有关策略示例,请参阅 Amazon:允许经过 MFA 身份验证的 IAM 用户在“My Security Credentials”(我的安全凭证)页面上管理自己的凭证