AWS IAM Roles Anywhere 使用 OpenSSL 自签 CA 过程

锦通  金牌会员 | 2024-12-23 15:03:36 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 826|帖子 826|积分 2478

配景先容

相比于传统使用 AK/SK 在第三方应用中访问 AWS 资源的认证方式, IAM Roles Anywhere 使用证书认证的方式为应用生成临时的身份凭证, 可以有用避免 AK/SK 不测泄漏造成的安全隐患. AWS IAM Roles Anywhere 官方先容
工作流程表现

主要涉及到的几个概念


  • Private CA: 可以使用 Amazon Private CA 托管服务 (注: 这个是收费服务, 且价格不菲), 也可以在本地通过 OpenSSL 大概其他证书管理工具自行管理.
  • CA Cert: CA 证书.
  • Client Cert: 通过 Private CA 给第三方程序签发的应用证书
  • Trust Anchor: IAM Roles Anywhere 中的配置项, 用于建立 CA 和关联的 IAM Role 之间信托关系.
  • IAM Role: 尺度的 IAM 脚色, 给第三方应用 Assume 用. 需要注意 Role 的 Trust relationship 需要信托 rolesanywhere.amazonaws.com, 详细 Policy 见后面完备内容.
  • Profile: 在配置中界说第三方应用可以 Assume 的 IAM Role.
  • Get Secrets: 从 IAM Roles Anywhere 获取临时凭证的过程, 效果将包含:

    • AccessKeyId
    • SecretAccessKey
    • SessionToken
    • Expiration

配置过程

下面我们将在 Linux 环境中使用 openssl 工具进行证书的相关签发操作.
创建 Certificate Authority (CA)

IAM Roles Anywhere 对 CA 证书的格式有严酷的要求. 在开始详细命令之前, 需要首先检查确认当前系统 OpenSSL 配置文件 /etc/ssl/openssl.cnf 中 [v3_ca] 部门配置应当和下面一致 (关键是keyUsage)
  1. [ v3_ca ]
  2. basicConstraints        = critical, CA:TRUE
  3. subjectKeyIdentifier    = hash
  4. authorityKeyIdentifier  = keyid:always, issuer:always
  5. keyUsage                = critical, cRLSign, digitalSignature, keyCertSign
复制代码
否则后面签发出来的 CA 证书导入至 Trust Anchor 时会报错:
   Incorrect basic constraints for CA certificate.
  接下来开始正式的命令:
  1. # 创建 CA 私钥
  2. openssl genrsa -out MyCA.key 4096
  3. # 创建 CA certificate, 根据向导提示完成属性的填写
  4. openssl req -new -x509 -days 3650 -key MyCA.key -out MyCA.pem -extensions v3_ca
  5. # 创建三方应用的私钥
  6. openssl genrsa -out client.key 4096
  7. # 创建三方应用的证书申请配置 CSR 文件
  8. openssl req -new -key client.key -out client.csr
  9. # 编辑 CSR 中和 version 3 extension 扩展相关的配置
  10. cat > client.ext<<EOF
  11. basicConstraints = CA:FALSE
  12. authorityKeyIdentifier = keyid,issuer
  13. keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment
  14. EOF
  15. # 创建三方应用的证书
  16. openssl x509 -req -in client.csr -CA MyCA.pem -CAkey MyCA.key -CAcreateserial -out client.pem -days 3650 -sha256 -extfile client.ext
复制代码
最终获得以下文件:
文件名说明MyCA.keyCA 私钥MyCA.pemCA 证书MyCA.srlCA 证书的序列号client.csr三方应用的证书申请 (Certificate Signing Request)client.ext三方应用证书 Version 3 的扩展配置client.key三方应用证书的私钥client.pem三方应用的证书 创建 Trust Anchor

访问 IAM 控制台 > Roles, 在页面底部找到 Roles Anywhere > Manage

Create a trust anchor

选择 External certificate bundle, 粘贴 MyCA.pem 中的内容


复制 Trust anchor 的 ARN, 后面写 Trust policy 会用到.

创建 Role

主要留意 Trust policy, Condition 中粘贴上面复制的 Trust anchor 的 ARN, 其他环节与创建普通 Role 一样, 不再赘述.
  1. {
  2.     "Version": "2012-10-17",
  3.     "Statement": [
  4.         {
  5.             "Effect": "Allow",
  6.             "Principal": {
  7.                 "Service": [
  8.                     "rolesanywhere.amazonaws.com"
  9.                 ]
  10.             },
  11.             "Action": [
  12.               "sts:AssumeRole",
  13.               "sts:TagSession",
  14.               "sts:SetSourceIdentity"
  15.             ],
  16.             "Condition": {
  17.               "ArnEquals": {
  18.                 "aws:SourceArn": [
  19.                   "arn:aws-cn:rolesanywhere:cn-northwest-1:000000000000:trust-anchor/7163eb88-0000-0000-0000-362346488bee"
  20.                 ]
  21.               }
  22.             }
  23.         }
  24.     ]
  25. }
复制代码
创建 Profile


起个名字, 选择上面创建好的 Role

复制 Profile 的 ARN, 后面测试会用到

测试

下载 aws_signing_helper 命令行工具用于测试 Roles Anywhere
  1. # 注意在刚才创建证书的文件夹中执行测试
  2. wget https://rolesanywhere.amazonaws.com/releases/1.4.0/X86_64/Linux/aws_signing_helper
  3. chmod +x aws_signing_helper
  4. # 注意替换 Trust anchor, Profile, Role 对应的 ARN
  5. ./aws_signing_helper credential-process \
  6.       --certificate client.pem \
  7.       --private-key client.key \
  8.       --trust-anchor-arn arn:aws-cn:rolesanywhere:cn-northwest-1:000000000000:trust-anchor/7163eb88-0000-0000-0000-362346488bee \
  9.       --profile-arn arn:aws-cn:rolesanywhere:cn-northwest-1:000000000000:profile/620512e9-0000-0000-0000-64949541db28 \
  10.       --role-arn arn:aws-cn:iam::000000000000:role/Alian-roles-anywhere-role
复制代码

确认输出效果中能够看到对应的以下信息表明成功:


  • AccessKeyId
  • SecretAccessKey
  • SessionToken
  • Expiration
写入环境变量通过 AWS CLI 测试 STS 身份效果:
  1. export AWS_ACCESS_KEY_ID=AccessKeyId
  2. export AWS_SECRET_ACCESS_KEY=SecretAccessKey
  3. export AWS_SESSION_TOKEN=SessionToken
  4. export AWS_DEFAULT_REGION=cn-northwest-1
  5. aws sts get-caller-identity
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表