使用服务相关角色 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用服务相关角色

服务相关角色是一种独特类型的 IAM 角色,它与Amazon服务直接相关。服务相关角色由服务预定义,具有服务代表您调用其他 Amazon 服务所需的所有权限。相关的服务还定义了创建、修改和删除服务相关角色的方式。服务可以自动创建或删除角色。它可能允许您在服务的向导或流程中创建、修改或删除角色。或者,它可能需要您使用 IAM 创建或删除角色。无论使用哪种方法,服务相关角色都可让您简化 服务的设置流程,因为您不必手动添加服务代表您完成操作所需的权限。

注意

请记住,服务角色不同于服务相关角色。服务角色是由一项服务担任、代表您执行操作的 IAM 角色。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息,请参阅《IAM 用户指南》中的 创建向 Amazon Web Service 委派权限的角色。服务相关角色是一种与 Amazon Web Service相关的服务角色。服务可以代入代表您执行操作的角色。服务相关角色显示在您的 Amazon Web Services 账户 中,并由该服务拥有。IAM 管理员可以查看但不能编辑服务相关角色的权限。

链接服务会定义其服务相关角色的权限,除非另外定义,否则仅该服务可以担任角色。定义的权限包括信任策略和权限策略,以及不能附加到任何其它 IAM 实体的权限策略。

您必须先删除角色的相关资源,之后才能删除角色。这将保护您的 资源,因为您不会无意中删除对资源的访问权限。

提示

有关哪些服务支持使用服务相关角色的信息,请参阅 使用 IAM 的Amazon服务 并查找其在服务相关角色列中为的服务。请选择 Yes 与查看该服务的服务相关角色文档的链接。

服务相关角色权限

您必须为 IAM 实体(用户、组或角色)配置权限,以允许用户或角色创建或编辑服务相关角色。

注意

服务相关角色的 ARN 包括服务主体,它在以下策略中显示为 SERVICE-NAME.amazonaws.com。请勿尝试猜测服务主体,因为它区分大小写,并且格式会因 Amazon 服务而异。要查看服务的服务主体,请参阅其服务相关角色文档。

允许 IAM 实体创建特定服务相关角色

将以下策略添加到需要创建服务相关角色的 IAM 实体中。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/SERVICE-NAME.amazonaws.com/SERVICE-LINKED-ROLE-NAME-PREFIX*", "Condition": {"StringLike": {"iam:AWSServiceName": "SERVICE-NAME.amazonaws.com"}} }, { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/SERVICE-NAME.amazonaws.com/SERVICE-LINKED-ROLE-NAME-PREFIX*" } ] }

允许 IAM 实体创建任何服务相关角色

将以下语句添加到 IAM 实体的权限策略,该实体需要创建服务相关角色或任何包含所需策略的服务角色。此策略语句不允许 IAM 实体将策略附加到该角色。

{ "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/*" }

允许 IAM 实体编辑任何服务角色的描述

将以下语句添加到 IAM 实体的权限策略,该实体需要编辑服务相关角色或任何服务角色的描述。

{ "Effect": "Allow", "Action": "iam:UpdateRoleDescription", "Resource": "arn:aws:iam::*:role/aws-service-role/*" }

允许 IAM 实体删除特定服务相关角色

将以下语句添加到需要删除服务相关角色的 IAM 实体的权限策略。

{ "Effect": "Allow", "Action": [ "iam:DeleteServiceLinkedRole", "iam:GetServiceLinkedRoleDeletionStatus" ], "Resource": "arn:aws:iam::*:role/aws-service-role/SERVICE-NAME.amazonaws.com/SERVICE-LINKED-ROLE-NAME-PREFIX*" }

允许 IAM 实体删除任何服务相关角色

将以下语句添加到 IAM 实体的权限策略,该实体需要删除服务相关角色,而不需要删除服务角色。

{ "Effect": "Allow", "Action": [ "iam:DeleteServiceLinkedRole", "iam:GetServiceLinkedRoleDeletionStatus" ], "Resource": "arn:aws:iam::*:role/aws-service-role/*" }

允许 IAM 实体将现有角色传递给服务

有些 Amazon 服务允许您将现有角色传递给服务,而不是创建新的服务相关角色。为此,用户必须具有将角色传递给服务的权限。将以下语句添加到需要传递角色的 IAM 实体的权限策略。此策略语句还允许实体查看可从中选择要传递的角色的角色列表。有关更多信息,请参阅向用户授予权限以将角色传递给 Amazon 服务

{ "Sid": "PolicyStatementToAllowUserToListRoles", "Effect": "Allow", "Action": ["iam:ListRoles"], "Resource": "*" }, { "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/my-role-for-XYZ" }

使用服务相关角色的间接权限

服务相关角色授予的权限可以间接转让给其他用户和角色。Amazon 服务使用某个服务相关角色时,该服务相关角色可以使用自己的权限调用其他 Amazon 服务。这意味着,如果用户和角色有权调用使用某个服务相关角色的服务,将能够间接访问该服务相关角色可以访问的服务。

例如,在创建 Amazon RDS 数据库实例时,RDS 的服务相关角色如果尚不存在,则会自动创建。借助该服务相关角色,RDS 将可以代表您调用 Amazon EC2、Amazon SNS、Amazon CloudWatch Logs 和 Amazon Kinesis 等服务。如果您允许账户中的用户和角色修改或创建 RDS 数据库,则这些用户和角色将可以通过调用 RDS,从而与 Amazon EC2、Amazon SNS、Amazon CloudWatch Logs 日志和 Amazon Kinesis 资源进行间接交互,因为 RDS 会使用其服务相关角色来访问这些资源。

创建服务相关角色

您用来创建服务相关角色的方法取决于服务。在某些情况下,无需手动创建服务相关角色。例如,在服务中完成特定操作 (如创建资源) 时,服务可能为您创建服务相关角色。或者,如果您在某项服务开始支持服务相关角色之前已在使用该服务,则该服务可能自动在您的账户中创建角色。要了解更多信息,请参阅 我的 Amazon 账户中出现新角色

在其他情况下,服务可能支持使用服务控制台、API 或 CLI 手动创建服务相关角色。有关哪些服务支持使用服务相关角色的信息,请参阅 使用 IAM 的Amazon服务 并查找其在服务相关角色列中为的服务。要了解服务是否支持创建服务相关角色,请选择 Yes 链接以查看该服务的服务相关角色文档。

如果服务不支持创建角色,则可以使用 IAM 创建服务相关角色。

重要

服务相关角色将计入您的 Amazon Web Services 账户 中的 IAM 角色限制,但如果您已达到限制,仍可以在账户中创建服务相关角色。只有服务相关角色可以超过此限制。

创建服务相关角色(控制台)

在 IAM 中创建服务相关角色之前,请查明链接服务是否已自动创建服务相关角色。此外,需了解您是否能从该服务的控制台、API 或 CLI 创建角色。

创建服务相关角色 (控制台)
  1. 登录 Amazon Web Services Management Console,打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色。然后选择 Create role(创建角色)。

  3. 选择Amazon 服务角色类型。

  4. 选择用于您的服务的使用案例。使用案例由服务定义以包含服务所需的信任策略。然后选择下一步

  5. 选择一个或多个要附加到角色的权限策略。根据您选择的使用案例,服务可能执行以下任意操作:

    • 定义角色所使用的权限。

    • 允许您从一组有限的权限中进行选择。

    • 允许您从任意权限中进行选择。

    • 允许您此时不选择策略,稍后创建策略,然后将这些策略附加到角色。

    选中分配您希望角色具有的权限的策略旁边的复选框,然后选择 Next(下一步)。

    注意

    使用角色的任何实体都可以使用您指定的权限。默认情况下,角色没有权限。

  6. 对于 Role name (角色名称),角色名称自定义的程度由服务定义。如果服务定义角色的名称,则此选项不可编辑。在其他情况下,服务可能定义角色的前缀并让您输入可选的后缀。

    如果可能,请输入要添加到默认名称的角色名称后缀。该后缀可帮助您确定角色的用途。角色名称在您的 Amazon 账户内必须是唯一的。名称不区分大小写。例如,您无法同时创建名为 <service-linked-role-name>_SAMPLE<service-linked-role-name>_sample 的角色。由于多个单位可能引用该角色,角色创建完毕后无法编辑角色名称。

  7. (可选)对于 Description(描述),编辑新服务相关角色的描述。

  8. 您无法在创建过程中将标签附加到服务相关角色。有关在 IAM 中使用标签的更多信息,请参阅 标记 IAM 资源

  9. 检查角色,然后选择 Create role

创建服务相关角色(Amazon CLI)

在 IAM 中创建服务相关角色之前,请查明链接服务是否已自动创建服务相关角色,以及您是否能从该服务的 CLI 创建角色。如果服务 CLI 不受支持,您可以使用 IAM 命令创建具有服务担任角色时所需的信任策略和内联策略的服务相关角色。

创建服务相关角色 (Amazon CLI)

运行以下命令:

aws iam create-service-linked-role --aws-service-name SERVICE-NAME.amazonaws.com

创建服务相关角色 (Amazon API)

在 IAM 中创建服务相关角色之前,请查明链接服务是否已自动创建服务相关角色,以及您是否能从该服务的 API 创建角色。如果服务 API 不受支持,您可以使用 Amazon API 创建具有服务代入角色时所需的信任策略和内联策略的服务相关角色。

创建服务相关角色 (Amazon API)

使用 CreateServiceLinkedRole API 调用。在请求中,指定 SERVICE_NAME_URL.amazonaws.com 的服务名称。

例如,要创建 Lex Bots 服务相关角色,请使用 lex.amazonaws.com

编辑服务相关角色

您用来编辑服务相关角色的方法取决于服务。某些服务可能允许您从服务控制台、API 或 CLI 编辑服务相关角色的权限。但是,创建服务相关角色后,您将无法更改角色的名称,因为可能有多种实体引用该角色。您可以从 IAM 控制台、API 或 CLI 编辑任何角色的描述。

有关哪些服务支持使用服务相关角色的信息,请参阅 使用 IAM 的Amazon服务 并查找其在服务相关角色列中为的服务。要了解服务是否支持编辑服务相关角色,请选择 Yes 链接以查看该服务的服务相关角色文档。

编辑服务相关角色描述(控制台)

您可以使用 IAM 控制台编辑服务相关角色的描述。

编辑服务相关角色的描述 (控制台)
  1. 在 IAM 控制台的导航窗格中,选择 Roles

  2. 以下代码示例显示如何将 IAM policy 附加到用户。

  3. Role description 的最右侧,选择 Edit

  4. 在框中输入新描述,然后选择 Save(保存)

编辑服务相关角色描述 (Amazon CLI)

您可以从 Amazon CLI 使用 IAM 命令编辑服务相关角色的描述。

更改服务相关角色描述 (Amazon CLI)
  1. (可选)要查看角色的当前描述,请运行以下命令:

    aws iam get-role --role-name ROLE-NAME

    通过 CLI 命令使用角色名称(并非 ARN)指向角色。例如,如果某个角色的 ARN 为 arn:aws:iam::123456789012:role/myrole,则将该角色称为 myrole

  2. 要更新服务相关角色的描述,请运行以下命令:

    aws iam update-role --role-name ROLE-NAME --description OPTIONAL-DESCRIPTION

编辑服务相关角色描述 (Amazon API)

您可以使用 Amazon API 编辑服务相关角色的描述。

更改服务相关角色的描述 (Amazon API)
  1. (可选)要查看角色的当前描述,请调用以下操作,并指定角色的名称:

    Amazon API:GetRole

  2. 要更新角色的描述,请调用以下操作,并指定角色的名称(和可选描述):

    Amazon API:UpdateRole

删除服务相关角色

您用来创建服务相关角色的方法取决于服务。在某些情况下,无需手动删除服务相关角色。例如,在服务中完成特定操作 (如删除资源) 时,服务可能为您删除服务相关角色。

在其他情况下,服务可能支持从服务控制台、API 或 Amazon CLI 中手动删除服务相关角色。

有关哪些服务支持使用服务相关角色的信息,请参阅 使用 IAM 的Amazon服务 并查找其在服务相关角色列中为的服务。要了解服务是否支持删除服务相关角色,请选择 Yes 链接以查看该服务的服务相关角色文档。

如果服务不支持删除角色,则可以从 IAM 控制台、API 或 Amazon CLI 中删除服务相关角色。如果您不再需要使用某个需要服务相关角色的功能或服务,我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是,您必须先清除您的服务相关角色,然后才能将其删除。

清除服务相关角色

必须先确认服务相关角色没有活动会话并删除该角色使用的任何资源,然后才能使用 IAM 删除服务相关角色。

在 IAM 控制台中检查服务相关角色是否具有活动会话
  1. 登录 Amazon Web Services Management Console,打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色。然后选择服务相关角色的名称 (而不是复选框)。

  3. 在所选角色的摘要页面上,选择访问顾问选项卡。

  4. 访问顾问选项卡查看服务相关角色的近期活动。

    注意

    如果您不确定服务是否使用服务相关角色,您可以尝试删除该角色。如果服务正在使用该角色,则删除操作会失败,并且您可以查看正在使用该角色的区域。如果该角色已被使用,则您必须等待会话结束,然后才能删除该角色。您无法撤销服务相关角色对会话的权限。

删除服务相关角色所使用的资源

有关哪些服务支持使用服务相关角色的信息,请参阅 使用 IAM 的Amazon服务 并查找其在服务相关角色列中为的服务。要了解服务是否支持删除服务相关角色,请选择 Yes 链接以查看该服务的服务相关角色文档。请参阅该服务的文档,以了解如何删除服务相关角色所使用的资源。

删除服务相关角色(控制台)

您可以使用 IAM 控制台删除服务相关角色。

删除服务相关角色(控制台)
  1. 登录 Amazon Web Services Management Console,打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色。然后,选中要删除的角色名称旁边的复选框,而不是名称或行本身。

  3. 对于页面顶部的 Role actions(角色操作),请选择 Delete(删除)。

  4. 在确认对话框中,查看上次访问的信息,该信息显示每个选定角色上次访问 Amazon 服务的时间。这样可帮助您确认角色当前是否处于活动状态。如果要继续,请选择 Yes, Delete 以提交服务相关角色进行删除。

  5. 监视 IAM 控制台通知,以监控服务相关角色的删除进度。由于 IAM 服务相关角色删除是异步的,因此,在您提交角色进行删除后,删除任务可能成功,也可能失败。

    • 如果任务成功,则角色将从列表中删除,并会在页面顶部显示成功通知。

    • 如果任务失败,您可以从通知中选择 View detailsView Resources 以了解删除失败的原因。如果因为角色正在使用服务的资源而使删除失败,则通知包含一个资源列表 (如果服务返回该信息)。然后您可以清除资源并再次提交删除。

      注意

      您可能需要多次重复执行此过程,这取决于服务返回的信息。例如,您的服务相关角色可能使用六个资源,而您的服务可能返回有关其中五个资源的信息。如果您清除这五个资源并再次提交该角色以进行删除,则删除会失败,并且服务会报告一个剩余资源。服务可能会返回所有资源、其中一些资源,也可能不报告任何资源。

    • 如果任务失败,并且通知不包含资源列表,则服务可能不会返回该信息。要了解如何清除该服务的资源,请参阅使用 IAM 的Amazon服务。在表中查找您的服务,然后选择 Yes 链接以查看该服务的服务相关角色文档。

删除服务相关角色 (Amazon CLI)

您可以从 Amazon CLI 使用 IAM 命令删除服务相关角色。

删除服务相关角色 (Amazon CLI)
  1. 如果知道要删除的服务相关角色的名称,请输入以下命令列出账户中的角色:

    aws iam get-role --role-name role-name

    通过 CLI 命令使用角色名称(并非 ARN)指向角色。例如,如果某个角色的 ARN 为 arn:aws:iam::123456789012:role/myrole,则将该角色称为 myrole

  2. 如果服务相关角色正被使用或具有关联的资源,则无法删除它,因此您必须提交删除请求。如果不满足这些条件,该请求可能会被拒绝。您必须从响应中捕获 deletion-task-id 以检查删除任务的状态。输入以下命令以提交服务相关角色的删除请求:

    aws iam delete-service-linked-role --role-name role-name
  3. 输入以下命令以检查删除任务的状态:

    aws iam get-service-linked-role-deletion-status --deletion-task-id deletion-task-id

    删除任务的状态可能是 NOT_STARTEDIN_PROGRESSSUCCEEDEDFAILED。如果删除失败,则调用会返回失败的原因,以便您进行问题排查。如果因为角色正在使用服务的资源而使删除失败,则通知包含一个资源列表 (如果服务返回该信息)。然后您可以清除资源并再次提交删除。

    注意

    您可能需要多次重复执行此过程,这取决于服务返回的信息。例如,您的服务相关角色可能使用六个资源,而您的服务可能返回有关其中五个资源的信息。如果您清除这五个资源并再次提交该角色以进行删除,则删除会失败,并且服务会报告一个剩余资源。服务可能会返回所有资源、其中一些资源,也可能不报告任何资源。要了解如何为不报告任何资源的服务清除资源,请参阅使用 IAM 的Amazon服务。在表中查找您的服务,然后选择 Yes 链接以查看该服务的服务相关角色文档。

删除服务相关角色 (Amazon API)

您可以使用 Amazon API 删除服务相关角色。

删除服务相关角色 (Amazon API)
  1. 要提交服务相关角色的删除请求,请调用 DeleteServiceLinkedRole。在请求中,指定角色名称。

    如果服务相关角色正被使用或具有关联的资源,则无法删除它,因此您必须提交删除请求。如果不满足这些条件,该请求可能会被拒绝。您必须从响应中捕获 DeletionTaskId 以检查删除任务的状态。

  2. 要检查删除的状态,请调用 GetServiceLinkedRoleDeletionStatus。在请求中,指定 DeletionTaskId

    删除任务的状态可能是 NOT_STARTEDIN_PROGRESSSUCCEEDEDFAILED。如果删除失败,则调用会返回失败的原因,以便您进行问题排查。如果因为角色正在使用服务的资源而使删除失败,则通知包含一个资源列表 (如果服务返回该信息)。然后您可以清除资源并再次提交删除。

    注意

    您可能需要多次重复执行此过程,这取决于服务返回的信息。例如,您的服务相关角色可能使用六个资源,而您的服务可能返回有关其中五个资源的信息。如果您清除这五个资源并再次提交该角色以进行删除,则删除会失败,并且服务会报告一个剩余资源。服务可能会返回所有资源、其中一些资源,也可能不报告任何资源。要了解如何为不报告任何资源的服务清除资源,请参阅使用 IAM 的Amazon服务。在表中查找您的服务,然后选择 Yes 链接以查看该服务的服务相关角色文档。