IBM Cloudのリソース・グループとアクセス・グループを利用してCloud Pak for Data as a Service へのアクセス制御を行う

## 本記事の目的

本記事では、IBM Cloud上で提供される Cloud Pak for Data as a Service (以降、CP4DaaSと表記) を対象に、IBM Cloudの機能であるリソース・グループとアクセス・グループを利用して、東京リージョンに作成したCP4DaaSにのみアクセスを許可するための方法を紹介します。

:::note warn
本記事で扱う内容は、CP4DaaSリソースそのものへのアクセスを制御することが目的です。
CP4DaaS内のワークスペース（プロジェクトやデプロイメント・スペース、カタログ等）のアクセス制御は、別途実施が必要です。
:::

## 1. IBM Cloudにおけるリソースとアクセスの管理

1つのIBM Cloudアカウントを様々な用途やチームで共用する際、各ユーザーに必要最小限のアクセス権限のみを提供し、適切にアクセス制御を行うことが望ましいです。

アクセス制御で利用するIBM Cloudの機能について紹介します。

###  IBM Cloud® Identity and Access Management (IAM)

IBM Cloudでは、IBM Cloud® Identity and Access Management (IAM) を使用し、IBM Cloudアカウント内に作成したIAM 対応サービスへのアクセスを制御することができます。
CP4DaaSは IAM 対応サービスですので、IAMによるアクセス制御を利用可能です。

- 製品資料：IBM Cloud Identity and Access Management とは何ですか?
  https://cloud.ibm.com/docs/account?topic=account-iamfaq

### リソース・グループ

IBM Cloudのリソース・グループ機能を使用すると、IBM Cloudアカウント内に作成した複数のリソースを論理的に一つの単位で扱うことができます。
まず、用途やチームごとにリソース・グループを作成し、リソース（サービス・インスタンス等）の作成時にリソース・グループを指定します。
この時に指定したリソース・グループは、後から変更することはできません。

IBM Cloudアカウントの作成直後は、デフォルトでDefaultリソース・グループが作成されています。
Liteアカウントを除く有償アカウントにて、追加のリソース・グループを作成可能です。

- 製品資料：リソース・グループとは何ですか?
  https://cloud.ibm.com/docs/account?topic=account-resources-faq

- リソース・グループのイメージ
    - リソース・グループ A　 ：データ分析者向けのサービスを作成 
    - リソース・グループ B 　：アプリケーション開発者向けのサービスを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/05f24886-99e8-3546-fbf5-d66455948ff6.png)


### アクセス・グループ

複数のユーザーに対して同様のアクセス権限を提供したい場合、アクセス・グループを利用すると効率的です。

用途やチームごとにアクセス・グループを作成し、必要なアクセス権限を割り当てます。この時、アクセス権限の範囲として特定のリソース・グループおよびロケーションを指定します。

次に、ユーザーをアクセス・グループに追加します。
ユーザーは、アクセス・グループに割り当てられたアクセス権限に従ってIBM Cloudのリソースが利用可能となります。

各ユーザーへ個別にアクセス権限を割り当てることも可能ですが、アクセス・グループを利用することで、素早くアクセス権限を提供することができます。

- 製品資料：アクセス・グループを使用したリソースへのアクセス権限の割り当て
  https://cloud.ibm.com/docs/account?topic=account-access-getstarted&interface=ui

- 製品資料：なぜリソース・グループとアクセス・グループを使用するのですか?
  https://cloud.ibm.com/docs/account?topic=account-iamfaq#resource-groups

上述のIBM Cloudの機能を利用することで、各ユーザーに対して、効率的に必要最小限のアクセス権限のみを提供することができます。

- アクセス・グループのイメージ
    - アクセス・グループ A　 ：データ分析者がリソース・グループAのサービスを利用するためのアクセス権限を割り当て 
    - アクセス・グループ B 　：アプリケーション開発者がリソース・グループBのサービスを利用するためのアクセス権限を割り当て 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ad2d3130-86cf-9e9e-5e84-b219e164e4a2.png)


## 2. 東京リージョンのCP4DaaSにのみアクセスを許可する設定例

東京リージョンにCP4DaaSを作成し、ユーザーにアクセス権限を設定する方法を確認します。

### 1. リソース・グループの作成

この手順は、IBM Cloudアカウントの管理者で実施します。

- IBM Cloudへログインし、「管理」＞「アカウント」と進みます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ec1c38c2-5b02-6d6e-53ca-049bd2b0d9b6.png)

- 「リソース・グループ」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/bb7ce274-10a1-8b99-b5a9-494c0bcf7ed3.png)

- 任意のリソース・グループ名を指定し、「作成」をクリックします。
  例では、`RG CP4DaaS TOK` としています。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/08f91b96-014c-2db5-20b6-cd45c1a503e6.png)

- リソースグループの作成が完了し、一覧へ表示されることを確認します。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e64880f5-a567-1027-57e0-7881e5988afa.png)


### 2. CP4DaaSの作成

この手順は、IBM Cloudアカウントの管理者で実施します。

CP4DaaSの各サービスを作成します。
サービスの作成時に作成先のリソース・グループとして、前の手順で作成したリソース・グループを指定します。

- IBM Cloudのカタログより、Watson Studioの作成画面へ進みます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/96a0729a-c7a7-a60e-a0e6-ba197d503f93.png)

- Watson Studioの作成画面にて下記の必須項目を指定し、作成します。
  ロケーション：東京
  プラン：　　　任意の料金プランを指定
  サービス名：　任意の名前を指定
  リソース・グループの選択：前の手順で作成したリソース・グループ。例では、`RG CP4DaaS TOK`。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/63eaf569-9ec6-1a36-55ce-ab41b631a99c.png)

- Watson Studioと同様に、各サービスを作成します。
  作成画面の「リソース・グループの選択」では、前の手順で作成したリソース・グループを指定します。

    - Watson Machine Learning   ：「ロケーション」では東京を指定
    - Watson Knowledge Catalog　：「ロケーション」では東京を指定
    - Cloud Object Storage      ：「ロケーション」の指定は不要

- すべてのサービスの作成が完了した状態で、リソース・リストを表示します。
- グループのフィルターとして、リソース・グループ名を選択します。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/41a1a155-0645-d06d-f728-25a79784ff29.png)

- すべてのサービスが、作成時に指定したリソース・グループに作成されたことが確認できます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/8516d01c-90d8-cff5-3153-a860fed9f998.png)

### 3. アクセス・グループの作成

この手順は、IBM Cloudアカウントの管理者で実施します。

CP4DaaS製品資料より「Add nonadministrative users to your IBM Cloud account（非管理者ユーザーの追加）」を参照し、作成したアクセス・グループへ最小のアクセス権限を割り当てます。

製品資料のAdd users to the accountページのRoles for usersセクションに記載があります。

- 製品資料：Add users to the account > Roles for users
  https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/setup-addl-users.html?locale=en

CP4DaaSを利用するために、関連サービスに対する最小限のロールとして、`IAM Platform access`の`Viewer`が必要です。

> ＜該当箇所の抜粋＞
  IAM Platform access roles
  **The Viewer role has minimal**, view-only permissions. Users need at least Viewer role to see services in Cloud Pak for Data as a Service. A Viewer can:
>  - View, but not modify, available service instances and assets
>  - Associate services with projects.
>  - Become collaborator in projects or catalogs.
>  - Create projects, deployment spaces, and catalogs if storage delegation is enabled.

次の手順では、アクセス制御の挙動を確認するために2つのアクセス・グループを作成し、ユーザーを追加します。

- 3-1. 東京リージョンのCP4DaaSにアクセスを許可したアクセス・グループの作成　`AG CP4DaaS TOK`
- 3-2. ダラス・リージョンのCP4DaaSにアクセスを許可したアクセス・グループの作成 `AG CP4DaaS NOT TOK`

それぞれのアクセス・グループに割り当てるアクセス権限は以下の通りです。

|アクセス・グループ名|AG CP4DaaS TOK|AG CP4DaaS NOT TOK|
|---|---|---|
|対象サービス|すべてのIDおよびアクセス対応サービス|すべてのIDおよびアクセス対応サービス|
|リソース範囲： リソース・グループ|RG CP4DaaS TOK|RG CP4DaaS TOK|
|リソース範囲： リージョン|東京|ダラス|
|役割とアクション：プラットフォーム・アクセス|Viewer|Viewer|
|役割とアクション：サービス・アクセス|Reader|Reader|


#### 3-1. 東京リージョンのCP4DaaSにアクセスを許可したアクセス・グループの作成

- IBM Cloudへログインし、「管理」＞「アカウント」と進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/50001f29-75ce-9274-570f-1acb637b195d.png)

- 「アクセス・グループ」ページへ進み、「作成」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/7a53ec85-abf2-d58d-d34e-a4171d4ded4b.png)

- 任意のアクセス・グループ名を指定し、「作成」をクリックします。
  例では、`AG CP4DaaS TOK`を使用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/ffea9f0b-0be9-a421-a8eb-76a8897f3bf5.png)

- アクセス・グループの作成完了後、自動的に詳細画面が表示されます。
  アクセス・タブを開き、「アクセス権限の割り当て」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/55e24a15-3bca-7855-cea9-d20ef8c08e4f.png)

- アクセス・グループの作成画面が表示されます。
  サービスでは「すべてのIDおよびアクセス対応サービス」を選択し、「次へ」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/6991c227-c80e-debf-4e10-f0ef9b78e180.png)

- リソースでは、「特定のリソース」を選択します。
  属性タイプとして以下の2つを指定し、「次へ」をクリックします。

    - リソース・グループ：CP4DaaSを作成したリソースグループ名を指定。例では、`RG CP4DaaS TOK`。
    - リージョン: 東京 

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/16ea756b-1d71-2267-653a-a6c8b1cd34d6.png)

- リソース・グループ・アクセスでは、「ビューアー」を選択します。「次へ」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/5e5c4f8b-022b-c5fd-4bc0-0243f8800194.png)

- プラットフォーム・アクセスでは、「ビューアー」を選択します。「レビュー」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e9f548bf-6637-3883-dbe7-71c88b9d213d.png)

- サマリーを確認し、「割り当て」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/1f6775cd-6f05-d883-df9f-12167e109a22.png)

- アクセス・グループの詳細画面に戻ります。
  再度、アクセス・タブを開き、表示されたアクセス権限のうち「～リソースグループ内のすべてのサービス」のメニューより、「編集」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/9e2c27f6-60e6-5f3c-8bc2-b9c43ba4d82d.png)

- アクセス・グループのポリシーの編集画面にて、「役割とアクション」の「編集」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/0fd7d5f1-f365-52c8-102d-731d53313200.png)

- サービス・アクセスで「リーダー」を選択し、「保存」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/0adca222-9c51-3271-c4a4-6573dd5864bb.png)

- アクセス・グループの詳細画面に戻ります。
  再度、アクセス・タブを開き、表示されたアクセス権限へ、Readerが追加されたことを確認します。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/203ef11d-8bcc-5290-8a81-0beac61cbee6.png)

- アクセス・グループの詳細画面のユーザー・タブを開き、「ユーザーの追加」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/d0b29410-5b4f-61eb-5d60-b7fe0c91443f.png)

- テスト用のユーザーを追加します。
  例では、`テストユーザー401`を指定しています。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/adda53f6-3934-94df-122d-43ed56e13b4b.png)

- ユーザーが表示されることを確認します。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/acfa3f31-36d3-3cff-9220-3024d1e745ca.png)


#### 3-2. ダラス・リージョンのCP4DaaSにアクセスを許可したアクセス・グループの作成

ロケーション設定の有効性を確認するため、あえてアクセスを許可する範囲のロケーションを`ダラス`に設定したグループを作成します。
基本的な流れは、3-1.と同じです。変更が必要な箇所のみ、画面キャプチャを掲載します。

- IBM Cloudへログインし、「管理」＞「アカウント」と進みます。
- 「アクセス・グループ」ページへ進み、「作成」をクリックします。
- 任意のアクセス・グループ名を指定し、「作成」をクリックします。
  例では、`AG CP4DaaS NOT TOK`を使用しています。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/638c4e0f-43aa-2867-e52f-813118e98fae.png)


- アクセス・グループの作成完了後、自動的に詳細画面が表示されます。
  アクセス・タブを開き、「アクセス権限の割り当て」をクリックします。
- アクセス・グループの作成画面が表示されます。
  サービスでは「すべてのIDおよびアクセス対応サービス」を選択し、「次へ」をクリックします。
- リソースでは、「特定のリソース」を選択します。
  属性タイプとして以下の2つを指定し、「次へ」をクリックします。

    - リソース・グループ：CP4DaaSを作成したリソースグループ名を指定。例では、`RG CP4DaaS NOT TOK`。
    - リージョン: **ダラス** 

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/54f95871-c01e-f819-dc21-b7f3e4a88107.png)

- リソース・グループ・アクセスでは、「ビューアー」を選択します。「次へ」をクリックします。
- プラットフォーム・アクセスでは、「ビューアー」を選択します。「レビュー」をクリックします。
- サマリーを確認し、「割り当て」をクリックします。
- アクセス・グループの詳細画面に戻ります。
  再度、アクセス・タブを開き、表示されたアクセス権限のうち「～リソースグループ内のすべてのサービス」のメニューより、「編集」をクリックします。
- アクセス・グループのポリシーの編集画面にて、「役割とアクション」の「編集」をクリックします。
- サービス・アクセスで「リーダー」を選択し、「保存」をクリックします。
- アクセス・グループの詳細画面に戻ります。
  再度、アクセス・タブを開き、表示されたアクセス権限へ、Readerが追加されたことを確認します。
- アクセス・グループの詳細画面のユーザー・タブを開き、「ユーザーの追加」をクリックします。
- テスト用のユーザーを追加します。
  例では、`テストユーザー402`を指定しています。
- ユーザーが表示されることを確認します。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e28166cd-cfea-bc56-81b2-5d19d7d3a05d.png)


### 4. 挙動の確認

IBM Cloud WebコンソールとCP4DaaSより、アクセス制御の挙動を確認します。

#### 4-1. 東京リージョンのCP4DaaSにアクセスを許可したアクセス・グループのユーザー

テストユーザー401を使用し、IBM CloudとCP4DaaSへログインを試します。

- IBM Cloud のリソース・リスト
  リソース・リストへ、リソースグループ`RG CP4DaaS TOK`に作成した東京リージョンのCP4DaaSのサービスが表示されます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/9b0a2d63-d6b7-a7b9-973c-b83e876db83b.png)

- CP4DaaS
  CP4DaaSへのログインに成功します。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/bef841e1-4915-881d-02e3-bf9c9df9208f.png)

  しかし、新規プロジェクトの作成画面へ進むと、使用可能なObject Storageサービスが表示されず、「作成」をクリックすることができません。
  この状況に対応する方法を 「5. 非管理者ユーザーにプロジェクト作成を可能にするストレージ委任の有効化」 で紹介します。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/5b1f753b-a212-a36d-a0d9-bc14d6f3f7c2.png)


#### 4-2. ダラス・リージョンのCP4DaaSにアクセスを許可したアクセス・グループのユーザー

テストユーザー402を使用し、IBM CloudとCP4DaaSへログインを試します。

- IBM Cloud のリソース・リスト
リソース・リストへ、リソースグループ`RG CP4DaaS TOK`に作成した東京リージョンのCP4DaaSのサービスが表示されません。このアクセス・グループには、東京リージョンのリソースにアクセスする権限がないためです。

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/8859d8dd-e628-56e8-b80c-7045ad52a5fb.png)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/5fca8538-047b-5703-9205-e632e5d5b0f3.png)


- CP4DaaS
  もちろん、CP4DaaSへログインすることはできません。


4-1の手順にて、期待通り、東京リージョンに作成したCP4DaaSにのみアクセスを許可することができました。
また、4-2の手順にて、誤ったロケーションを指定した場合、リソース・グループのアクセス権限があったとしても、CP4DaaSへアクセスできないことが確認できました。
アクセス・グループでリソースの範囲を設定する際には、正しいリソース・グループとロケーションを指定することが必要です。

### 5. 非管理者ユーザーにプロジェクト作成を可能にするストレージ委任の有効化

**非管理者ユーザーによるプロジェクト作成について**

4-1の手順では、CP4DaaSへログイン後、新規プロジェクトの作成画面でオブジェクト・ストレージ・サービスが表示されず、プロジェクトを作成することができませんでした。

これは、3-1の手順で作成したアクセス・グループに割り当てた権限に、`オブジェクト・ストレージ・サービスの管理者権限`が含まれていないためです。
Watson Studioのプロジェクト作成時、裏側では、オブジェクト・ストレージ・サービスへのプロジェクト用バケットの作成と、Watson Studioからプロジェクト用バケットバへアクセスするための資格情報の生成を行います。
これらの処理に必要な権限がないとプロジェクトを作成することができません。

しかし、オブジェクト・ストレージの管理者権限は、非常に強いアクセス権限であり、CP4DaaSの非管理者ユーザーに提供するには不向きです。

そのため、Watson Studio では、非管理者ユーザーにオブジェクト・ストレージの管理者権限を割り当てることなく、Watson Studioへのプロジェクト作成を許可するためのオプション`Storage Delegation(ストレージ委任)`を提供しています。

このオプションを有効化すると、非管理者ユーザーもプロジェクト作成が可能となります。
製品資料のAdd users to the accountページのRoles for usersセクションに記載があります。

- 製品資料：Add users to the account > Roles for users
  https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/setup-addl-users.html?locale=en

> ＜該当箇所の抜粋＞
  IAM Platform access roles
  The Viewer role has minimal, view-only permissions. Users need at least Viewer role to see services in Cloud Pak for Data as a Service. A Viewer can:
>   - View, but not modify, available service instances and assets
>   - Associate services with projects.
>   - Become collaborator in projects or catalogs.
>   - **Create projects, deployment spaces, and catalogs if storage delegation is enabled.**

:::note warn
ストレージ委任の有効化についての補足です。
製品資料に記載がある通り、Storage Delegationを無効化した状態でも、プロジェクトのコラボレータになることは可能です。

>- Become collaborator in projects or catalogs.

例えば、管理者ユーザーがプロジェクト作成とコラボレータ登録まで実施し、非管理ユーザーへ払い出すといった使い方をするのであれば、ストレージ委任を有効化する必要はありません。
非管理者ユーザー自身が、新規プロジェクトを作成する要件がある場合のみ、ストレージ委任オプションを有効化してください。
:::

以降、ストレージ委任オプションの設定方法を紹介します。

**ストレージ委任オプションの有効化**

この手順は、IBM Cloudアカウントの管理者で実施します。

- CP4DaaSのメニューより、「管理」＞「ストレージ委任」と進みます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/d969c200-7b81-d587-f866-37b25d929353.png)

- デフォルトでは、ストレージ委任は無効化されています。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/be54216e-051b-e7d8-10b8-890fb49aecd5.png)

- Watson Studioプロジェクト用のストレージとして利用するObject Storageサービスのインスタンスについて、「ストレージ委任」を有効化します。 
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/a7c071b7-c83f-38c6-12eb-c8b94ae85e0e.png)


**非管理者ユーザーによるプロジェクト作成の実行**

テストユーザー401で、新規プロジェクト作成を行います。

- 新規プロジェクトの作成画面へ進み、Object Storageサービスが表示されることが確認します。
  任意のプロジェクト名を指定し、「作成」をクリックします。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/f50d464b-f337-07f3-357c-ca7cfebac6eb.png)

- プロジェクトの作成が完了すると、プロジェクトの詳細画面が表示されます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237849/e364b691-355f-b921-3f46-27483f014a4b.png)


## 関連資料

製品資料：Add users to the account > Roles for users
https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/setup-addl-users.html?locale=en

製品資料：Roles in Cloud Pak for Data as a Service
https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/roles.html?locale=en