

# SEC03-BP02 授予最低访问权限
<a name="sec_permissions_least_privileges"></a>

 仅授予用户在特定条件下对特定资源执行特定操作所需的访问权限。使用组和身份属性来大规模动态设置权限，而不是为单个用户定义权限。例如，您可以允许一组开发人员访问，以便仅管理其项目的资源。使用这种方法，如果某个开发人员离开项目，则可以自动撤销该开发人员的访问权限，而无需更改底层访问策略。

 **期望结果：**用户仅拥有其特定工作职能所需的最低权限。可以使用单独的 AWS 账户来将开发人员与生产环境隔离开来。当开发人员需要访问生产环境以执行特定任务时，他们仅在这些任务期间被授予有限和受控的访问权限。在他们完成必要的工作后，他们的生产访问权限会被立即撤销。您可以定期审核权限，并在不再需要时立即撤销权限，例如当用户变更角色或离开组织时。您可以将管理员权限限制在一个小型、受信任的组中，以降低暴露的风险。您仅向计算机或系统账户授予执行其预期任务所需的最低权限。

 **常见反模式：**
+  默认情况下，您向用户授予管理员权限。
+ 您使用根用户账户进行日常活动。
+  您创建过于宽松的策略，而没有限定适当的范围。
+  您的权限审核不频繁，这会导致权限蔓延。
+  您完全依赖基于属性的访问权限控制来实现环境隔离或权限管理。

 **在未建立这种最佳实践的情况下暴露的风险等级：**高 

## 实施指导
<a name="implementation-guidance"></a>

 [最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)原则规定，只应允许身份执行完成特定任务所需的最小一组操作。这样可使可用性、效率和安全性达到平衡。根据此原则运营，有助于限制意外访问，还有助于跟踪谁有权访问哪些资源。默认情况下，IAM 用户和角色没有任何权限。默认情况下，根用户具有完全访问权限，应受到严格控制和监控，并且仅用于[需要根访问权限的任务](https://docs.aws.amazon.com/accounts/latest/reference/root-user-tasks.html)。

 IAM 策略用于显式地为 IAM 角色或特定资源授予权限。例如，基于身份的策略可以附加到 IAM 组，而 S3 存储桶可由基于资源的策略控制。

 创建 IAM 策略时，可以指定服务操作、资源以及为使 AWS 允许或拒绝访问而必须满足的条件。AWS 支持多种条件以协助您缩小访问权限范围。例如，通过使用 PrincipalOrgID [条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)，如果请求者不属于您的 AWS 组织，则您可以拒绝操作。

 您还可以控制 AWS 服务代表您发出的请求，例如要求 AWS CloudFormation 创建一个 AWS Lambda 函数，方法是使用 CalledVia 条件键。您可以对不同的策略类型进行分层，以建立纵深防御并限制用户的总体权限。您还可以限制可以授予哪些权限以及在什么条件下授予权限。例如，可以让工作负载团队为他们所构建的系统创建自己的 IAM 策略，但前提是他们应用[权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)来限制他们可以授予的最大权限。

### 实施步骤
<a name="implementation-steps"></a>
+  **实施最低权限策略**：向 IAM 组和角色分配具有最低权限的访问策略，以反映您所定义的用户的角色或职能。
+  **通过单独的 AWS 账户隔离开发和生产环境**：为开发和生产环境使用单独的 AWS 账户，并使用[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)、资源策略和身份策略来控制它们之间的访问权限。
+  **基于 API 使用情况制定策略**：确定所需权限的一种方法是查看 AWS CloudTrail 日志。您可以使用此审核，根据用户在 AWS 内实际执行的操作来创建权限。[IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) 可以基于访问活动[自动生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html) IAM 策略。您可以在组织或账户级别，使用 IAM Access Advisor 来[跟踪上次访问的关于某个特定策略的信息](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html)。
+  **考虑使用[工作职能的 AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)**：当您开始创建细粒度的权限策略时，将 AWS 托管式策略用于常见的工作角色（如计费、数据库管理员和数据科学家）可能会有所帮助。这些策略有助于缩减用户具备的访问权限，同时您可以确定如何实施最低权限策略。
+  **移除不必要的权限：**检测并移除未使用的 IAM 实体、凭证和权限，以实现最低权限原则。可以使用 [IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html) 来识别外部和未使用的访问权限，而 [IAM Access Analyzer 策略生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)有助于微调权限策略。
+  **确保用户对生产环境的访问权限有限：**用户应只能访问具有有效使用案例的生产环境。在用户执行需要生产访问权限的特定任务后，应撤销访问权限。限制对生产环境的访问可帮助防止发生影响生产的意外事件，并缩小意外访问的影响范围。
+  **考虑权限边界：**[权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)功能使用托管式策略，来设置基于身份的策略可向 IAM 实体授予的最大权限。实体的权限边界仅允许实体执行其基于身份的策略和权限边界同时允许的操作。
+  **使用基于属性的访问权限控制和资源标签优化访问权限：**使用资源标签的[基于属性的访问权限控制（ABAC）](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)可用于优化权限（如果支持）。可以使用将主体标签与资源标签进行比较的 ABAC 模型，根据您定义的自定义维度来优化访问权限。这种方法可以简化组织中的权限策略并减少其数量。
  +  建议仅当主体和资源均归您的 AWS 组织拥有时，才使用 ABAC 进行访问权限控制。外部各方可以为自己的主体和资源使用与您的组织相同的标签名称和值。如果您仅依靠这些名称/值对来授予对外部主体或资源的访问权限，则可能会提供意想不到的权限。
+  **对 AWS Organizations 使用服务控制策略：**[Service control policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) 集中控制您组织中成员账户的最大可用权限。重要的是，您可以使用服务控制策略来限制成员账户中的根用户权限。还要考虑使用 AWS Control Tower，它提供可充实 AWS Organizations 的规范性托管控制。您还可以在 Control Tower 内定义自己的控制。
+  **为您的组织制定用户生命周期策略：**用户生命周期策略定义了当用户加入 AWS、更改作业角色或范围或不再需要访问 AWS 时要执行的任务。在用户生命周期的每个步骤中执行权限审核，来验证权限受到适当限制并避免权限蔓延。
+  **制定定期计划来审核权限并移除任何不需要的权限：**您应该定期审核用户访问权限，以验证用户没有过于宽松的访问权限。[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 和 IAM Access Analyzer 可以在审计用户权限时提供帮助。
+  **建立工作角色矩阵：**工作角色矩阵可直观显示您的 AWS 业务覆盖区域中所需的各种角色和访问级别。使用工作角色矩阵，您可以根据用户在组织内的职责来定义和分离权限。使用组，而不是将权限直接应用于各个用户或角色。

## 资源
<a name="resources"></a>

 **相关文档：**
+  [授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) 
+  [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) 
+  [用于编写最低权限 IAM 策略的方法](https://aws.amazon.com/blogs/security/techniques-for-writing-least-privilege-iam-policies/) 
+  [IAM Access Analyzer makes it easier to implement least privilege permissions by generating IAM policies based on access activity](https://aws.amazon.com/blogs/security/iam-access-analyzer-makes-it-easier-to-implement-least-privilege-permissions-by-generating-iam-policies-based-on-access-activity/) 
+  [使用 IAM 权限边界将权限管理委派给开发人员](https://aws.amazon.com/blogs/security/delegate-permission-management-to-developers-using-iam-permissions-boundaries/) 
+  [使用上次访问的信息优化权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html) 
+  [IAM 策略类型及其使用时间](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) 
+  [使用 IAM policy simulator 测试 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html) 
+  [Guardrails in AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/guardrails.html) 
+  [零信任架构：AWS 视角](https://aws.amazon.com/blogs/security/zero-trust-architectures-an-aws-perspective/) 
+  [如何使用 CloudFormation StackSets 实施最低权限原则](https://aws.amazon.com/blogs/security/how-to-implement-the-principle-of-least-privilege-with-cloudformation-stacksets/) 
+  [基于属性的访问控制（ABAC）](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) 
+  [查看用户活动以缩小策略范围](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html) 
+  [查看角色访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html) 
+  [使用标记来组织环境并推动问责制](https://docs.aws.amazon.com/aws-technical-content/latest/cost-optimization-laying-the-foundation/tagging.html) 
+  [AWS 标记策略](https://aws.amazon.com/answers/account-management/aws-tagging-strategies/) 
+  [为AWS资源添加标签](https://aws.amazon.com/premiumsupport/knowledge-center/tagging-resources/) 

 **相关视频：**
+  [新一代权限管理](https://www.youtube.com/watch?v=8vsD_aTtuTo) 
+  [零信任：AWS 视角](https://www.youtube.com/watch?v=1p5G1-4s1r0) 