特定の IAM ユーザにだけ SageMaker Studio のユーザを使えるようにする

# 概要

AmazonSageMakerFullAccess を与えられた IAM ユーザは、SageMaker Studio の画面を開くと、Studio の全ユーザプロファイルを見てアクセスすることができます。これを特定のIAMユーザにしか開けないようにします。

例えば、IAMユーザ A には、Studio のユーザプロファイル X のみにアクセスを許可し、他のユーザプロファイル Y, Z にはアクセスを許可しないというものです。

# IAM ユーザを準備します

**ユーザを操作できる管理者権限でログインしておきましょう。**

ひとまず AmazonSageMakerFullAccess を与えたIAMユーザを作成して、SageMaker に関しては、ある程度何でもできるユーザにしておきます。

まず IAM のユーザ画面にアクセスして、右上のボタンからユーザ追加

![スクリーンショット_2021-08-20_15_49_09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/c6b2d154-19a0-82cf-00b1-939a48f06429.jpeg)

ユーザ名を適当に `restricted-studio-user` としました。user-A とか何でも構いません。コンソールからログインすることを想定して、`AWSマネジメントコンソールへのアクセス`にチェックを入れておきましょう。

![スクリーンショット 2021-08-20 15.49.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/b921bef5-7dce-4748-82e5-c830eed7de24.png)

次の画面で AmazonSageMakerFullAccess の権限を指定します。

![スクリーンショット 2021-08-20 15.50.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/90e3808c-92a0-c058-4fcb-267cc2eac5b0.png)

できました！

![スクリーンショット_2021-08-20_15_51_08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/01561933-be5f-9f39-4bf3-34a239d3e953.jpeg)

# SageMaker Studio のユーザプロファイル

先程作成した `restricted-studio-user` がアクセスする SageMaker Studio のユーザプロファイルを作成します。管理者権限のまま、Amazon SageMaker Studio の画面に移動します。まだ domain を作っていない場合は作成しましょう。

![スクリーンショット_2021-08-20_15_51_42.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/73c65a8e-5dc0-cbe7-36de-87b36487d472.jpeg)

Studio 側のユーザプロファイルは `restricted-user`という名前にしました。実行ロールはこのユーザが Studio で使うロールです。 AmazonSageMakerFullAccess がついているロールなどを適当に作成してここで指定します。

![スクリーンショット 2021-08-20 15.58.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/083b9696-0d59-86a3-8320-2edaa1beefee.png)

しばらく待つと、`restricted-user`というユーザができあがります。

# IAM ユーザの権限を絞って Studio へのアクセスを制限

先程作成したユーザプロファイル `restricted-user` のみを使えるようにします。具体的には、最初に作成した IAMユーザに以下の権限をつければOKです。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "NotResource": "arn:aws:sagemaker:(region):(account_id):user-profile/(domain_id)/(user_mame)"
        },
        {
            "Effect": "Allow",
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:(region):(account_id):user-profile/(domain_id)/(user_mame)"
        }
    ]
}
```
上の `Deny` は指定されたユーザープロファイル以外へのアクセスを禁止し、下の `Allow` は指定されたユーザープロファイルへのアクセスを許可します。上記では `AmazonSageMakerFullAccess`のポリシーが付与されていて、すべてのユーザープロファイルに対してアクセスが許可されているので `Deny` だけでも良いです。
Resource は、例えば、東京リージョン、アカウントID 123456789012、ドメインが d-XXXXXXxxxxxx, ユーザープロファイルが restricted-user なら以下のようになります。

```
arn:aws:sagemaker:ap-northeast-1:123456789012:user-profile/d-XXXXXXxxxxxx/restricted-user
```

ドメイン ID は Studio の以下の画面からも確認できます。

![Amazon_SageMaker.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/a7e2e9b4-c75a-7829-8fbc-dc9cdcc6931c.jpeg)

さて、IAM の画面に戻って、`restricted-studio-user` に上記のポリシーを追加します。IAM ユーザを選んだ画面で `インラインポリシーの追加` を選びましょう。

![スクリーンショット_2021-08-20_15_53_08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/5740cb23-b2bf-bee2-b660-b3f6ad6d58b0.jpeg)

上のタブで json を選んで作成したポリシーを貼り付けます。右下のボタンでポリシーの確認をして、その後、名前をつけて完了です。これで、IAMユーザ `restricted-studio-user` は Studio のユーザープロファイル `restricted-user` にしかアクセスできません。

![IAM_Management_Console.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/53d259e7-b400-52da-1619-0a520bce7ae6.jpeg)

# 試してみましょう

`restricted-studio-user` でログインしなおして Studio にアクセスします。AmazonSageMakerFullAccess の権限だと、コンソールの一部でエラーが出ますが、今回は問題ありません。許可されている `restricted-user` と許可されていない `default-1629100323037`を試してみます。


![Amazon_SageMaker_-__Private_Browsing_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/9a22f937-0172-5061-f6b1-ae364dfd8abc.jpeg)

## 許可されている場合

問題なくアクセスできました。

![スクリーンショット 2021-08-20 16.37.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/85f15313-5a90-1507-016e-65c2ebc2490c.png)

## 許可されていない場合



権限がないのでエラーが出て、Studio の画面にアクセスできませんでした。

![Amazon_SageMaker_-__Private_Browsing_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279199/e2f9b889-117b-af5a-8545-5cf5c57ac6be.jpeg)