前言
在 serverless 架构中,我们经常需要使用敏感信息,如数据库连接字符串、密钥等。这些信息一般会以明文形式暴露在代码或配置文件中,存在一定的风险。@jmendiara/serverless-plugin-encrypted 是一个 npm 包,它提供了一种加密敏感信息的解决方案。本篇文章将详细介绍该 npm 包的使用方法。
安装
使用 npm 进行安装:
npm install --save @jmendiara/serverless-plugin-encrypted
使用
配置
在 serverless.yml 文件中添加以下配置:
-- -------------------- ---- ------- -------- - ---------------------------------------- ------- ---------- -------- - - ---- - - - ---- - - - ---- - -------- - --- ---- ------- - --- -- ------------ - --- ------ --- -- ---------------- - --- ------ ------ ---
其中,secrets
为要加密的敏感信息列表,profile
为 AWS 认证信息。AWS 认证信息可以通过 ~/.aws/credentials
文件或环境变量进行指定。具体配置请参考 AWS CLI 文档。
加密
首先,需要在本地生成一个 RSA 密钥对。可以使用以下命令:
openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -outform PEM -pubout -out public.pem
然后,使用以下命令对敏感信息进行加密:
npx serverless encrypt --secret <secretName> --key <publicKeyFilePath> --stage <stageName>
其中,<secretName>
为敏感信息的名称,<publicKeyFilePath>
为公钥文件的路径,<stageName>
为部署环境的名称,如 dev
。执行该命令后,会生成一个加密后的敏感信息。
部署
在 serverless 架构中,部署可以使用 sls deploy
命令完成。在部署之前,需要将加密后的敏感信息添加到账号的 Secrets Manager 中。可以使用以下命令:
npx serverless createSecret --secret <secretName> --value <encryptedValue> --stage <stageName>
其中,<secretName>
和 <stageName>
与加密时保持一致,<encryptedValue>
为加密后的敏感信息。
在 serverless.yml 文件中,可以使用 ${ssm:}
或 ${env:}
引用 Secrets Manager 中的敏感信息,示例如下:
provider: environment: DB_CONNECTION_STRING: ${ssm:/my-app/dev/database/connection-string}
至此,@jmendiara/serverless-plugin-encrypted 的使用就介绍完毕了。通过加密敏感信息,可以有效提高 serverless 应用的安全性。
示例代码
serverless.yml 文件示例:
-- -------------------- ---- ------- -------- ------ --------- ----- --- -------- ---------- ------- --------- ---------- ------ -------- ------------- ------- - ----- ----- ------ ------- --- -------- - ---------------------------------------- ------- ---------- -------- - -------------------- - ---------- -------- ------- --------- ------------ ------------- ---------------- -----------------
加密敏感信息示例:
npx serverless encrypt --secret db-connection-string --key ./public.pem --stage dev
添加敏感信息示例:
npx serverless createSecret --secret db-connection-string --value <encryptedValue> --stage dev
使用敏感信息示例:
-- -------------------- ---- ------- ----- --- - ------------------- ----- --- - --- ---------- ------------- - ----- ------- -- - ----- - -------------------- - - ------------ -- - ------- ------- ------- ----- - --------- - - ----- ------------------ ----- ----------------------------------------- --------------- ---- ------------- ----- ---------------- - ---------------- ------------------------------ ------ - ----------- ---- ----- ---------------- -------- ------ ------- --- -- --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066bc5967216659e244399