NPM与外部服务的集成(下)
目录
1、撤消访问令牌
2、在CI/CD工作流中使用私有包
2.1 创建新的访问令牌
持续整合
持续部署
交互式工作流
CIDR白名单
2.2 将令牌设置为CI/CD服务器上的环境变量
2.3 创建并签入特定于项目的.npmrc文件
2.4 令牌安全
3、Docker和私有模块
3.1 背景:运行时变量
3.2 更新Dockerfile
3.3 构建Docker镜像
1、撤消访问令牌
为了确保您的帐户和软件包的安全,我们强烈建议您撤销(删除)不再需要或已被泄露的令牌。您可以撤销已创建的任何令牌。
npm token list
2、在令牌表中,查找并复制要删除的令牌的ID。
3、在命令行上,运行以下命令,例如删除的令牌的ID为0a4d81
npm token delete 0a4d81
4、要确认令牌已删除,请再次运行如下命令,查看下令牌是否已删除:
根据创建时间倒序排列的令牌列表,可以发现刚才的只读令牌已删除。
注意:必须使用令牌ID来删除令牌,而不是令牌的截断版本。在某些情况下,在令牌被成功撤销之前可能存在长达一小时的延迟。
2、在CI/CD工作流中使用私有包
您可以使用访问令牌在持续集成(CI)系统中测试私有npm包,或者使用持续部署(CD)系统部署它们。
2.1 创建新的访问令牌
创建一个新的访问令牌,仅用于从CI/CD服务器访问npm包。
持续整合
当生成用于持续集成环境的访问令牌时,我们建议使用具有有限访问权限的粒度访问令牌,以提供更高的安全性。
如果您使用传统令牌,默认情况下,npm token create
将生成具有读写权限的令牌。我们建议创建只读令牌:
npm token create --read-only
有关创建访问令牌(包括CIDR白名单令牌)的详细信息,可以参考之前的文章,NPM与外部服务的集成(上)
持续部署
由于持续部署环境通常涉及到创建部署工件,因此您可能希望在网站上创建一个自动化令牌
。这将允许您发布,即使您在帐户上启用了双因素身份验证。
交互式工作流
如果您的工作流生成了一个包,但您在验证后手动发布了它,那么您将需要创建一个具有读写权限的令牌,这些权限是通过标准令牌创建命令授予的:
npm token create
CIDR白名单
为了提高安全性,您可以使用CIDR白名单令牌,该令牌只能在特定的IP地址范围内使用。您可以使用CIDR白名单和读取和发布令牌或只读令牌:
npm token create --cidr=[list]
npm token create --read-only --cidr=[list]
Example:范例:
npm token create --cidr=192.0.2.0/24
2.2 将令牌设置为CI/CD服务器上的环境变量
在CI/CD服务器中将令牌设置为环境变量或密码。
例如,在GitHub Actions中,您可以将令牌添加为密钥
。然后,您可以将密钥设置为可用于工作流。
如果您将secret命名为NPM_TOKEN
,那么您需要从该secret创建一个名为NPM_TOKEN
的环境变量。
steps:- run: |npm install- env:NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
2.3 创建并签入特定于项目的.npmrc文件
使用特定于项目的.npmrc
文件和令牌的变量,以使用npm安全地验证CI/CD服务器。
1、在项目的根目录中,创建包含以下内容的自定义.npmrc
文件:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
注意:您指定的是一个文本值
${NPM_TOKEN}
。npm cli会将这个值替换为NPM_TOKEN
环境变量的内容。不要在此文件中放置令牌。
2.4 令牌安全
您的令牌可能有权读取私有包、代表您发布新包或更改用户或包设置。保护好你的令牌。
不要将令牌添加到版本控制中或以不安全的方式存储令牌。将其存储在密码管理器、云提供商的安全存储或CI/CD提供商的安全存储中。
如果可能,请使用具有最低必要权限的粒度访问令牌,并为令牌设置较短的到期日期。
3、Docker和私有模块
要在Docker容器中安装私有npm包,您需要使用Docker构建密钥。
3.1 背景:运行时变量
您不能仅使用运行时变量在Docker容器中安装私有npm包。考虑以下Dockerfile:
FROM nodeCOPY package.json package.json
RUN npm install# Add your source files
COPY . .
CMD npm start
它将使用官方的Node.js镜像,将package.json
复制到我们的容器中,安装依赖项,复制源文件并运行package.json
中指定的start命令。
为了安装私有包,你可能会认为我们可以在运行npm install
之前添加一行,使用ENV参数:
ENV NPM_TOKEN=00000000-0000-0000-0000-000000000000
然而,这并不像你期望的那样工作,因为你希望npm安装在你运行docker build
时发生,在这个例子中,没有使用ENV
变量,它们只为运行时设置。
你必须使用Docker构建秘密,而不是运行时变量。
3.2 更新Dockerfile
利用这一点的Dockerfile比前面的示例多了几行,允许我们使用您的全局.npmrc
和在运行npm login
命令时创建的访问令牌(如果您还没有运行它-请在继续之前运行它)。
# https://docs.npmjs.com/docker-and-private-modules
FROM node:18ENV APP_HOME="/app"WORKDIR ${APP_HOME}COPY package*.json ${APP_HOME}/RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm installCOPY . ${APP_HOME}/CMD npm start
这将配置您的Dockerfile通过build secrets接收.npmrc
文件,在npm依赖安装完成后不会留下任何痕迹。
3.3 构建Docker镜像
要使用上述Dockerfile和npm身份验证令牌构建镜像,可以运行以下命令。请注意,最后给予.
将当前目录作为参数提供给docker build
。
docker build . -t secure-app-secrets:1.0 --secret id=npmrc,src=$HOME/.npmrc
这将使用通过build secrets接收的全局.npmrc
文件中的访问令牌构建Docker镜像,因此您可以作为当前登录用户在容器中运行npm install
。
注意:您可能需要指定一个不同于默认
/
的工作目录,否则某些框架(如Angular)将失败。

相关文章:

NPM与外部服务的集成(下)
目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景:运…...

Flask Web开发实战(狼书)| 笔记第1、2章
前言 2023-8-11 以前对网站开发萌生了想法,又有些急于求成,在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣,存在许多模糊或不太理解的地方,只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…...

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例
目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是: DFA(确定性有限状态自动机) NFA(非确定性有限状态自动机) 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…...

读书笔记 |【项目思维与管理】➾ 顺势而动
读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 💖The Begin💖点点关注,收藏不迷路💖 …...
开发利器:接口代理和接口模拟工具
前端开发过程往往需要和后端对接接口,而且一般开发都是前后端同步开发,这就难免出现接口提供滞后的问题,从而导致我们前端开发 UI 开发完成而无法调试的问题。面对这种问题,一般我们会有很多种方式处理,比如在代码中写一些模拟数据,或者打断点调试,或者用代理工具 Fidde…...

MAVEN利器:一文带你了解MAVEN以及如何配置
前言: 强大的构建工具——Maven。作为Java生态系统中的重要组成部分,Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用,Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…...

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE
最近给游戏出包,平台要求 v1 签名吧,AS 打包后,adb 执行安装到手机,我用的设备是google pixel6 , android 系统 13, 提示如下: adb install -r v5_android_202308161046.apk Performing Streamed Install a…...
学习Vue:Event Bus 与 Provide/Inject
在Vue.js中,兄弟组件通信是指两个没有直接父子关系的组件之间如何进行数据传递和通信。为了实现兄弟组件通信,我们可以借助Vue的一些特性,如Event Bus和Provide/Inject。让我们一起来深入了解这些方法,并通过实例来看看如何实现兄…...
Java 工具类之JSON key根据ASCII排序
Java按键值字典序排列 参数按照KEY值进行字典序排序(按照KEY值的ASCII码从小到大),并用&作为各参数之间的分隔符将参数拼接成字符串。这里用到了SortedMap,复制以下代码开箱即用~ /*** getSortedString 对参数按照Key进行ASCII排序* param jsonObject 请求参数…...

深兰科技提出新多模态谣言监测模型,刷新世界纪录
近日,深兰科技旗下深兰科技科学院投稿的《基于二部特定事件树的分层表示的谣言检测》(Rumor Detection With Hierarchical Representation on Bipartite Ad Hoc Event Trees)研究论文被全球人工智能领域*期刊《IEEE Transactions on Neural Networks and Learning S…...
【从零学习python 】33.装饰器的作用(二)
文章目录 再议装饰器4. 装饰器(decorator)功能5. 装饰器示例例1:无参数的函数例2:被装饰的函数有参数例3:被装饰的函数有不定长参数例4:装饰器中的return例5:装饰器带参数 进阶案例 再议装饰器 # 定义函数:完成包裹数据 def makeBold(fn):def wrapped():return &qu…...

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

比ChatGPT更强的星火大模型V2版本发布!
初体验 测试PPT生成 结果: 达到了我的预期,只需要微调就可以直接交付,这点比ChatGPT要强很多. 测试文档问答 结果: 这点很新颖,现在类似这种文档问答的AI平台收费都贵的离谱,星火不但免费支持而且效果也…...
Character Animation With Direct3D 读书笔记
角色动画简介 2D动画:循环播放多张图片 3D动画: 骨骼动画、变形动画 DirectX入门 Win32 应用程序 Application类:处理主程序循环,图形设备的初始化 Init:加载资源并创建图形设备Update:更新游戏世界&am…...

SpringBoot之HandlerInterceptor拦截器的使用
😀前言 本篇博文是关于拦截器-HandlerInterceptor的使用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

【共同缔造 情暖襄阳】 暑期关爱未成年人志愿服务活动合集(三)
结合2023年襄阳市民政局“共同缔造 情暖襄阳”社会工作服务项目,在襄阳市民政局、襄州区民政局支持下,襄州社工协会联合肖湾街道育红社区开展暑期“希望家园”志愿服务活动,关爱未成年人。 8月4日,为培育孩子们广泛的兴趣爱好和动…...

私密相册管家-加密码保护私人相册照片安全
App Store史上最安全、最强大、最卓越的私密相册App!再也不用担心私密照片视频被别人看见了! 私密相册为你提供多重密码保护机制、简单便捷的照片存储空间,完美地将你的私密照片远离一切恶意偷窥者的窥探! 【产品功能】 √ 支…...

webpack 热更新的实现原理
webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理: ⾸先要知道 server 端和 client 端都做了处理⼯作: 在 webpack 的 watch…...

OpenCV-Python中的图像处理-傅里叶变换
OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…...

阿里云FRP内网穿透挂载多台服务器
1. FRP介绍 FRP (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站, 帮你实现 公网 ←→ FRP(服务器…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...