SageMaker Studioで署名付きURLを発行してみた

SageMaker Studioで署名付きURLを発行してみた

Clock Icon2022.06.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です!

今回は、SageMaker Studioの署名付きURL機能を使用してマネジメントコンソール以外からアクセスする方法を試してみようと思います。

想定する構成図

以下のような構成で、SageMaker Studioドメインへのアクセスを、プライベートな通信のみに制限してみようと思います。

前提条件

前提条件は以下のリソースが作成済みであることです。

かなり作成手順を抜粋していますが、今回の内容とはあまり関係ない部分なのでご了承いただけると幸いです。

  • VPC
  • サブネット
  • ルートテーブル(およびサブネットへの関連付け)
  • NACL(デフォルト)
  • セキュリティグループ
    • EC2用:インバウンドルール無し、アウトバウンドルールフルオープン
    • VPCエンドポイント用:インバウンド443ポートをフルオープン、アウトバウンド
  • VPCエンドポイント
    • com.amazonaws.{region}.ssm
    • com.amazonaws.{region}.ssmmessages
    • com.amazonaws.{region}.ec2messages
    • com.amazonaws.{region}.sagemaker.api
    • com.amazonaws.{region}.sagemaker.runtime
    • com.amazonaws.{region}.logs
    • com.amazonaws.{region}.s3
    • aws.sagemaker.{region}.studio

IAMロールの設定

今回使用するEC2インスタンスのIAMロールには、「AmazonSSMManagedInstanceCore」と以下の権限が付与されたポリシーを付与します。

「vpce-abcdefg1234567890」と「vpce-1234567890abcdefg」には、以下のVPCエンドポイントIDを定義します。

  • com.amazonaws.{region}.sagemaker.api
  • aws.sagemaker.{region}.studio
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:DescribeDomain",
                "sagemaker:CreatePresignedDomainUrl"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:SourceVpce": [
                        "vpce-abcdefg1234567890",
                        "vpce-1234567890abcdefg"
                    ]
                }
            }
        }
    ]
}

署名付きURLの作成

AWS CLIやAWS SDKから署名付きURLは生成可能です。今回は、AWS CLIで署名付きURLを生成してみようと思います。

AWS CLI

sagemakercreate-presigned-domain-urlを使用して署名付きURLを作成します。

また必須引数として、「ドメインID」と「ユーザープロファイル」を指定する必要があります。

aws sagemaker create-presigned-domain-url \
--domain-id d-XXXXXXXXXXXX \
--user-profile-name XXXXXXXXXXXX

オプション

--session-expiration-duration-in-secondsオプションでセッションの有効期間を指定できます。

デフォルトでは、「43200秒(12時間)」のセッション有効期間でした。

--expires-in-secondsオプションで署名付きURLの有効期間が指定できます。

デフォルトでは、「300秒(5分)」のため、短い場合は長めに指定できます。

URLを踏んでみる

アクセス経路としてVPC内からとインターネットから2方向のアクセスを試してみます。

VPC内部

WindowsインスタンスをフリートマネージャーからRDP接続してURLへアクセスします。

無事、SageMaker Studioドメインへアクセスできていることがわかります。

インターネットから

インターネット(MacBook)から同じ署名付きURLへアクセスします。

すると、先ほどとは異なり「Auth token containing insufficient permissions」の403エラーでアクセスできませんでした。

署名付きURLを制限する正体とは

署名付きURLを発行するIAMリソースに制御がかかっている場合、発行された証明書にも制限がかかる仕組みのようです。

今回は、署名付きURLのアクセス経路を「特定のVPCエンドポイントに制限した」ためインターネットアクセスを制限しました。

詳しくは以下ブログをご覧ください。

https://dev.classmethod.jp/articles/amazon-sagemaker-presigned-notebook-instance-url/

参考:VPCエンドポイント

今回、計8つものVPCエンドポイントを作成して検証しましたがどのエンドポイントが何をしているのかわかりづらいと思うので軽く解説します。

セッションマネージャー

セッションマネージャーをインターネットを出ないで利用するために以下のエンドポイントを使用しました。

このエンドポイントは、SageMakerの用途と毛色が少し異なるので説明は割愛します。

  • com.amazonaws.{region}.ssm
  • com.amazonaws.{region}.ssmmessages
  • com.amazonaws.{region}.ec2messages

SageMaker Studio

SageMaker StudioをVPC内部のプライベートな通信で使用する場合、以下のエンドポイントを必要とします。

  • com.amazonaws.{region}.sagemaker.api:SageMaker API実行
  • com.amazonaws.{region}.sagemaker.runtime:SageMaker ランタイム実行
  • com.amazonaws.{region}.logs:ログ記録
  • com.amazonaws.{region}.s3:ノートブックリソースの共有

https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/studio-notebooks-and-internet-access.html

署名付きURL

VPC内部のプライベートな通信で署名付きURLを発行するには、以下のエンドポイントを必要とします。

  • com.amazonaws.{region}.sagemaker.api:署名付きURLを発行
  • aws.sagemaker.{region}.studio:発行した署名付きURLへのアクセス

aws」から始まるVPCエンドポイントってはじめはどのように使うのかわかりませんでしたが、署名付きURLのアクセス経路用のエンドポイントみたいです。

おわりに

以上、「SageMaker Studioで署名付きURLを発行してみた」でした。

署名付きURLを発行するするIAMロールの内容で、アクセス経路を制限できるのは、なかなかイカしているなと思いました。

この記事がどなたかの参考になれば幸いです。

以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.