CircleCI に登録している secrets を確認する


## はじめに

最近、 CircleCI に登録していた secrets を確認することがありました。
CLI tool の [CircleCI-Env-Inspector] が公開されていたのでその使い方を記載します。

## [CircleCI-Env-Inspector] について

CircleCI に登録している secrets を出力する Node.js 制の CLI tool です。

https://github.com/CircleCI-Public/CircleCI-Env-Inspector

出力出来る secrets は以下 3 つです。

- Organization に定義する "Context variables"
- Project に定義する "Project environment variables", "Project SSH keys"

### 準備

[CircleCI-Env-Inspector] を実行するためには以下が必要です。

- (必須) CircleCI Personal API Token
- Docker, Shell を実行出来る環境
  - 用意できない場合は、 `run.sh`, `Dockerfile` を確認し実行環境を用意します

#### CircleCI Personal API Token の発行

User Settings の Personal API Tokens にアクセスし Token を発行します。

https://app.circleci.com/settings/user/tokens

今回は、 Token Name を `CircleCI-Env-Inspector` とし Token を発行します。
Token は [CircleCI-Env-Inspector] を実行する際に入力します。安全な場所に保存しておきましょう。

| Personal API Tokens (一覧)                                                                                               | Personal API Tokens (発行)                                                                                               |
| :----------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55950/38e5e99b-871d-e5e2-169d-dd7114c68155.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55950/edcc3f17-ed95-0b99-8a97-84326568eb93.png) |

### [CircleCI-Env-Inspector] を実行する

[CircleCI-Env-Inspector] を clone します。

```bash
# HTTPS を利用する場合
git clone https://github.com/CircleCI-Public/CircleCI-Env-Inspector.git
# SSH を利用する場合
git clone git@github.com:CircleCI-Public/CircleCI-Env-Inspector.git
# GitHub CLI を利用する場合
gh repo clone CircleCI-Public/CircleCI-Env-Inspector
```

clone が完了したら `CircleCI-Env-Inspector` directory に移動します。

```bash
> cd path/to/CircleCI-Env-Inspector
```

その後、`run.sh` を実行します。
`? Enter your CircleCI API token [hidden]` と表示実行が中断します。
先ほど発行した CircleCI Personal API Token を入力し Enter を押下します。

```bash
> ./run.sh
Building Docker image...
[+] Building 16.1s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                0.0s
 => => transferring dockerfile: 36B                                                                 0.0s
 => [internal] load .dockerignore                                                                   0.0s
 => => transferring context: 2B                                                                     0.0s
 => [internal] load metadata for docker.io/library/node:18                                          2.8s
 => [auth] library/node:pull token for registry-1.docker.io                                         0.0s
 => [internal] load build context                                                                   0.0s
 => => transferring context: 97.55kB                                                                0.0s
 => [1/4] FROM docker.io/library/node:18@sha256:d871edd5b68105ebcbfcde3fe8c79d24cbdbb30430d9bd6251  0.0s
 => CACHED [2/4] WORKDIR /project                                                                   0.0s
 => [3/4] COPY . .                                                                                  0.1s
 => [4/4] RUN npm install && npm run build                                                         11.4s
 => exporting to image                                                                              1.6s
 => => exporting layers                                                                             1.6s
 => => writing image sha256:cc1e35f54d28648a7fea5c5057cefe21b0ab4e7644395b402bfe52a41583e9f8        0.0s
 => => naming to docker.io/library/cci-env-inspector                                                0.0s
Running Docker image...
? Enter your CircleCI API token [hidden]
Found X accounts.
Fetching data for xxxxxx from GitHub...  1/X
  Fetching Contexts...
  Fetching Projects...
  Fetching Project Variables...
Fetching data for mziyut from GitHub...  2/X
  Fetching Contexts...
  Fetching Projects...
  Fetching Project Variables...

 Done!
 Data saved to circleci-data.json
Extracting data from container...
Cleaning up...
Done.
```

実行が完了すると 同 directory に `circleci-data.json` が生成されます。
※ 一部の文字を `xx` に置換しています。

```json:circleci-data.json
[
  {
    "xxxx": {
      "contexts": [
        {
          "name": "contexts-name-here",
          "id": "xxxx-xxxx-xxxx-xxxx-xxxx",
          "url": "https://app.circleci.com/settings/organization/gh/xxxx/contexts/xxxx-xxxx-xxxx-xxxx-xxxx",
          "variables": []
        }
      ],
      "projects": [
        {
          "name": "projects-name-here-1",
          "url": "https://app.circleci.com/settings/project/gh/xxxx/projects-name-here-1/environment-variables",
          "variables": [
            {
              "name": "VARIABLES_NAME",
              "value": "xxxxxxxx"
            }
          ],
          "project_keys": []
        },
        {
          "name": "projects-name-here-2",
          "url": "https://app.circleci.com/settings/project/gh/xxxx/projects-name-here-2/environment-variables",
          "variables": [],
          "project_keys": [
            {
              "type": "project_key-type",
              "preferred": true,
              "created_at": "xxxx-xxxx-xxxx:xxxx:xxxx.xxxxZ",
              "public_key": "xxxx",
              "fingerprint": "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
            }
          ]
        }
      ],
      "unavailable": []
    }
  },
  {
    "mziyut": {
      "contexts": [],
      "projects": [],
      "unavailable": []
    }
  }
]
```

生成された JSON ファイル内の "Context variables", "Project environment variables", "Project SSH keys" を確認し必要な対応を行います。

## 最後に

急遽、 CircleCI に登録していた secrets を確認する必要が生じましたが、CLI tool の [CircleCI-Env-Inspector] が公開されたことで簡単に確認することができました。
簡単に確認できるよう [CircleCI-Env-Inspector] を準備、公開頂いたことに感謝しています。

## References

https://github.com/CircleCI-Public/CircleCI-Env-Inspector

[CircleCI-Env-Inspector]: https://github.com/CircleCI-Public/CircleCI-Env-Inspector