九思学舍 - Jason Zhang
type: channel
link: http://www.asfor.cn/author/1/
description: Jason Zhang
items: SL/TLS 证书原理与部署指南
items: SSL证书申请与部署操作文档（DigiCert）
items: RAG 架构解析：如何给大模型“装外挂”
items: 亚马逊云科技｜DynamoDB 基于 Access Pattern 的单表设计与架构权衡
items: Linux ｜ 安装与基础命令（1）
items: 腾讯专有云 ｜ 安全
items: 阿里云 ｜ KMS密钥跨账号共享
items: 亚马逊云科技 ｜ Amazon Q CLI : 零代码基础开发 2048 小游戏
items: 亚马逊云科技 Amazon Bedrock 正式托管 DeepSeek-R1 模型：无服务器架构助力企业生成式 AI 应用
items: AWS | 利用 Lambda 和 Polly 实现文本转语音的实战指南

SL/TLS 证书原理与部署指南
type: item
date: 2026-08-04T01:26:03+08:00
description: 一、SSL/TLS 证书的核心作用在开始操作之前，有必要先理解一个基本问题：我们为什么要使用 HTTPS？HTTP 协议以明文方式传输数据。用户在浏览器中输入网址后，请求在到达服务器之前会经过多个网络节点，其中任何一个节点上的设备都可以截获传输内容——包括密码、信用卡号、聊天记录等敏感信息。HTTPS 要解决的核心问题有两个：机密性：确保通信内容在传输过程中不被第三方窃取或篡改身份认证：确保用户访问的是真实的目标服务器，而非伪装的钓鱼网站SSL/TLS 证书正是同时实现这两个目标的关键基础设施。它并非一个孤立的文件，而是一套加密机制与信任体系的组合。二、非对称加密：证书的底层原理要理解证书的工作原理，首先需要了解非对称加密。传统的加密方式称为对称加密——加密和解密使用同一把密钥。优点是运算速度快，缺点是密钥在传输过程中存在泄露风险。非对称加密则采用不同的思路：生成一对数学上关联的密钥，即公钥和私钥。公钥可以公开发布，私钥则严格保密。用公钥加密的数据，只能用对应的私钥解密。这一特性有效解决了密钥分发的难题：若他人要向您发送加密信息，可用您的公钥加密后传输，只有持有私钥的您能够解密。SSL/TLS 证书的核心构成，就是将网站的公钥与网站的身份信息打包在一起，再由一家受普遍信任的第三方机构（即证书颁发机构，CA）进行数字签名确认。三、TLS 握手：证书的实际应用流程了解理论背景后，我们来看实际通信过程。当浏览器访问一个 HTTPS 网站时，客户端与服务器之间会进行一系列协商，称为 TLS 握手。其主要步骤如下：第一步：客户端向服务器告知自己支持的 TLS 版本及加密算法列表。第二步：服务器从中选择双方均支持的算法，然后将自身的数字证书（包含公钥）发送给客户端。第三步：客户端验证该证书——是否由可信 CA 签发、是否在有效期内、证书中的域名与当前访问的域名是否一致。全部验证通过后，客户端才认可该服务器的身份。第四步：客户端生成一个随机的“会话密钥”，用服务器证书中的公钥加密后发送给服务器。第五步：服务器使用自己的私钥解密，获取该会话密钥。至此握手完成，后续通信均使用该会话密钥进行对称加密，以确保传输效率。这个流程揭示了一个关键事实：公钥与私钥这对非对称密钥仅用于安全交换会话密钥，并不参与实际业务数据的加密。因此，私钥的安全性至关重要——一旦泄露，攻击者可解密握手阶段的会话密钥，进而获取全部通信内容。四、信任链：浏览器如何验证证书的合法性另一个核心问题是：浏览器凭什么信任 CA 签发的证书？答案在于信任链机制。信任链通常包含三个层级：根证书：CA 机构自己的证书，为自签名，预装在操作系统和浏览器中。这是整个信任体系的逻辑起点。中间证书：由根证书签发，用于代理签发终端用户证书。CA 不会直接用根证书签发每一张用户证书——根证书的私钥一旦泄露，整个信任体系将彻底崩溃。因此，CA 使用中间证书作为“代理”进行签名操作。服务器证书：即最终申请到的证书，由中间证书签发，部署在目标服务器上。验证过程是反向追溯的：浏览器收到服务器证书后，发现它由某个中间证书签名；继续验证该中间证书，发现它由某个根证书签名；而根证书已在浏览器信任列表中。信任链建立，证书被认可。这就是为什么从 DigiCert 获取的文件中，除了服务器证书外，还包含一个中间证书文件（如 DigiCertCA.crt）。配置 Nginx 时需要将两者合并（如 fullchain.pem），目的就是让浏览器能够完整走完这条信任链。若只配置服务器证书而缺少中间证书，浏览器将提示证书链不完整。五、内网自签名证书的信任问题上述信任链机制依赖 CA 机构作为可信第三方。但在企业内部网络环境中，许多场景并不适合向公共 CA 申请证书，例如：内部测试环境开发服务器内网管理后台未对外公开的内部系统在这些场景下，企业通常会自行签发证书，即自签名证书。自签名证书的信任链逻辑是：证书由自己的私钥签名，没有上级 CA 背书。因此，浏览器默认不信任这类证书，访问时会提示“您的连接不是私密连接”或类似的安全警告。要让浏览器信任自签名证书，需要手动将证书添加到操作系统的信任证书列表中。不同平台的操作方式如下：Windows双击 .crt 证书文件 → 选择“安装证书” → 存储位置选择“本地计算机” → 选择“将所有证书放入下列存储” → 浏览选择“受信任的根证书颁发机构” → 完成。macOS双击 .crt 证书文件 → 钥匙串访问程序会自动打开 → 将证书拖入“系统”钥匙串 → 双击证书 → 展开“信任” → 将“SSL”设置为“始终信任”。Linux（以 Ubuntu/Debian 为例）sudo cp your-cert.crt /usr/local/share/ca-certificates/ sudo u…

SSL证书申请与部署操作文档（DigiCert）
type: item
date: 2026-08-04T01:01:00+08:00
description: SSL证书申请与部署操作文档（DigiCert）说明：本文档中所有域名、公司名称、IP地址均为示例，实际使用时请替换为真实信息。一、生成私钥与CSR1. 生成私钥（KEY）openssl genrsa -out playground.example.com.key 2048私钥保管：此文件仅保存在本地，切勿外传，后续部署必须使用同一私钥。2. 生成证书签名请求（CSR）openssl req -new -key playground.example.com.key -out playground.example.com.csr \ -subj "/C=NL/ST=Noord-Holland/L=Amsterdam/O=Example B.V./CN=playground.example.com"字段说明（示例值）：字段含义示例值C国家代码（两位）NLST省份/州Noord-HollandL城市AmsterdamO公司法定名称Example B.V.CN证书绑定的域名playground.example.com请将上述示例值替换为真实信息，尤其是 CN 必须与实际域名完全一致。3. 检查CSR内容（可选）openssl req -in playground.example.com.csr -noout -text确认输出的 Subject 信息与申请内容一致，公钥算法应为 rsaEncryption (2048 bit)。二、提交CSR并获取证书将生成的 playground.example.com.csr 文件内容提交给证书团队，由团队向 DigiCert 发起申请。证书签发后，通常返回以下文件：DigiCertCA.crt # 中间证书 INSTALL_INSTRUCTIONS.en.txt # 安装说明（多语言） playground_example_com.crt # 服务器证书三、处理证书文件（适配Nginx）将服务器证书与中间证书合并，生成 Nginx 所需的完整证书链文件：# 重命名服务器证书（可选） cp playground_example_com.crt server.pem # 重命名中间证书（可选） cp DigiCertCA.crt chain.pem # 合并生成完整证书链（推荐） cat playground_example_com.crt DigiCertCA.crt > fullchain.pem四、Nginx配置与部署1. 修改Nginx配置文件server { listen 443 ssl; server_name playground.example.com; ssl_certificate /path/to/fullchain.pem; # 合并后的完整证书链 ssl_certificate_key /path/to/playground.example.com.key; # 步骤一生成的私钥 # 其余配置... }2. 检查并重载Nginxsudo nginx -t sudo systemctl reload nginx # 或 nginx -s reload五、验证与测试测试环境（修改本地hosts）将测试服务器IP与域名绑定：sudo vim /etc/hosts # 添加： 127.0.0.1 playground.example.com然后浏览器访问 https://playground.example.com，确认证书有效且无安全警告。生产环境DNS解析：在域名服务商处为 playground.example.com 添加A记录或CNAME记录，指向生产服务器公网IP或负载均衡器的域名。SLB负载均衡：若使用云平台SLB，需将证书内容（fullchain.pem）和私钥（playground.example.com.key）上传至SLB证书管理，并绑定443监听端口。六、常见命令校验私钥与证书是否匹配openssl x509 -noout -modulus -in playground_example_com.crt | openssl md5 openssl rsa -noout -modulus -in playground.example.com.key | openssl md5两行输出结果完全一致即表示配对正确。

RAG 架构解析：如何给大模型“装外挂”
type: item
date: 2026-01-22T14:48:00+08:00
description: 摘要：在企业级应用中，直接问 ChatGPT 往往得不到准确答案，因为模型不知道你的私有数据。RAG（Retrieval-Augmented Generation，检索增强生成）是目前解决这一问题的标准架构。本文不谈数学公式，只从数据流的角度，拆解 RAG 是如何运作的。1. 为什么需要 RAG？大语言模型（LLM）有两个核心缺陷：知识截止：模型训练完那一刻，它的知识就定格了。它不知道今天发生的新闻。数据隐私：它不知道你公司的内部文档、合同或代码库。要解决这个问题，有两种思路：Fine-tuning（微调）：把你的数据喂给模型重新训练。这就像送模型去“进修”。成本极高，且更新数据很麻烦。RAG（检索增强）：不改变模型本身，而是在提问前，先去你的数据库里查资料，把查到的资料作为“参考答案”喂给模型。这就像“开卷考试”。RAG 是目前性价比最高、落地最快的方案。2. 核心流程：三步走RAG 的本质不是 AI 技术，而是搜索技术 + 生成技术的组合。第一步：数据入库（Indexing）在大模型介入之前，我们需要先把私有数据（PDF、Word、Wiki）整理好。切片（Chunking）：大模型一次能读的字数有限（Context Window）。我们不能把整本书塞进去，必须把文本切成小块（比如每 500 字一块）。向量化（Embedding）：这是最关键的一步。计算机不认识文字，只认识数字。我们需要用一个模型（Embedding Model）把每一段文字变成一串长长的数字数组（向量）。特点：意思相近的句子，转化出的数字也相近。说明: 用于展示“向量空间”概念，表现文字如何转化为空间中的坐标点。存入向量数据库（Vector DB）：把这些数组存起来，方便以后快速查找。第二步：检索（Retrieval）当用户提问时：用户的问题也被转化成向量。系统拿着这个“问题向量”，去数据库里找跟它最相似的“文档向量”。系统找出最相似的 Top 3 或 Top 5 个片段。第三步：生成（Generation）这是大模型真正发挥作用的时候。我们将“用户的提问”和“找到的片段”拼凑成一个新的 Prompt（提示词）：系统提示词：你是一个助手。请仅根据以下背景信息回答用户问题，不要编造。背景信息：[这里填入刚才检索到的 Top 5 片段]用户问题：[用户的原始问题]大模型阅读这些背景信息，然后用通顺的语言总结出答案。说明: 展示 RAG 的完整数据流：文档 -> 向量库 -> 大脑（LLM）。3. RAG 的技术难点看起来很简单，但在实际开发中，有几个坑：3.1 切片的艺术切多大？太小：句子支离破碎，模型看不懂上下文。太大：包含太多无关信息，干扰模型判断，且容易撑爆上下文窗口。解决：通常采用“滑动窗口”，比如 500 字一片，每片之间重叠 100 字，保证句子完整性。3.2 语义搜索的局限向量搜索是基于“语义”的，但有时候它不够精准。用户搜“苹果财报”，可能搜出水果苹果的种植技术，也可能搜出苹果公司的财务数据。解决：混合检索（Hybrid Search）。同时使用“关键词搜索”（像百度那样匹配字面）和“向量搜索”（匹配含义），然后加权算分。4. 实战落地：基于 AWS 的云原生架构在生产环境中，我们极少从零手写 Python 脚本来管理这些流程，而是使用云服务来保证高可用和安全性。以下是 AWS 平台上的标准组件映射：说明: 标准的 AWS 架构图风格，展示 S3、OpenSearch 和 Bedrock 的连接关系。4.1 核心组件映射模型层 (The Brain): Amazon Bedrock 是一个 Serverless API 服务。你不需要管理 GPU 服务器，直接通过 API 调用 Claude 3、Llama 3 或 Amazon Titan 模型。优势：数据不出境，符合企业合规（数据不会被用于训练模型）。向量存储 (The Memory): Amazon OpenSearch Serverless (Vector Engine): 专业的向量检索引擎，支持高并发和混合检索（关键词+向量）。Amazon Aurora PostgreSQL (pgvector): 如果你的业务数据本身就在 PG 数据库里，直接装个 pgvector 插件是最简单的方案，无需维护新的数据库。4.2 两种架构模式模式 A：全托管模式 (Knowledge Bases for Amazon Bedrock)这是 AWS 的“一键 RAG”方案，你只需要把 PDF 扔进 S3 Bucket。在 Bedrock 控制台勾选“创建知识库”，AWS 自动 帮你完成切片、Embedding、入库 OpenSearch 的全过程，适用于快速验证、文档问答类应用。模式 B：自定义流水…

亚马逊云科技｜DynamoDB 基于 Access Pattern 的单表设计与架构权衡
type: item
date: 2025-12-23T12:52:00+08:00
description: 摘要：DynamoDB 的设计哲学与传统 RDBMS 存在根本性断裂。它以牺牲查询灵活性为代价，换取了理论上无限的水平扩展能力和可预测的低延迟。本文将剥离营销术语，从底层存储原理出发，探讨 Single Table Design（单表设计）的必要性、GSI 的写放大风险以及热点分区的本质解法。1. 范式转换：从“存储优先”到“访问优先”在 RDBMS (MySQL/PostgreSQL) 中，数据建模遵循第三范式 (3NF)。我们优先关注数据的规范化存储，尽量减少数据冗余。业务逻辑的变化通常通过修改 SQL (JOIN, WHERE) 来适应。DynamoDB 是基于 B-tree 和 Consistent Hashing (一致性哈希) 构建的分布式 Key-Value 存储。其核心约束在于：计算层不负责复杂的数据聚合。这意味着，架构师必须在编码之前完成Access Pattern (访问模式) 的穷举。DynamoDB 实际上要求开发者手动维护视图（Materialized Views）。在 DynamoDB 中，Schema Design 就是 Query Design。2. 单表设计 (Single Table Design) 的底层逻辑AWS 官方推崇的 Single Table Design 并非一种“技巧”，而是基于其底层分片机制的I/O 优化策略。2.1 Item Collections 与数据局部性DynamoDB 的核心优势在于 Partition Key (PK) 决定了数据的物理落盘位置。具有相同 PK 的所有数据项（Items）会存储在物理相邻的块中，构成一个 Item Collection。说明: 用于对比 RDBMS 的随机寻址（慢）与 DynamoDB 的顺序读取（快）。RDBMS做法：SELECT FROM Orders WHERE UserID = 'X' 和 SELECT FROM Profile WHERE UserID = 'X' 可能涉及多次磁盘寻址和随机 I/O，如果是 JOIN 操作，还涉及大量的 CPU 消耗和内存页交换。DynamoDB做法：通过重载 (Overloading) PK 和 SK，将异构数据（User Profile 和 Orders）写入同一个 Partition。Query 操作指定 PK=USER#123。存储引擎执行一次顺序读取，即可获取该用户的所有相关数据。架构收益：消除了网络 RTT (Round Trip Time) 的开销，将 N 次查询合并为 1 次。2.2 实体重载示例Partition Key (PK)Sort Key (SK)Data PayloadEntity TypeUSER#101PROFILE{ "email": "..." }User EntityUSER#101ORDER#2023-01{ "amt": 50 }Order EntityUSER#101ORDER#2023-02{ "amt": 120 }Order Entity通过这种设计，应用层获取特定用户及其最近订单的时间复杂度不仅是 O(1)，而且是物理层面的一次连续 I/O。3. 全局二级索引 (GSI) 的成本模型GSI (Global Secondary Index) 是 DynamoDB 灵活性的一扇后门，但其代价常被低估。3.1 异步复制与最终一致性GSI 本质上是 AWS 在后台维护的另一张影子表。当基表 (Base Table) 发生写入时，DynamoDB Stream 会异步地将数据投影到 GSI 中。这意味着 GSI 只能提供最终一致性 (Eventual Consistency)，无法用于强一致性要求的读取场景（如库存扣减）。说明: 展示基表到 GSI 的异步数据流和“影子”特性。3.2 写放大 (Write Amplification)这是 FinOps 经常忽略的成本黑洞。如果你的一行数据写入大小为 1KB。该表拥有 3 个 GSI，且该次写入涉及所有 GSI 的 Key 更新。实际消耗 = 基表写入 (1 WCU) + GSI-A 写入 (1 WCU) + GSI-B 写入 (1 WCU) + GSI-C 写入 (1 WCU) = 4 WCU。架构警示：在写密集型 (Write-Heavy) 的业务中，滥用 GSI 会导致吞吐成本线性甚至指数级增长。对于多维查询需求，应评估是否引入 OpenSearch 而非强行使用 GSI。4. 分区热点 (Hot Partition) 与 ThrottlingDynamoDB 宣称的“无限扩展”有一个前提：流量在 Partition 之间是均匀分布的。4.1 令牌桶算法与物理分片假设你配置了 10,000…

Linux ｜ 安装与基础命令（1）
type: item
date: 2025-07-04T17:26:00+08:00
description: 一、RHEL 9.3 安装过程1. 安装源选择作用与选择： 决定系统软件包的获取方式。通常选择本地ISO镜像进行离线安装，或在需要最新软件包或批量部署时选择网络源（HTTP/HTTPS/FTP/NFS）。2. 软件选择"带GUI的服务器" (Server with GUI)：作用与选择： 安装桌面环境，提供图形化操作界面，适合新手、测试环境或需直接图形化管理的服务器。"最小安装" (Minimal Install)：作用与选择： 仅安装核心组件，资源占用最少，安全攻击面小，适合生产服务器、虚拟化宿主机或追求极致性能和安全性的场景。其他选项： 根据具体应用场景和需求灵活选择。3. 安装目标（分区）作用与选择： 规划硬盘空间，分配文件系统类型和挂载点。自动分区： 安装程序按推荐方案自动划分，适合新手或无特殊要求的情况。手动分区 (Custom)： 允许精细控制分区大小和类型，适合生产环境、对性能和数据安全有高要求，或多块硬盘的场景。常见手动分区及其作用与建议大小：/boot： 存放系统启动文件（内核、GRUB等），确保系统正常引导。建议 1GB 左右。/ (根分区)： 存放操作系统核心文件和大部分程序数据，是整个文件系统的根。建议 50GB - 200GB+，依安装软件和数据量而定。swap (交换分区)： 作为虚拟内存使用，在物理内存不足时提供缓冲，防止系统崩溃。建议为物理内存的 1-2倍，大内存系统可适当减小至 4GB - 8GB。/home (可选)： 存放用户个人数据和配置文件，便于备份与系统分离。可分配剩余硬盘空间。/var (可选)： 存放经常变化的数据（日志、邮件、Web数据等），建议单独分区以防日志撑满根分区。4. 网络和主机名作用与选择： 配置系统在网络中的身份和连接方式。主机名： 指定系统在网络中的唯一名称。网络连接：DHCP（自动连接）： 自动获取IP等配置，方便快捷，适合家用或测试环境。静态IP（手动指定）： 配置固定IP地址、网关、DNS，适合生产服务器等需稳定可访问IP的场景。5. 时区设置作用与选择： 确保系统时间与所在地区一致，对日志和程序调度至关重要。根据实际地理位置选择即可。6. ROOT 密码与用户创建ROOT 密码： 设置系统最高权限用户root的密码。务必设置复杂密码并妥善保管，因为root拥有系统所有权限。用户创建： 创建普通用户账户。日常操作应使用普通用户，通过sudo提权，以提高系统安全性，避免误操作。7. Kdump作用与选择： 内核崩溃时捕获内存快照用于故障分析。生产环境建议启用，有助于排查系统崩溃原因，但会占用部分物理内存；资源受限或非关键环境可禁用以节省内存。二、文件与目录管理1. 文件与目录类型empty： 文件内容为空。ASCII text： 文件包含可读的、基于 ASCII 编码的文本内容。目录（Directory）： 用于组织文件和子目录的特殊文件。2. 路径概念绝对路径： 从根目录 / 开始的完整路径，无论当前位置如何，都能准确指向目标。示例： cd /etc/相对路径： 从当前工作目录开始的路径，其含义取决于当前所在位置。示例：cd etc：进入当前目录下的etc子目录。cd ..：切换到上一级目录。cd .：表示当前目录。3. 核心命令 (常用选项)pwd (Print Working Directory)： 显示当前所在目录的绝对路径。常用： pwdls (List)： 列出目录内容。ls -l：显示文件或目录的详细信息（权限、拥有者、大小、时间等）。ls -a：显示包括隐藏文件（以 . 开头）在内的所有文件。ls -h：以人类可读的方式显示文件大小（如 4.0K, 1.2M）。ls -ld <directory>：显示目录本身的详细属性，而非其内容。cd (Change Directory)： 切换工作目录。cd <directory_path>：切换到指定目录。cd ~：切换到当前用户的家目录。cd ~<username>：切换到指定用户的家目录。cd -：切换到上一次所在的目录。touch：touch <filename>：创建空文件或更新文件时间戳。touch -a <filename>：只更新文件的访问时间。touch -m <filename>：只更新文件的修改时间。mkdir (Make Directory)： 创建目录。mkdir -p <path>：递归创建目录，若父目录不存在则一并创建。mkdir -v <directory>：显示创建目录的详细过程。cp (Copy)： 拷贝文件或目录。cp <destination>：拷贝文件。cp -r <source_dir> <destination_dir>：递归拷贝目录及其内容。cp -p <…

腾讯专有云 ｜ 安全
type: item
date: 2025-07-01T16:39:00+08:00
description: 解压：unzip -o run_poc.zip执行:1. suricata直接触发告警：# 默认执行 python run_poc.py # 大部分用例fail时, 如下执行看结果（rules文件是测试环境验证的入侵检测规则库） python run_poc.py -r suricata.rules 使用说明usagewarning: unexcept args: ['-h'] usage: python run_poc.py python run_poc.py -r suricata.rules -t default python run_poc.py -t ioc,http python run_poc.py -r suricata.rules -r, --rules : suricata's rules file -t, --tags : **internal tag**: "default", "all", multi-tags split with "," **隐藏说明** 单独执行具体pcap: python run_poc_ex.py -r suricata.rules -t ids --pcap alert_trojan_udp.pcap执行效果批量默认[root@isa4 v2]# python run_poc_ex.py -r suricata.rules -t ids rules: 'suricata.rules', tags: ids [+]pcap:alert_VulAttack_LateralPenetration_Attempt_openssl_heartbleed.pcap, result:pass [+]pcap:alert_VulAttack_LateralPenetration_Success_openssl_heartbleed.pcap, result:pass [+]pcap:alert_VulAttack_LateralPenetration_Attempt_php_longflow.pcap, result:pass [+]pcap:alert_VulAttack_LateralPenetration_Fail_phpunit.pcap, result:pass [+]pcap:alert_WebAttack_LateralPenetration_Attempt_http-post-webshell-php-404.pcap, result:pass [+]pcap:alert_WebAttack_NetworkIntrusion_Attempt_cve-2012-1823_phpcgi.pcap, result:pass [+]pcap:alert_mysql_load_file.pcap, result:pass [+]pcap:alert_ransonware_udp.pcap, result:pass [+]pcap:alert_trojan_udp.pcap, result:pass [+]pcap:alert_backdoor_134echo.pcap, result:pass END: the detail log see:/home/test/poc/v2/tmp.log单个执行[root@isa4 v2]# python run_poc_ex.py -r suricata.rules -t ids --pcap alert_trojan_udp.pcap notice: only run pcap: alert_trojan_udp.pcap rules: 'suricata.rules', tags: ids [+] pcap:alert_trojan_udp.pcap, result:pass2. tcpreplay 触发告警：pcap 目录：pcaps/tcpreplay预置条件：1.额外一台服务器，简称G 或者 PC，安装CentosOS 7.x系统 和tcpreplay工具。2.Web端，系统设置-数据接入-流量探针配置，内网网段：192.168.0.0/16,10.0.0.0/8,172.16.0.0/123.探针监控网口 直连 服务器G的流量回放网口，代号em100（具体看实际网卡名称 ifconfig, ip address等）执行操作：1. tcpreplay -i em1 -K -M 10 --duration=30 --loop=0 --unique-ip alert_Scanports_InternalDetection_Attempt_nmap_sS.pcap 2. tcpreplay -i em1 -K --loop=0 --uniq…

阿里云 ｜ KMS密钥跨账号共享
type: item
date: 2025-06-19T11:08:00+08:00
description: 一、引言在当今数字化时代，企业多账号协同的场景愈发普遍，阿里云KMS密钥跨账号共享成为保障数据安全与提升管理效率的关键。本文聚焦于Landing Zone（LZ）环境，详细阐述KMS密钥通过RAM授权实现跨账号共享的方法，助力企业高效利用云资源。二、KMS密钥跨账号共享概述2.1 共享的概念在LZ环境下，KMS密钥跨账号共享基于RAM授权展开，无需共享KMS实例。通常，KMS实例部署在Security账号中，作为密钥管理的核心枢纽；而各应用账户则作为资源使用者，通过RAM授权获取特定密钥的使用权限，实现对敏感数据的加密和解密操作 。2.2 共享的优势相较于实例共享，仅通过RAM授权共享KMS密钥，能实现更精细化的权限管控。Security账号可针对不同应用账户的业务需求，灵活分配密钥使用权限，避免权限过度开放带来的安全风险；同时，各应用账户无需单独配置KMS实例，显著降低了资源管理成本和操作复杂度。2.3 适用场景这种共享模式适用于企业内部多部门协作、多项目并行开发等场景。在LZ环境中，不同应用账户负责不同业务板块，如市场推广、客户服务等，通过RAM授权共享Security账号中的KMS密钥，既能保障各业务数据加密需求，又能确保密钥使用的安全性和合规性。三、共享的前提条件3.1 资源目录KMS密钥共享需在资源目录内进行，将Security账号与各应用账户纳入统一资源目录，便于基于组织结构进行权限管理和资源分配，确保密钥共享的有序性。3.2 企业实名认证Security账号与各应用账户必须为同一企业实名认证主体，从源头上保证密钥共享在企业可控范围内，防止外部非法账号获取密钥权限。3.3 KMS实例状态部署在Security账号中的KMS实例需为软件密钥管理实例或硬件密钥管理实例，且状态为已启用，为密钥共享提供稳定可靠的运行环境。3.4 网络访问各应用账户通过专属网关Endpoint或共享网关Endpoint访问Security账号中的KMS密钥，需提前配置好网络连接，确保VPC绑定正确，保证密钥使用过程中的网络畅通与数据传输安全。四、Landing Zone环境下KMS密钥共享操作步骤4.1 准备工作在 LZ 环境中，首要任务是明确 Security 账号作为密钥所有者的核心地位。全面梳理各应用账户的业务需求，依据其业务特性，精准确定需共享的 KMS 密钥以及与之适配的权限范围。同时，在资源目录体系里，精心规划好账号层级关系，为后续开展的授权操作筑牢根基，确保后续操作有序推进。4.2 打开 KMS 服务模块登录 Security 账号，在阿里云控制台页面，通过搜索栏输入 “KMS”，快速定位并点击进入 KMS 服务模块，界面展示如图：点击后正式开启 KMS 服务操作界面。4.3 点击进入密钥管理进入 KMS 服务主界面后，在众多功能选项中，找到并点击 “密钥管理” 按钮，跳转至密钥管理页面，该页面罗列了当前 Security 账号下所有的 KMS 密钥信息，为后续密钥操作提供直观的管理入口，具体界面呈现如下：4.4 进入待共享密钥详细页面在密钥管理页面，逐一检查需共享的 KMS 密钥状态，确保其处于 “启用” 状态。对于符合条件的密钥，点击密钥名称，进入该密钥的详细信息页面，在此页面可对密钥进行更细致的策略设置等操作，相关页面截图可参考4.5 打开密钥策略设置进入密钥详细信息页面后，在页面导航栏中，依次点击 “密钥策略” 选项，随后在展开的子菜单中选择 “设置密钥策略” 功能，从而打开密钥策略编辑窗口，准备进行密钥共享相关的策略配置，操作路径对应的界面展示见4.6 点击添加共享 ARN在密钥策略编辑窗口中，查找并点击 “添加其他账号使用者 ARN” 按钮，此操作将弹出一个输入框，用于填写被共享账号的 ARN 信息，为实现跨账号密钥共享迈出关键一步，对应界面参考4.7 填写共享账号 ARN格式：acs:ram::ID:role/resourcedirectoryaccountaccessrole假设ID为：5100000000则ARN为：acs:ram::5100000000:role/resourcedirectoryaccountaccessrole切换至主账号资源目录控制台，在资源目录结构中，仔细查找目标应用账户对应的账号 ID。例如，在资源目录树形结构中定位到某应用账户节点，获取其账号 ID。将获取到的 ID 按照指定格式 “acs:ram::ID:role/resourcedirectoryaccountaccessrole” 进行拼接，生成完整的 ARN 信息。如获取到的 ID 为 5100000000，生成的 ARN 即为 “acs:ram::5100000000:role/resourcedirectoryacco…

亚马逊云科技 ｜ Amazon Q CLI : 零代码基础开发 2048 小游戏
type: item
date: 2025-06-17T23:46:00+08:00
description: 在低代码、零代码开发盛行的当下，Amazon Q CLI 为开发者提供了全新的开发方式。本次我将以一个编程小白的视角，借助它成功开发出 2048 小游戏，整个过程无需手写任何一行代码，基本可以实现以产品角度雇一个开发工程师来帮忙完成游戏制作。​Amazon Q CLI简介与常见的开发助手不同，Amazon Q CLI 基于 AWS 云计算和机器学习技术，能精准理解自然语言需求。以往使用其他工具，描述需求需反复斟酌，稍不严谨就会生成错误代码。而 Amazon Q CLI 即便面对生活化的需求表述，也能准确把握，还会主动优化细节。其实时反馈机制更是高效，发现问题后，直接在终端反馈，它就能快速定位并修复，且无缝对接 AWS 生态，让功能拓展与数据存储变得轻而易举。​Macos 上安装 Amazon Q CLI​在 MacBook 上安装 Amazon Q CLI 的过程并不复杂，按步骤操作即可：​下载安装包前往Installing Amazon Q for command line，下载适配 MacOS 系统的 Amazon Q 命令行安装包。注册登录与验证下载完成后，双击打开.dmg文件安装到application文件夹。打开安装后的Amazon Q，使用 Builder ID 完成注册登录，并按提示进行身份验证。​环境配置根据安装向导，完成 shell 集成的安装。在此过程中，系统会提示授予 MacOS 辅助功能权限，点击确认即可。权限授予能保障 Q CLI 在终端中顺畅运行，避免因权限不足导致功能受限。​安装完成通过运行q doctor命令，即可验证 Q CLI 环境是否正常工作。​通过运行q或者q chat即可开始对话。jason@MacM4 ~ % q doctor Everything looks good! Amazon Q still not working? Run q issue to let us know! jason@MacM4 ~ % q chat ⢠⣶⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣶⣦⡀⠀ ⠀⠀⠀⣾⡿⢻⣿⡆⠀⠀⠀⢀⣄⡄⢀⣠⣤⣤⡀⢀⣠⣤⣤⡀⠀⠀⢀⣠⣤⣤⣤⣄⠀⠀⢀⣤⣤⣤⣤⣤⣤⡀⠀⠀⣀⣤⣤⣤⣀⠀⠀⠀⢠⣤⡀⣀⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠋⠀⠀⠀⠙⣿⣿⡆ ⠀⠀⣼⣿⠇⠀⣿⣿⡄⠀⠀⢸⣿⣿⠛⠉⠻⣿⣿⠛⠉⠛⣿⣿⠀⠀⠘⠛⠉⠉⠻⣿⣧⠀⠈⠛⠛⠛⣻⣿⡿⠀⢀⣾⣿⠛⠉⠻⣿⣷⡀⠀⢸⣿⡟⠛⠉⢻⣿⣷⠀⠀⠀⠀⠀⠀⣼⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿ ⠀⢰⣿⣿⣤⣤⣼⣿⣷⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⢀⣴⣶⣶⣶⣿⣿⠀⠀⠀⣠⣾⡿⠋⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⡇⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⢹⣿⣇⠀⠀⠀⠀⠀⢸⣿⡿ ⢀⣿⣿⠋⠉⠉⠉⢻⣿⣇⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⣿⣿⡀⠀⣠⣿⣿⠀⢀⣴⣿⣋⣀⣀⣀⡀⠘⣿⣿⣄⣀⣠⣿⣿⠃⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠈⢿⣿⣦⣀⣀⣀⣴⣿⡿⠃ ⠚⠛⠋⠀⠀⠀⠀⠘⠛⠛⠀⠘⠛⠛⠀⠀⠀⠛⠛⠀⠀⠀⠛⠛⠀⠀⠙⠻⠿⠟⠋⠛⠛⠀⠘⠛⠛⠛⠛⠛⠛⠃⠀⠈⠛⠿⠿⠿⠛⠁⠀⠀⠘⠛⠃⠀⠀⠘⠛⠛⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠿⢿⣿⣿⣋⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⢿⡧ ╭─────────────────────────────── Did you know? ────────────────────────────────╮ │ │ │ Use /model to select the model to use for this conversation │ │ │ ╰──────────────────────────────────────────────────────────────────────────────╯ /help all commands • ctrl + j new lines • ctrl + s fuzzy search ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ You are chatting with claude-3.7-sonnet > /quit jason@MacM4 ~ % 安装pygame(可选，借助python游戏包开发更多小游戏)jason@MacM4 ~ % pip3 install pygame Defaulting to user installation because normal site-packages is not writeable Collecting pygame D…

亚马逊云科技 Amazon Bedrock 正式托管 DeepSeek-R1 模型：无服务器架构助力企业生成式 AI 应用
type: item
date: 2025-03-12T15:54:00+08:00
description: 2025年3月11日，亚马逊云科技（AWS）宣布 DeepSeek-R1 大语言模型 以全托管无服务器模式在 Amazon Bedrock 平台上线。该服务为企业提供了低门槛、高安全性的生成式 AI 部署方案，用户无需管理底层基础设施即可直接调用模型能力。DeepSeek-R1 模型特性DeepSeek-R1 由国内人工智能公司深度求索（DeepSeek）开发，具备以下技术特性：• 复杂任务处理：支持数学求解、代码生成、数据分析等高精度推理任务。• 中英文双语支持：适配国际化团队协作场景。• 成本优化：基于公开数据，其推理成本较同类模型降低 90%-95%，同时保持性能领先。Amazon Bedrock 托管服务技术细节通过 Amazon Bedrock 平台，用户可通过无服务器架构调用 DeepSeek-R1，主要技术优势包括：1. 按需付费模式 采用 Token 粒度计费（输入/输出双计量），无预置资源成本，支持从测试到生产的弹性扩展。2. 企业级数据安全 • 默认启用静态加密（AWS KMS）与传输加密（TLS 1.2+）• 通过 IAM 策略实现细粒度权限控制• 用户数据与模型输出不共享给第三方3. 安全防护机制 • Bedrock Guardrails：实时拦截有害内容（暴力、隐私泄露等），过滤敏感词并限制模型幻觉• 模型评估工具：支持自动化评估（准确率、鲁棒性）与人工审核（品牌合规性、内容调性）两种接入方式详解方式一：直接调用托管模型登录 Amazon Bedrock 控制台在 "模型访问" 申请 DeepSeek-R1 使用权限（模型 ID: us.deepseek.r1-v1:0）通过 API 或 AWS SDK 集成，示例代码：import boto3 client = boto3.client("bedrock-runtime", region_name="us-west-2") response = client.converse( modelId="us.deepseek.r1-v1:0", messages=[{"role": "user", "content": [{"text": "解释量子计算的超导量子比特原理。"}]}], inferenceConfig={"maxTokens": 2000} ) print(response["output"]["message"]["content"][0]["text"])方式二：自定义模型导入支持用户上传基于 DeepSeek-R1 微调的轻量化模型，通过 Bedrock 实现全托管运行。该功能已服务数千家企业客户。官方声明与客户价值AWS 生成式 AI 副总裁 Vasi Philomin 表示：“DeepSeek-R1 在成本与性能间实现了显著突破。结合 Bedrock 的安全防护能力，企业可快速构建合规的 AI 应用。”实践指南1. 快速测试 使用 Bedrock 控制台的 Playground 交互界面调试提示词，参考 DeepSeek-R1 示例库 优化效果。2. 配置安全策略 在控制台设置 Guardrails 规则，定义内容过滤策略与隐私保护阈值。3. 监控与评估 利用 Bedrock 的模型监控看板跟踪 API 调用指标，定期执行自动化评估测试。资源信息• 服务区域：美国东部（弗吉尼亚北部、俄亥俄）、美国西部（俄勒冈）• 体验链接: 点击免费体验https://dev.amazoncloud.cn/experience/cloudlab?id=67bc1b7c8ea6eb2ae682bde3&visitfrom=kkkdsyunbozhu&sc_medium=owned&sc_campaign=cloudlab&sc_channel=kkkdsyunbozhu

AWS | 利用 Lambda 和 Polly 实现文本转语音的实战指南
type: item
date: 2024-11-12T23:44:00+08:00
description: 一、实验目的利用 AWS Lambda 和 AWS Polly 服务搭建一个文本转语音转换器，并将生成的语音文件上传至 Amazon S3 存储桶，实现将输入文本转换为语音音频文件并进行存储的功能，深入理解无服务器架构下的语音合成技术及与 S3 服务的集成应用。二、实验要求了解 Amazon Web Services（AWS）的基本概念和使用方法。熟悉无服务器架构，掌握 AWS Lambda 的工作原理和操作流程。对语音合成技术有初步认识，知晓 AWS Polly 的功能和使用场景。掌握 Amazon S3 存储桶的创建、权限设置及文件上传操作。三、实验原理（一）AWS LambdaAWS Lambda 是一种计算服务，允许用户在无需配置或管理服务器的情况下运行代码。它具备自动扩展能力，能根据请求量动态调整资源，用户只需为实际消耗的计算时间付费，代码未运行时不产生费用，极大地降低了开发和运营成本，适用于各种应用程序和后端服务的代码执行。（二）AWS PollyAWS Polly 是一种文本转语音服务，它利用先进的语音合成技术，可将输入的文本转换为逼真的语音。支持多种语言和不同风格的语音，能满足不同场景下的语音合成需求，如为网站、应用程序添加语音功能等。但需注意，不同的 VoiceID（语音 ID）支持不同的语言，在使用时要确保语音 ID 与输入文本的语言相匹配，否则可能生成无效（无声）的 MP3 文件。可参考AWS Polly 可用语音文档来选择合适的语音 ID。（三）Amazon S3Amazon S3（Simple Storage Service）是一种对象存储服务，提供可扩展的存储，用于存储和检索任意数量的数据。在本实验中，将用于存储由 AWS Polly 生成的语音文件。在本实验中，将通过 AWS Lambda 调用 AWS Polly 的 API，实现文本转语音的功能，并将生成的语音文件上传至 Amazon S3 存储桶。四、实验步骤（一）创建Lambda函数登录AWS管理控制台，在搜索框中输入“Lambda”，选择【Lambda】服务进入。在Lambda页面左侧导航栏中点击【函数】，接着点击页面上方的【创建函数】按钮。在“创建函数”页面，选择【从头开始制作】选项。在“基本信息”部分，进行如下配置：函数名称：自定义一个有意义的名称，例如“text-to-speech-converter”。运行语言：选择【python3.9】（可根据实际情况选择支持的Python版本）。 权限：点击【选择或创建执行角色】，若已有具备相关权限的角色，选择【使用现有角色】，并指定角色名称；若没有，则选择【创建新角色】。在创建新角色时，需确保该角色拥有调用 AWS Polly 服务和 Amazon S3 服务的权限。可以在创建角色的权限策略中添加 “PollyFullAccess” 策略，赋予其对 Polly 的完全访问权限，同时添加 “S3FullAccess” 策略（在实际生产中，建议根据最小权限原则进行更细粒度的权限设置，如仅授予对特定存储桶的读写权限），赋予对 S3 的操作权限。完成配置后，点击【创建函数】。（二）编写函数代码在【函数代码】模块中，编写如下Python代码：import boto3 import os from datetime import datetime def lambda_handler(event, context): polly = boto3.client('polly') text = event.get('text', 'Default Text') # 根据英文文本选择合适的VoiceID，例如Joanna voice_id = 'Joanna' response = polly.synthesize_speech( OutputFormat='mp3', Text=text, VoiceId=voice_id ) audio_stream = response.get('AudioStream') if audio_stream: # 生成时间戳，确保时分秒正确输出 timestamp = datetime.now().strftime("%Y%m%d%H%M%S") s3 = boto3.client('s3') bucket_name = 'text-to-speech-converter-s3' # 替换为你的S3存储桶名称 s3_file_key = f'output_{timestamp}.mp3' # S3存储桶中的对象键 try: s3.put_object(Body=audio_stream.read(), Bucket=bucket_name, Key=s3_file_key…