IBM Cloud の Watson Studioと Watson Knowledge Catalogで、Key Protectを使って製品ストレージ用Cloud Object Storageバケットを暗号化する

## 目次

1. 本記事の目的
2. Key Protectの準備
3. CP4DaaS製品ストレージ用のCloud Object StorageサービスへKey Protectのルート鍵を連携
4. CP4DaaS製品ストレージ用のCloud Object StorageバケットでKey Protectのルート鍵適用を確認
5. 関連資料 

## 1. 本記事の目的

IBM Cloud上で提供される Cloud Pak for Data as a Service（以降、CP4DaaSと表記） では、ワークスペース（Watson Studioのプロジェクト/Watson Knowledge Catalogのカタログ/Watson Machine Learningサービスのデプロイメント・スペース等）の製品用ストレージとして、Cloud Object Storageバケットを利用します。

本記事ではKey Protectを使って、Watson Studioプロジェクト および Watson Knowledge Catalogカタログの製品ストレージ用Cloud Object Storageバケットをユーザー独自のルート鍵で暗号化する方法を紹介します。

:::note info
Cloud Object Storageバケットはデフォルトで、IBMによって管理されるランダムに生成された鍵を使用して暗号化されます。従ってCP4DaaS製品ストレージのバケットはデフォルトで暗号化済みです。
本記事で扱う機能の利用はオプションであり、セキュリティ要件等により Cloud Object Storageバケットを独自の鍵で暗号化したい場合に利用をご検討ください。

[CP4DaaS製品資料：データ・セキュリティー > 保存データの暗号化](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/security-data.html?context=cpdaas&audience=wdp#encrypting-at-rest-data)

> ＜該当部分の抜粋＞
デフォルトでは、保存データは、 IBMによって管理されるランダムに生成された鍵を使用して暗号化されます。 デフォルトの鍵でデータを十分に保護できる場合は、追加のアクションは必要ありません。 保存データをさらに保護するために、 IBM® Key Protect for IBM Cloud™を使用して独自の鍵を作成および管理できます。 Key Protect は、データを保護して IBM Cloud Object Storageに保管できるようにするフルサービスの暗号化ソリューションです。
:::


::: note warn
(2023/9/25時点の情報)
CP4DaaSのワークスペースのうち、Watson Machine Learningのデプロイメントスペース用のCloud Object Storageバケットは、Key Protectによる暗号化がサポートされていません。
:::

## 2. Key Protect の準備

### 2-1. Key Protectとは
Key Protectは、データを保護するために使用する暗号鍵を管理するためのIBM Cloudサービスです。
Cloud Object Storageバケットを始めとして、IBM Cloudの各種サービスをユーザー管理の独自の鍵で暗号化するために利用します。ユーザー管理の鍵を使用した暗号化は、Bring Your Own Key (BYOK) と呼ばれることもあります。

- [Key Protect 製品資料：Key Protect の概要](https://cloud.ibm.com/docs/key-protect?topic=key-protect-about)
- [Key Protect 製品資料：サービスの統合 > サポートされるサービスの統合](https://cloud.ibm.com/docs/key-protect?topic=key-protect-integrate-services)

Key Protectでは2種類のタイプの鍵をサポートしており、鍵を作成したりインポートしたりすることで対象データの暗号化に利用できます。
1. ルート鍵
2. 標準鍵

Cloud Object Storageバケット等、IBM Cloudの各種サービスをユーザー管理の独自の鍵で暗号化する際には、ルート鍵を用いてエンベロープ暗号化を行います。
エンベロープ暗号化は、データ暗号鍵 (DEK)自体を別の鍵（マスタ鍵）で暗号化することで多層防御を実現します。マスタ鍵はKey Management System（KMS）でセキュアに保存・管理します。

-  IBM Cloud Object Storageにおけるエンベロープ暗号化の適用イメージ
    - ① ユーザーがデータを IBM Cloud Object Storage のバケットにアップロードすると、 IBM Cloud Object Storage側で自動的にデータ暗号鍵 (DEK) を使用してオブジェクトを暗号化します。
    - ② Key Protect サービスとIBM Cloud Object Storageバケットを統合することにより、エンベロープ暗号化をIBM Cloud Object Storage のデータ暗号鍵 (DEK)に追加できます。今回の構成では、KMSとしてKey Protectサービスを利用し、マスタ鍵としてKey Protectサービス上に作成したルート鍵を利用します。ルート鍵でDEKをラップ（つまり暗号化）します。
    - ③ Cloud Object Storageのバケットに保存されたデータの読み取り時、関連付けられているルート鍵を使用し、最終的に DEK を復号して真正性を検証します。ラップされた DEK は、関連付けられているルート鍵を使用しないとアンラップできないので、追加のセキュリティー層がデータに提供されることになります。

    画像引用元（一部改変）：[Key Protect 製品資料：IBM Cloud Object Storage との統合 > 統合が動作する仕組み > 図1. エンベロープ暗号化のコンテキスト・ビュー。](https://cloud.ibm.com/docs/key-protect?topic=key-protect-integrate-cos#kp-cos-how) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/fb32a072-0031-ac8f-d220-b533802f9fb2.png)
- [Key Protect 製品資料：エンベロープ暗号化を使用したデータ保護 > エンベロープ暗号化を使用した鍵のラッピング](https://cloud.ibm.com/docs/key-protect?topic=key-protect-envelope-encryption#wrapping)

ルート鍵は、定期的なローテーション (つまり、新規バージョンの鍵の作成) を行うことがベスト・プラクティスです。 定期的なローテーションによって、鍵の「暗号期間」と呼ばれる期間が短くなります。また、担当者の離職、プロセスの不具合、セキュリティー問題の検出などの特定のケースでもローテーションを利用できます。鍵のローテーションは手動実行に加えて、ローテーション・ポリシーによる自動ローテーションが利用可能です。
ローテーションのたびに鍵の新しい「バージョン」が作成され、鍵バージョンごとに IBM Cloud アカウントに課金されます。
- [Key Protect 製品資料：ルート鍵のローテーション](https://cloud.ibm.com/docs/key-protect?topic=key-protect-key-rotation)
- [Key Protect 製品資料：鍵の手動ローテート](https://cloud.ibm.com/docs/key-protect?topic=key-protect-rotate-keys&interface=ui)
- [Key Protect 製品資料：ローテーション・ポリシーの設定](https://cloud.ibm.com/docs/key-protect?topic=key-protect-set-rotation-policy&interface=ui)

ルート鍵のローテーション後、ルート鍵を利用しているIBM Cloudの各種サービス （Cloud Object Storageバケット等）において、新しい鍵バージョンへの同期化が以下の流れで行われます。
1. ルート鍵のローテーションの実行後、IBM Cloudの各種サービスへ鍵ライフサイクル・イベントが通知されます。
2. IBM Cloudの各種サービスは通知された同期要求に応答し、新しい鍵バージョンへの同期化を行います。
:::note warn
IBM Cloudの各種サービスがイベントおよび同期要求に応答するまでに最大 4 時間かかる場合があります。手動で同期APIを実行することも可能です。
:::

- [Key Protect 製品資料：関連付けられているリソースの同期化](https://cloud.ibm.com/docs/key-protect?topic=key-protect-sync-associated-resources&interface=ui)

### 2-2. Key Protectセットアップ手順

**本手順の前提**
- 作業を行うIBM Cloudアカウント内にCP4DaaSおよびCloud Object Storageサービスが作成済みであるものとします。
- Key Protectは有償IBM Cloudアカウントにおいてのみ利用可能です。料金プランも有償プランのみの提供となります。従ってLiteアカウントおよびLiteプランを利用することはできません。
    - (2023/9/25時点の情報) ただし、最初の鍵バージョン5つまでは無料となりますので、有償アカウントを保有している場合、鍵のバージョン数に注意すれば無料で試すことができます。
        - [Key Protect 製品資料：Key Protect on IBM Cloud の料金](https://cloud.ibm.com/docs/key-protect?topic=key-protect-pricing-plan&locale=ja&interface=ui)
         > ＜該当箇所の抜粋＞
IBM Cloud の Key Protect での価格設定は、アカウント内の 鍵バージョン の数に基づきます。 最初の 5 つの鍵バージョンは無料です。その後は、鍵バージョンごとの月額料金が USD1.045 になります。
鍵を作成またはインポートすると、その鍵の最初の バージョン が開始されます。 その結果、新規作成またはインポートされた鍵には、1 つのバージョンがあります。 鍵がローテートされるたびに、新しいバージョンが作成されます。 10 回ローテートされた鍵には、11 個のバージョン (ローテーションによって作成された 10 個のバージョンと初期バージョン) があります。

#### 2-2-1. Key Protectサービスの作成

- [Key Protect 製品資料：Key Protect サービスのプロビジョニング](https://cloud.ibm.com/docs/key-protect?topic=key-protect-provision)

1. 対象のIBM Cloudアカウントへログイン後、カタログでKey Protectを検索し、Key Protectサービスの作成画面へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ea24bc7c-31a9-38bc-f921-e5abbb2b7c8e.png)

2. Key Protectサービスの作成オプションを選択し、サービスを作成します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/80685a06-27df-d735-539b-a8f5f7d2616f.png)

3. Key Protectサービスの作成が完了すると、サービスの詳細画面が開きます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/b4c9a4eb-4544-0965-2028-290a7b2cb072.png)

#### 2-2-2. Key Protect鍵リングの作成
鍵を作成する前に、鍵をグループ化して管理するためのリソースである鍵リング（キーリング）を作成します。
デフォルトで鍵リングID `default`が存在しますが、今回は新規作成します。

- [Key Protect 製品資料：鍵リングを使用した鍵のグループ化](https://cloud.ibm.com/docs/key-protect?topic=key-protect-grouping-keys&interface=ui)

1. Key Protectサービスの詳細画面メニューより、「キーリング」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/13abc35f-c6e2-54f8-793a-5acb6ffeb94e.png)

2. 「作成」をクリックし、任意の鍵リングIDを指定し作成します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/12e86f4a-206e-e86e-79b3-ec73222963c8.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/51980120-8e94-f544-0e38-3900a7475c93.png)

3.　指定した鍵リングIDが作成されたことを確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/c5aef91d-68b0-9d51-4db3-fcf39ea3ccad.png)

#### 2-2-3. Key Protectルート鍵の作成

事前に作成した鍵リングを指定し、ルート鍵を作成します。

- [Key Protect 製品資料：ルート鍵の作成](https://cloud.ibm.com/docs/key-protect?topic=key-protect-create-root-keys&interface=ui)
- [Key Protect 製品資料：ローテーション・ポリシーの設定](https://cloud.ibm.com/docs/key-protect?topic=key-protect-set-rotation-policy&interface=ui)

1. Key Protectサービスの詳細画面メニューより、「鍵の管理」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/947fb6dd-ec4b-b52e-ac1f-fddefcd9e213.png)

2. 「追加」をクリックし、鍵の作成オプションを指定して作成します。
    - 鍵の作成
    - Root key
    - 鍵の名前：任意
    - Advanced Option
        - 鍵リングの選択：事前に作成した鍵リングID
        - Set Key rotation policy
            - Rotation Policy：Enabled
            - Rotation Interval：1　※本例では1か月周期

    Set Key rotation policyにてルート鍵の自動ローテーションを有効化することができます。鍵の作成後に、自動ローテーションの設定を変更（Disable, Intervalの変更）することも可能です。

:::note warn
鍵のローテーションによって新しい鍵バージョンが作成されます。鍵バージョン数に応じて課金されるので適切なローテーション周期を検討してください。
:::
　
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/6b131596-831d-c03b-eac2-7fa8ff170ff3.png)



3.　指定したルート鍵が作成されたことを確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/98b5c8b5-76e6-73ba-4ace-bcd964d07029.png)

#### 2-2-4. Key ProtectとIBM Cloud Object Storageサービス間の統合
Key ProtectとIBM Cloud Object Storageサービスが連携できるよう、サービス間の許可を構成します。

- [Key Protect 製品資料：サービスの統合](https://cloud.ibm.com/docs/key-protect?topic=key-protect-integrate-services#grant-access)

1. IBM Cloudアカウントの「アクセス(IAM)」ページのメニューより「許可」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/f4c9d9de-465b-7098-4f72-9605e792c271.png)

2. 許可の管理で「作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/a1207328-1eba-343d-67b9-77166d37db13.png)

3. 許可の付与対象を指定し、「許可」をクリックします。
    - ソース・アカウント：当該アカウント
    - ソース・サービス：Cloud Object Storage
        - アクセス権限の範囲の指定：選択された属性に基づくリソース
        - ソース・サービス・インスタンス：事前に作成済みのCloud Object Storageサービス
    - ターゲット・サービス：Key Protect
        - アクセス権限の範囲の指定：選択された属性に基づくリソース
        - Instance ID：事前に作成済みのKey Protectサービス 
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/4c951af3-44a0-2fde-ae7a-f9ed6013e58a.png)

4. 許可が作成されたことを確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/edac4642-0498-7595-5239-0a7485752dd0.png)


以上の手順で、Object StorageバケットでKey Protectのルート鍵を利用するための準備が整いました。
続いてCP4DaaSで製品ストレージ用Cloud Object StorageサービスがKey Protectを利用するための設定を行います。

## 3. CP4DaaS製品ストレージ用のCloud Object StorageサービスへKey Protectのルート鍵を連携

以下の製品資料を参照し、CP4DaaSのWatson StudioプロジェクトとWatson Knowledge Catalogカタログで、ユーザー独自のルート鍵による暗号化を利用できるようKey Protectのルート鍵を連携します。

[CP4DaaS製品資料：Cloud Pak for Data as a Service で使用するための IBM Cloud Object Storage のセットアップ > オプション: 独自の鍵を使用して IBM Cloud Object Storage インスタンスを暗号化する](https://dataplatform.cloud.ibm.com/docs/content/wsj/console/wdp_admin_cos.html?context=cpdaas&audience=wdp#byok)

1. 対象のIBM Cloudアカウントに作成したCP4DaaSへログインし、左側のメニューより「管理」＞「構成と設定」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/f838b3fa-6caa-e0aa-96f4-dbe4d5cf1b2e.png)

2. 構成と設定ページにて、「ストレージ委任」へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/f95a8398-e690-a6ff-b817-3461d00a913d.png)

3. CP4DaaS製品ストレージ用Cloud Object Storageリソースについて、プロジェクトとカタログのストレージ委任を有効化します。有効化されるとトグルボタンが緑色の状態となります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/8fe40066-c8b8-f319-ef17-ecca2699768a.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/0217124d-1615-f464-1927-a7b0cc7408d6.png)

4. CP4DaaS製品ストレージ用Cloud Object Storageリソースについて、暗号鍵の「追加+」をクリックし、「2-2.Key Protectセットアップ手順」で作成したKey Protectサービスおよびルート鍵を指定します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/dab96ad6-5e75-46c6-6ced-0b1b5add33cf.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/099b2994-16d9-a82b-c7de-60b67b980e98.png)

5. CP4DaaS製品ストレージ用Cloud Object Storageリソースへ、指定したルート鍵が追加されたことを確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/4f6fc3a4-7226-951d-67ff-4f1b2a7e388d.png)

以上の手順で、CP4DaaSでKey Protectを利用するための設定が完了しました。
続いて、Watson StudioプロジェクトおよびWatson Knowledge Catalogカタログを作成し、製品ストレージ用のCloud Object StorageバケットへKey Protectのルート鍵が適用されることを確認します。

## 4. CP4DaaS製品ストレージ用のCloud Object StorageバケットでKey Protectのルート鍵適用を確認

### 4-1. Watson Studio プロジェクト作成

:::note alert
(2023/9/25時点の情報)
Key Protect利用時の既知の制限事項として、**Key Protectによる暗号化が適用されたWatson StudioプロジェクトにおいてWatson Machine Learningに関連する資産タイプや操作のエラー発生**が報告されています。
従って、該当する資産タイプや操作を行う予定がある場合、Key Protectの利用をお控えいただくことをお勧めいたします。ただし、今後の製品更新に伴い制限が緩和される可能性もありますので、最新状況は製品資料をご確認ください。

[CP4DaaS製品資料：既知の問題と制限 > Key Protect が有効な場合の Cloud Object Storage の問題](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/known-issues.html?context=cpdaas&audience=wdp#cos)

＜該当部分の抜粋＞
> **Key Protect が有効な場合の Cloud Object Storage の問題**
Key Protect を Cloud Object Storage と併用することは、 Watson Machine Learning 資産での作業ではサポートされていません。 Key Protectを使用している場合、 Watson Studioで資産を操作するときに以下の問題が発生することがあります。
> - 以下の Watson Machine Learning 資産のトレーニングまたは保存が失敗する可能性があります。
>    - Auto AI
>    - 統合学習
>    - Watson Pipelines
> - SPSS モデルまたはノートブック・モデルをプロジェクトに保存できない場合があります。
:::

1. Watson Studioプロジェクトを作成します。この時、プロジェクト作成先のストレージ・サービスとして、Key Protectのルート鍵を追加したCloud Object Storageサービスを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/b910aa35-d17c-52bf-66ec-81831f977a46.png)

2. 作成されたWatson Studioプロジェクトで「管理」タブを開き「一般」ページで、プロジェクト用のCloud Object Storageバケットの名称を確認し、「IBM Cloudで管理」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/7e23f2c2-e184-4c9b-f8b0-920d18d7deda.png)

3. Cloud Object StorageのUIで、プロジェクト用のCloud Object Storageバケット詳細へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/bb835cfe-70b6-cc24-9852-fdc0920a8be9.png)

4. バケット詳細の「構成」タブを開き、「鍵管理」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ffe02435-1cbe-0d50-2d42-5c1d74715aca.png)

5. Key Protectサービスとルート鍵が関連付けられていることが確認できます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/dcc68e9a-4433-ddc1-5965-b7e67607370a.png)

以降、通常のプロジェクトと同様に資産を作成して利用します。

### 4-2. Watson Kanowledge Catalog カタログ作成

1. Watson Knowledge Catalogへカタログを作成します。この時、カタログ作成先のストレージ・サービスとして、Key Protectのルート鍵を追加したCloud Object Storageサービスを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/4b2cf121-77bd-b536-f3ad-bdf77708c5e0.png)

2. 作成されたWatson Knowledge Catalogカタログで「設定」タブを開き、カタログ用のCloud Object Storageバケットの名称を確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/49dca3fe-6b02-e8b3-62c6-8e1ff468fe9c.png)

3. Cloud Object StorageのUIを開き、カタログ用のCloud Object Storageバケット詳細へ進みます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/c95c29d1-788f-4573-506c-42222d347c4c.png)

4. バケット詳細の「構成」タブを開き、「鍵管理」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/2f8c6b2e-72f7-3179-7d80-d5b31cf33cac.png)

5. Key Protectサービスとルート鍵が関連付けられていることが確認できます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ad178813-7d14-506b-3069-6b63ca36894d.png)


以降、通常のカタログと同様に資産を作成して利用します。

## 5. 参照資料
- [Key Protect 製品資料：Key Protect の概要](https://cloud.ibm.com/docs/key-protect?topic=key-protect-about)
- [Key Protect 製品資料：Key Protect サービスのプロビジョニング](https://cloud.ibm.com/docs/key-protect?topic=key-protect-provision)
- [Key Protect 製品資料：鍵リングを使用した鍵のグループ化](https://cloud.ibm.com/docs/key-protect?topic=key-protect-grouping-keys&interface=ui)
- [Key Protect 製品資料：ルート鍵の作成](https://cloud.ibm.com/docs/key-protect?topic=key-protect-create-root-keys&interface=ui)
- [Key Protect 製品資料：サービスの統合](https://cloud.ibm.com/docs/key-protect?topic=key-protect-integrate-services)
- [Key Protect 製品資料：ルート鍵のローテーション](https://cloud.ibm.com/docs/key-protect?topic=key-protect-key-rotation)
- [Key Protect 製品資料：鍵の手動ローテート](https://cloud.ibm.com/docs/key-protect?topic=key-protect-rotate-keys&interface=ui)
- [Key Protect 製品資料：ローテーション・ポリシーの設定](https://cloud.ibm.com/docs/key-protect?topic=key-protect-set-rotation-policy&interface=ui)
- [Key Protect 製品資料：関連付けられているリソースの同期化](https://cloud.ibm.com/docs/key-protect?topic=key-protect-sync-associated-resources&interface=ui)
- [Key Protect 製品資料：エンベロープ暗号化を使用したデータ保護 > エンベロープ暗号化を使用した鍵のラッピング](https://cloud.ibm.com/docs/key-protect?topic=key-protect-envelope-encryption#wrapping)

- [CP4DaaS製品資料：Cloud Pak for Data as a Service で使用するための IBM Cloud Object Storage のセットアップ > オプション: 独自の鍵を使用して IBM Cloud Object Storage インスタンスを暗号化する](https://dataplatform.cloud.ibm.com/docs/content/wsj/console/wdp_admin_cos.html?context=cpdaas&audience=wdp#byok)
- [CP4DaaS製品資料：既知の問題と制限 > Key Protect が有効な場合の Cloud Object Storage の問題](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/known-issues.html?context=cpdaas&audience=wdp#cos)