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

server/2024/12/26 23:56:20/

背景介绍

相比于传统使用 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)

[ v3_ca ]
basicConstraints        = critical, CA:TRUE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid:always, issuer:always
keyUsage                = critical, cRLSign, digitalSignature, keyCertSign

否则后面签发出来的 CA 证书导入至 Trust Anchor 时会报错:

Incorrect basic constraints for CA certificate.

接下来开始正式的命令:

# 创建 CA 私钥
openssl genrsa -out MyCA.key 4096# 创建 CA certificate, 根据向导提示完成属性的填写
openssl req -new -x509 -days 3650 -key MyCA.key -out MyCA.pem -extensions v3_ca# 创建三方应用的私钥
openssl genrsa -out client.key 4096# 创建三方应用的证书申请配置 CSR 文件
openssl req -new -key client.key -out client.csr# 编辑 CSR 中和 version 3 extension 扩展相关的配置
cat > client.ext<<EOF
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid,issuer
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment
EOF# 创建三方应用的证书
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 一样, 不再赘述.

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["rolesanywhere.amazonaws.com"]},"Action": ["sts:AssumeRole","sts:TagSession","sts:SetSourceIdentity"],"Condition": {"ArnEquals": {"aws:SourceArn": ["arn:aws-cn:rolesanywhere:cn-northwest-1:000000000000:trust-anchor/7163eb88-0000-0000-0000-362346488bee"]}}}]
}

创建 Profile

在这里插入图片描述
起个名字, 选择上面创建好的 Role
在这里插入图片描述
复制 Profile 的 ARN, 后面测试会用到
在这里插入图片描述

测试

下载 aws_signing_helper 命令行工具用于测试 Roles Anywhere

# 注意在刚才创建证书的文件夹中执行测试
wget https://rolesanywhere.amazonaws.com/releases/1.4.0/X86_64/Linux/aws_signing_helperchmod +x aws_signing_helper# 注意替换 Trust anchor, Profile, Role 对应的 ARN
./aws_signing_helper credential-process \--certificate client.pem \--private-key client.key \--trust-anchor-arn arn:aws-cn:rolesanywhere:cn-northwest-1:000000000000:trust-anchor/7163eb88-0000-0000-0000-362346488bee \--profile-arn arn:aws-cn:rolesanywhere:cn-northwest-1:000000000000:profile/620512e9-0000-0000-0000-64949541db28 \--role-arn arn:aws-cn:iam::000000000000:role/Alian-roles-anywhere-role

在这里插入图片描述

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

  • AccessKeyId
  • SecretAccessKey
  • SessionToken
  • Expiration

写入环境变量通过 AWS CLI 测试 STS 身份结果:

export AWS_ACCESS_KEY_ID=AccessKeyId
export AWS_SECRET_ACCESS_KEY=SecretAccessKey
export AWS_SESSION_TOKEN=SessionToken
export AWS_DEFAULT_REGION=cn-northwest-1aws sts get-caller-identity

在这里插入图片描述


http://www.ppmy.cn/server/153460.html

相关文章

Docker 镜像加速访问方案

在数字化时代&#xff0c;Docker以其轻量级和便捷性成为开发者和运维人员的首选容器技术。然而自2023年5月中旬起&#xff0c;Docker Hub 的访问速度较慢或不稳定&#xff0c;这对依赖Docker Hub拉取镜像的用户来说无疑是一个挑战。本文将提供 Docker Hub 访问的一系列替代方案…

Mimicking-Bench:首个通过模仿大规模人类动作数据学习通用人形机器人场景交互技能的综合基准(具有 11K 对象形状和 23K 人机交互动作)

2024-12-24&#xff0c;由清华大学、Galbot、上海启智研究所和上海人工智能实验室联合创建了Mimicking-Bench数据集&#xff0c;这个数据集首次为通过模仿人类动作学习通用人形机器人场景交互技能提供了大规模的参考&#xff0c;对于机器人学和现实世界应用具有重要意义。 一、…

【ORB-SLAM3:相机针孔模型和相机K8模型】

在ORB-SLAM3中&#xff0c;相机的建模是 SLAM 系统的核心之一&#xff0c;因为它直接影响到如何处理和利用图像数据进行定位和地图构建。ORB-SLAM3 支持不同的相机模型&#xff0c;其中包括针孔模型和鱼眼模型&#xff08;K8 模型&#xff09;。下面分别介绍这两种模型。 相机…

STM32F407 | Embedded IDE02 - 调试、断点、观察全局变量(支持JLINK、STLINK、DAPLINK)

导言 继续使用安富莱的开发板。 在vscode上实现程序的调试、打断点、观察全局变量确实要折腾一番。有一些开发者跳过了这个功能&#xff0c;使用串口打印log来调试程序。但是&#xff0c;我认为打断点&#xff0c;观察全局变量还是很有效的调试手段&#xff0c;不能放弃。所以&…

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器&#xff0c;在本地电脑中cmd使用该命令&#xff1a; scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中&#xff0c;C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径&#xff0c; ~/en…

【每日学点鸿蒙知识】私仓搭建、resources创建文件夹、hvigor如何动态设置版本、SM3摘要算法、SP存储报错等

【每日学点鸿蒙知识】私仓搭建、resources创建文件夹、hvigor如何动态设置版本、SM3摘要算法、SP存储报错等 1、OH私仓如何创建&#xff1f; 可以参照以下文档来搭建OH私仓&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-ohpm-repo-quic…

基于Spring Boot的网络购物商城的设计与实现

目录 摘 要&#xff1a;I Abstract&#xff1a;II 第1章 系统分析1 1.1 系统概述1 1.2 系统可行性分析1 1.2.1 技术可行性分析1 1.2.2 经济可行性分析1 1.2.3 社会可行性分析1 1.3 需求分析2 1.2.1 业务角色分析2 1.2.2 用例分析3 第2章 系统设计4 2.1 功能模块设…

C++ STL vector基本原理和用法

文章目录 基本原理1. 数据存储结构2. 内存管理机制3. 迭代器实现原理4. 元素访问原理5. 插入和删除元素原理 常见用法1. 概述2. 包含头文件3. 定义和初始化4. 常用成员函数5. 迭代器6. 内存管理与性能特点7. 应用场景 基本原理 以下是关于 std::vector 的基本原理讲解&#xf…