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

IAM 角色问题排查

使用此处的信息可帮助您诊断和修复在使用 IAM 角色时可能遇到的常见问题。

我无法代入角色

  • 验证您的 IAM 策略是否向您授予为要代入的角色调用 sts:AssumeRole 的权限。您的 IAM 策略的 Action 元素必须允许调用 AssumeRole 操作,并且 IAM 策略的 Resource 元素必须指定您希望担任的角色。例如,Resource 元素可以按其 Amazon 资源名称 (ARN) 或使用通配符 (*) 指定角色。例如,至少一个适用于您的策略必须授予与以下权限类似的权限:

    "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws-cn:iam::account_id_number:role/role-name-you-want-to-assume"
  • 确保您满足角色的信任策略中指定的所有条件。Condition 可以指定有效期、外部 ID 或请求必须来自于特定 IP 地址。在以下示例中,如果当前日期为指定日期后的任意时间,则策略绝不会匹配且无法向您授予代入此角色的权限。

    "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws-cn:iam::account_id_number:role/role-name-you-want-to-assume" "Condition": { "DateLessThan" : { "aws:CurrentTime" : "2016-05-01T12:00:00Z" } }
  • 验证您用于调用 AssumeRole 的 AWS 账户是您要代入的角色的可信任单位。在角色的信任策略中将可信实体定义为 Principal。下面的示例是一个已附加到要代入的角色的信任策略。在此示例中,IAM 用户用来登录的账户 ID 必须为 123456789012。如果您的账号未在角色信任策略的 Principal 元素中列出,则无法担任该角色。无论在访问策略中为您授予何种权限,都会出现这种情况。注意,示例策略将权限限制为在 2017 年 7 月 1 日至 2017 年 12 月 31 日 (UTC 时间,这两个日期也包含在内) 之间发生的操作。如果您在上述日期范围之前或之后登录,则策略不匹配,您无法代入该角色。

    "Effect": "Allow", "Principal": { "AWS": "arn:aws-cn:iam::123456789012:root" }, "Action": "sts:AssumeRole", "Condition": { "DateGreaterThan": {"aws:CurrentTime": "2017-07-01T00:00:00Z"}, "DateLessThan": {"aws:CurrentTime": "2017-12-31T23:59:59Z"} }

我的 AWS 账户中出现新角色

某些 AWS 服务要求您使用直接与该服务相链接的唯一服务角色类型。该服务相关角色由服务预定义,具有服务所需的所有权限。这样您就不必手动添加必要的权限,可以令设置服务更加轻松。有关服务相关角色的一般信息,请参阅使用服务相关角色

在开始支持服务相关角色时,您可能已在使用服务。如果事实如此,您可能会收到一封电子邮件,告知您账户中将有新角色。该角色包括此项服务代表您执行操作所需的所有权限。您不需要执行任何操作支持该角色。但是,您不能从账户中删除该角色。这样会删除此项服务访问 AWS 资源所需的权限。您可以转至 IAM 控制台的 IAM Roles 页面来查看您的账户中的服务相关角色。服务相关角色在表的 Trusted entities 列中随 (Service-linked role) 一起显示。

有关哪些服务支持服务相关角色的信息,请参阅使用 IAM 的 AWS 服务并查找服务相关角色列为的服务。有关使用某个服务的服务相关角色的信息,请选择 Yes 链接。

我无法编辑或删除我的 AWS 账户中的角色

您不能删除或编辑 IAM 中的服务相关角色的权限。这些角色包括服务代表您执行操作所需的预定义信任和权限。您可以使用 IAM 控制台、AWS CLI 或 API 仅编辑服务相关角色的描述。您可以转至控制台中的 IAM Roles 页面来查看您的账户中的服务相关角色。服务相关角色在表的 Trusted entities 列中随 (Service-linked role) 一起显示。角色的 Summary 页面上的横幅也指示角色是服务相关角色。您只能通过链接的服务管理和删除这些角色 (如果该服务支持此操作)。修改或删除服务相关角色时要小心,因为这样做可能会删除服务访问 AWS 资源所需的权限。

有关哪些服务支持服务相关角色的信息,请参阅使用 IAM 的 AWS 服务并查找服务相关角色列为的服务。

我无权执行:iam:PassRole

在创建服务相关角色时,您必须有权将该角色传递给服务。在某些服务中执行操作时,该服务自动在您的账户中创建一个服务相关角色。例如,在首次创建 Auto Scaling 组时,Amazon EC2 Auto Scaling 为您创建 AWSServiceRoleForAutoScaling 服务相关角色。如果您尝试创建 Auto Scaling 组而没有 PassRole 权限,则会出现以下错误:

ClientError: An error occurred (AccessDenied) when calling the PutLifecycleHook operation: User: arn:aws:sts::111122223333:assumed-role/Testrole/Diego is not authorized to perform: iam:PassRole on resource: arn:aws:iam::111122223333:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

要纠正该错误,请要求管理员为您添加 iam:PassRole 权限。

要了解哪些服务支持服务相关角色,请参阅使用 IAM 的 AWS 服务。要了解在哪些服务中执行操作时自动创建服务相关角色,请选择链接并查看该服务的服务相关角色文档。

为什么我无法在 12 小时会话中担任角色?(AWS CLI、AWS API)

在使用 AWS STS AssumeRole* API 或 assume-role* CLI 操作担任角色时,您可以为 DurationSeconds 参数指定一个值。您可以指定 900 秒 (15 分钟) 到角色的最大 CLI/API 会话持续时间设置之间的值。如果指定的值高于该设置,操作将失败。该设置的最大值为 12 小时。例如,如果您指定的会话持续时间为 12 小时,但管理员设置的最大会话持续时间为 6 小时,您的操作将失败。要了解如何查看您的角色的最大值,请参阅查看角色的最大会话持续时间设置

如果您使用角色链 (使用一个角色担任另一个角色),您的会话限制为最多 1 小时。如果您随后使用 DurationSeconds 参数提供大于 1 小时的值,操作将失败。