身份与访问管理的设计 - 通过 IAM 实现零信任安全

详解使用 AWS IAM 的访问管理设计方法,介绍通过最小权限原则、策略设计以及与 Cognito 的集成实现零信任安全的方法。

云中访问管理的基本原则

云环境的安全始于适当的访问管理。AWS Identity and Access Management(IAM)是用于安全地控制对 AWS 资源的访问的服务,通过用户、组、角色、策略这 4 个要素构成访问控制。IAM 随 AWS 账户免费提供,无需额外费用即可使用。在 IAM 策略的评估中,显式拒绝优先于允许。遵循最小权限原则、只授予必要访问权限的设计,是云安全的基础之一。

IAM 策略的设计与最佳实践

IAM 策略以 JSON 格式编写,由 Effect(允许/拒绝)、Action(操作)、Resource(目标资源)、Condition(条件)这 4 个要素构成。AWS 托管策略是面向常见用例的预定义策略,可用于快速设置权限。使用客户托管策略,可以根据组织特有的要求进行细粒度的权限定义。使用 Condition 元素,可以附加 IP 地址限制、强制 MFA、时段限制、基于标签的访问控制等条件。以下是强制要求 MFA 的 IAM 策略示例。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
      "BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}
    }
  }]
}

IAM Access Analyzer 会自动检测与外部实体共享的资源,并识别出非预期的访问权限。此外,Access Analyzer 的策略生成功能会根据 CloudTrail 的活动日志自动生成最小权限的策略,帮助削减过多的权限。

IAM 角色与跨账户访问

IAM 角色是使用临时安全凭证委托访问权限的机制,可以避免使用长期的访问密钥。为 EC2 实例配置文件、Lambda 执行角色、ECS 任务角色等 AWS 服务分配角色后,就不必在应用程序的代码中嵌入访问密钥。在跨账户访问中,通过设置信任策略允许来自其他 AWS 账户的角色代入(AssumeRole),在多账户环境中共享资源。与 AWS Organizations 的服务控制策略(SCP)结合使用,可以定义整个组织的访问边界,并设置各个账户的 IAM 策略无法超越的防护栏。使用会话策略,还可以在代入角色时进一步缩小权限。

通过与 Cognito 的集成进行最终用户认证

IAM 负责对 AWS 资源的访问控制,最终用户的认证可以结合 Amazon Cognito。常见的架构是由 Cognito 用户池处理用户的认证(注册、登录、MFA),由 Cognito 身份池向已认证的用户颁发临时的 IAM 凭证。通过这种集成,最终用户在通过 Cognito 认证后,可以按照基于 IAM 角色的权限直接访问 S3、DynamoDB 等 AWS 资源。借助 Cognito 的组功能,可以为每个用户组关联不同的 IAM 角色,按组划分权限。与外部身份提供商(Google、Facebook、SAML、OIDC)的集成由 Cognito 居中协调。

IAM 的费用

IAM 无需额外费用即可使用。用户、组、角色、策略可以在服务配额的范围内创建,调用 IAM 的 API 不收取费用。IAM Identity Center(SSO)也是免费的。IAM Access Analyzer 的外部访问分析器免费,未使用访问分析器为每个角色/用户每月约 0.20 美元(截至 2026 年 8 月)。IAM 是作为安全基础的服务,使用本身不收取费用。

总结

AWS IAM 作为云环境中访问管理的核心,无需额外费用即可提供通过用户、角色、策略进行的细粒度权限控制。基于最小权限原则的策略设计以及通过 IAM Access Analyzer 进行的自动分析,可用于发现并减少过多权限的工作。使用 IAM 角色的临时凭证,可以减少使用长期访问密钥的场景,并可用于跨账户访问和服务之间的集成。与 Cognito 结合使用,可以连贯地管理从最终用户的认证到对 AWS 资源的访问控制的全过程。IAM 是在 AWS 上构建访问管理基础时处于中心位置的服务。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享