故障排除 IAM 角色 - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 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"
  • 验证您的 IAM 身份是否标记有 IAM 策略需要的任何标签。例如,在以下策略权限中,Condition 元素要求您(因为委托人请求担任该角色)必须具有特定标签。您必须标记 department = HRdepartment = CS。否则,您不能担任角色。要了解如何标记 IAM 用户和角色,请参阅标记 IAM 用户和角色

    "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*", "Condition": {"StringEquals": {"aws:PrincipalTag/department": [ "HR", "CS" ]}}
  • 确保您满足角色的信任策略中指定的所有条件。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 角色页面来查看您的账户中的服务相关角色。服务关联角色与 (服务关联角色)值得信赖的实体 的列。

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

我无法在我的 AWS 客户

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

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

未授权我执行 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 权限。

要了解哪些服务支持服务相关角色,请参阅AWS 与 IAM。要了解服务是否自动为您创建服务相关角色,请选择链接以查看服务的服务相关角色文档。

为什么我不能承担12小时教学课的职责? (AWS CLI、AWS API)

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

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

当我尝试在 IAM 话务台

您在 转换角色 页面必须与角色的信息匹配。否则,操作失败,您收到以下错误信息:

Invalid information in one or more fields. Check your information or contact your administrator.

如果您收到此错误信息,请确认以下信息正确无误:

  • 帐户ID或别名 – 的 AWS 帐户ID是一个12位数字。您的帐户可能有一个别名,这是一个友好的标识符,例如您的公司名称,可以代替您的 AWS 帐户ID。您可以在此字段中使用帐户ID或别名。

  • 角色名称 – 角色名称区分大小写。帐户ID和角色名称必须与为角色配置的ID匹配。

如果您继续收到一条错误信息,请联系您的管理员以验证以前的信息。角色信任政策或 IAM 用户策略可能会限制您的访问。您的管理员可以验证这些策略的权限。

我的职责有一项允许我执行操作的政策,但是我“访问被拒绝”

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

服务未创建角色的默认策略版本

服务角色是服务代表您帐户执行操作所承担的角色。在设置一些 AWS 服务环境时,您必须为服务定义要代入的角色。在某些情况下,服务会在 IAM 为您服务。尽管您可以从内部修改或删除服务角色及其策略 IAM, AWS 不建议使用此。角色和政策仅供该服务使用。如果您编辑策略并设置另一个环境,则当服务尝试使用相同的角色和策略时,操作可能会失败。

例如,当您使用 AWS CodeBuild 该服务首次创建名为 codebuild-RWBCore-service-role。该服务角色使用名为 codebuild-RWBCore-managed-policy。如果您编辑策略,它会创建一个新版本,并将该版本保存为默认版本。如果您在 AWS CodeBuild,服务可能会尝试更新策略。否则,您将收到以下错误:

codebuild.amazon.com did not create the default version (V2) of the codebuild-RWBCore-managed-policy policy that is attached to the codebuild-RWBCore-service-role role. To continue, detach the policy from any other identities and then delete the policy and the role.

如果您收到这个错误,您必须更改 IAM 之后才能继续服务操作。首先,将默认策略版本设置为V1,然后再次尝试操作。如果之前已删除V1,或者选择V1不起作用,则清除并删除现有政策和角色。

有关编辑管理策略的更多信息,请参阅 编辑客户管理策略(孔). 有关政策版本的更多信息,请参阅 版本 IAM 政策.

删除服务角色及其策略

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择策略

  3. 在策略列表中,选择您要删除的策略名称。

  4. 选择 策略使用 选项卡,以查看 IAM 用户、组或角色使用本政策。如果其中任何身份使用政策,请完成以下任务:

    1. 创建一个具有必要权限的新管理策略。为确保在操作前后身份具有相同的权限,请从现有策略中复制Json策略文档。然后创建新的管理策略,然后粘贴如中所述的JSM文档 在“Jsons”选项卡上创建策略.

    2. 对于每个受影响的身份,附上新策略,然后移除旧策略。有关更多信息,请参阅 添加和删除 IAM 身份许可。)

  5. 在导航窗格中,选择角色

  6. 在角色列表中,选择您要删除的角色名称。

  7. 选择 信任关系 选项卡,以查看哪些实体可以担任角色。如果列出了服务以外的任何实体,请完成以下任务:

    1. 创建新角色 信任这些实体。

    2. 您在上一步骤中创建的策略。如果您跳过了该步骤,请立即创建新的管理策略。

    3. 通知担任此职务的人员,他们无法再担任此职务。向他们提供有关如何承担新角色和具有相同的权限的信息。

  8. 删除策略.

  9. 删除角色.