托管策略与内联策略
如果您需要在 IAM 中为身份设置权限,您必须决定是使用 AWS 托管策略、客户托管策略还是内联策略。以下几节提供了有关每个类型的基于身份的策略以及何时使用它们的更多信息。
AWS托管策略
AWS 托管策略 是由 AWS 创建和管理的独立策略。Standalone policy(独立策略)意味着策略有自己的 Amazon Resource Name (ARN),其中包含策略名称。例如,arn:aws:iam::aws:policy/IAMReadOnlyAccess
是一个 AWS 托管策略。有关 ARN 的更多信息,请参阅 IAM ARN。
AWS 托管策略可用于为很多常用案例提供权限。完全访问 AWS 托管策略(如 AmazonDynamoDBFullAccess
那些专为工作职能设计的策略是一个特别有用的 AWS 托管策略类别。这些策略与 IT 行业的常用工作职能紧密贴合。目的是让为这些常见工作职能授予权限变得简单。使用工作职能策略的一个重要优势是,在推出新的服务和 API 操作时,AWS 对这些策略进行维护和更新。例如,AdministratorAccess
您不能更改 AWS 托管策略中定义的权限。AWS 有时会更新 AWS 托管策略中定义的权限。在 AWS 执行此操作时,更新会影响策略附加到的所有主体实体(用户、组和角色)。在推出新的 AWS 服务或为现有服务提供新的 API 调用时,AWS 很可能会更新 AWS 托管策略。例如,名为 ReadOnlyAccess 的 AWS 托管策略提供针对所有 AWS 服务和资源的只读访问权限。在 AWS 推出新的服务时,AWS 将更新 ReadOnlyAccess 策略,以便为新服务添加只读权限。更新的权限会应用于策略附加到的所有主体实体。
下图对 AWS 托管策略进行说明。该图显示三个 AWS 托管策略:AdministratorAccess、PowerUserAccess 和 AWSCloudTrailReadOnlyAccess。请注意,单个 AWS 托管策略可以附加到不同 AWS 账户 中的主体实体,并且可以附加到单个 AWS 账户 中的不同主体实体。

客户管理型策略
您可以创建在自己的 AWS 账户 中管理的独立策略,我们称其为客户管理型策略。随后可以将这些策略附加到您 AWS 账户 中的多个主体实体。将策略附加到主体实体时,便向实体授予了策略中定义的权限。
创建客户托管策略的理想方式是:首先复制一个现有 AWS 托管策略。这样从一开始您就可以确信策略是正确的,只需根据您的环境进行自定义即可。
下面的示意图对客户托管策略进行说明。每个策略都是 IAM 中的一个实体,有自己的 Amazon Resource Name (ARN),其中包含策略名称。请注意,同一策略可以附加到多个主体实体;例如,同一 DynamoDB-books-app 策略附加到两个不同的 IAM 角色。

通过 AWS 托管策略开始使用权限
我们建议使用授予最低权限的策略,或仅授予执行任务所需的许可。授予最低权限的最安全方式是编写一个仅具有团队所需权限的客户管理型策略。您必须创建一个流程,以允许您的团队在必要时请求更多权限。创建仅为团队提供所需权限的 IAM 客户托管策略需要时间和专业知识。
要开始向您的 IAM 身份(用户、用户组和角色)添加权限,您可以使用 AWS托管策略。AWS托管策略不会授予最低权限。您必须考虑授予您的主体超出其完成工作所需的更多权限所带来的安全风险。
您可以将 AWS 托管策略(包括任务函数)附加到任何 IAM 身份。要切换到最小权限权限,您可以运行 AWS Identity and Access Management Access Analyzer 以使用 AWS 托管策略监控主体。了解他们使用的权限后,您可以编写自定义策略或生成仅包含团队所需权限的策略。这中方法不太安全,但您能够以更灵活的方式了解您的团队如何使用 AWS。
AWS 托管策略可用于为很多常用案例提供权限。有关专为特定任务函数制定的 AWS 托管策略的更多信息,请参阅 工作职能的 AWS 托管策略。
内联策略
内联策略是嵌入在 IAM 身份(用户、组或角色)中的策略。也就是说,策略是身份的固有组成部分。您可以创建策略并将其嵌入到身份中,无论是在创建身份时还是之后。
下面的示意图对内联策略进行说明。每个策略都是用户、组或角色的固有部分。请注意,两个角色包含同一策略 (DynamoDB-books-app 策略),但是它们不共享单个策略;每个角色都有自己的策略副本。

在托管策略与内联策略之间进行选择
不同类型的策略适用于不同的使用案例。在大多数情况下,我们建议使用托管策略而不是内联策略。
托管策略具备以下功能:
- 可重复使用性
-
单个托管策略可以附加到多个主体实体 (用户、组和角色)。实际上,您可以创建策略库,在库中定义对您的 AWS 账户 有用的权限,然后根据需要将这些策略附加到主体实体。
- 集中变更管理
-
更改托管策略时,更改会应用于策略附加到的所有主体实体。例如,如果要针对新 AWS API 添加权限,则可以更新托管策略以添加权限。(如果使用 AWS 托管策略,AWS 会更新为该策略。) 更新策略时,更改会应用于策略附加到的所有主体实体。相比较而言,要更改内联策略,您必须分别编辑包含该策略的每个身份。例如,如果一个组和一个角色都包含同一内联策略,则您必须分别编辑这两个主体实体才能更改该策略。
- 版本控制和回滚
-
在更改客户托管策略时,更改的策略不会覆盖现有的策略。而是由 IAM 创建新的托管策略版本。IAM 最多可以存储五个版本的客户管理策略。如果需要,可以使用策略版本将策略还原为较早版本。
注意 策略版本与
Version
策略元素不同。Version
策略元素用在策略之中,用于定义策略语言的版本。要了解策略版本的更多信息,请参阅IAM policy 版本控制。要了解Version
策略元素的更多信息,请参阅IAM JSON 策略元素:Version。 - 委派权限管理
-
您可以允许您 AWS 账户 中的用户附加和分离策略,同时保持对这些策略中定义的权限的控制。实际上,您可以将一些用户指定为完全管理员,即可以创建、更新和删除策略的管理员。然后,您可以将其他用户指定为受限管理员。即,可以将策略(限于您允许附加的策略)附加到其他主体实体的管理员。
有关委派权限管理的更多信息,请参阅控制对策略的访问。
- AWS 托管策略的自动更新
-
AWS 维护 AWS 托管策略并在需要时更新它们(例如,针对新 AWS 服务添加权限),您不必进行更改。更新会自动应用于已附加了 AWS 托管策略的主体实体。
使用内联策略
如果您要在策略与应用它的身份之间维持严格的一对一关系,则内联策略十分有用。例如,您要确保策略中的权限不会无意中分配给预期身份之外的身份。使用内联策略时,策略中的权限不可能意外分配给错误的身份。此外,使用 AWS Management Console删除身份时,也会删除嵌入在身份中的策略。因为它们是主体实体的一部分。
将内联策略转换为托管策略
如果您的账户中具有内联策略,则可将其转换为托管策略。为此,请将该策略复制到新的托管策略。接下来,将新策略附加到具有内联策略的身份。然后,请删除内联策略。您可使用以下说明执行此操作。
将内联策略转换为托管策略
登录AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择 Groups(组)、Users(用户)或 Roles(角色)。
-
在列表中,请选择具有要修改的策略的用户组、用户或角色的名称。
-
请选择 Permissions 选项卡。
-
对于用户组,请选择要移除的内联策略的名称。对于用户和角色,选择 Show
n
more (再显示 n 个)(如有必要),然后选择要删除的内联策略旁边的箭头。 -
复制策略的 JSON 策略文档。
-
在导航窗格中,选择 Policies (策略)。
-
选择 Create policy (创建策略),然后选择 JSON 选项卡。
-
将现有文本替换为您的 JSON 策略文本,然后选择 Review policy (查看策略)。
-
为您的策略输入名称,然后选择 Create policy (创建策略)。
-
在导航窗格中,请选择 Groups(组)、Users(用户)或 Roles(角色),然后再次选择具有要删除的策略的用户组、用户或角色的名称。
-
对于用户组,请选择 Permissions(权限)选项卡。对于用户和角色,选择 Add permissions (添加权限)。
-
对于用户组,选中新策略名称旁边的复选框,选择 Add permissions(附加权限)然后选择 Attach Policy(附加策略)。对于用户或角色,选择 Add permissions (添加权限)。在下一页上,选择 Attach existing policies directly (直接附加现有策略),选中您的新策略名称旁边的复选框,选择 Next: Review (下一步: 查看),然后选择 Add permissions (添加权限)。
您将返回您的用户组、用户或角色的 Summary(摘要)页面。
-
对于用户组,选中要移除的内联策略旁边的复选框,然后选择 Remove(移除)。对于用户或角色,选择要删除的内联策略旁边的 X。