使用Cython编译运行保护Python源代码

一、背景

Python语言被广泛使用,在数据处理、机器学习等领域有统治地位。Python作为解释型语言,其主要优势就是跨平台、代码简洁,然而这也带来负面的影响,那就是解释型语言的运行效率低。因此,针对Python语言的编译运行有很多解决方案,其中一种是Cython。Cython可以将Python代码转换为C语言并编译为动态链接库,然后Python代码中可直接调用这些动态链接库。如此虽然提升了速度,但也带来一系列问题。一是编译后的动态链接库失去了跨平台特性,每个硬件架构平台(如X86_64和ARM)、不同操作系统版本(Glibc版本差异)的动态链接库是不通用的,都需要重新编译。二是要达到和C相近的性能,Python代码需要做优化才可以完全按C语言编译执行,由此带来代码改动的工作量,即需要在代码中按照Cython语言的要求对变量添加类型声明。如果不做这些优化,那么使用Cython比直接运行原Python效率提升有限,有提升但没有上升一个数量级,远不及C的运行速度。

虽然有着这两点缺点,不过使用Cython还有一个额外的收获,那就是编译后的动态链接库可封装代码,在一定程度上起到保护源代码的作用,让原始代码不再直接可读。由于反编译C代码动态链接库的门槛较高,因此这个方式在一定程度上提升了获取源代码的难度,实现了比较初步的源代码保护。因此本文不探讨Cython编译后的加速效果,而是介绍编译后保护代码明文的效果。

Continue reading “使用Cython编译运行保护Python源代码”

使用AWS平台上的ASR(Transcribe)和TTS(Polly)服务

ASR的全称是Automated Speech Recognition,通俗的说就是语音输入识别。TTS的全称是Text to Speech,也就是从文本到语音的人工合成。在AWS这两个场景分别对应的是Amazon Transcribe服务,以及Amazon Polly服务。

本文的Demo演示ASR功能本机mic输入,以及TTS通过本机扬声器播放合成的语音。

Continue reading “使用AWS平台上的ASR(Transcribe)和TTS(Polly)服务”

如何切换Cloud9的Owner

注意:Cloud9宣布了将在2024年7月之后不再为新账号提供服务,原有AWS账号可继续使用。请参考本文末尾的官网说明。

一、背景

使用Cloud9时候经常遇到一个问题,创建Cloud9开发环境的是另外的IAM User或者是联合登陆的IAM Role,在环境创建好之后使用另外的账户去操作Cloud9,在本Region的Cloud9界面下的My environment下是看不到别人创建的Cloud9的。由此必须切换到创建Cloud9的身份重新登陆AWS控制台。这样使用非常不便。另外,如果创建Cloud9的是一个IAM Role,可能无法直接登陆。

此时,可以通过CLI为现有的Cloud9增加新的权限,即可让其他人有权限使用。

Continue reading “如何切换Cloud9的Owner”

在EC2 Linux之间免密码登陆

一、背景

1、应用场景

在云上用EC2运行一些集群式应用的时候,需要让多个节点之间可以无缝的访问,互相具有可信的权限,也就是通常说的免密码登陆。通常,在AWS云上的EC2默认是证书方式登陆的,那么这种免密码登陆与EC2内置的证书登陆有何区别?请看本文讲解。

Continue reading “在EC2 Linux之间免密码登陆”

使用IAM Policy指定IP范围以限制用户对Bedrock服务的调用

一、背景

由于中美贸易战纠纷,一些高科技领域存在黑名单,禁止中国(含香港)地区的用户使用美国开发商的技术和服务。在这种政策要求下,作为业界最前沿的领先的2个大语言模型的供应商 OpenAI(ChatGPT)和 Anthropic(Claude)均宣布不向中国地区用户提供服务。同时,AWS Bedrock上的Claude模型,也需要遵循监管规则,即模型使用者必须是海外用户,包括AWS账户注册的联络地址、账单地址都必须在海外,这些地址不能是中国大陆、也不能是香港,但可以是新加坡。如果是存在Partner代付的场景,Partner也必须满足以上标准。

在以上背景下,海外应用使用Anthropic Claude模型是完全合规的,即模型使用者是在海外,应用代码部署位置也是在海外,处理的信息也是海外用户信息。虽然如此,由于大部分互联网公司的开发团队在国内,开发者经常会在本机使用国内网络直接调用Bedrock上的Claude服务进行开发测试。这种情况下,调用Bedrock Claude服务的来源IP依然是中国地区的IP,此时可能会存在不合规的情况。这种不合规场景有可能会导致账号异常。

为了避免这种不合规场景,可找到调用Bedrock服务的AKSK所对应的IAM User,在这个IAM User上增加对应的IAM Policy,以白名单方式只允许海外特定IP的请求,并拒绝来自其他地区(含中国区)的请求,避免不合规的调用。

Continue reading “使用IAM Policy指定IP范围以限制用户对Bedrock服务的调用”

KMS – 云上数据加密和保护

本文讲解加密相关知识、信封加密原理、KMS密钥类型、KMS与实际服务集合使用。同时针对常见的加密需求,本文将介绍AWS Encrption SDK对文件加密场景,并给出AWSCLI、CLI命令示例、Python代码示例供参考。此外,本文还介绍了使用KMS保护Data Key并使用对称加密算法对字符串加密、非对称加密算法对字符串加密等场景,同时也给出了Python代码示例。

Continue reading “KMS – 云上数据加密和保护”

Bedrock上的Claude模型的Tool use

一、背景

1、什么是Tool use

Tool use也叫做Function calling,这是指模型识别访问意图并调用外部工具的能力。例如在一个对话查询中,希望检索互联网上当前最火热的歌曲,或者触发另一个系统的特定的API。这种能力往往和Agent以及知识库搭配使用。需要注意的是,Tool use场景中大语言模型不会直接运行API Call,而是将需要API Call的请求拼接好返回给调用大语言模型的代码。API call的执行过程是完全由程序调用来负责执行的。因此当代码执行API Call获得返回结果之后,还需要将返回结果再次输入到大语言模型中,并且包含上次的聊天记录一起返回。这时即可获得预期的插叙结果。

本文以一个数学计算为例,输入一个计算要求,识别是Tool场景,程序完成Tool use获取结果,再将结果代回到大模型对话,完成整个流程。

Continue reading “Bedrock上的Claude模型的Tool use”

使用 AWS 托管的 Managed Directory 作为目录服务开通 Workspaces 云桌面

在4-5年前就编写过Workspaces服务开通并且是使用AD Connector与企业现有Active Directory对接的文章。由于界面升级变化,操作体验上和过去的博客文章有所差别了。所以这里新写一篇如何使用 AWS 托管的 Managed Directory 作为目录服务开通 Workspaces 云桌面的文章供参考。

一、背景

Amazon Workspaces是托管的云上桌面服务,专有的Workspaces客户端支持Windows、Mac、Linux和网页等多种形态的设备登录到云桌面,通过PCoverIP或者专有的WSP协议提供流畅的画面显示能力。

Workspaces的每个云桌面都是微软域环境,用户管理、Profile漫游等策略下发都通过域控制器进行,因此所有桌面都是域成员。Workspaces服务支持用户自建域也就是自己的Domain Controller,可通过名为AD Connector的服务进行连接;Workspaces也支持使用AWS云上托管的Managed Directory服务,可无需搭建域控制器,实现几乎开箱即用的体验。

Continue reading “使用 AWS 托管的 Managed Directory 作为目录服务开通 Workspaces 云桌面”

使用SAML协议、以Amazon IAM Identity Center为SSO平台、配置单点登录AWS控制台

一、背景

1、什么是SAML

SAML是用于单点登录认证的通用协议,以XML格式为基础进行配置交换。负责用户认证的系统可被称为SSO平台,可以是基于Active Directory Federation Service构建,也可以是用户自行开发的统一认证平台。应用系统指的是与SSO平台对接的业务软件,例如OA、ERP、代码管理系统等软件。当使用SSO方式登录时候,应用系统本身不需要额外管理用户分组、密码、校验等,也就避免了在多个应用软件之间同步用户清单、同步用户密码的麻烦。

使用SSO是安全领域的最佳实践之一。

Continue reading “使用SAML协议、以Amazon IAM Identity Center为SSO平台、配置单点登录AWS控制台”

通过AWSCLI修改安全规则组允许EC2公网登陆

一、背景

在AWS安全最佳实践中,为EC2分配公有IP地址并开放安全规则住允许从互联网上任意地址(也就是来源为0.0.0.0/0)访问操作系统的SSH/RDP是非常不安全的,有非常大的安全隐患。以近期的SSH漏洞

 https://explore.alas.aws.amazon.com/CVE-2024-6387.html 

为例,这样开放端口可能导致几分钟内系统被侵入。为了规避这个安全风险,一般采用如下方式:

Continue reading “通过AWSCLI修改安全规则组允许EC2公网登陆”

通过分析Bedrock日志来获取不同应用各自调用成本

在Athena查询语句SQL中,更新了Claude 3 Sonnect 3.5的价格(基于美西)。

本文已更新使用Athena Partition Projection功能,无须再手工管理数据分区。

一、背景

1、挑战

Amazon Bedrock提供多了多种基础模型的Model as a Service的调用能力,用户通过API调用Bedrock并指定要交互的模型,如Claude3的不同版本,即可获得模型返回结果。当属于多个团队、多个Workload的不同应用程序,分别调用Bedrock API时候,在AWS的账单中将仅包含从API传入的Token和生成的Token总数,但是没有提供按用户分账的功能。由此,需要一种方式能够帮助用户区分多个应用系统各自调用API的成本。

Continue reading “通过分析Bedrock日志来获取不同应用各自调用成本”

Bedrock & Claude 汇总

Claude模型申请、Bedrock开始使用

Amazon Bedrock上的Anthropic Claude开箱及Converse API使用

Prompt调优

Amazon Bedrock与多模态大语言模型Anthropic Claude 3 开箱(下篇) – Prompt Engineering

Tool use(Function call)

Bedrock上的Claude的Tool use

OpenAI接口兼容的迁移方式 – Bedrock Access Gateway

借助Bedrock Access Gateway实现OpenAI代码兼容的Claude 3模型调用

OCR

使用Claude 3进行OCR文字识别将影印件PDF并转换为Markdown文本格式

知识库

【10分钟开箱即用】使用Amazon Bedrock知识库构建RAG检索能力

【10分钟开箱即用】视频演示

计费

通过Bedrock日志拆分多个应用和用户的账单