LoginSignup
0
0

More than 3 years have passed since last update.

Azure ML で管理外のStorageに対してMSIでアクセスを試みた

Last updated at Posted at 2020-05-25

はじめに

備忘録です

リリースノートを見ていたらこんな記述が 
https://docs.microsoft.com/en-us/azure/machine-learning/azure-machine-learning-release-notes

Added --grant-workspace-msi-access as an additional parameter for the Datastore CLI for registering Azure Blob Container which will allow you to register Blob Container that is behind a VNet.

Azure Blob Containerを登録するためのDatastore CLIの追加パラメータとして--grant-workspace-msi-accessを追加し、VNetの後ろにあるBlob Containerを登録できるようにしました。

→やってみよう

というわけで既定のストレージはFirewall入っていても通常通りの手順で使えるのですが、管理外のストレージがFirewallで守られている場合、アクセスする手段がないか検証してみました

前提

AzureMLでは管理下のストレージが一つ既定で作成されます。
ほかのストレージアカウント上のデータはDataStoreという形で登録します。

結果

登録はできるが、Computeからは現在利用する術がなさそう(2020/5時点)
おそらく既定のstorageにupするのが推奨なんでしょうね

やったこと

データストア登録

APIリファレンスを読みあさって、なんとかMSIをつかうっぽいプロパティ「grant_workspace_access」が見つかりました
しかし非推奨・・・
https://docs.microsoft.com/ja-jp/python/api/azureml-core/azureml.core.datastore(class)?view=azure-ml-py#register-azure-blob-container-workspace--datastore-name--container-name--account-name--sas-token-none--account-key-none--protocol-none--endpoint-none--overwrite-false--create-if-not-exists-false--skip-validation-false--blob-cache-timeout-none--grant-workspace-access-false--subscription-id-none--resource-group-none-

ほかにも必要そうな設定をいれてみました
https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-create-register-datasets#create-a-tabulardataset

ストレージが仮想ネットワークまたはファイアウォールの背後にある場合は、SDK を使用したデータセットの作成のみがサポートされます。 データセットを作成するには、from_delimited_files() メソッドにパラメーター validate=False および infer_column_types=False を必ず含めてください。 これにより、最初の検証チェックがバイパスされ、セキュリティで保護されたこれらのファイルからデータセットを作成できるようになります。

コード

一応通ります。wsとか、csvは事前に定義してください

python
import azureml.core
from azureml.core import Workspace, Datastore
blob_datastore = Datastore.register_azure_blob_container(
           workspace=ws,
           datastore_name="データストア名",
           account_name="ストレージアカウント名", # Storage account name
           container_name="コンテナ名", # Name of Azure blob container
           grant_workspace_access=True,
           subscription_id = ws.subscription_id,
           resource_group = ws.resource_group,
           skip_validation=True)

# パスからdatasetオブジェクト作成を試みる
datastore_paths = [(blob_datastore, 'data/temp/train_data.csv')]

train_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths,validate=False,infer_column_types=False)
train_ds = train_ds.register(workspace=ws,
                                 name='train_ds',
                                 description='train_ds')

ml Studioからも確認できます。
プロファイル見ようとするとエラーになりますが。。。

実験してみる

AutoMLを回してみるとdriverlogが不穏な感じでした。

なぜかDeviceLoginが走る

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code xxxx to authenticate.

Device Loginやってみると以下のようなエラー(Blobデータ共同作成者をaml,私のアカウント双方につけてもだめでした)

json
"error": {
        "code": "System",
        "message": "Failed to authorize with Azure Blob Container. Please make sure the compute or login identity has \"Storage Blob Data Reader or Storage Blob Data Owner\" role in the storage IAM.|session_id=xxxxx"
    }

終わり

進展あったらメモしようかなと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0