托管策略与内联策略 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

托管策略与内联策略

如果您需要在 IAM 中为身份设置权限,您必须决定是使用 Amazon 托管策略、客户托管策略还是内联策略。以下几节提供了有关每个类型的基于身份的策略以及何时使用它们的更多信息。

Amazon 托管式策略

Amazon 托管策略 是由 Amazon 创建和管理的独立策略。Standalone policy(独立策略)意味着策略有自己的 Amazon Resource Name (ARN),其中包含策略名称。例如,arn:aws:iam::aws:policy/IAMReadOnlyAccess 是一个 Amazon 托管策略。有关 ARN 的更多信息,请参阅 IAM ARN

Amazon 托管策略可用于为很多常用案例提供权限。完全访问 Amazon 托管策略(如 AmazonDynamoDBFullAccessIAMFullAccess)通过授予对服务的完全访问权限来定义服务管理员的权限。高级用户 Amazon 托管策略(如 AWSCodeCommitPowerUserAWSKeyManagementServicePowerUser)是为高级用户设计的。部分访问 Amazon 托管策略(如 AmazonMobileAnalyticsWriteOnlyAccessAmazonEC2ReadOnlyAccess)提供对 Amazon 服务的特定级别的访问权限,但未授予 permissions management(权限管理)访问级别权限。利用 Amazon 托管策略,您可更轻松地向用户、组和角色分配相应权限,而不必自己编写策略。

那些专为工作职能设计的策略是一个特别有用的 Amazon 托管策略类别。这些策略与 IT 行业的常用工作职能紧密贴合。目的是让为这些常见工作职能授予权限变得简单。使用工作职能策略的一个重要优势是,在推出新的服务和 API 操作时,Amazon 对这些策略进行维护和更新。例如,AdministratorAccess 工作职能提供对 Amazon 中的每个服务和资源的完全访问权限和权限委派。我们建议此策略仅用于账户管理员。对于需要对 IAM 和 Organizations 的有限访问权限以及对其他每个服务的完全访问权限的高级用户,请使用 PowerUserAccess 工作职能。有关工作职能策略的列表和说明,请参阅Amazon工作职能的 托管策略

您不能更改 Amazon 托管策略中定义的权限。Amazon 有时会更新 Amazon 托管策略中定义的权限。在 Amazon 执行此操作时,更新会影响策略附加到的所有主体实体(用户、组和角色)。在推出新的 Amazon 服务或为现有服务提供新的 API 调用时,Amazon 很可能会更新 Amazon 托管策略。例如,名为 ReadOnlyAccess 的 Amazon 托管策略提供针对所有 Amazon 服务和资源的只读访问权限。在 Amazon 推出新的服务时,Amazon 将更新 ReadOnlyAccess 策略,以便为新服务添加只读权限。更新的权限会应用于策略附加到的所有主体实体。

下图对 Amazon 托管策略进行说明。该图显示三个 Amazon 托管策略:AdministratorAccessPowerUserAccessAmazonCloudTrailReadOnlyAccess。请注意,单个 Amazon 托管策略可以附加到不同 Amazon 账户中的主体实体,可以附加到单个 Amazon 账户中的不同主体实体。


        Amazon 托管策略示意图

客户托管策略

您可以创建您在自己的 Amazon账户中管理的独立策略,我们称之为客户托管策略。随后可以将这些策略附加到您 Amazon 账户中的多个主体实体。将策略附加到主体实体时,便向实体授予了策略中定义的权限。

创建客户托管策略的理想方式是:首先复制一个现有 Amazon 托管策略。这样从一开始您就可以确信策略是正确的,只需根据您的环境进行自定义即可。

下面的示意图对客户托管策略进行说明。每个策略都是 IAM 中的一个实体,有自己的 Amazon Resource Name (ARN),其中包含策略名称。请注意,同一策略可以附加到多个主体实体;例如,同一 DynamoDB-books-app 策略附加到两个不同的 IAM 角色。


        客户托管策略示意图

内联策略

内联策略是嵌入在 IAM 身份(用户、组或角色)中的策略。也就是说,策略是身份的固有组成部分。您可以创建策略并将其嵌入到身份中,无论是在创建身份时还是之后。

下面的示意图对内联策略进行说明。每个策略都是用户、组或角色的固有部分。请注意,两个角色包含同一策略 (DynamoDB-books-app 策略),但是它们不共享单个策略;每个角色都有自己的策略副本。


        内联策略示意图

在托管策略与内联策略之间进行选择

不同类型的策略适用于不同的使用案例。在大多数情况下,我们建议使用托管策略而不是内联策略。

托管策略具备以下功能:

可重复使用性

单个托管策略可以附加到多个主体实体 (用户、组和角色)。实际上,您可以创建策略库,在库中定义对您 Amazon 账户有用的权限,然后根据需要将这些策略附加到主体实体。

集中变更管理

更改托管策略时,更改会应用于策略附加到的所有主体实体。例如,如果要针对新 Amazon API 添加权限,则可以更新托管策略以添加权限。(如果使用 Amazon 托管策略,Amazon 会更新为该策略。) 更新策略时,更改会应用于策略附加到的所有主体实体。相比较而言,要更改内联策略,您必须分别编辑包含该策略的每个身份。例如,如果一个组和一个角色都包含同一内联策略,则您必须分别编辑这两个主体实体才能更改该策略。

版本控制和回滚

在更改客户托管策略时,更改的策略不会覆盖现有的策略。而是由 IAM 创建新的托管策略版本。IAM 最多可以存储五个版本的客户管理策略。如果需要,可以使用策略版本将策略还原为较早版本。

策略版本与 Version 策略元素不同。Version 策略元素用在策略之中,用于定义策略语言的版本。要了解策略版本的更多信息,请参阅IAM 策略版本控制。要了解 Version 策略元素的更多信息,请参阅IAM JSON 策略元素:Version

委派权限管理

您可以允许您 Amazon 账户中的用户附加和分离策略,同时保持对这些策略中定义的权限的控制。实际上,您可以将一些用户指定为完全管理员,即可以创建、更新和删除策略的管理员。然后,您可以将其他用户指定为受限管理员。即,可以将策略(限于您允许附加的策略)附加到其他主体实体的管理员。

有关委派权限管理的更多信息,请参阅控制对策略的访问

Amazon 托管策略的自动更新

Amazon 维护 Amazon 托管策略并在需要时更新它们(例如,针对新 Amazon 服务添加权限),您不必进行更改。更新会自动应用于已附加了 Amazon 托管策略的主体实体。

使用内联策略

如果您要在策略与应用它的身份之间维持严格的一对一关系,则内联策略十分有用。例如,您要确保策略中的权限不会无意中分配给预期身份之外的身份。使用内联策略时,策略中的权限不可能意外分配给错误的身份。此外,使用 Amazon Web Services Management Console删除身份时,也会删除嵌入在身份中的策略。因为它们是主体实体的一部分。

将内联策略转换为托管策略

如果您的账户中具有内联策略,则可将其转换为托管策略。为此,请将该策略复制到新的托管策略。接下来,将新策略附加到具有内联策略的身份。然后,删除内联策略。您可使用以下说明执行此操作。

将内联策略转换为托管策略

  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Groups(组)、Users(用户)或 Roles(角色)。

  3. 在列表中,选择具有要修改的策略的用户组、用户或角色的名称。

  4. 选择 Permissions(权限) 选项卡。

  5. 对于用户组,请选择要移除的内联策略的名称。对于用户和角色,选择 Show n more (再显示 n 个)(如有必要),然后选择要删除的内联策略旁边的箭头。

  6. 复制策略的 JSON 策略文档。

  7. 在导航窗格中,选择 Policies(策略)

  8. 选择 Create policy (创建策略),然后选择 JSON 选项卡。

  9. 将现有文本替换为您的 JSON 策略文本,然后选择 Review policy (查看策略)

  10. 为您的策略输入名称,然后选择 Create policy (创建策略)

  11. 在导航窗格中,选择 Groups(组)、Users(用户)或 Roles(角色),然后再次选择具有要删除的策略的用户组、用户或角色的名称。

  12. 对于用户组,请选择 Permissions(权限)选项卡。对于用户和角色,选择 Add permissions (添加权限)

  13. 对于用户组,选中新策略名称旁边的复选框,选择 Add permissions(附加权限)然后选择 Attach Policy(附加策略)。对于用户或角色,选择 Add permissions (添加权限)。在下一页上,选择 Attach existing policies directly (直接附加现有策略),选中您的新策略名称旁边的复选框,选择 Next: Review (下一步: 查看),然后选择 Add permissions (添加权限)

    您将返回您的用户组、用户或角色的 Summary(摘要)页面。

  14. 对于用户组,选中要移除的内联策略旁边的复选框,然后选择 Remove(移除)。对于用户或角色,选择要删除的内联策略旁边的 X