IAM policy 版本控制 - AWS Identity and Access Management

IAM policy 版本控制

在对 IAM 客户托管策略进行更改时,以及 AWS 对 AWS 托管策略进行更改时,更改的策略不会覆盖现有的策略。而是由 IAM 创建新的托管策略版本。IAM 最多可以存储五个版本的客户管理策略。IAM 不支持内联策略版本控制。

下图说明了客户托管策略版本控制。在此示例中,已保存版本 1-4。您最多可以将五个托管策略版本保存到 IAM。在您编辑将创建第六个已保存版本的策略时,可以选择不再保存哪个较旧版本。您可以随时恢复到其他四个已保存版本中的任何一个。


      对托管策略进行的更改成为新的策略版本

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

您可以使用不同版本跟踪对托管策略的更改。例如,您对托管策略进行更改,然后发现更改有意外效果。在这种情况下,通过将以前版本设置为默认 版本,可以回滚到以前版本的托管策略。

下面的主题说明了如何对托管式策略进行版本控制。

用于设置默认策略版本的权限

设置默认策略版本所需的权限对应于任务的 AWS API 操作。您可以使用 CreatePolicyVersionSetDefaultPolicyVersion API 操作来设置默认策略版本。要允许某人设置现有策略的默认策略版本,您可以允许访问 iam:CreatePolicyVersion 操作或 iam:SetDefaultPolicyVersion 操作。iam:CreatePolicyVersion 操作允许他们创建新版本的策略并将该版本设置为默认版本。iam:SetDefaultPolicyVersion 操作允许他们将任何现有策略版本设置为默认版本。

重要

在用户策略中拒绝 iam:SetDefaultPolicyVersion 操作不会阻止用户创建新策略版本并将它设置为默认版本。

您可以使用以下策略来拒绝用户访问以更改现有客户托管策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "iam:CreatePolicyVersion", "iam:SetDefaultPolicyVersion" ], "Resource": "arn:aws:iam::*:policy/POLICY-NAME" } ] }

设置客户托管策略的默认版本

托管策略的一个版本会设置为默认 版本。策略的默认版本是有效版本,即,它是对托管策略附加到的所有主体实体(用户、用户组和角色)都生效的版本。

创建客户托管策略时,策略从标识为 v1 的单个版本开始。对于只有单个版本的托管策略,该版本会自动设置为默认版本。对于有多个版本的客户托管策略,由您选择要设置为默认版本的版本。对于 AWS 托管策略,默认版本由 AWS 设置。下面的示意图对此概念进行说明。


        有单个版本(默认版本)的托管策略


        有三个版本的客户托管策略,其中版本 v2 是默认版本。

您可以设置客户托管策略的默认版本,以将该版本应用于该策略附加到的每个 IAM 身份(用户、用户组和角色)。您无法为 AWS 托管策略或内联策略设置默认版本。

设置客户托管策略的默认版本(控制台)
  1. 登录AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 在策略列表中,选择要设置其默认版本的策略的名称。您可以使用搜索框筛选策略列表。

  4. 选择 Policy Versions (策略版本) 选项卡。选中要设置为默认版本的版本旁的复选框,然后选择 Set as default

要了解如何从 AWS Command Line Interface 或 AWS API 中设置客户托管策略的默认版本,请参阅编辑客户托管策略 (AWS CLI)

使用不同版本回滚更改

您可以设置客户托管策略的默认版本以回滚您的更改。例如,考虑以下情形:

您创建一个客户托管策略,以允许用户使用 AWS Management Console 管理特定的 Amazon S3 存储桶。创建时,您的客户托管策略只有一个版本(标识为 v1),因此该版本自动设置为默认版本。该策略可正常工作。

随后,您将更新策略,以添加权限对第二个 Amazon S3 存储桶进行管理。IAM 会创建新的策略版本(标识为 v2),该版本将包含您所做的更改。您将版本 v2 设置为默认版本,不久之后,您的用户报告,他们缺少使用 Amazon S3 控制台的权限。在此情况下,您可以回滚到策略版本 v1,您知道该版本可正常工作。为此,您可以将版本 v1 设置为默认版本。您的用户现在可以使用 Amazon S3 控制台来管理原始存储桶。

后来,在确定策略版本 v2 中的错误之后,您再次更新策略,添加了对第二个 Amazon S3 存储桶的管理权限。IAM 会创建另一个新版本的策略,标识为 v3。您将版本 v3 设置为默认版本,此版本可正常工作。此时,您删除策略版本 v2。

版本限制

一个托管 策略最多可以有五个版本。如果需要从 AWS Command Line Interface 或 AWS API 在五个版本之外更改托管策略更改,必须先删除一个或多个现有版本。如果使用的是 AWS Management Console,则您在编辑策略之前不必删除版本。当您保存第六个版本时,会出现一个对话框,提示您删除策略的一个或多个非默认版本。您可以查看每个版本的 JSON 策略文档,以方便做出决定。有关该对话框的详细信息,请参阅编辑 IAM policy

您可以根据需要删除任何托管策略版本 (默认版本除外)。删除某个版本时,其余版本的版本标识符不会更改。因此,版本标识符可能是不连续的。例如,如果您删除托管策略版本 v2 和 v4,然后添加两个新版本,则其余版本标识符可能是 v1、v3、v5、v6 和 v7。