Amazon SageMaker Studioの署名付きURLのランディングページを変更する

Amazon SageMaker Studioの署名付きURLのランディングページを変更する

CreatePresignedDomainUrl APIで署名付きURLを発行する場合の、ランディングページの設定について紹介します。
Clock Icon2025.05.02

データ事業本部の鈴木です。

Amazon SageMaker StudioはSageMakerコンソールからのログインの場合、CreatePresignedDomainUrl APIで署名付きURLを発行してログインします。

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

https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreatePresignedDomainUrl.html#sagemaker-CreatePresignedDomainUrl-request-LandingUri

ここでCreatePresignedDomainUrl APIをよく見ると、LandingUriという引数があります。
説明によるとSageMaker Studioへのログイン時のランディングページを変更することができることが分かります。
ただ、この引数に関してはほとんど情報がないため、どのように使えるのか確認しました。

SageMaker Studioをユーザーに使ってもらう場合に、利用できる機能を詳細に制御したいとこれらの設定が気になります。ユーザーは権限さえあればCreatePresignedDomainUrl APIを実行し、任意のページにアクセスできる可能性があるためです。

LandingUri引数を使った署名付きURL作成について

ツールについて

使用するツールによって引数が指定できる場合とできない場合があります。

例えばAWS CLIは、記事執筆時点(v2.0.33)ではこの引数に対応していませんでした。

https://awscli.amazonaws.com/v2/documentation/api/2.0.33/reference/sagemaker/create-presigned-domain-url.html

一方boto3(v1.38.6)では対応していました。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_presigned_domain_url.html

今回はboto3でランディングページを指定して検証をしました。

指定できるページについて

冒頭のAPIガイドによると、以下のページおよびアプリに対応していることが分かりました。

  • studio::relative/path: Directs users to the relative path in Studio.
  • app:JupyterServer:relative/path: Directs users to the relative path in the Studio Classic application.
  • app:JupyterLab:relative/path: Directs users to the relative path in the JupyterLab application.
  • app:RStudioServerPro:relative/path: Directs users to the relative path in the RStudio application.
  • app:CodeEditor:relative/path: Directs users to the relative path in the Code Editor, based on Code-OSS, Visual Studio Code Open Source application.
  • app:Canvas:relative/path: Directs users to the relative path in the Canvas application.

やってみた

デフォルトのとき

署名付きURLからのログインを試したことがない方も多いと思うので、まずはデフォルトの場合を確認しました。
以下のCloud ShellでPythonスクリプトを実行して署名付きURLを作成し、アクセスしました。

import boto3

def main():
    client = boto3.client('sagemaker')

    response = client.create_presigned_domain_url(
                  DomainId='ドメインID',
                  UserProfileName='ユーザープロファイル名'
              )
    print(response)

if __name__ == "__main__":
    main()

AuthorizedUrlのバリューに署名付きURLが入っているため、ブラウザからアクセスしました。

SageMaker Studioのホーム画面にアクセスできました。

SageMaker Studioのホーム画面

SageMaker Studio内の別のページにランディングページを指定をしたとき

Running Instancesのページにランディングページを変えた署名付きURLを発行してみました。

Running Instancesのページは/running-instancesのパスです。

Running Instancesのページ

以下のCloud ShellでPythonスクリプトを実行して署名付きURLを作成し、アクセスするとRunning Instancesのページにアクセスできました。

import boto3

def main():
    client = boto3.client('sagemaker')

    response = client.create_presigned_domain_url(
                  DomainId='ドメインID',
                  UserProfileName='ユーザープロファイル名',
                  LandingUri='studio::running-instances'
              )
    print(response)

if __name__ == "__main__":
    main()

studio::がホームで、別のパスにする場合はそのパスを後ろにつけることが分かりました。

非表示にしているStudioのページにランディングページを指定をしたとき

HyperPod clustersのページをドメインの設定からStudio UIをカスタマイズして非表示にした上で、ランディングページに指定してアクセスしてみました。HyperPod clustersのページはhyperPod/clustersのパスです。

import boto3
def main():
    client = boto3.client('sagemaker')
    response = client.create_presigned_domain_url(
                  DomainId='ドメインID',
                  UserProfileName='ユーザープロファイル名',
                  LandingUri='studio::hyperPod/clusters'
              )
    print(response)
if __name__ == "__main__":
    main()

以下のようにアクセスできないことが分かりました。

HyperPod clustersのページにアクセスできない

アプリへランディングページ指定したとき

アプリは複数あるため、JupyterLabで試してみました。
今回はテスト用のスペースを作成し、起動しておきました。

テスト用のスペース

署名付きURLの作成のためのコードは以下のようにしました。
SpaceNameでスペースを指定し、LandingUriでJupyterLabアプリのパスを指定しました。

def main():
    client = boto3.client('sagemaker')
    response = client.create_presigned_domain_url(
                  DomainId='ドメインID',
                  UserProfileName='ユーザープロファイル名',
                  SpaceName='test-space',
                  LandingUri='app:JupyterLab:lab'
              )
    print(response)
if __name__ == "__main__":
    main()

作成された署名付きURLを踏むと、JupyterLabのホームにアクセスできました。

JupyterLabのホーム

なお、スペースを起動していないと以下のようなページになりました。

スペースを起動していないとき

スペースが起動しているとアクセスできてしまうようです。なにかしらの理由で絶対にアクセスさせたくない場合は、アプリを作成できないように権限を制御しておくと安心と思います。

以下のガイドで制御方法が紹介されていました。

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/studio-updated-migrate-ui.html

最後に

CreatePresignedDomainUrl APIによるランディングページを変更したAmazon SageMaker Studioの署名付きURLの払い出しについて紹介しました。参考になりましたら幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.