チュートリアル:Media Services の信頼されたストレージ

Media Services ロゴ v3


警告

Azure Media Services は、2024 年 6 月 30 日に廃止されます。 詳細については、「 AMS 廃止ガイド」を参照してください。

このチュートリアルでは、次のことについて説明します。

  • Azure Media Services 用の信頼されたストレージを有効にする方法
  • 信頼されたストレージにマネージド ID を使用する方法
  • ネットワーク アクセス制御 (ファイアウォール、VPN など) が使用されていても Azure サービスからストレージ アカウントにアクセスできるようにする方法

2020-05-01 API では、Media Services アカウントにマネージド ID を関連付けることにより、信頼されたストレージを有効にすることができます。

Note

信頼されたストレージは API でのみ使用でき、現在、Azure portal では有効になっていません。

Media Services は、システム認証を使用してストレージ アカウントに自動的にアクセスすることができます。 Media Services では、関連付けを追加するユーザーが Azure Resource Manager RBAC を使用してストレージ アカウントにアクセスしていることが検証されます。

サブスクリプション間ストレージ アカウントの使用

注意

Media Services がマネージド ID を使用してストレージにアクセスするように構成されている場合、Media Services では、マネージド ID によってアクセスできる任意のストレージ アカウントを使用できます。

ストレージに対するシステム認証を使用する場合、ストレージ アカウントは、Media Services アカウントと同じサブスクリプションに存在する必要があります。 データ エグレス コストの増加を回避するために、Media Services アカウントと同じリージョンのストレージ アカウントを使用します。

どちらの認証の種類でも、Media Services アカウントを作成または更新するプリンシパルには、ストレージ アカウントに対する 'Microsoft.Storage/storageAccounts/listkeys/action' アクセス許可が必要です。

概要

重要

Media Services への要求にはすべて 2020-05-01 API を使用してください。

Media Services 用の信頼されたストレージを作成する一般的な手順は次のとおりです。

  1. リソース グループを作成します。
  2. ストレージ アカウントを作成します。
  3. 準備完了状態になるまでストレージ アカウントをポーリングします。 ストレージ アカウントの準備が完了すると、要求からサービス プリンシパル ID が返されます。
  4. "ストレージ BLOB データ共同作成者" ロールの ID を見つけます。
  5. 認可プロバイダーを呼び出し、ロールの割り当てを追加します。
  6. ストレージ アカウントへの認証にマネージド ID を使用するよう Media Services アカウントを更新します。
  7. 今後リソースを使う予定がなければ、料金が発生しないようリソースを削除します。

前提条件

作業を始めるには、Azure サブスクリプションが必要です。 Azure サブスクリプションを持っていない場合は、無料試用版アカウントを作成できます

テナント ID とサブスクリプション ID を取得する

テナント ID とサブスクリプション ID の取得方法がわからない場合は、サブスクリプション ID とテナント ID を見つける方法に関するページを参照してください。

サービス プリンシパルとシークレットを作成する

サービス プリンシパルとシークレットの作成方法がわからない場合は、「Media Services API にアクセスするための資格情報を取得する」を参照してください。

REST クライアントを使用する

このスクリプトは、REST クライアント (Visual Studio Code 拡張機能で利用できる REST クライアントなど) での使用を意図したものです。 実際の開発環境に合わせて調整してください。

初期変数を設定する

この部分のスクリプトは、REST クライアントで使用するためのものです。 実際の開発環境内では、変数の使い方が異なる場合があります。

### AAD details
@tenantId = your tenant ID
@servicePrincipalId = the service principal ID
@servicePrincipalSecret = the service principal secret

### AAD resources
@armResource = https%3A%2F%2Fmanagement.core.windows.net%2F
@graphResource = https%3A%2F%2Fgraph.windows.net%2F
@storageResource = https%3A%2F%2Fstorage.azure.com%2F

### Service endpoints
@armEndpoint = management.azure.com
@graphEndpoint = graph.windows.net
@aadEndpoint = login.microsoftonline.com

### ARM details
@subscription = your subscription id
@resourceGroup = the resource group you'll be creating
@storageName = the name of the storage you'll be creating
@accountName = the name of the account you'll be creating
@resourceLocation = East US (or the location that works best for your region)

Azure Resource Manager のトークンを取得する

// @name getArmToken
POST https://{{aadEndpoint}}/{{tenantId}}/oauth2/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded

resource={{armResource}}&client_id={{servicePrincipalId}}&client_secret={{servicePrincipalSecret}}&grant_type=client_credentials

Graph API のトークンを取得する

この部分のスクリプトは、REST クライアントで使用するためのものです。 実際の開発環境内では、変数の使い方が異なる場合があります。

// @name getGraphToken
POST https://{{aadEndpoint}}/{{tenantId}}/oauth2/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded

resource={{graphResource}}&client_id={{servicePrincipalId}}&client_secret={{servicePrincipalSecret}}&grant_type=client_credentials

サービス プリンシパルの詳細を取得する

// @name getServicePrincipals
GET https://{{graphEndpoint}}/{{tenantId}}/servicePrincipals?$filter=appId%20eq%20'{{servicePrincipalId}}'&api-version=1.6
x-ms-client-request-id: cae3e4f7-17a0-476a-a05a-0dab934ba959
Authorization:  Bearer {{getGraphToken.response.body.access_token}}

サービス プリンシパル ID を格納する

@servicePrincipalObjectId = {{getServicePrincipals.response.body.value[0].objectId}}

リソース グループを作成する

// @name createResourceGroup
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}
    ?api-version=2016-09-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
    "location": "{{resourceLocation}}"
}

ストレージ アカウントの作成

// @name createStorageAccount
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
    "sku": {
    "name": "Standard_GRS"
    },
    "kind": "StorageV2",
    "location": "{{resourceLocation}}",
    "properties": {
    }
}

ストレージ アカウントの状態を取得する

ストレージ アカウントの準備が完了するまでにしばらく時間がかかるため、この要求で状態をポーリングします。 ストレージ アカウントの準備が完了するまで、この要求を繰り返します。

// @name getStorageAccountStatus
GET {{createStorageAccount.response.headers.Location}}
Authorization: Bearer {{getArmToken.response.body.access_token}}

ストレージ アカウントの詳細を取得する

ストレージ アカウントの準備が完了したら、そのプロパティを取得します。

// @name getStorageAccount
GET https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

ARM のトークンを取得する

// @name getStorageToken
POST https://{{aadEndpoint}}/{{tenantId}}/oauth2/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded

resource={{storageResource}}&client_id={{servicePrincipalId}}&client_secret={{servicePrincipalSecret}}&grant_type=client_credentials

システム割り当てマネージド ID を使用して Media Services アカウントを作成する

// @name createMediaServicesAccount
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
  "identity": {
      "type": "SystemAssigned"
  },
  "properties": {
    "storageAccounts": [
      {
        "id": "{{getStorageAccountStatus.response.body.id}}"
      }
    ],
    "encryption": {
      "type": "SystemKey"
    }
  },
  "location": "{{resourceLocation}}"
}

ストレージの "ストレージ BLOB データ" ロールの定義を取得する

// @name getStorageBlobDataContributorRoleDefinition
GET https://management.azure.com/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}/providers/Microsoft.Authorization/roleDefinitions?$filter=roleName%20eq%20%27Storage%20Blob%20Data%20Contributor%27&api-version=2015-07-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

ストレージ ロールの割り当てを設定する

Media Services アカウントのサービス プリンシパルには、"ストレージ BLOB データ共同作成者" というストレージ ロールが割り当てられていることが、ロールの割り当てからわかります。 これにはしばらく時間がかかることがあるので、お待ちください。時間が経たないと、Media Services アカウントが正しく設定されません。

PUT https://management.azure.com/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}/providers/Microsoft.Authorization/roleAssignments/{{$guid}}?api-version=2020-04-01-preview
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
  "properties": {
    "roleDefinitionId": "/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}/providers/Microsoft.Authorization/roleDefinitions/{{getStorageBlobDataContributorRoleDefinition.response.body.value[0].name}}",
    "principalId": "{{createMediaServicesAccount.response.body.identity.principalId}}"
  }
}

マネージド ID にストレージ アカウントへのバイパス アクセス権を与える

この操作によって、アクセスがシステム マネージド ID からマネージド ID に変更されます。 これにより、ファイアウォールを介したストレージ アカウントへのアクセスが可能となります。Azure サービスは、IP アクセス ルール (ACL) に関係なくストレージ アカウントにアクセスできるためです。

この場合も、ストレージ アカウントにロールが割り当てられるまで待ってください。そうしないと、Media Services アカウントが正しく設定されません。

// @name setStorageAccountFirewall
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
    "sku": {
    "name": "Standard_GRS"
    },
    "kind": "StorageV2",
    "location": "{{resourceLocation}}",
    "properties": {
      "minimumTlsVersion": "TLS1_2",
      "networkAcls": {
        "bypass": "AzureServices",
        "virtualNetworkRules": [],
        "ipRules": [],
        "defaultAction": "Deny"
      }
    }
}

マネージド ID を使用するように Media Services アカウントを更新します。

ストレージのロールの割り当てが伝達されるまでには数分かかることもあるので、この要求は何度か再試行しなければならない場合があります。

// @name updateMediaServicesAccountWithManagedStorageAuth
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
  "identity": {
      "type": "SystemAssigned"
  },
  "properties": {
    "storageAccounts": [
      {
        "id": "{{getStorageAccountStatus.response.body.id}}"
      }
    ],
    "storageAuthentication": "ManagedIdentity",
    "encryption": {
      "type": "SystemKey"
    }
  },
  "location": "{{resourceLocation}}"
}

アクセスをテストする

ストレージ アカウントに資産を作成してアクセスをテストします。

// @name createAsset
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}/assets/testasset{{index}}withoutmi?api-version=2018-07-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
}

リソースを削除する

作成したリソースをそのままにすると今後も料金が発生します。それを避けるためにはリソースを削除してください。

### Clean up the Storage account
DELETE https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

### Clean up the Media Services account
DELETE https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

### Clean up the Media Services account
GET https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

ヘルプとサポート

Media Services に質問がある場合は、次のいずれかの方法で更新プログラムに従ってください。

  • Q & A
  • Stack Overflow。 質問に タグを付け、 を使用します azure-media-services
  • @MSFTAzureMedia するか 、@AzureSupport を使用してサポートを要求します。
  • Azure portalからサポート チケットを開きます。