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 node

COPY 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:18

ENV APP_HOME="/app"

WORKDIR ${APP_HOME}

COPY package*.json ${APP_HOME}/

RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm install

COPY . ${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)将失败。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS变形与动画(二):perspctive透视效果 与 preserve-3d 3d效果(奥运五环例子)

文章目录 perspective 3d透视效果preserve-3d 3d嵌套效果例子 奥运五环 backface-visibility 背面效果 perspective 3d透视效果 perspective 指定了观察者与 z0 平面的距离&#xff0c;使具有三维位置变换的元素产生透视效果。z>0 的三维元素比正常大&#xff0c;而 z<0 …

零拷贝详解

1、在没有DMA技术之前的I/O过程是这样的&#xff1a; CPU发出对应的指令给磁盘控制器&#xff0c;然后返回磁盘控制器收到指令后&#xff0c;于是就开始准备数据&#xff0c;会把数据放入到磁盘控制器的内部缓冲区&#xff0c;然后产生中断CPU收到中断信号后&#xff0c;停下手…

Python opennsfw/opennsfw2 图片/视频 鉴黄 笔记

nsfw&#xff08; Not Suitable for Work&#xff09;直接翻译就是 工作的时候不适合看&#xff0c;真文雅 nsfw效果&#xff0c;注意底部的分数 大体流程&#xff0c;输入图片/视频&#xff0c;输出0-1之间的数字&#xff0c;一般情况下&#xff0c;Scores < 0.2 认为是非…

OpenCV-Python中的图像处理-霍夫变换

OpenCV-Python中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行&#xff0c;如果要检测的形状可以用数学表达式描述&#xff0c;就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

第三章 图论 No.13拓扑排序

文章目录 裸题&#xff1a;1191. 家谱树差分约束拓扑排序&#xff1a;1192. 奖金集合拓扑序&#xff1a;164. 可达性统计差分约束拓扑序&#xff1a;456. 车站分级 拓扑序和DAG有向无环图联系在一起&#xff0c;通常用于最短/长路的线性求解 裸题&#xff1a;1191. 家谱树 119…

浅析3D打印技术

目录 1.3D打印的概念 2.3D打印的发展过程 3.3D打印的应用领域 4.3D打印带来的技术变革 1.3D打印的概念 3D打印是一种制造技术&#xff0c;它使用逐层堆叠材料的方式来创建物体。与传统的加工方法相比&#xff0c;3D打印具有很多优势。 在3D打印中&#xff0c;一种叫做CAD&am…

vue项目报错:node:internal/modules/cjs/loader:1080

运行项目报错&#xff1a; 原因&#xff1a; 看划线的地方&#xff0c;中文乱码导致找不见模块了 解决方案 将路径上的中文改为英文即可&#xff0c;项目命名最好只有英文、下划线&#xff08;_&#xff09;、数字、横杠&#xff08;-&#xff09;等英文符号组成

Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群

目录 高可用&#xff1a; 为什么需要高可用呢&#xff1f; 高可用的主要作用&#xff1a; keepalived是什么&#xff1f;它用在哪里&#xff1f; 什么是VRRP协议&#xff0c;它的作用是什么&#xff1f; 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…

C语言笔记7

#include <stdio.h> int main(void) {int a123;int b052;//十进制42int c0xa2;//十进制162printf("a%d b%o c%x \n",a,b,c);//分别是十进制 八进制 十六进制printf("a%d b%d c%d \n",a,b,c);printf("Hello 凌迟老头\n");return …

人工智能原理概述 - ChatGPT 背后的故事

大家好&#xff0c;我是比特桃。如果说 2023 年最火的事情是什么&#xff0c;毫无疑问就是由 ChatGPT 所引领的AI浪潮。今年无论是平日的各种媒体、工作中接触到的项目还是生活中大家讨论的热点&#xff0c;都离不开AI。其实对于互联网行业来说&#xff0c;自从深度学习出来后就…

“记账”很麻烦,看这场竞赛中的队伍与合合信息是如何解决问题的

在我们日常生活中或多或少都会有记账的情况&#xff0c;以此来对自己的收支和消费习惯进行分析&#xff0c;来帮助自己减少不必要的开支&#xff0c;优化财务决策、合理分配资金&#xff0c;减少财务压力和不必要的浪费。 但记账这个动作本身就是一件比较麻烦的。虽然现阶段有…

关于git执行提交报错问题

1.在执行git中 执行git init 执行 git add . 执行git commit -m “first commit” 时会出现 git config --global user.email "youexample.com" git config --global user.name "username" 这个问题是由于在git中没有设置默认的user跟emali导致需要手…

Ubuntu设置定时重启

1.安装/更新 cron 安装crontab sudo apt-get install cron更新命令 sudo apt-get update2.配置cron定时任务 sudo nano /etc/crontab* * * * * root reboot(从左到右&#xff0c;五个 * 依次是 分&#xff0c;时 &#xff0c;天&#xff0c;月&#xff0c;星期)下列命令表示…

高效反编译luac文件

对于游戏开发人员,有时候希望从一些游戏apk中反编译出源代码,进行学习,但是如果你触碰到法律边缘,那么你要非常小心。 这篇文章,我针对一些用lua写客户端或者服务器的编译过的luac文件进行反编译,获取其源代码的过程。 这里我不赘述如何反编译解压apk包的过程了,只说重点…

sealos安装k8s

一、前言 1、我前面文章有写过使用 kubeadm 安装的方式&#xff0c;大家可以去参考 &#xff08;二&#xff09;k8s集群安装&#xff0c;有一系列的k8s文章说明 2、安装k8s的方式有很多 kubeadmsealoskubespray等等 3、关于sealos来安装 k8s &#xff0c;也是非常建议大家去…

华为网络篇 RIPv2的基础配置-25

难度 1复杂度1 目录 一、实验原理 1.1 RIP的版本 1.2 RIP的路由更新方式 1.3 RIP的计时器 1.4 RIP的防环机制 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;&am…

极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)

目录 template 引用&#xff0c;减少代码冗余&#xff0c;增强 CI/CD 构建扩展性 问题 1&#xff1a;代码冗余&#xff0c;低效实践 问题 2&#xff1a;维护性难&#xff0c;工作量大 ➤ local ➤ file ➤ remote ➤ template 收益 1&#xff1a;一处修改&#xff0c;多…

leetcode810. 黑板异或游戏(博弈论 - java)

黑板异或游戏 lc 810 - 黑板异或游戏题目描述博弈论 动态规划 lc 810 - 黑板异或游戏 难度 - 困难 原题链接 - 黑板异或游戏 题目描述 黑板上写着一个非负整数数组 nums[i] 。 Alice 和 Bob 轮流从黑板上擦掉一个数字&#xff0c;Alice 先手。如果擦除一个数字后&#xff0c;剩…

grafana 的 ws websocket 连接不上的解决方式

使用了多层的代理方式&#xff0c;一层没有此问题 错误 WebSocket connection to ‘wss://ip地址/grafana01/api/live/ws’ failed: 日志报错 msg“Request Completed” methodGET path/api/live/ws status403 解决方式 # allowed_origins is a comma-separated list of o…