IBM Cloud：Secrets Managerの概要

# 概要
本記事では、Secrets Managerについて記載し、実際にUser/Passwordを登録する手順を記載します。
Secrets ManagerはCertificate Managerの代替としても紹介されていますが、管理対象や機能など異なる部分があるので、ご注意ください。

# Secrets Managerの構成
Secrets Managerは以下で構成されます。
- **シークレット**
- **シークレット・グループ**
- **シークレット・エンジン**
それぞれについて、以下で詳細説明します。

## シークレットについて
Secrets Managerは、**シークレット**と呼ばれる機密情報を管理します。シークレットには、以下の様な、機密システムにアクセスするために使用する情報が該当します。
- ユーザー認証情報
- SSL証明書
- IAMキー (IBM Cloudサービスで使用)
- 外部APIキー
Secrets Managerでは、メタデータとシークレットの値で管理されます。
以下の画像はシークレットのjson表記です。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/a097047b-5d1a-12ea-5bd7-03100d2bfbc8.png width=80%>

## シークレット・グループについて
Secrets Managerでは、グループを作成してシークレットを編成し、チームの誰がグループに属するシークレットにアクセスできるかを制御できます。シークレット・グループでは、Manager、Writer、Secrets Reader、Readerの4種類で分類されます。
- **Manager**：Writer以上の権限を持ち、シークレットグループの管理、シークレットエンジンの設定、シークレットポリシーの管理など、特権的なアクションを完了することができます。
- **Writer**：シークレットの作成と編集を含む、SecretsReaderの役割を超える権限を持ちます。(シークレットグループの作成、シークレットのローテーションポリシーの管理、シークレットエンジンの設定を行うことはできません。)
- **SecretsReader**：読み取り専用のアクションを実行することができ、また、シークレットに関連付けられたシークレットデータにアクセスすることができます。(シークレットを作成したり、既存シークレットの値を変更したりすることはできません)
- **Reader**：サービス固有のリソースを表示するなど、Secrets Manager内で読み取り専用のアクションを実行できます。Readerは、シークレットに関連付けられたメタデータにのみアクセスすることができます。
必要でなくなったシークレット・グループは削除できます。
## シークレット・エンジンについて
シークレット・エンジンは、パスワードや API キーなど特定のタイプのシークレットのバックエンドとして機能します。シークレット・エンジンは、タイプに応じてデータを保管したり、オンデマンドでシークレットを生成したりすることができます。
一部のエンジンは、インスタンスで使用するには事前の構成が必要です。例えば、TLS 証明書を注文しようとしたり、初めて IAM 資格証明を作成しようとするときに、エンジンの構成が必要だというメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/811a38b4-ce01-d939-98de-0f67a502808e.png)
# シークレットを登録してみる
### Secrets Managerインスタンスの作成
IBM Cloud コンソールで、左上の検索ボックスより「secrets」を入力し、"Secrets Manager"を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/aa378718-6249-2c8a-25f1-19a546e0d85b.png)
必要項目を入力し、"Create"をクリックすると作成されます。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/b1ce7532-9171-493c-54d1-f44eefba6d9a.png width=60%>
### シークレット・グループの作成
IBM Cloud コンソールで、左上のハンバーガーメニューより「リソース・リスト」をクリック、サービスのリストからSecrets Manager のインスタンスを選択します。
**「シークレット・グループ」** タブをクリックし、**「作成」** をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/fc0dbe12-4ba4-ca13-a007-d41b51e58339.png width=100%>
名前の入力し、**「作成」** をクリックすると作成されます。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/7e3fd677-41b2-818b-8241-89752ef2ddcf.png width=100%>
### シークレット・グループへの登録
Secrets Managerインスタンスページより、**「シークレット・グループ」** タブをクリックすると先ほど作成したシークレット・グループが表示されます。
先ほど作成したシークレット・グループをクリックし **「Manage access」** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/627ea003-d438-eed3-d69c-d1dc67124117.png)
アクセスグループを選択し、対象と権限を設定し、**「Add」** をクリックします。
同様に追加したいアクセスグループを全て追加したのち、**「review」** をクリックすると対象ユーザーがアサインされます。
![Screen Shot 2022-05-17 at 16.32.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/3d76d037-2092-e539-e924-8b0c944623ba.png)
### シークレットの作成
Secrets Managerインスタンスページより、**「シークレット」** タブをクリックし、**「追加」** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/66f76cb0-0ae2-73d2-0190-a616a6429234.png)
対象のシークレット種別を選択します。（今回はUser Credentialsを選択します）
![Screen Shot 2022-05-17 at 16.43.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/9434b8ac-9fa6-61b5-b723-bcea66b042ea.png)
シークレット名を入力、シークレット・グループを選択します。
管理したいusernameとpasswordを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/b8d34fb5-d45d-ce1d-c782-269ba7288752.png)
完了すると下記画像のような呼び出し方法が表示され、登録が完了しました。(こちらは後からでも確認できます)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/aac5affb-4f14-d516-f950-8f3e93ab2b87.png width=60%>
### シークレットを呼び出してみる
先ほど表示されていたCLIをコピペし、登録したシークレットを取得してみます。
```
# ibmcloudコマンドでログイン
$ ibmcloud login -apikey xxxxxxxxxxxxxxxx -r jp-tok
API endpoint: https://cloud.ibm.com
Authenticating...
OK
...
# secrets manager プラグインをインストール
$ ibmcloud plugin install secrets-manager
Looking up 'secrets-manager' from repository 'IBM Cloud'...
Plug-in 'secrets-manager[sm] 0.1.19' found in repository 'IBM Cloud'
Attempting to download the binary file...
 11.11 MiB / 11.11 MiB [============================================] 100.00% 2s
11648192 bytes downloaded
Installing binary...
OK
Plug-in 'secrets-manager 0.1.19' was successfully installed into /Users/jp419713/.bluemix/plugins/secrets-manager. Use 'ibmcloud plugin show secrets-manager' to show its details.
# 登録したパスワードを取得
$ ibmcloud secrets-manager secret --secret-type "username_password" --id "xxxxxxxxxxxxxxxx" --service-url https://xxxxxxxxxxxxxxxx.us-south.secrets-manager.appdomain.cloud
...
name                          test-user-credentials
id                            xxxxxxxxxxxxxxxx
secret_type                   username_password
secret_group_id               xxxxxxxxxxxxxxxx
state_description             Active
description                   None
labels                        None
expiration_date               None
secret_data                   password="12345678"
                              username="testuser"
$
```
取得できました！！