機械学習モデルをSageMakerにデプロイするのためのAWS認証設定のセットアップ

[Set up AWS authentication for SageMaker deployment \| Databricks on AWS](https://docs.databricks.com/administration-guide/cloud-configurations/aws/sagemaker.html) [2021/3/17時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書では、[MLflowモデル](https://qiita.com/taka_yayoi/items/e265d48a3e3473edd1b6)をAWS SageMakerにデプロイするために、どのようにインスタンスプロファイルをセットアップするのかを説明します。ここで用いるIAMロールと同様のアクセス権をAWSユーザーのアクセスキーで設定することは可能ですが、SageMakerにデプロイするクラスターにアクセス権を設定する際には[インスタンスプロファイル](https://qiita.com/taka_yayoi/items/446c7971be354f88c679)を使用することをお勧めします。

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

1. AWSコンソールで**IAM**サービスに移動します。
1. サイドバーの**ロール**をクリックします。
1. **ロールの作成**をクリックします。
    1. **信頼エンティティのタイプの選択**で**AWSサービス**を選択します。
    1. **このロールを使用するサービスの選択**で**EC2**サービスを選択します。
![](https://docs.databricks.com/_images/sagemaker-service.png)
    1. **次へ:アクセス権**をクリックします。
1. **アクセス権ポリシーのアタッチ**画面で、**AmazonSageMakerFullAccess**を選択します。
![](https://docs.databricks.com/_images/sagemaker-permissions.png)
1. **次へ:レビュー**をクリックします。
1. **ロール名**にロール名を入力します。
1. **ロールの作成**をクリックします。
1. ロール一覧でロール名をクリックします。
![](https://docs.databricks.com/_images/sagemaker-role-summary.png)

`arn:aws:iam::<account-id>:role/<role-name>`のフォーマットのロールのARNをメモしておきます。

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

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

1. ![](https://docs.databricks.com/_images/add-inline-policy.png)をクリックします。
1. 以下のJSON定義を貼り付けます。

```json: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:DescribeRepositories"
      ],
      "Resource": [
        "arn:aws:ecr:*:<account-id>:repository/*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

これらのアクセス権により、Databricksクラスターに以下のことを許可します。

1. 新規ロールのカノニカルARNの取得
1. SageMakerエンドポイントサーバーによって使用されるS3に対するアクセス権スコープオブジェクトのアップロード

ロールのアクセス権は以下のようになります。
![](https://docs.databricks.com/_images/sagemaker-policy.png)

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

`sagemaker.amazonaws.com`への`iam:AssumeRole`を追加します。

1. **Role Summary > Trust relationships > Edit trust relationship**に移動します。
1. 以下のJSONを貼り付けて保存します。

```json: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"
    }
  ]
}
```

お使いのロールの信頼関係は以下のようになります。
![](https://docs.databricks.com/_images/sagemaker-policy-summary.png)

# ステップ4: お使いのDatabricksワークスペースのAWSロールが、ロールを引き渡せるように設定する

1. [DatabricksワークスペースのAWSロール](https://docs.databricks.com/administration-guide/account-settings/aws-accounts.html)に移動します。
1. ![](https://docs.databricks.com/_images/add-inline-policy.png)をクリックします。
1. 以下のJSON定義を貼り付けて保存します。

```json: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のAdminコンソールでInstance Profilesタブを開き、**Add Instance Profile**をクリックします。
1. 作成したAWSロールと紐付けられているインスタンスプロファイルARNを貼り付けます。ARNは`arn:aws:iam::<account-id>:instance-profile/<role-name>`のフォーマットであり、AWSコンソールで取得できます。
![](https://docs.databricks.com/_images/sagemaker-inline-policy.png)
1. **Add**ボタンをクリックします。
![](https://docs.databricks.com/_images/sagemaker-instance-profile.png)

詳細につていは、[Databricksにおけるインスタンスプロファイルを用いたS3バケットへのセキュアなアクセス](https://qiita.com/taka_yayoi/items/446c7971be354f88c679)をご覧ください。

# ステップ6: インスタンスプロファイルを設定したクラスターを起動する

[ステップ6 インスタンスプロファイルを指定してクラスターを起動する](https://qiita.com/taka_yayoi/items/446c7971be354f88c679#%E3%82%B9%E3%83%86%E3%83%83%E3%83%976-%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B)をご覧ください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)