Jenkins Credentials Plugin: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
No edit summary
Line 23: Line 23:
==Implementation Details==
==Implementation Details==


Credentials are stored in $JENKINS_HOME/credentials.xml. The following example contains just one [[Jenkins_Security_Concepts#Username_with_Password|Username with Password]] credential with the ID "github-service-account". The corresponding user name is "someuser" and the password is stored in-line, encrypted with the Jenkins' server secret key. The secret key is stored in $JENKINS_HOME/secret.key.
Credentials are stored in $JENKINS_HOME/credentials.xml. The following example contains just one [[Jenkins_Security_Concepts#Username_with_Password|Username with Password]] credential with the ID "github-service-account". The corresponding user name is "someuser" and the password is stored in-line, encrypted with [[#Secret_Key|$JENKINS_HOME/secrets/hudson.util.Secret]].


<syntaxhighlight lang='xml'>
<syntaxhighlight lang='xml'>
Line 53: Line 53:


====Secret Key====
====Secret Key====
$JENKINS_HOME/secrets/hudson.util.Secret is the secret key used to encrypt credentials stored in $JENKINS_HOME/credentials.xml.
The secret key is also maintained in encrypted format, and the encryption key is [[#Master_Key|$JENKINS_HOME/secrets/master.key]].


====Master Key====
====Master Key====

Revision as of 23:54, 24 April 2018

External

Internal

Overview

The Credentials Plugin exposes an API for credential management. The API can be used by plugin authors to define credential types, integrate external credential stores with Jenkins and retrieve credentials those stores and existing stores and by users to manage credentials available in Jenkins. Concepts such as credential type, scope, domain, provider and store are Jenkins Credential Plugin concepts, but they are presented together with other Jenkins security concepts.

Credentials can be managed through the Web UI, via a REST API and with Jenkins CLI.

Internal Credential Store

The plugin provides a default internal credential store, stored in $JENKINS_HOME. The store is encrypted using a key that is also stored in $JENKINS_HOME. The JVM running Jenkins must have access to these files.


If a non-trusted user can gain access to the files in the J$ENKINS_HOME/secrets directory, all the secrets stored in the internal credential store are compromised.

Implementation Details

Credentials are stored in $JENKINS_HOME/credentials.xml. The following example contains just one Username with Password credential with the ID "github-service-account". The corresponding user name is "someuser" and the password is stored in-line, encrypted with $JENKINS_HOME/secrets/hudson.util.Secret.

<com.cloudbees.plugins.credentials.SystemCredentialsProvider plugin="credentials@2.1.16">

  <domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash">

    <entry>
      <com.cloudbees.plugins.credentials.domains.Domain>
        <specifications/>
      </com.cloudbees.plugins.credentials.domains.Domain>

      <java.util.concurrent.CopyOnWriteArrayList>

        <com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
          <scope>GLOBAL</scope>
          <id>github-service-account</id>
          <description>The GitHub service account</description>
          <username>someuser</username>
          <password>{AQAAABAACBAQtYXny9ArxRUnfwpbmn+W69DtK4APgb7achwoFa1ecmk=}</password>
        </com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>

      </java.util.concurrent.CopyOnWriteArrayList>
    </entry>
  </domainCredentialsMap>

Keys

Secret Key

$JENKINS_HOME/secrets/hudson.util.Secret is the secret key used to encrypt credentials stored in $JENKINS_HOME/credentials.xml.

The secret key is also maintained in encrypted format, and the encryption key is $JENKINS_HOME/secrets/master.key.

Master Key