CIS(IBM Cloud Internet Service)で特定ドメインの特定機能にのみ編集権限を与える方法

#はじめに

CIS(IBM Cloud Internet Service)にはSecurity/Performance/Availabilityに関する機能が豊富に存在するため、すべてのユーザーにすべての権限を与えるのではなく、特定のユーザーには限定した機能しか触らせないようにしたい・・・という要望は普通にあると思う。今回はIBM CloudのIAMでAvailablity(DNSなど）のみの権限を与えられるかどうかを確認してみた。

やりたいことは以下の通り。

- 複数インスタンスがあるなか、特定のインスタンスにしかアクセスさせたくない。
- その複数インスタンスの中でも、特定のドメインにしかアクセスさせたくない。
- そのドメインの中でも、Availability関連の機能（DNSなど）しか編集させたくない。

#1. 初期状態

##管理者視点: 
たくさんサービスが存在している。
<img width="687" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/c23d6e4c-5434-6743-29ed-6ac9be24edfe.png">
管理者は複数あるCISインスタンスにアクセスできるが、そのCISインスタンスの中にも複数のドメインが存在しそれらにアクセスできる。
<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/9a58acdb-8da7-6437-6f8c-41478830d5f9.png">


##利用者視点: 
初期状態ではどのサービスにも参照できていない。
<img width="776" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a84e0d3e-3034-f8d1-accd-cacf026d902a.png">

#2. CISのコンソールから権限を付与

##管理者視点での作業

今回は特定のドメインに対するDNS関連の作業のみを許可したいので、対象ユーザーに`Manager`ロールを与える。（ちなみに`Writer`権限だと既存Objectの編集はできるが新規作成などはできないようだ）。DNSは`Reliability`に属するので、それのみを選択して、`Create Policy`を選択する。なお、ドメインレベルでの`Viewer`ロールや`Reader`ロールは必ず付与されてしまうようだ。
<img width="786" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4785ea9f-0774-bf60-7d45-343921ff27e1.png">
<img width="617" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e5e16217-0efe-3a7b-8996-e700ff4ce32b.png">
IAMで該当ユーザーを確認してみると、上記操作によって新たに以下の権限が作成されている。
<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/2b880c3e-4a07-28a7-e28e-ce4f0f45204b.png">


#3. テスト

##ユーザー視点での作業

##3.1 該当のCISインスタンスが見えるようになった（期待通り）
<img width="939" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/b1c02a6b-d8ec-60e4-c0c2-18c231a46489.png">

##3.2 他のドメインは閲覧できない（期待通り）
<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a45d61ad-e13a-0c81-1b7b-05b849101821.png">

##3.3 この画面でDefense Modeに変更しようとすると失敗する（期待通り）
Defense Modeへの変更は`Security`の機能であり、`Reliability`の機能ではないので。
<img width="1090" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/078d969f-72d2-64ef-9618-a7ecca26f809.png">
<img width="1089" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/0e4608f6-da3f-3a62-cf2b-d87ff097d5a0.png">

##3.4 CDNをキャッシュしようとしても失敗する（期待通り）。
CDNは`Performance`の機能であり、`Reliability`の機能ではないので。
<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/abedbccb-849c-31c0-696e-4355f433ef8a.png">

##3.5 一方で、DNSレコードの追加・編集・削除は成功する（期待通り）
DNSは`Reliability`の機能なので。
<img width="1279" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/c6392d3b-24d1-b4bd-dac8-0c23f10d63f8.png">




#参考
IAMでは、以下のようににsub-scopeという機能もあるようだが、実際にはこれは機能していなかった。これは現時点では一般用途向けには推奨されていないらしい（多分内部的に使われているのであろう）ので、使わない方がよさそう。

<img width="1278" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/f5c79862-b3a5-6ee0-d636-6e5919d534a8.png">