本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用私 AWS IAM Roles Anywhere 有证书进行保护
Barnali Singh,亚马逊 Web Services
Summary
此模式演示了如何实现 w AWS IAM Roles Anywhere ith AWS 私有证书颁发机构 (AWS 私有 CA),以便为访问 AWS 资源的外部工作负载启用安全的基于证书的身份验证。该解决方案通过使用 X.509 证书获取临时 AWS 证书,无需长期访问密钥。这是一种云原生安全模式,包括通过 AWS CloudFormation 模板和 shell 脚本实现完全自动化,使组织能够为本地应用程序、 CI/CD 管道和外部系统快速部署安全的混合身份验证。
先决条件和限制
先决条件
对于AWS基础架构部署:
AWS CLI 已安装并配置了管理权限
IAM IAM Roles Anywhere、和 AWS 私有 CA 服务的管理权限
对于客户机系统设置:
AWS CLI使用以下权限安装在客户端系统上:
acm-pca:IssueCertificateacm-pca:GetCertificate
安装在客户端系统上的 OpenSSL
AWS 每个客户端系统上都安装了签名助手
对 X.509 证书和 PKI 概念的基本理解
注意
CloudFormation 模板会自动处理 AWS 资源创建。只有使用证书访问 AWS 资源的外部系统才需要 OpenSSL。
限制
根 CA 的证书有效期限制为最长 10 年
定期轮换客户证书。我们建议您每年至少这样做一次。
区域限制:信任锚点且 AWS 私有 CA 必须位于同一 AWS 区域
最大证书大小:客户端证书为 16KB
产品版本
AWS CLI 版本 2.0 或更高版本
OpenSSL 1.1.1 或更高版本
AWS 签名助手 1.4.0 或更高版本
AWS 私有 CA,当前版本
IAM Roles Anywhere e,当前版本
架构
目标技术堆栈
• AWS 私有 CA -用于颁发证书的根 CA
• IAM Roles Anywhere - Certificate-based 角色扮演服务
• IAM 角色和策略-访问控制和权限
• AWS 签名助手- Client-side 凭证检索工具
• OpenSSL-证书和密钥生成
• CloudFormation -基础设施自动化
目标架构

图 1 基于 IAM Roles Anywhere证书的身份验证
该架构包括:
出示证书-外部系统向 X.509 AWS
身份验证- IAM Roles Anywhere 接收证书并启动身份验证
验证-Trust Anchor 根据受信任的证书颁发机构验证证书
验证- AWS 私有 CA 验证证书的真实性和状态
证书有效- AWS 私有 CA 确认证书有效且可信
代入角色- IAM Roles Anywhere 允许外部系统代入已配置的 IAM 角色
授予访问权限-外部系统会收到访问 AWS资源的临时证书
自动化和扩展
这种模式包括通过以下方式实现完全自动化:
• 具有可配置的 IAM 权限的 AWS 资源配置 CloudFormation 模板
• 用于证书生成和客户端设置的 Shell 脚本
• 多个环境的参数化配置和自定义 IAM 策略
• 为多个客户机生成批量证书
• 自动安装和配置凭证助手
Workflow (工作流程)
使用建立基于证书的身份验证所需的基础 AWS 服务。 IAM Roles Anywhere
创建和配置用于安全 AWS 访问的客户端证书和身份验证工具。
验证基于证书的身份验证功能,并对正在进行的操作进行监控。
工具
• CloudFormation -自动创建 PCA、信任锚点、IAM 角色和个人资料
• AWS CLI - AWS 服务交互 Command-line 接口
• openSSL-生成证书签名请求并管理证书
• AWS 签名助手-用证书交换临时 AWS 证书
• Bash/shell 脚本-自动完成设置过程
代码存储库
最佳实践
使用最小权限原则配置 IAM 策略
--iam-policies parameter定期轮换客户证书。我们建议您每年都这样做。
在信任策略中使用强大的证书验证
实施证书吊销程序
监控证书到期日期
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
部署CloudFormation基础架构 | 创建并部署预置所有必要 AWS 资源的 CloudFormation 模板,包括 AWS 私有 CA Trust Anchor、具有适当策略的 IAM 角色和 IAM Roles Anywhere 配置文件。 为项目命名、证书有效期、会话持续时间和 IAM 策略附件配置参数,以建立核心基础设施基础。 | 云架构师、 DevOps 工程师 |
配置证书颁发机构设置 | AWS 私有 CA 通过安装根证书、配置证书模板和建立证书信任链来初始化。设置认证所需的证书有效期、密钥算法和证书扩展名,以确保正确的 IAM Roles Anywhere PKI 基础架构。 | AWS 管理员、云管理员 |
验证 &AWS; 资源配置 | 对所有已部署的 AWS资源进行全面验证,以确保正确的配置和连接。验证 Trust Anchor 是否正确关联到 AWS 私有 CA,IAM 角色具有适当的权限,配置文件配置正确,并且基于证书的身份验证工作流程的所有资源都处于 active/ready 状态。 | AWS 系统管理员、测试工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
准备客户端环境 | 通过使部署脚本可执行并确保适当的权限来设置客户端环境。使用必要的工具和依赖关系配置本地系统,验证脚本的可访问性,并为证书生成和部署过程奠定基础。 | DevOps 工程师,AWS 系统管理员 |
生成证书签名请求 | 使用 OpenSSL 或等效工具为客户端系统创建证书签名请求 (CSR)。配置证书参数,包括主题信息、密钥算法和证书扩展。 确保 CSR 符合 AWS 私有 CA 要求并包含用于 IAM Roles Anywhere 身份验证的相应元数据。 | 云管理员、 DevOps 工程师 |
通过以下方式颁发客户证书 AWS 私有 CA | 处理 CSR AWS 私有 CA 以颁发有效的客户证书。配置证书有效期、证书模板,并确保建立正确的证书链。验证证书颁发并下载已签名的证书以进行客户端部署。 | AWS 管理员、云架构师 |
| Task | 说明 | 所需技能 |
|---|---|---|
获取临时 AWS 证书 | 执行凭证帮助脚本,使用配置的客户端AWS 证书和私钥检索临时证书。验证凭证检索流程是否正常运行,验证凭证格式和到期时间,并确保与 IAM Roles Anywhere 服务正确集成,实现无缝身份验证工作流程。 | DevOps 工程师,AWS 系统管理员 |
测试 AWS 资源访问权限 | 使用获得的临时证书对 AWS 资源访问进行全面测试。执行各种 AWS CLI 命令和 API 调用,以验证与 Amazon S3、Amazon EC2 和等目标服务的连接 AWS Lambda。 验证权限是否与配置的 IAM 角色策略一致,并记录成功的访问模式。 | 测试工程师、云端管理员 |
验证角色假设和权限 | 对 IAM 角色担任流程和权限界限进行全面验证。测试允许和受限的操作,以确认最低权限访问权限是否得到正确执行。验证会话持续时间限制、凭据刷新机制,并确保角色假设遵循安全最佳实践。 | AWS 管理员、测试工程师 |
实施监控和日志记录 | 为基于证书的身份验证系统设置全面的监控和日志记录。为审计跟踪配置 CloudTrail 日志记录,实施证书过期监控,设置身份验证失败警报,并建立仪表板以跟踪整个 IAM Roles Anywhere 基础架构中的使用模式和安全事件。 | DevOps 工程师、云架构师 |
问题排查
| 问题 | 解决方案 |
|---|---|
证书验证失败- 尝试身份验证时出现 “证书验证失败InvalidCertificate” 或 “” 错误。 | 解决步骤: • 使用验证证书的有效日期 openssl x509-in certificate.pem-dates-noout • 检查 Trust Anchor 配置是否指向正确的私有 CA • 确保私钥与证书相对应 • 如果证书是由错误的 CA 颁发的,则重新生成证书 |
IAM 权限被拒绝错误 — 尽管身份验证成功但仍访问 AWS 资源时出现 “拒绝访问” 或 “” UnauthorizedOperation | 解决步骤: • 查看并扩展 IAM 角色策略以包括必要的权限 • 验证信任策略是否将 rolesanywhere.amazonaws.com 列为可信实体 • 检查配置文件 ARN 配置是否与已部署的资源相匹配 • 为长时间运行的进程实施凭证刷新机制 |
相关资源
附加信息
这种模式非常适合具有混合云架构、在外部 AWS运行的 CI/CD 管道或任何需要安全 AWS 访问的外部系统的组织。与长期访问密钥相比,基于证书的方法提供了更好的安全性,并且可以通过实现集中式证书管理。 AWS 私有 CA
可配置的 IAM 权限 — 该解决方案支持通过以下方式灵活配置 IAM 策略--iam-policies parameter:
默认:
ReadOnlyAccess用于安全的初始部署自定义:为特定用例指定以逗号分隔的策略 ARN。例如
S3ReadOnlyAccessEC2ReadOnlyAccess、或自定义策略。支持多种策略以满足复杂的权限要求。
用法示例:
# Default read-only access ./deploy.sh # S3-only access ./deploy.sh --iam-policies "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess" # Multiple services ./deploy.sh --iam-policies "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"