CipherTrust Secrets Management (CSM)をためす

# CSM概要

CipehrTrust Secrets Management は、AkeylessのSaaSベースの第３世代のシークレット管理ソリューションです。
主な特徴
- SaaSベースのため、従来製品と比較し総コストを抑えることができます（70%削減の事例あり）
- エンタープライズ向けに設計された製品であり、マルチクラウド/オンプレミス混在の環境のシークレットを一元管理する事ができます
- 特許技術のDFCによりCloud Act法等でクラウド事業者にデータ開示要求があった場合でも、シークレットを開示されることはありません。(FIPS 140-2認定)
- Static Secret, Dynamic Secret（一時的なSecret)のサポート

![CSM-Overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/36ef4b9e-25fa-d6dc-9140-2fa928586c87.png)

製品HP

https://cpl.thalesgroup.com/ja/encryption/ciphertrust-secrets-management

YouTube
- [“エンタープライズ向けシークレット管理”とは？CipherTrust Secrets Management Powered by AKEYLESS のご紹介](https://www.youtube.com/watch?v=FPKXdnSIjaM)
- [CipherTrust Secrets Management （サイファートラスト シークレット マネジメント）による、企業レベルでのシークレット一元管理によるセキュリティ強化とコスト削減](https://www.youtube.com/watch?v=omxwC8L3kp8)


90日間の無償トライアル

:::note info
"90 days Free Trail" にて、無料にてお試しいただけます。
:::

https://www6.thalesgroup.com/hub/encryption/apac/jp/secrets-management/request-free-trial


# 目的

最短でCSMをセットアップし、シークレット管理が始められるまでの手順を確認します

# 参照ドキュメント

- Thales Docs - CipherTrust Manager
    - [Secrets Management Administration](https://thalesdocs.com/ctp/cm/latest/admin/secrets-management-akeyless/index.html)
        - [High Level Integration Process](https://thalesdocs.com/ctp/cm/latest/admin/secrets-management-akeyless/index.html#high-level-integration-process)
- Akeyless
    - [Akeyless Developer Center](https://docs.akeyless.io/)

- CSM関連記事(Qiita)
    - [CSM: AWS IAM 認証をためす](https://qiita.com/shinyaarai/items/03beb8cbcc0aa722294a)
    - [CSM: Dynamic Secretをためす](https://qiita.com/shinyaarai/items/3312112f3ce563f58ac4)
# 手順

製品ドキュメントの [High Level Integration Process](https://thalesdocs.com/ctp/cm/latest/admin/secrets-management-akeyless/index.html#high-level-integration-process) に沿って解説します

[Configure Secrets Management](https://thalesdocs.com/ctp/cm/latest/admin/secrets-management-akeyless/config-secrets-management-akeyless/index.html)の設定手順が複雑なため、Akeylessで "Configuration Tool"を提供しており、本書ではこちらを利用した手順を解説しています。

<!-- These are the high level steps to manage secrets on a deployed CipherTrust Manager. -->
## CipherTrust Manager の デプロイ

下記の記事を参考に、CiperTrust Manager のデプロイを行って下さい
(今回のCSM利用では"Trial Evaluation" のアクティベーションは必要ありません)



https://qiita.com/shinyaarai/items/4007d20851e7b1d6e0f1

<!-- Ensure that there is public network connectivity to Akeyless SaaS Core Services. -->
<!-- ## Akeyss SaaS ネットワークアクセスへの確認 -->

<!-- Configure the Akeyless Gateway connection and authentication on CipherTrust Manager and Akeyless Console. -->
<!-- ## Akeyless Gateway コンフィグレーション -->

## CipherTrust Managerへのログイン
CipherTrust Manager へ管理者"admin"でログインします
"Secrets Management"の"Tile"が表示されていることが確認できます。（赤枠）
初期状態では、Akeyless とのコンフィグレーションが完了していないため、グレーアウト表示され、まだ利用できません

![CSM-1-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/02111709-c0b4-c524-5522-d866a71631b2.png)

## "secrets-manager"サービスの有効化
(CM v2.17以降）
Admin Settings > Services を選択します。
"secrets-manager"サービスの"Enable"ボタンをクリックし、有効化を行います。

## Akeyless アカウントの作成
ブラウザで `https://(CipherTrust Manager ホスト名/IPアドレス)/akeyless-console/`へアクセスします

![CSM-2-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/8838233e-240c-46d4-990f-9c2e98199098.png)

”Sign up"をクリックします


![CSM-2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/160047d2-e8df-0447-3b4f-5421ffae7cf7.png)

"Email"を入力、"End User License Agreement"及び"Privacy Policy"をご確認いただき、チェックボックスをクリック、"Let's Get Started"をクリックします


![CSM-2-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/61afe63a-523b-83ac-ab22-57b3987b8053.png)

"Check your inbox"のメッセージが表示されます
メールボックスを確認します

![CSM-2-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/e6992d62-532b-ece2-8a49-63005e7524aa.png)

メールボックスに Akeylessからのメールが送られていることが確認できます
"Activate Your Account"をクリックします

![CSM-2-6a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/9372ad93-9c61-a573-5cfe-a2760fa6a8e9.png)

"Access ID"及び"Access Key"が作成されました
"Save to .CSV file"をクリックし、"Access ID"及び"Access Key"を保存します

## AkeylessへのCM接続の設定

### Configuration Tool のダウンロード

ご利用の環境向けの "Configration Tool" のダウンロードを行います
- Linux https://download.akeyless.io/Akeyless_Artifacts/Linux/CipherTrustSetup/
- Windows https://download.akeyless.io/Akeyless_Artifacts/Windows/CipherTrustSetup/
- Mac https://download.akeyless.io/Akeyless_Artifacts/MacOS/CipherTrustSetup/

(本記事では、以降 Windowsを例に記述します)

### Configuration Tool の実行

Powershell を開きます
Configuration Tool を "-help"オプション付きで実行し、コンフィグレーションに必要なパラメータを確認します

```
PS C:\Users\Administrator\Downloads> .\CipherTrust_windows_v0.0.6.exe -help
Usage of C:\Users\Administrator\Downloads\CipherTrust_windows_v0.0.6.exe:
  -akl-admin-access-id string
        the Akeyless admin access id
  -akl-admin-access-key string
        the Akeyless admin access key
  -akl-am-name string
        the auth method name (default "SSO")
  -akl-key-name string
        the Akeyless default encryption key name
  -akl-role-name string
        the role name (default "SSO")
  -cm-group string
        limit Gateway admins to group (default "admin")
  -cm-pass string
        the CipherTrust password
  -cm-rotate-key string
        with rotate Auth Key (default "true")
  -cm-url string
        the CipherTrust url
  -cm-user-name string
        the CipherTrust user name
PS C:\Users\Administrator\Downloads>
```

| パラメータ | 説明 |  |
|:--|:--|:--|
| -akl-admin-access-id  | the Akeyless admin access id  | 今回作成したAkeylessアカウントの Access ID |
| -akl-admin-access-key  | the Akeyless admin access key  | 今回作成したAkeylessアカウントの Access Key |
| -akl-am-name  | the auth method name (default "SSO")  | 省略 |
| -akl-key-name  | the Akeyless default encryption key name  | 任意 "MY_ZK_DFC_KEY" |
| -akl-role-name  | the role name (default "SSO")  | 省略 |
| -cm-group  | limit Gateway admins to group (default "admin")  | 省略 |
| -cm-pass  | the CipherTrust password  | CM管理者”admin"パスワード |
| -cm-rotate-key  | with rotate Auth Key (default "true")  | 省略 |
| -cm-url  | the CipherTrust url  | CM IPアドレス（ホスト名) |
| -cm-user-name  | the CipherTrust user name  | CM管理者"admin" |


### 実行例
```
PS C:\Users\Administrator\Downloads> .\CipherTrust_windows_v0.0.6.exe -akl-admin-access-id p-n8dqv9o9risxam -akl-admin-access-key FJ8p6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAWzs= -akl-key-name MY_ZK_DFC_KEY -cm-url https://35.78.106.180 -cm-user-name admin -cm-pass Thales123!
got cipher trust token,
rotate Auth Key
successfully list Auth Key
successfully got akeyless token
successfully create new JWT auth method with access-id  p-p0ig45cy24pvom
successfully create role  SSO
successfully create association role auth method  SSO p-p0ig45cy24pvom
successfully create association role auth method  admin p-p0ig45cy24pvom
successfully got Gateway-admin new api-key  p-lfkgl1i3l09vam 4440YXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXb/bNo=
successfully create a gateway connection  4c2ac794-1634-4d8d-9cfc-8833fcafdf03
successfully create a gateway configuration  6a4684ec-669a-47e7-bfd0-1e0f55e82f5c
restarting CipherTrust
| successfully restart  👍
successfully create protection key MY_ZK_DFC_KEY
successfully set default zero-knowledge protection key
successfully set gateway url
successfully set access permissions for gateway admin group
PS C:\Users\Administrator\Downloads>
```

Configuration Toolで生成された、”Gateway-admin"の Access ID と Access Keyは、Akeyless Gatewayの利用で必要になりますので、値を保存します。



<!-- Create a default encryption key which uses the CipherTrust Manager customer fragment. -->
<!-- ## ディフォルト暗号化キー作成  -->

<!-- Begin managing secrets in the Akeyless Gateway Console. -->
## シークレット管理操作

再度、CipherTrust Manager へ管理者"admin"でログインします
Akeyless とのコンフィグレーションが完了済みのため、Tileが正常表示されるようになりました。（赤枠）
"Secrets Management"のTileをクリックします

![CSM-4-3a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/6e16f1e9-0261-b33a-d4c9-5062dc97741b.png)

Akeyless Gateway コンソールが表示されることを確認します

![CSM-4-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/c056e8c3-287a-ce81-7060-aa227d5894f8.png)

以上で、Akeyless Gatewayのコンフィグレーションは完了しました

あらかじめ生成済みの Static Secret である"MyFirstSecret"をクリックすると、このSecretの各種情報が表示されます

![CSM-4-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/237f857b-9170-3430-fa69-bbb15ece61fb.png)

"目"のアイコンをクリックすると、Secretの値"My First Secret Value"が確認できます
![CSM-4-6a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/82f1cd77-db3c-bc44-1ffd-0f051268da67.png)



## CLIの導入

Akeyless Gateway コンソールと同様に、CLIにて、Secretの値を確認ししてみます

### Akeyless CLI のインストール

今回は Linuxを例に表記しております。その他の環境や、詳細についてはドキュメント ["CLI"](https://docs.akeyless.io/docs/cli) をご参照下さい

Akeyless CLIのダウンロードを行います
```
$ curl -o akeyless https://akeyless-cli.s3.us-east-2.amazonaws.com/cli/latest/production/cli-linux-amd64
```

ダウンロードしたファイルを実行し、初期設定を行います
今回はSignup時に生成したAkeylessアカウントの Access IDとAceess KeyをCLIでの認証に用います

```
$ chmod +x akeyless
$ ./akeyless
AKEYLESS-CLI, first use detected
For more info please visit: https://docs.akeyless.io/docs/cli
Enter Akeyless URL (Default: vault.akeyless.io)
Would you like to configure a profile? (Y/n)
Profile Name:  (Default: default)
Access Type (enter for access_key):
  1) access_key
  2) aws_iam
  3) azure_ad
  4) saml
  5) ldap
  6) email/password
  7) oidc
  8) k8s
  9) gcp
  10) certificate
  11) oci
 1
Access ID:  p-n8dqv9o9risxam
Access Key:  ********************************************
The profile: default was successfully configured
Would you like to move 'akeyless' binary to: /home/ubuntu/.akeyless/bin/akeyless? (Y/n)
Please type your answer:
The cli was successfully moved to path: /home/ubuntu/.akeyless/bin/akeyless
Would you like to add '/home/ubuntu/.akeyless/bin' To user PATH environment variable? (Y/n)
Please type your answer:
Please run the following command to start using Akeyless CLI:
        'source /home/ubuntu/.bashrc'
$ source /home/ubuntu/.bashrc
```

正常に動作することを確かめるテストを行います
下記のコマンドで、管理されている Secretのリストが表示されます
```
$ akeyless list-items
{
  "items": [
    {
      "item_name": "/MY_ZK_DFC_KEY",
      "item_id": 292643381,
      "display_id": "l2o3ou3qa6Tm-r3ujw39t59lk",
      "item_type": "AES256GCM",
      "item_sub_type": "generic",
      "item_metadata": "",
      "item_tags": null,
      "item_size": 32,
      ...
      (省略)
      ...
      "creation_date": "2024-07-09T04:02:36Z",
      "modification_date": "2024-07-09T04:02:36Z",
      "access_date_display": "2024-07-09T04Z",
      "gateway_details": null
    }
  ],
  "next_page": "eyJpIjoiL2ZvbzEifQ=="
}
＄
```

GUIと同様に、あらかじめ生成済みの Static Secret である"/MyFirstSecret"を取得します
```
$ akeyless get-secret-value --name /MyFirstSecret
My First Secret Value
```
"My First Secret Value"の値を確認することができました


## Static Secretの作成
### Akeyless Gateway コンソール
Static Secret の作成を行います
Items > New > "Static Secret' を選択します
![CSM-5-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/3d1a074e-3864-28ec-c2e4-3bc4ea7183d0.png)

Name に、"foo1", Value に"bar1"を入力し、"Finish"をクリックします
![CSM-5-2a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/4d2d1478-414e-4195-6d5f-6ceccfae9591.png)

新しく生成された Static Secret "foo1"が確認できます
![CSM-5-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/ec22545f-625e-4f07-73f7-7911f608b68b.png)

"Value"の項目の"目"のアイコンをクリックすると、Value "bar1"が確認できます
![CSM-5-4a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/f16e2b42-a42a-7f8a-58d2-153ba27cb4be.png)

### 暗号化技術: "DFC" と "Zero Knowledge Encryption"

![CSM-5-4c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/5f5b9bb5-a4bb-f902-e430-adc7f87f8867.png)

"MyFirstSecret"と、今回作成した"foo1"の２つの Secretが確認できます
アイコンを見ると、"foo1"には、緑のマークが付いており、"MyFirstSecret"には付いていません

これは、暗号化技術である"Zero Knowledge Encryption"を利用しているかどうかを指し、利用している場合、緑のマークが付きます

![CSM-DFC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613085/ef202587-03ca-c48b-f89e-19a85148dc08.png)

全てのSecretは、DFCという暗号化技術を用い保存されます。Secretはまず、"Protection Key"(暗号鍵)で暗号化されます

"Protection Key"は、DFCにより、フラグメントに分割され、AWS, GCP, Azureの各クラウドへ保存されます

CipherTrust Manager内に"Akeyless Gateway"が稼働しており、もう一つのフラグメント"Customer Fragment"を、"Akeyless Gateway"に保存することができます
この"Customer Flagment"を利用する技術を"Zero Knowledge Encrption"と呼びます

Secret "MyFirstSecret"の暗号化には、"Default"の”Protection Key"が利用されています
"Default"の”Protection Key"は、"Zero Knowledge Encription"を利用してらず、Customer FragmentはAkeyless Gatewayに保存されていません

一方、新規に　Akeyless Gatewayコンソールから作成した Secret "foo1"の暗号化には、"MY_ZK_DFC_KEY"の”Protection Key"が利用されています
"MY_ZK_DFC_KEY"の”Protection Key"は、"Zero Knowledge Encription"を利用しており、Customer FragmentはAkeyless Gatewayに保存されています
このため、Akeyless Gatewayを用いないと、Secretを参照することができません


### CLI操作
先ほど、作成した ”Zero Knowledge Encription”利用の"/foo1"をCLIで取得してみます
現状、 直接、Akeyless SaaSへ問い合わせを行っており、Customer Fragment を参照することができず失敗しています

```
$ akeyless get-secret-value --name /foo1
null
failed to get the value of the requested secrets: failed to obtain secret's encryption key, error: failed to extract derived key, error: customer fragment 6a4684ec-669a-47e7-bfd0-1e0f55e82f5c is required for this operation but not available
```
CipherTrust Manager内のAkeyless Gatewayを利用するように設定をおこないます

### Akeyless CLI の Akeyless Gateway 利用設定

参照ドキュメント
- [Configuring Akeyless CLI Access for the Gateway Admin](https://thalesdocs.com/ctp/cm/latest/admin/secrets-management-akeyless/config-secrets-management-akeyless/index.html#configuring-akeyless-cli-access-for-the-gateway-admin)
- [Install the CLI Toolkit](https://thalesdocs.com/ctp/cm/latest/get_started/deployment/install-cli-toolkit/index.html)


#### hosts ファイルに CMホスト名の追加
/etc/hostsへ、CMのホスト名を登録します
"web.ciphertrustmanager.local"は、CMのディフォルト証明書で利用されています
今回はこれを利用します
```
<ciphertrust manager ipaddress> web.ciphertrustmanager.local
```
#### ksctl のインストール
CipherTrust Manager のCLIである ksctl のインストールをおこないます

```
$ curl -OLk https://web.ciphertrustmanager.local/downloads/ksctl_images.zip
$ unzip ksctl_images.zip
$ sudo cp ksctl-linux-amd64 /usr/local/bin/ksctl
```

フォルダ "$HOME/.ksctl"を作成し、コンフィグレーションファイル "config.yaml"を設定します
今回は "config_example.yaml"に対して、 LSCTL_PASSWORD, KSCTL_URL を変更しました
```
$ mkdir $HOME/.ksctl
$ cp config_example.yaml $HOME/.ksctl/config.yaml

$ cat $HOME/.ksctl/config.yaml
KSCTL_VERBOSITY: false
KSCTL_RESP: json
KSCTL_USERNAME: admin
KSCTL_PASSWORD: Thales123!
KSCTL_URL: https://web.ciphertrustmanager.local:443
KSCTL_JWT:
KSCTL_NOSSLVERIFY: true
KSCTL_TIMEOUT: 30
$
```

ksctl が正常にインストールできたか、確認を行います
```
$ ksctl version
$ ksctl --help
$ ksctl keys list
```

#### CipherTrust Manager の Web Interface の証明書ダウンロード
下記コマンドにて、Web Interface の証明書のダウンロードを行います
```
$ ksctl interfaces certificate get --name web --icertfile web-ciphertrustmanager-local.pem
```

必要に応じ、証明書(pemファイル)に含まれる証明書を確認します
```
$ openssl x509 -text -fingerprint -noout -in web-ciphertrustmanager-local.pem
```

#### Akeyless CLI 環境変数設定	
.bachrcへ下記、環境変数の追加をおこないます

- AKEYLESS_TRUSTED_TLS_CERTIFICATE_FILE: Akeyless CLIで参照するweb証明書
- AKEYLESS_GATEWAY_URL: Akeyless GW URLの指定: 

```
export AKEYLESS_TRUSTED_TLS_CERTIFICATE_FILE=~/web-ciphertrustmanager-local.pem
export AKEYLESS_GATEWAY_URL=https://web.ciphertrustmanager.local/akeyless-api/
```
.bashrc の再読込み
```
$ source .bashrc
```

再度、GUIにて作成した "/foo1"を取得します
Akeyless Gatewayを利用し、Customer Fragment を参照することができるようになったため、正常にSecretを取得できるようになりました
```
$ akeyless get-secret-value --name /foo1
bar1
```

## What's Next?

https://qiita.com/shinyaarai/items/3312112f3ce563f58ac4

https://qiita.com/shinyaarai/items/03beb8cbcc0aa722294a

https://qiita.com/shinyaarai/items/0c2a0f563c1b57d9b0ae

- シークレット管理や操作方法詳細
    - Akeyless の[動画付きチュートリアル](https://tutorials.akeyless.io/docs/introduction-to-akeyless-vaultless-platform)をご参照下さい

## 補足
- Akyless とCSM機能の違い

    - Akeyless の下記機能についてCSM未サポート
        - Classic keys (CMにてサポート)
        - KMIP (CM- KMIPにてサポート)
        - KMS Cloud Manager (CCKMにてサポート)
        - Transparent Data Encryption (CAKMにてサポート）
        - Tokenization (CT-VL にてサポート）
        - Secure Remote Access
        - Akeyless Password Manager