Amazon SageMaker ドメイン作成時に設定が必要な各パラメータを解説

Amazon SageMaker Domain(ドメイン)作成時に設定するVPCやサブネット、セキュリティグループ、IAMロールなどの各パラメータについて解説します
2023.07.14

はじめに

Amazon SageMaker Studioを利用する場合、Amazon SageMaker Domain(以降、ドメイン)をセットアップする必要があります。

私がマネジメントコンソール上で、初めてドメインをセットアップしようとした際、各パラメータの意味が理解できなかったため、ドメインの構成をもとにパラメータを解説します。

また、ドメインを作成することで、自動作成されるリソースもありますので、ドメインを作成されたことがない方に参考になれば幸いです。

StudioやRStudio Workbenchの設定ではなく、ドメイン作成時の全般的なパラメータのみを解説します。

ドメイン構成について

ドキュメントに記載されているドメインの構成は、以下の通りです。

引用:https://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/domain-management.html

SageMaker Studioでは、以下の図の通り「JupyterServer」と「KernelGateway」の2種類のアプリケーションをEC2インスタンス(=ノートブックインスタンス)上のDockerコンテナで実行します。

  • JupyterServer
    • UI表示用のサーバです。各ユーザは1つのドメインに1つ持ちます。ユーザがウェブブラウザからアクセスすると、コンテナで実行されているNotebook Serverに接続します。
  • KernelGateway
    • 実際にカーネルを実行する環境で、各ユーザは1つのドメインに複数の KernelGatewayを同時に実行できます。

引用:https://aws.amazon.com/jp/blogs/machine-learning/dive-deep-into-amazon-sagemaker-studio-notebook-architecture/

実際の画面を見てみる

まずは、マネジメントコンソールから、ドメイン作成時の実際の画面をみてみます。

設定するパラメータは、以下です。

  • ドメイン名
  • 認証
  • デフォルトの実行ロール
  • インターネット経由の有無
  • VPC
  • サブネット
  • セキュリティグループ
  • KMS

ドメイン名は、適当でよいです。

認証方法は、AWS IAM Identity Center もしくは、AWS IAMです。

デフォルトの実行ロールから解説します。

IAMロール

まず、抑えるべきポイントは、SageMakerで利用されるIAMロールは、主に3つある点です。

  • ドメインの実行用IAMロール(デフォルトの実行ロール)
  • サービスリンクロール
  • ドメイン内のユーザー用の実行ロール

ドメインの実行用IAMロール

ドメインの実行用IAMロールは、SageMakerのAPIやAmazon S3などの他のAWSのサービスにアクセスする際に利用されます。

ドメイン作成時に設定する場合、頭にAmazonSageMakerがついているIAMロール名から選択できます。

サービスリンクロール

サービスリンクロールは、AWSのサービスにリンクされているサービスロールの一種であり、ユーザーに代わってアクションを実行するロールです。

サービスリンクロールは、初回のサービス利用時に自動的に作成されます。

ドメイン作成時、EFSやセキュリティグループなどのAWSリソースは自動で作成されますが、その際にサービスリンクロールが利用されます。

SageMakerノートブックインスタンス用のサービスリンクロールの名前は、AWSServiceRoleForAmazonSageMakerNotebooksです。

ユーザー側で、ロールにアタッチされているポリシーは確認できますが、編集はできません。

ドメイン内のユーザー用の実行ロール

Amazon SageMaker Studioのドメイン内の各ユーザーには、ユーザーごとに実行ロールを設定します。

この実行ロールは、ユーザーがStudio環境内で実行できるアクションを制御します。

つまり、Studio内でユーザーがノートブックインスタンスなどのリソースを作成する際に、SageMakerがそのユーザーの代わりに引き受ける実行ロールです。

ネットワークとストレージのセクション

続いて、ネットワークとストレージのセクションの以下5点を解説します。

  • インターネット経由の有無
  • VPC
  • サブネット
  • セキュリティグループ
  • KMS

インターネット経由の有無

ネットワーク構成は、以下の2つに分かれます。

  • パブリックインターネットのみ
  • VPC のみ

どちらの場合でも、 ドメインは、AWS側で管理されたアカウント内で作成されます。

パブリックインターネットのみ

引用:https://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/network-management.html

ノートブックインスタンスから、AWS側で管理されたアカウント内のインターネットゲートウェイ経由で、ユーザーアカウント内のSageMaker APIやCloudWatch Logs、S3バケットにアクセスします。

また、ドメイン作成時に選択したVPCのサブネット上に、EFSとセキュリティグループが作成されます。

VPCのみ

引用:https://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/network-management.html

ノートブックインスタンスから、AWS側で管理されたアカウント内のインターネットゲートウェイのルーティングは無効です。

図に示すように、ユーザーアカウント内のVPCエンドポイント経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスします。

ユーザーアカウント内のパブリックサブネットにNAT Gatewayを設置することで、インターネット経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスすることも可能です。

VPC

インターネット経由の有無で説明した通り、どのVPC上にEFSのマウントターゲットを作成するか選択します。

サブネット

インターネット経由の有無で説明した通り、どのサブネット上にEFSのマウントターゲットを作成するか選択します。

ノートブックインスタンスからEFSのマウントターゲットへのアクセスは、インターネット経由ではないので、プライベートサブネットを選択しましょう。

セキュリティグループ

ドメイン作成時に設定するセキュリティグループは、Studio を起動すると作成されるノートブックインスタンス(JupyterServerやKernelGateway)にとEFSのマウントターゲットで利用されます。

用途は、パブリックインターネットのみVPCのみの設定で異なります。

パブリックインターネットのみ

用途としては、ノートブックインスタンスからEFSのマウントターゲットにアクセスするためです。

ドメイン作成時、設定画面から、セキュリティグループは選択しなくて構いません。

理由は、ドメイン作成時に、EFSのマウントターゲット用とノートブックインスタンス用、合計2つセキュリティグループが自動作成されるためです。

後でドメインを作成しますので、その際に確認してみましょう。

VPCのみ

用途としては、以下の2点です。

  • ノートブックインスタンスからEFSのマウントターゲットにアクセスする
  • ノートブックインスタンスからSageMaker APIやCloudWatch Logs、S3バケットにアクセスする

ドメイン作成時、設定画面から、セキュリティグループの選択が必須です。

理由としては、ユーザーアカウント内のVPCエンドポイントやNATGatewayを設置したインターネット経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスするため、アウトバウンドを許可したセキュリティグループが必要です。

後で実際の画面を見ながら確認します。

KMS

デフォルトでは、AWSマネージド型キーを使いEFSとEBSを暗号化します。

カスタマー管理型キーを使用するには、キーID または ARN を入力します。

SageMaker StudioとEFS、EBSの関係性は以下の通りです。

  • EFS
    • ノートブックインスタンス用のストレージです。
    • ドメイン内の各ユーザーは、ドメインに関連付けられたEFS上で個別のホームディレクトリを利用します。
    • EFSは、ドメインやノートブックインスタンスが削除された後も残ります
  • EBS
    • カーネル実行環境(KernelGateway)のノートブックインスタンスにEBSボリュームがアタッチされます。
    • EBSは、ノートブックインスタンスが終了すると削除されます。

作成してみる

今回は、とりあえずSageMaker Studioを試してみたい、という目的で必要な機能が最小限の設定で作成します。

サブネットはプライベートサブネットを選択し、セキュリティグループ(new-sg)は、なくても問題ないですが、確認のため設定します。

パブリックインターネットのみを選択します。

後で、VPCのみを選択した場合も後で解説します

他の設定は不要のため、設定をオフにします。

ドメイン作成後に、ノートブックインスタンスを起動してみる

ドメインにユーザーを追加し、Studioを起動すると、JupyterServer(UIサーバー)が起動します。

起動をクリックすると、別タブで「Creating the JupyterServer application」の画面に遷移します。

ノートブックを作成してみます。

無事に立ち上がりました。

ドメイン作成後に、自動作成されるリソース

今回のドメイン設定で、自動作成されるリソースは、セキュリティグループとEFSの2つです。

セキュリティグループ

セキュリティグループは、2つ自動作成されました。

  • security-group-for-inbound-nfs-ドメインID
    • EFSのマウントターゲットにアタッチされます
    • ノートブックインスタンスからのインバウンドのみを許可してます
  • security-group-for-outbound-nfs-ドメインID
    • ノートブックインスタンスが利用します
    • EFSのマウントターゲットへのアウトバウンドのみを許可しています。

security-group-for-inbound-nfs-ドメインID

セキュリティグループ プロトコル ポート 送信先
インバウンド TCP 2049 security-group-for-outbound-nfs-ドメインID
アウトバウンド なし なし なし

security-group-for-outbound-nfs-ドメインID

セキュリティグループ プロトコル ポート 送信先
インバウンド なし なし なし
アウトバウンド TCP 2049 security-group-for-inbound-nfs-ドメインID

セキュリティグループの説明にも記載があるように、削除してはいけません。

ドメイン作成時に選択したセキュリティグループ

ドメイン作成時に設定したセキュリティグループ(new-sg)は、ノートブックインスタンス(JupyterServerとKernelGateway)にアタッチされていました。

自動でアタッチされるため、便利ですね。

security-group-for-inbound-nfs-ドメインIDもアタッチされているので、パブリックインターネットのみの場合、セキュリティグループ(new-sg)の追加は不要だと分かります。

EFS

設定したサブネットに対して、EFSとEFSのマウントターゲットが作成されていました。

また、セキュリティグループ(security-group-for-inbound-nfs-ドメインID)がアタッチされております。

ノートブックインスタンスを削除してみる

ノートブックインスタンス2つ(KernelGatewayとJupyterServer)を削除します。

ENIも削除されていることが確認できました。

ドメインをVPCのみの設定で作成する場合

先程は、パブリックインターネットのみの設定でドメインを作成しました。

VPCのみで設定した場合の違いを解説します。

違いは1点で、セキュリティグループのアタッチが必須です。

理由としては、ノートブックインスタンスから、ユーザーアカウント内のSageMaker APIやCloudWatch Logs、S3バケットにアクセスする経路が異なるためです。

ユーザーアカウント内のVPCエンドポイントやNATGatewayを設置したインターネット経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスするため、アウトバウンドを許可したセキュリティグループが必要です。

そのため、アウトバウンドがVPCエンドポイントのセキュリティグループを許可したり、0.0.0.0/0の設定でセキュリティグループを作成し、ドメイン設定時に選択しましょう。

再掲

引用:https://docs.aws.amazon.com/ja_jp/whitepapers/latest/sagemaker-studio-admin-best-practices/network-management.html

最後に

Amazon SageMaker ドメイン作成時に設定するパラメータについて解説しました。

ドメイン作成時に、入力するパラメータの意味や自動で作成されるリソースが初見だと分かりにくいため、参考になれば幸いです。

参考