Skip to content

Latest commit

 

History

History
259 lines (205 loc) · 12.2 KB

resources.md

File metadata and controls

259 lines (205 loc) · 12.2 KB

Access to Node.js Infrastructure

This document describes resources and assets managed by the Build Working Group.

Note that links to @nodejs/ teams in this document are not visible to people who aren't in the Nodejs organization, and the secrets repo is only visible to people who have read access to the nodejs-private organization.

For technical details on getting SSH access to the machines, see the SSH guide.

Resource Access

For a list of servers, see the Ansible inventory.yml. Secrets are stored in the secrets repo, which @nodejs/build (and org owners) have access to. Secrets are encrypted and accessible only to a pre-defined set of personal GPG keys, so access to the repo does not itself give access to any of the secrets within. Individuals with different levels of access are able to use their GPG keys to decrypt a broader range of secrets.

Ansible configuration

Ansible is the tool used to managed all machines that the Build WG is responsible for.

Secrets for Ansible scripts live within the build directory of the nodejs-private/secrets repository. Access to credentials is granted upon joining the build team.

Test servers

The most basic level of access is also the most expansive. All Build WG have (or should eventually have where a gradual onboarding process is in place) have root access to the test CI servers that connect to our primary Jenkins server. These Jenkins node servers are listed under the test block in the Ansible inventory, and also listed at https://ci.nodejs.org/computer/.

The primary means of access to test servers is through the nodejs_build_test SSH key which is made available in the secrets repository.

The Test servers serve our main Jenkins instance which serves contributors to the Node.js project (and some related projects, including libuv). Root access is granted to allow for the greatest flexibility in solving problems encountered with these servers. This is not a small amount of trust and individuals should be conscious of the impact of their activities and always ask for assistance where there is uncertainty.

Infra servers

A small subset of Build WG members have access to infrastructure ("infra") servers. These are listed under the infra section in the Ansible inventory. The current list of Build WG members with infra access is listed in the README.

We consider infra to be our "crown jewels". Members with infra access are able to access all protected resources managed by the Build WG. We are therefore very careful with this group and do not hand out membership liberally. Because of the security and legal implications of mishandling of the resources managed at the infra level, we keep the group relatively small and have a strong preference for robust trust relationships and a high level of demonstrated competence. For this reason we are more likely to add employees of OpenJS Foundation member companies who already contribute to Node.js to the infra group than individuals who don't have a strong contractual relationship with a company who has a vested interest in Node.js.

The nodejs_build_infra SSH key grants access to infra servers.

In addition to infra servers, infra has access to:

IaaS services

Other services

Certificates

Release servers

Servers listed in the Ansible inventory under the release section are a separate category of access. We treat security of the build pipeline very seriously and protect access to servers that build assets published on nodejs.org. Most Build WG members don't have access to release servers. All members with infra access do. Release access is managed separately to infra and it is possible to add an individual to release but not infra. However, due to the protected nature of these resources, they are most likely to be coupled.

The current list of Build WG members with infra access is listed in the README.

In addition to servers, release has access to:

Certificates

nodejs.org

nodejs.org is the main website for the Node.js Foundation. Its Ansible configuration lives in setup/www

ci.nodejs.org is the main Jenkins setup used to test projects within the Node.js Foundation, the largest being Node itself.

This is a publicly accessible resource, only a GitHub account is required to gain read-access. @nodejs/collaborators have access to run Node core tests. Other teams have access to run tests related to their projects (libuv, node-gyp, etc.).

Members of @nodejs/build has more access than collaborators to configure parts of ci.nodejs.org, including the ability to add, configure and remove nodes.

Different forms of elevated access is granted to specific teams for specific jobs. For example, the post-mortem jobs are managed by @nodejs/post-mortem, and configured by @nodejs/post-mortem-admins. For more info see the Jenkins access doc.

There are several different types of machines that form the test CI cluster:

Type Jenkins Agent Jenkins Workspace Playbook Notes
"Normal" On machine On machine jenkins/worker/create.yml Run-of-the-mill, most common type of worker
"Half Docker" On machine Docker container jenkins/worker/create.yml Raspbery Pi, Scaleway ARM v7
"Full Docker" Docker container Docker container jenkins/docker-host.yaml Special case Linux machines

Jenkins admins

@nodejs/jenkins-admins have administrator access to ci.nodejs.org. They are granted all permissions across Jenkins to modify resources. This group is managed separately to test, release & infra and there are members of the Build WG who have jenkins-admins access but not infra. We primarily grant access to jenkins-admins on the basis of competence and according to our need to have enough competent people available to maintain the resource as required.

This is a private Jenkins instance used to release Node.js. Only certain GitHub teams have access.

@nodejs/releasers have access to run builds on a job named iojs+release. This is our primary pipeline that creates all downloadable resource available at nodejs.org/download. Members of the Releasers team are approved by the TSC and also have access to the dist user on nodejs.org to "promote" releases once built.

@nodejs/jenkins-release-admins have full administrator access to this Jenkins instance. It is treated similarly to jenkins-admins but with an elevated level of trust and security since it has impacts on our build pipeline and also grants indirect access to our release servers. There are individuals who have jenkins-release-admins membership who do not have infra or release membership.

The github-bot is the server that runs different automation scripts within the Node.js Foundation GitHub organization. For example, the bot automatically applies labels to new pull requests in nodejs/node, and can trigger Jenkins builds or report their statuses on pull requests. Its Ansible configuration lives in playbooks/create-github-bot.yml

Those with github-bot access have access to the GitHub Bot's configuration, including GitHub and Jenkins secrets. The list of members is here.

email

The nodejs/email repo contains all email aliases for the Node.js Foundation, which are routed via Mailgun.

NPM Management

We have a number of packages managed by the Node.js project including:

Packages are managed as follows:

  • The nodejs-foundation npm user, which is managed by the Build WG, is an administrator on all Foundation npm packages. It is the means to add or remove other package collaborators, and shouldn't be used to publish releases.
  • Package maintainers are added as npm "collaborators" to the package, and publish releases.

The credentials required for the nodejs-foundation user are maintained in encrypted form in the secrets repo.