

# アクセス許可の管理
<a name="permissions-management"></a>

このセクションでは、SageMaker AI Studio ドメインのプロビジョニングと運用によく使用される IAM ロール、ポリシー、およびガードレールを設定するためのベストプラクティスについて説明します。

## IAM ロールとポリシー
<a name="iam-roles-and-policies"></a>

 ベストプラクティスとして、ML ライフサイクルに関わる関係者やアプリケーション (プリンシパルと呼ばれます) を最初に特定し、どの AWS アクセス許可をプリンシパルに付与する必要があるかを見極めます。SageMaker AI はマネージドサービスであるため、ユーザーに代わって API コールを実行できるサービスプリンシパル (AWS のサービス) を考慮する必要もあります。次の図は、組織内のさまざまなペルソナに応じて作成するさまざまな IAM ロールを示しています。

![\[SageMaker AI の IAM ロールを示す図。\]](http://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/images/sagemaker-iam-roles.png)


これらのロールについて詳しく説明し、必要となる特定の IAM アクセス許可の例を示します。
+  **ML 管理者ユーザーロール** — これは、データサイエンティストのために環境をプロビジョニングするプリンシパルであり、Studio ドメインとユーザープロファイルの作成 (`sagemaker:CreateDomain`、`sagemaker:CreateUserProfile`)、ユーザー用の AWS Key Management Service (AWS KMS) キーの作成、データサイエンティスト用の S3 バケットの作成、コンテナを格納するための Amazon ECR リポジトリの作成を行います。また、ユーザー用のデフォルト設定とライフサイクルスクリプトを設定したり、カスタムイメージを作成して SageMaker AI Studio ドメインにアタッチしたり、カスタムプロジェクトや Amazon EMR テンプレートなどのサービスカタログ製品を提供したりすることもできます。

   例えば、このプリンシパルはトレーニングジョブを実行しないため、SageMaker AI のトレーニングジョブや処理ジョブを起動するアクセス許可は不要です。CloudFormation や Terraform などのコードテンプレートとしてインフラストラクチャを使用してドメインやユーザーをプロビジョニングする場合、プロビジョニングサービスは、このロールを引き受けて管理者に代わってリソースを作成します。このロールには、AWS マネジメントコンソールを使用して SageMaker AI への読み取り専用アクセス権を付与できます。

   このユーザーロールには、プライベート VPC 内でドメインを起動するための特定の EC2 アクセス許可、EFS ボリュームを暗号化するための KMS アクセス許可、Studio のためにサービスにリンクされたロールを作成するアクセス許可 (`iam:CreateServiceLinkedRole`) も必要です。これらのアクセス許可の詳細については、このドキュメントの後半で説明します。
+  **データサイエンティストのユーザーロール** — このプリンシパルは、SageMaker AI Studio にログインし、データを探索したり、処理/トレーニングジョブやパイプラインを作成したりするユーザーです。ユーザーが必要とする主なアクセス許可は、SageMaker AI Studio を起動するアクセス許可で、残りのポリシーは SageMaker AI 実行サービスロールで管理できます。
+  **SageMaker AI 実行サービスロール** — SageMaker AI はマネージドサービスであるため、ユーザーに代わってジョブを起動します。このロールには、多くの場合、最も広範なアクセス許可が付与されます。多くのお客様は、トレーニングジョブ、処理ジョブ、またはモデルホスティングジョブを実行するために 1 つの実行ロールを使用することを選択するためです。これは簡単な開始方法ですが、お客様はジャーニー中に成熟すると、ノートブックの実行ロールを API アクション別に複数のロールに分割する場合があります。特に、デプロイされた環境でジョブを実行する場合はそうです。

  ロールは、作成時に SageMaker AI Studio ドメインに関連付けます。ただし、お客様は (職務などに基づいて) ドメイン内のユーザープロファイルごとに異なるロールを関連付けるという柔軟性を必要とする場合があるため、ユーザープロファイルごとに別個の IAM ロールを関連付けることもできます。1 人の物理ユーザーを 1 つのユーザープロファイルにマップすることをお勧めします。ユーザープロファイルの作成時にロールをアタッチしない場合、デフォルトの動作では、SageMaker AI Studio ドメインの実行ロールもユーザープロファイルに関連付けられます。

   複数のデータサイエンティストと ML エンジニアが 1 つのプロジェクトで協働し、リソースにアクセスするためのアクセス許可モデルを共有する必要がある場合は、チームレベルの SageMaker AI サービス実行ロールを作成してチームメンバー間で IAM アクセス許可を共有することをお勧めします。各ユーザーレベルでアクセス許可をロックダウンする必要があるインスタンスでは、ユーザーレベルの SageMaker AI サービス実行ロールを個別に作成できます。ただし、サービスの制限に注意する必要があります。

## SageMaker AI Studio ノートブックの承認ワークフロー
<a name="sagemaker-studio-notebook-authorization-workflow"></a>

このセクションでは、データサイエンティストが SageMaker AI Studio ノートブックから直接モデルを構築およびトレーニングするために実行する必要があるさまざまなアクティビティで、SageMaker AI Studio ノートブックの承認がどのように機能するかについて説明します。SageMaker AI ドメインは次の 2 つの承認モードをサポートしています。
+ IAM フェデレーション 
+ IAM アイデンティティセンター

次に、このホワイトペーパーでは、モード別のデータサイエンティスト承認ワークフローを詳しく紹介します。

![\[Studio ユーザー向けの認証と認可ワークフローを示す図。\]](http://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/images/authentication-authorization-workflow.png)


### IAM フェデレーション: SageMaker Studio ノートブックワークフロー
<a name="iam-federation-studio-notebook-workflow"></a>

1. データサイエンティストは、企業 ID プロバイダーの認証を受け、SageMaker AI コンソールでデータサイエンティストのユーザーロール (ユーザーフェデレーションロール) を引き受けます。このフェデレーションロールには、ロールの Amazon リソースネーム (ARN) を SageMaker Studio に渡すための `iam:PassRole` API アクセス許可が SageMaker AI 実行ロールにあります。

1. データサイエンティストは、SageMaker AI 実行ロールに関連付けられている Studio IAM ユーザープロファイルから **Open Studio** リンクを選択します。

1. SageMaker Studio IDE サービスが起動し、ユーザープロファイルの SageMaker 実行ロールのアクセス許可を引き受けます。このロールには、ロールの ARN を SageMaker AI トレーニングサービスに渡すための `iam:PassRole` API アクセス許可が SageMaker AI 実行ロールにあります。

1. データサイエンティストがリモートコンピューティングノードでトレーニングジョブを起動すると、SageMaker AI 実行ロールの ARN が SageMaker AI トレーニングサービスに渡されます。これにより、この ARN を使用して新しいロールセッションが作成され、トレーニングジョブが実行されます。トレーニングジョブのアクセス許可をさらに絞り込む必要がある場合は、トレーニング専用のロールを作成し、このロールの ARN をトレーニング API を呼び出すときに渡すことができます。



#### IAM アイデンティティセンター: SageMaker AI Studio ノートブックワークフロー
<a name="idc-sagemaker-studio-notebook-sagemaker-workflow"></a>

1. データサイエンティストは、企業 ID プロバイダーの認証を受け、AWS IAM アイデンティティセンターをクリックします。データサイエンティストには、ユーザー用のアイデンティティセンターポータルが表示されます。

1. データサイエンティストは、SageMaker AI 実行ロールに関連付けられた IdC ユーザープロファイルから作成された SageMaker AI Studio アプリリンクをクリックします。

1. SageMaker AI Studio IDE サービスが起動し、ユーザープロファイルの SageMaker AI 実行ロールのアクセス許可を引き受けます。このロールには、ロールの ARN を SageMaker AI トレーニングサービスに渡すための `iam:PassRole` API アクセス許可が SageMaker AI 実行ロールにあります。

1. データサイエンティストがリモートコンピューティングノードでトレーニングジョブを起動すると、SageMaker AI 実行ロールの ARN が SageMaker AI トレーニングサービスに渡されます。実行ロールの ARN は、この ARN を使用して新しいロールセッションを作成し、トレーニングジョブを実行します。トレーニングジョブのアクセス許可をさらに絞り込む必要がある場合は、トレーニング専用のロールを作成し、このロールの ARN をトレーニング API を呼び出すときに渡すことができます。

### デプロイされた環境: SageMaker AI トレーニングワークフロー
<a name="deployed-environment-sagemaker-training-workflow"></a>

システムテストや本番稼働などのデプロイされた環境では、ジョブは自動スケジューラとイベントトリガーを介して実行され、これらの環境に対する人間のアクセスは SageMaker AI Studio ノートブックからのものに制限されます。このセクションでは、デプロイされた環境で IAM ロールが SageMaker AI トレーニングパイプラインとどのように連携するかについて説明します。

![\[マネージド本番環境での SageMaker AI トレーニングワークフローを示す図。\]](http://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/images/sagemaker-training-workflow-prod.png)


1. [Amazon EventBridge](https://aws.amazon.com/eventbridge/) スケジューラは SageMaker AI トレーニングパイプラインジョブをトリガーします。

1. SageMaker AI トレーニングパイプラインジョブは、モデルをトレーニングするための SageMaker AI トレーニングパイプラインロールを引き受けます。

1. トレーニング済みの SageMaker AI モデルは SageMaker AI モデルレジストリに登録されます。

1. ML エンジニアは ML エンジニアのユーザーロールを引き受け、トレーニングパイプラインと SageMaker AI モデルを管理します。

## データのアクセス許可
<a name="data-permissions"></a>

SageMaker AI Studio ユーザーが任意のデータソースにアクセスできるかどうかは、SageMaker AI の IAM 実行ロールに関連付けられたアクセス許可によって決まります。アタッチされたポリシーにより、特定の Amazon S3 バケットまたはプレフィックスの読み取り、書き込み、削除と、Amazon RDS データベースへの接続をユーザーに許可できます。



### AWS Lake Formation データへのアクセス
<a name="accessing-aws-lake-formation-data"></a>

多くの企業は、[AWS Lake Formation](https://aws.amazon.com/lake-formation/) が管理するデータレイクの使用を開始し、ユーザー向けにきめ細かいデータアクセスを可能にしています。このような管理されたデータの例として、管理者は一部のユーザーに対して機密性の高い列をマスクしながら、同じ基になるテーブルのクエリを有効にすることができます。

SageMaker AI Studio から Lake Formation を利用する場合、管理者は SageMaker AI の IAM 実行ロールを `DataLakePrincipals` として登録できます。詳細については、「[Lake Formation 許可のリファレンス](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html)」を参照してください。承認された場合、SageMaker AI Studio の管理されたデータにアクセスして書き込むための方法が、次に示すように主に 3 つあります。

1. ユーザーは、SageMaker AI Studio ノートブックから、[Amazon Athena](https://aws.amazon.com/athena/) などのクエリエンジンや boto3 上に構築されるライブラリを利用して、データをノートブックに直接取り込むことができます。[AWS SDK for Pandas](https://github.com/aws/aws-sdk-pandas) (旧 awswrangler) は人気のあるライブラリです。次のコード例は、これがどれほどシームレスになれるかを示しています。

   ```
   transaction_id = wr.lakeformation.start_transaction(read_only=True)
   df = wr.lakeformation.read_sql_query(
       sql=f"SELECT * FROM {table};",
       database=database,
       transaction_id=transaction_id
   )
   ```

1. Amazon EMR に対する SageMaker AI Studio のネイティブ接続を使用して、データの読み取りと書き込みを大規模に行います。Apache Livy と Amazon EMR のランタイムロールを使用することで、SageMaker AI Studio はネイティブ接続を構築しています。これにより、SageMaker AI の実行 IAM ロール (または他の承認されたロール) を Amazon EMR クラスターに渡して、データのアクセスと処理を行うことができます。最新の手順については、「[Studio から Amazon EMR クラスターに接続する](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-connect.html)」を参照してください。  
![\[Lake Formation が管理するデータに SageMaker Studio からアクセスするためのアーキテクチャを示す図。\]](http://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/images/access-lf-data.png)

1. [AWS Glue インタラクティブセッション](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions.html)に対する SageMaker AI Studio のネイティブ接続を使用して大規模にデータを読み書きします。SageMaker AI Studio ノートブックには、ユーザーが [AWS Glue](https://aws.amazon.com/glue/) に対してコマンドをインタラクティブに実行できるカーネルが組み込まれています。これにより、管理されたデータソースに対してデータのシームレスな読み書きを大規模に行うことができる Python、Spark、または Ray バックエンドのスケーラブルな使用が可能になります。カーネルを使用すると、ユーザーは SageMaker の実行ロールや他の承認された IAM ロールを渡すことができます。詳細については、「[AWS Glue のインタラクティブセッションを使用してデータを準備する](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-glue.html)」を参照してください。

## 一般的なガードレール
<a name="common-guardrails"></a>

このセクションでは、IAM ポリシー、リソースポリシー、VPC エンドポイントポリシー、サービスコントロールポリシー (SCP) を使用して ML リソースにガバナンスを適用する際に最もよく使用されるガードレールについて説明します。

### ノートブックへのアクセスを特定のインスタンスに制限する
<a name="limit-notebook-access-to-specific-instances"></a>

 このサービスコントロールポリシーを使用すると、Studio ノートブックの作成中にデータサイエンティストがアクセスできるインスタンスタイプを制限できます。どのユーザーにも、SageMaker AI Studio をホストするデフォルトの Jupyter Server アプリの作成を許可された「システム」インスタンスが必要であることに注意してください。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "LimitInstanceTypesforNotebooks",
             "Effect": "Deny",
             "Action": [
                 "sagemaker:CreateApp"
             ],
             "Resource": "*",
             "Condition": {
                 "ForAnyValue:StringNotLike": {
                     "sagemaker:InstanceTypes": [
                         "ml.c5.large",
                         "ml.m5.large",
                         "ml.t3.medium",
                         "system"
                     ]
                 }
             }
         }
     ]
 }
```

### 非準拠の SageMaker AI Studio ドメインを制限する
<a name="limit-non-compliant-sagemaker-studio-domains"></a>

 SageMaker AI Studio ドメインでは、次のサービスコントロールポリシーを使用して、お客様のリソースにアクセスするトラフィックがパブリックインターネットを経由せずに、お客様の VPC を経由するように強制できます。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {   "Sid": "LockDownStudioDomain",
             "Effect": "Deny",
             "Action": [
                 "sagemaker:CreateDomain"
             ],
             "Resource": "*",
             "Condition": {
                          "StringNotEquals": {"sagemaker:AppNetworkAccessType": "VpcOnly"
                 },
                 "Null": {
                         "sagemaker:VpcSubnets": "true",
                         "sagemaker:VpcSecurityGroupIds": "true"
                 }
             }
         }
     ]
 }
```

### 未承認の SageMaker AI イメージの起動を制限する
<a name="limit-launching-unauthorized-sagemaker-images"></a>

 次のポリシーは、ユーザーが自分のドメイン内で未承認の SageMaker AI イメージを起動できないようにします。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Action": [
                 "sagemaker:CreateApp"
              ],
             "Effect": "Allow",
             "Resource": "*",
             "Condition": {
                 "ForAllValues:StringNotLike": {
                     "sagemaker:ImageArns": 
                         [
                         "arn:aws:sagemaker:*:*:image/{ImageName}"
                         ]
                 }
             }
         }
     ]
 }
```

### SageMaker AI の VPC エンドポイント経由でのみノートブックを起動する
<a name="launch-notebooks-only-via-sagemaker-vpc-endpoints"></a>

 SageMaker AI コントロールプレーンの VPC エンドポイントに加えて、SageMaker AI はユーザーが [SageMaker AI Studio ノートブック](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-interface-endpoint.html)または [SageMaker AI ノートブックインスタンス](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-interface-endpoint.html)に接続するための VPC エンドポイントをサポートしています。SageMaker AI Studio/ノートブックインスタンスの VPC エンドポイントを既に設定している場合、次の IAM 条件キーは、SageMaker AI Studio の VPC エンドポイント経由または SageMaker AI の API エンドポイント経由での SageMaker AI Studio ノートブックへの接続のみを許可します。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "EnableSageMakerStudioAccessviaVPCEndpoint",
             "Effect": "Allow",
             "Action": [
                 "sagemaker:CreatePresignedDomainUrl",
                 "sagemaker:DescribeUserProfile"
             ],
             "Resource": "*",
             "Condition": {
                 "ForAnyValue:StringEquals": {
                     "aws:sourceVpce": [
                         "vpce-111bbccc",
                         "vpce-111bbddd"
                     ]
                 }
             }
         }
     ]
 }
```

### SageMaker AI Studio ノートブックへのアクセスを特定の IP 範囲に制限する
<a name="limit-sagemaker-studio-notebook-access-to-a-limited-ip-range"></a>

 多くの場合、企業は SageMaker AI Studio へのアクセスを特定の許可された企業 IP 範囲に制限します。次の IAM ポリシーで `SourceIP` 条件キーを使用すると、これを制限できます。

```
{
     "Version": "2012-10-17",
     "Statement": [
         {
             "Sid": "EnableSageMakerStudioAccess",
             "Effect": "Allow",
             "Action": [
                 "sagemaker:CreatePresignedDomainUrl",
                 "sagemaker:DescribeUserProfile"
             ],
             "Resource": "*",
             "Condition": {
                 "IpAddress": {
                     "aws:SourceIp": [
                         "192.0.2.0/24",
                         "203.0.113.0/24"
                     ]
                 }
             }
         }
     ]
 }
```

### SageMaker AI Studio ユーザーが他のユーザープロファイルにアクセスできないようにする
<a name="prevent-sagemaker-studio-users-from-accessing-other-user-profiles"></a>

管理者は、ユーザープロファイルを作成するときに、必ずタグキー `studiouserid` を使用してプロファイルに SageMaker AI Studio ユーザー名をタグ付けしてください。プリンシパル (ユーザーまたはユーザーにアタッチされたロール) にもキー `studiouserid` でタグ付けする必要があります (このタグには任意の名前を使用可能であり、`studiouserid` に限定されません)。**

 次に、SageMaker AI Studio の起動時にユーザーが引き受けるロールに次のポリシーをアタッチします。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AmazonSageMakerPresignedUrlPolicy",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreatePresignedDomainUrl"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "sagemaker:ResourceTag/studiouserid": "${aws:PrincipalTag/studiouserid}"
                }
            }
        }
    ]
}
```

### タグ付けを強制する
<a name="enforce-tagging"></a>

 データサイエンティストは、SageMaker AI Studio ノートブックを使用してデータを探索し、モデルを構築およびトレーニングする必要があります。ノートブックにタグを付けると、使用状況のモニタリングやコストの管理に加えて、所有権や監査可能性の確認にも役立ちます。

 SageMaker AI Studio アプリの場合は、ユーザープロファイルがタグ付けされていることを確認してください。タグは、ユーザープロファイルからアプリに自動的に伝達されます。ユーザープロファイルの作成時にタグの使用を強制する (CLI および SDK でサポート) には、次のポリシーを管理者ロールに追加することを検討してください。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceUserProfileTags",
            "Effect": "Allow",
            "Action": "sagemaker:CreateUserProfile",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "studiouserid"
                    ]
                }
            }
        }
    ]
}
```

 トレーニングジョブや処理ジョブなどの他のリソースでは、次のポリシーを使用してタグを必須にすることができます。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceTagsForJobs",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateProcessingJob",
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "studiouserid"
                    ]
                }
            }
        }
    ]
}
```

### SageMaker AI Studio のルートアクセス
<a name="root-access-in-sagemaker-studio"></a>

 SageMaker AI Studio の場合、ノートブックは Docker コンテナで実行されます。デフォルトでは、このコンテナにはホストインスタンスへのルートアクセス権がありません。同様に、デフォルトのユーザーとして実行する場合を除き、コンテナ内の他のすべてのユーザー ID 範囲は、ホストインスタンス自体に非特権ユーザー ID として再マップされます。そのため、権限昇格の脅威はノートブックコンテナ自体に限定されます。

 カスタムイメージを作成する場合、より厳密な制御を行うために、ユーザーにルート以外のアクセス許可を付与できます。例えば、望ましくないプロセスをルートとして実行しないようにしたり、公的に入手可能なパッケージをインストールしたりできるようにします。このような場合は、Dockerfile 内でルート以外のユーザーとして実行するイメージを作成できます。ユーザーをルートとして作成するか、ルート以外として作成するかにかかわらず、ユーザーの UID/GID が、カスタムアプリの [AppImageConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html) の UID/GID と同一であることを確認する必要があります。これにより、SageMaker AI がカスタムイメージを使用してアプリを実行するように設定されます。例えば、Dockerfile が次のように非ルートユーザー向けにビルドされているとします。

```
ARG NB_UID="1000"
ARG NB_GID="100"
...
USER $NB_UID
```

 `AppImageConfig` ファイルでは、次のように `KernelGatewayConfig` に同じ UID と GID を記述する必要があります。

```
{
    "KernelGatewayImageConfig": {
        "FileSystemConfig": {
            "DefaultUid": 1000,
            "DefaultGid": 100
        }
    }
}
```

 カスタムイメージで使用できる UID/GID 値は 0/0、Studio イメージの場合は 1000/100 です。カスタムイメージの作成例および関連する `AppImageConfig` 設定については、こちらの [Github リポジトリ](https://github.com/aws-samples/sagemaker-studio-custom-image-samples)を参照してください。

 ユーザーがこれを改ざんしないように、SageMaker AI Studio ノートブックユーザーに `CreateAppImageConfig`、`UpdateAppImageConfig`、または `DeleteAppImageConfig` のアクセス許可を付与しないでください。