IAM Access Analyzer 策略生成 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

IAM Access Analyzer 策略生成

作为管理员或开发人员,您可以向 IAM 实体(用户或角色)授予超出其需要的权限。IAM 提供了多个选项来帮助您优化授予的权限。其中一种选择是根据实体的访问活动生成 IAM policy。IAM 访问分析器会查看您的 Amazon CloudTrail 日志并生成一个策略模板,其中包含角色在指定日期范围内使用的权限。您可以使用模板创建具有精细权限的策略,该策略仅授予支持特定使用案例所需的权限。

策略生成的工作原理

IAM Access Analyzer 分析 CloudTrail 事件以识别 IAM 实体(用户或角色)已使用的操作和服务。然后,它会生成基于该活动的 IAM policy。将附加到实体的广泛权限策略替换为生成的策略时,来可以优化实体的权限。以下是策略生成过程的高度概述。

  • 设置策略模板生成 – 您可以为 IAM Access Analyzer 指定一个最多 90 天的时间段来分析历史 Amazon CloudTrail CloudTrail 事件。您必须指定一个现有服务角色或创建一个新的服务角色。服务角色允许 IAM Access Analyzer 访问您的 CloudTrail 跟踪和服务上次访问的信息,以识别所使用的服务和操作。在生成策略之前,必须指定记录账户事件的 CloudTrail 跟踪。有关 CloudTrail 数据 IAM Access Analyzer 配额的更多信息,请参阅 IAM Access Analyzer 配额

  • 生成策略 –IAM Access Analyzer 会根据 CloudTrail 事件中的访问活动生成策略。

  • 查看和自定义策略 –生成策略后,您可以查看实体在指定日期范围内使用的服务和操作。您可以通过添加或删除权限、指定资源以及向策略模板添加条件来进一步自定义策略。

  • 创建和附加策略 – 您可以通过创建托管策略来保存生成的策略。您可以将创建的策略附加到其活动用于生成策略的用户或角色。

服务和操作级别的信息

IAM Access Analyzer 生成 IAM policy 时,会返回信息来帮助您进一步自定义策略。生成策略时可以返回两类信息:

  • 包含操作级别信息的策略 - 对于某些 Amazon 服务(例如 Amazon EC2),IAM Access Analyzer 可以识别在 CloudTrail 事件中发现的操作,并列出其生成的策略中所使用的操作。有关支持的服务的列表,请参阅 IAM Access Analyzer 策略生成服务。对于某些服务,IAM Access Analyzer 会提示您将服务的操作添加到生成的策略中。

  • 包含服务级别信息的策略– IAM Access Analyzer 使用上次访问的信息创建策略模板,其中包含最近使过用的所有服务。使用 Amazon Web Services Management Console 时,我们会提示您查看服务并添加操作以完成策略。

有关每项服务中的操作列表,请参阅《服务授权参考》中的 Amazon 服务的操作、资源和条件键

生成策略需知信息

在生成策略之前,请查看以下重要详细信息。

  • 启用 CloudTrail 跟踪 – 您必须为账户启用 CloudTrail 跟踪,才能基于访问活动生成策略。创建 CloudTrail 跟踪时,CloudTrail 会将与跟踪相关的事件发送到您指定的 Amazon S3 存储桶。要了解如何创建 CloudTrail 跟踪,请参阅《Amazon CloudTrail 用户指南》中的为您的 Amazon 账户创建跟踪

  • 数据事件不可用 — IAM Access Analyzer 不会在生成的策略中识别数据事件(例如 Amazon S3 数据事件)的操作级别活动。

  • PassRole – CloudTrail 不会跟踪 iam:PassRole 操作,生成的策略中也不包含该操作。

  • 缩短策略生成时间 – 要加快生成策略的速度,请缩短在设置策略生成时指定的日期范围。

  • 使用 CloudTrail 进行审计 – 请勿将策略生成用于审计目的;而是使用 CloudTrail 进行审计。有关使用 CloudTrail 的更多信息,请参阅使用 Amazon CloudTrail 记录 IAM 和 Amazon STS API 调用

  • 拒绝的操作 – 策略生成会审查所有 CloudTrail 事件,包括拒绝的操作。

  • 一个策略 IAM 控制台 – 您可以在 IAM 控制台中一次生成一个策略。

  • 所生成策略的可用性 IAM 控制台 – 您可以在生成策略后的 7 天内在 IAM 控制台中查看生成的策略。7 天后,您必须生成新的策略。

  • 策略生成配额 – 有关 IAM Access Analyzer 策略生成配额的更多信息,请参阅 IAM Access Analyzer 配额

  • 适用 Amazon S3 Standard 费率 - 当您使用策略生成功能时,IAM 访问分析器会审核 S3 存储桶中的 CloudTrail 日志。访问您的 CloudTrail 日志以生成策略不会产生额外的存储费用。Amazon 对存储在 S3 存储桶中的 CloudTrail 日志的请求和数据传输收取标准 Amazon S3 费率。

  • Amazon Control Tower 支持 – 策略生成不支持 Amazon Control Tower 生成策略。

生成策略所需的权限

首次生成策略所需的权限与为后续使用生成策略所需的权限不同。

首次设置

首次生成策略时,必须在账户中选择一个合适的现有服务角色或创建一个新的服务角色。服务角色允许 IAM Access Analyzer 访问账户中的 CloudTrail 以及服务上次访问的信息。仅管理员有权创建和配置角色。因此,我们建议管理员在首次设置时创建服务角色。要了解有关创建服务角色所需权限的更多信息,请参阅创建角色以向 Amazon 服务委派权限

创建服务角色时,您需要为该角色配置两个策略。您可以将 IAM 权限策略附加到角色,它指定角色可以执行的操作。您还可以将角色信任策略附加到角色,它指定可以使用该角色的主体。

第一个示例策略显示了生成策略所需的服务角色的权限策略。第二个示例策略显示了服务角色所需的角色信任策略。在使用 Amazon API 或 Amazon CLI 生成策略时,可以使用这些策略帮助创建服务角色。在策略生成过程中使用 IAM 控制台创建服务角色时,我们会为您生成这些策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudtrail:GetTrail", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetServiceLastAccessedDetails", "iam:GenerateServiceLastAccessedDetails" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

以下示例策略显示的角色信任策略具有允许 IAM Access Analyzer 担任角色的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "access-analyzer.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
后续使用

要在 Amazon Web Services Management Console 中生成策略,IAM 用户必须拥有允许他们将用于生成策略的服务角色传递给 IAM Access Analyzer 的权限策略。iam:PassRole 通常与 iam:GetRole 共同使用,使用户能够获取准备进行传递的角色的详细信息。在此示例中,用户只能传递位于指定账户中并且名称以 AccessAnalyzerMonitorServiceRole* 开头的角色。要了解将 IAM 角色传递给 Amazon 服务的更多信息,请参阅向用户授予权限以将角色传递给 Amazon 服务

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUserToPassRole", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/service-role/AccessAnalyzerMonitorServiceRole*" } ] }

您还必须具有以下 IAM Access Analyzer 权限才能在 Amazon Web Services Management Console、Amazon API 中或 Amazon CLI 中生成策略,如以下策略语句所示。

{ "Sid": "AllowUserToGeneratePolicy", "Effect": "Allow", "Action": [ "access-analyzer:CancelPolicyGeneration", "access-analyzer:GetGeneratedPolicy", "access-analyzer:ListPolicyGenerations", "access-analyzer:StartPolicyGeneration" ], "Resource": "*" }
首次使用和后续使用

使用 Amazon Web Services Management Console 生成策略时,必须授予 cloudtrail:ListTrails 在账户中列出 CloudTrail 跟踪的权限,如以下策略语句所示。

{ "Sid": "AllowUserToListTrails", "Effect": "Allow", "Action": [ "CloudTrail:ListTrails" ], "Resource": "*" }

基于 CloudTrail 活动生成策略(控制台)

您可以为 IAM 用户或角色生成策略。

步骤 1:基于 CloudTrail 活动生成策略

以下过程介绍了如何使用 Amazon Web Services Management Console 为角色生成策略。

为 IAM 角色生成策略
  1. 登录 Amazon Web Services Management Console,然后打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧的导航窗格中,选择角色

    注意

    基于 IAM 用户的活动生成策略的步骤几乎完全相同。要执行此操作,请选择 Users (用户),不要选择 Roles (角色)

  3. 在账户的角色列表中,选择要将其活动用于生成策略的角色的名称。

  4. Permissions (权限) 选项卡的基于 CloudTrail 事件生成策略部分,选择 Generate policy (生成策略)

  5. Generate policy (生成策略)页面,指定希望 IAM Access Analyzer 分析 CloudTrail 事件(以对角色采取操作)的时间段。最多可以选择 90 天。我们建议您选择尽可能短的时间段以缩短策略生成时间。

  6. CloudTrail 访问部分中,选择合适的现有角色或创建新角色(如果不存在合适角色)。此角色授予 IAM Access Analyzer 代表您访问 CloudTrail 数据的权限,以查看访问活动并识别已使用的服务和操作。要了解该角色所需的权限,请参阅 生成策略所需的权限

  7. 要分析的 CloudTrail 跟踪部分,指定记录账户事件的 CloudTrail 跟踪。

    如果您选择将日志存储在其他账户中的 CloudTrail 跟踪记录,则会显示一个有关跨账户访问的信息框。跨账户访问需要额外的设置。要了解更多信息,请稍后参阅本主题中的 Choose a role for cross-account access

  8. 选择 Generate Policy (生成策略)

  9. 在策略生成过程中,您将返回到 Permissions(权限)选项卡上的 Roles(角色)Summary(摘要)页面。等到 Policy request details (策略请求详细信息) 部分中的状态显示为 Success (成功) 后,选择 View generated policy (查看生成的策略)。您可以在策略生成后的七天内进行查看。如果生成另一个策略,则会将现有策略替换为生成的新策略。

步骤 2:查看权限并为所使用的服务添加操作

查看 IAM Access Analyzer 识别到的角色所使用的服务和操作。您可以为生成的策略模板添加用于任何服务的操作。

  1. 查看以下部分:

    • Review permissions (查看权限) 页面,查看 Actions included in the generated policy (生成的策略中包含的操作) 列表。该列表显示了角色在指定日期范围内使用的 IAM Access Analyzer 已识别到的服务操作。

    • Services used (使用的服务) 部分显示了角色在指定日期范围内使用的 IAM Access Analyzer 已识别到的其他服务。有关使用了哪些操作的信息可能不适用于本部分中列出的服务。使用列出的各项服务的菜单手动选择您希望在策略中包含的操作。

  2. 添加完操作后,选择 Next (下一步)

步骤 3:进一步自定义生成的策略

您可以通过添加或删除权限或指定资源来进一步自定义策略。

自定义生成的策略
  1. 请更新策略模板。策略模板包含支持资源级权限的操作的资源 ARN 占位符,如下图所示。资源级权限指的是能够指定允许用户对哪些资源执行操作的能力。我们建议您使用 ARN 在策略中为支持资源级权限的操作指定个人资源。您可以将占位符资源 ARN 替换为使用案例的有效资源 ARN。

    如果操作不支持资源级权限,则必须使用通配符 (*) 来指定所有资源都可能受到操作的影响。要了解哪些 Amazon 服务支持资源级权限,请参阅 Amazon services that work with IAM(能够与 IAM 搭配使用的亚马逊云科技服务)。有关各项服务中的操作列表,以及要了解哪些操作支持资源级权限,请参阅 Amazon 服务的操作、资源和条件键

    策略模板中的资源 ARN 占位符
  2. (可选)在模板中添加、修改或删除 JSON 策略语句。要了解有关编写 JSON 策略的更多信息,请参阅创建 IAM policy(控制台)

  3. 自定义策略模板后,可以选择以下选项:

    • (可选)您可以复制模板中的 JSON,以便在 Generated policy (生成的策略) 页面之外单独使用。例如,您想要使用 JSON 在其他账户中创建策略时。如果模板中策略的字符超过 JSON 策略的字符上限 6144,则会将该策略拆分为多个策略。

    • 选择 Next (下一步),以在同一账户中查看并创建托管策略。

步骤 4:查看并创建托管策略

如果您有权创建和附加 IAM policy,则可以通过生成的策略创建托管策略。然后,您可以将策略附加到账户中的用户或角色。

查看并创建策略
  1. Review and create managed policy (查看并创建托管策略) 页面,为创建的策略输入 Name (名称)Description (描述)(可选)。

  2. (可选)在 Summary (摘要) 部分,您可以查看策略中将包含的权限。

  3. (可选)通过以密钥值对的形式附加标签来向策略添加元数据。有关将在 IAM 中使用标签的更多信息,请参阅 Tagging IAM resources(标记 IAM 资源)。

  4. 完成后,请执行以下操作之一:

    • 您可以将新策略直接附加到用于生成策略的角色。为此,请在页面底部附近,选中 Attach policy to YourRoleName (将策略附加到 YourRoleName) 旁边的复选框。然后选择 Create and attach policy (创建并附加策略)

    • 否则,请选择 Create policy (创建策略)。您创建的策略位于 IAM 控制台上,可以在 Policies (策略) 导航窗格的策略列表中找到它。

  5. 您可以将创建的策略附加到账户中的实体。附加策略后,您可以删除可以附加到该实体的任何其他过于宽泛的策略。要了解如何附加托管策略,请参阅添加 IAM 身份权限(控制台)

使用其他账户中的 Amazon CloudTrail 数据生成策略

您可以创建将数据存储在中央账户中的 CloudTrail 跟踪记录,以简化管理活动。例如,您可以使用 Amazon Organizations 创建跟踪记录,以为该企业中的所有 Amazon Web Services 账户 记录所有事件。跟踪记录属于一个中央账户。如果要为账户中的用户或角色生成策略,而该账户与您存储 CloudTrail 日志数据所在的账户不同,则必须授予跨账户访问权限。为此,您需要一个角色和一个存储桶策略来授予 IAM Access Analyzer 对您的 CloudTrail 日志的权限。有关创建 Organizations 跟踪记录的更多信息,请参阅为企业创建跟踪记录

在此示例中,假定您要为账户 A 中的用户或角色生成策略。账户 A 中的 CloudTrail 跟踪记录将 CloudTrail 日志存储在账户 B 的存储桶中。在生成策略之前,您必须进行以下更新:

  1. 选择一个现有角色,或创建一个新的服务角色,以授予 IAM Access Analyzer 对账户 B(存储您的 CloudTrail 日志的位置)中存储桶的访问权限。

  2. 验证账户 B 中的 Amazon S3 存储桶对象所有权和存储桶权限策略,以便 IAM 访问分析器可以访问存储桶中的对象。

步骤 1:选择或创建用于跨账户访问的角色
  • Generate policy(生成策略)屏幕上,如果您的账户中存在具有所需权限的角色,则会为您预先选择 Use an existing role(使用现有角色)的选项。否则,请选择 Create and use a new service role(创建和使用新的服务角色)。新角色用于向 IAM Access Analyzer 授予对账户 B 中 CloudTrail 日志的访问权限。

步骤 2:验证或更新账户 B 中的 Amazon S3 存储桶配置
  1. 登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets(存储桶)列表中,请选择存储 CloudTrail 日志的存储桶名称。

  3. 请选择 Permissions(权限)选项卡,然后转到 Object Ownership(对象所有权)部分。

    使用 Amazon S3 对象所有权存储桶设置来控制上传到存储桶的对象的所有权。默认情况下,当其他 Amazon Web Services 账户 将对象上传到存储桶时,这些对象仍为上传账户所有。要生成策略,存储桶中的所有对象都必须归存储桶拥有者所有。您可能需要更改您存储桶的 Object Ownership(对象所有权)设置,具体视您的 ACL 使用案例而定。将 Object Ownership(对象所有权)设置为以下选项之一。

    • 强制存储桶拥有者(推荐)

    • 首选存储桶拥有者

    重要

    要成功生成策略,存储桶中的对象必须归存储桶拥有者所有。如果您选择使用 Bucket owner preferred(首选存储桶拥有者),您只能在对象所有权更改后的时间段生成策略。

    如需了解关于 Amazon S3 中的对象所有权的更多信息,请参阅《Amazon S3 用户指南》中的控制存储桶的对象所有权和禁用 ACL

  4. 向账户 B 中的 Amazon S3 存储桶策略添加权限,以允许对账户 A 中的角色进行访问。

    以下示例策略针对名为 amzn-s3-demo-bucket 的存储桶允许 ListBucketGetObject。如果访问存储桶的角色属于您企业中的账户并且名称以 AccessAnalyzerMonitorServiceRole 开头,则其会允许访问权限。使用 aws:PrincipalArn 作为 Resource 元素中的 Condition 可确保角色只能访问账户活动(如果其属于账户 A)。您可以将 amzn-s3-demo-bucket 替换为存储桶名称,将 optional-prefix 替换为存储桶的可选前缀,将 organization-id 替换为组织 ID。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyGenerationBucketPolicy", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/optional-prefix/AWSLogs/organization-id/${aws:PrincipalAccount}/*" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "organization-id" }, "StringLike": { "aws:PrincipalArn": "arn:aws:iam::${aws:PrincipalAccount}:role/service-role/AccessAnalyzerMonitorServiceRole*" } } } ] }
  5. 如果您使用 Amazon KMS 加密日志,请在您存储 CloudTrail 日志的账户中更新您的 Amazon KMS 密钥政策,以授予 IAM Access Analyzer 访问权限来使用密钥,如以下策略示例所示。将 CROSS_ACCOUNT_ORG_TRAIL_FULL_ARN 替换为您跟踪记录的 ARN,将 organization-id 替换为您的企业 ID。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudtrail:arn": "CROSS_ACCOUNT_ORG_TRAIL_FULL_ARN", "aws:PrincipalOrgID": "organization-id" }, "StringLike": { "kms:ViaService": [ "access-analyzer.*.amazonaws.com", "s3.*.amazonaws.com" ], "aws:PrincipalArn": "arn:aws:iam::${aws:PrincipalAccount}:role/service-role/AccessAnalyzerMonitorServiceRole*" } } } ] }

基于 CloudTrail 活动生成策略(Amazon CLI)

您可以通过 Amazon CLI 使用以下命令生成策略。

查看策略生成请求列表

基于 CloudTrail 活动生成策略(Amazon API)

您可以通过 Amazon API 使用以下操作生成策略。

生成策略
查看生成的策略
取消策略生成请求
查看策略生成请求列表