2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Jenkins】Credentialsの暗号を復元する方法

Last updated at Posted at 2022-10-24

Jenkins移行時のつまづきポイント、Credentials

Jenkinsを別サーバーに移行する際、一番忘れがちなのがCredentials。
再発行した方が早いかもしれないが、外部サービスと連携したAPIキーなどは再発行が面倒だったり、使いまわしている場合に他サービスに影響が出る場合もある。(そもそも使い回すのがどうかという議論はさておく)

っていうか、移行前サーバーにあるデータなのにサービス元まで確認に行くのが面倒くさい

Credentialsは復元できない?

ふつうにJenkinsからCredentialsの内容を見に行くと、隠しテキスト化されてしまっていて閲覧ができない。
SSHから /var/lib/jenkins/credentials.xml を確認に行っても {AQAAA...../.......} のような暗号化された値しか閲覧できない。
(ちなみに、ブラウザで表示したCredentialsの更新画面のソースからもこれは取得できる)

/var/lib/jenkins/credentials.xml
<java.util.concurrent.CopyOnWriteArrayList>
  <org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl plugin="plain-credentials">
    <scope>GLOBAL</scope>
    <id>HOGE-SECRET</id>
    <description>ほげほげ</description>
    <secret>{AQAAABAAAAAQ38QQY5Zxk6OzKUz7u5KZh+xa+W2WlKR/iQ254IxBREg=}</secret>
  </org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl>
</java.util.concurrent.CopyOnWriteArrayList>

パスワードのところで「要素を検証」するとすぐ上くらいに表示される。
image.png

Jenkinsで暗号化しているならJenkinsの機能で復元できるんじゃないか? ・・・ できた!

調べたらありました。

Jenkinsの管理 → スクリプトコンソールより以下を実行

println hudson.util.Secret.decrypt("{AQAAABAAAAAQ38QQY5Zxk6OzKUz7u5KZh+xa+W2WlKR/iQ254IxBREg=}")

image.png

注意

暗号化キーがサーバーによって違うので、上記のコマンドを暗号化データを含めてコピーしただけだと結果は出ないので、各々差し替える必要がある。
(同様にcredentials.xmlの内容をサーバーを跨いでコピーしても動作しない)

Jenkinsの管理権限があれば誰でもCredentialsは閲覧できてしまう

まぁ、「管理者」なんだから当然と言えば当然だけど・・・
ユーザーの権限管理は気をつけよう。


参考資料(というか該当部分を抜粋しただけ)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?