SageMakerデプロイ用のAWS認証をセットアップする

この記事では、MLflowモデルをAWS SageMakerにデプロイできるようにインスタンスプロファイルを設定する方法について説明します。ここで指定したIAM ロールと同様の権限を持つAWSユーザーのアクセスキーを使用することも可能ですが、Databricksではインスタンスプロファイルを使用してクラスターに SageMakerへのデプロイ権限を与えることを推奨しています。

ステップ1:AWS IAMロールを作成し、SageMaker権限ポリシーをアタッチする

  1. AWSコンソールで、[IAM]サービスに移動します。

  2. サイドバーの「ロール」タブをクリックします。

  3. ロールの作成」をクリックします。

    1. [信頼できるエンティティの種類の選択]で、 [AWSサービス]を選択します。

    2. [このロールを使用するサービスの選択]で、[EC2]サービスをクリックします。

      サービスの選択
    3. [次へ:アクセス許可]をクリックします。

  4. [アクセス許可のアタッチ]画面で、[AmazonSageMakerFullAccess]を選択します。

    SageMakerアクセス許可をアタッチする
  5. [次へ:確認] をクリックします。

  6. ロール名」フィールドにロール名を入力します。

  7. ロールの作成」をクリックします。

  8. ロールリストで、ロール名をクリックします。

    ロールの概要

ロールARN(形式はarn:aws:iam::<account-id>:role/<role-name>)をメモします。

ステップ2:SageMakerデプロイリソースへのアクセスにインラインポリシーを追加する

ロールにポリシーを追加します。

  1. をクリックします インラインポリシー

  2. 次のJSON定義を貼り付けます。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:PutObjectAcl",
            "s3:PutObjectTagging"
          ],
          "Resource": [
            "arn:aws:s3:::mlflow-sagemaker-*-<account-id>",
            "arn:aws:s3:::mlflow-sagemaker-*-<account-id>/*"
          ],
          "Effect": "Allow"
        },
        {
          "Action": [
            "iam:GetRole"
          ],
          "Resource": [
            "arn:aws:iam::<account-id>:role/<role-name>"
          ],
          "Effect": "Allow"
        },
        {
          "Action": [
            "ecr:DescribeGitRepositories"
          ],
          "Resource": [
            "arn:aws:ecr:*:<account-id>:repository/*"
          ],
          "Effect": "Allow"
        }
      ]
    }
    

これらのアクセス許可は、Databricksクラスターで次のことを実行できるようにするために必要です。

  1. 新しいロールの正規ARNを取得します。

  2. SageMakerエンドポイントサーバーで使用するために、権限スコープのオブジェクトをS3にアップロードします。

ロールのアクセス許可は次のようになります。

ロールの権限

ステップ3:ロールの信頼ポリシーを更新する

sagemaker.amazonaws.comiam:AssumeRoleアクセスを追加します。

  1. [ロールの概要] > [信頼関係] > [信頼関係の編集]に移動します。

  2. 次のJSONを貼り付けて保存します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        },
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "sagemaker.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

ロールの信頼関係は次のようになります。

信頼関係

ステップ4:DatabricksワークスペースAWSロールにロールを渡すことを許可する

  1. DatabricksワークスペースのAWSロールに移動します。

  2. をクリックします インラインポリシー

  3. 次のJSON定義を貼り付けて保存します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "iam:PassRole"
          ],
          "Resource": [
            "arn:aws:iam::<account-id>:role/<role-name>"
          ],
          "Effect": "Allow"
        }
      ]
    }
    

ここで、account-idはAWS SageMakerサービスを実行しているアカウントのID、role-nameはステップ1で定義したロールです。

ステップ5:Databricksクラスター・インスタンス・プロファイルを作成する

  1. Databricksワークスペースの管理設定で、 [セキュリティ] タブに移動し、 [インスタンス プロファイル]の横にある[管理] をクリックします。

  2. [インスタンス プロファイルの追加] をクリックします。

  3. 作成したAWSロールに関連付けられたインスタンスプロファイルARNを貼り付けます。このARNはarn:aws:iam::<account-id>:instance-profile/<role-name>の形式で、AWSコンソールに表示されます。

    インスタンスプロファイルARN
  4. [追加]ボタンをクリックします。

    IAMロールを追加

詳細については、 「チュートリアル: Instance プロファイルを使用してS3アクセスを構成する」を参照してください。

ステップ 6:インスタンスプロファイルを使用してクラスターを起動する

インスタンスプロファイルを参照してください。