🕌

Gitlab CI/CD の環境変数で秘密鍵をマスクしたい

2021/10/25に公開
1

問題

^[-A-Za-z0-9+\/@:.~=]{8,}$
CI/CD の環境変数変数の設定で、マスクできる文字列の条件が上記なため、改行やスペースが入っている値がマスクできない。
Mask a CI/CD variable

解決

base64 でエンコードした値を使う。

$ cat /path/to/SSH_PRIVATE_KEY | base64 -w0

mac な場合。

$ cat /path/to/SSH_PRIVATE_KEY | base64 -b 0 

使用時はデコードして使う。

.gitlab-ci.yaml
stages:
  - ssh

hostname:
  stage: ssh
  image: alpine:latest
  before_script:
    - apk add --no-cache openssh-client
    - eval $(ssh-agent -s)

    - echo "${SSH_PRIVATE_KEY}" | base64 -d | ssh-add -

    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "host *" > ~/.ssh/config
    - echo "  User ${SSH_USER}" >> ~/.ssh/config
    - echo "  Port ${SSH_PORT}" >> ~/.ssh/config
    - echo "  StrictHostKeyChecking no" >> ~/.ssh/config
    - echo "  UserKnownHostsFile=/dev/null" >> ~/.ssh/config
    - chmod 600 ~/.ssh/config
  script:
    - ssh ${SSH_HOST} "hostname"

参考サイト

Gitlab masking variables - Stack Overflow

Discussion

まーまー

改行やスペースが入っている値がマスクできない。

これは初めて知りました。覚えておきます。

こういう鍵ファイルは TypeFile にすると便利です。SSH_PRIVATE_KEY 環境変数には値の代わりに値を保存したファイルへのパスが設定されています。