共用方式為


教學課程:媒體服務受信任的儲存體

媒體服務標誌 v3


警告

Azure 媒體服務將於 2024 年 6 月 30 日淘汰。 如需詳細資訊,請參閱 AMS淘汰指南

在本教學課程中,您將了解:

  • 如何啟用 Azure 媒體服務的受信任的儲存體
  • 如何針對受信任的儲存體使用受控識別
  • 如何在使用防火牆或 VPN 之類的網路存取控制時,為 Azure 服務提供儲存體帳戶的存取權

透過 2020-05-01 API,您可以將受控識別與媒體服務帳戶建立關聯,以啟用受信任的儲存體。

注意

受信任的儲存體只能在 API 中使用,而且目前未在 Azure 入口網站中啟用。

媒體服務可以使用系統驗證自動存取您的儲存體帳戶。 媒體服務會驗證新增關聯的使用者是否具有 Azure Resource Manager RBAC 的記憶體帳戶存取權。

跨訂用帳戶記憶體帳戶的使用方式

注意

當媒體服務設定為使用受控識別來存取記憶體時,媒體服務可以使用受控識別可以存取的任何記憶體帳戶。

使用系統驗證記憶體時,記憶體帳戶必須與媒體服務帳戶位於相同的訂用帳戶中。 使用與媒體服務帳戶位於相同區域中的記憶體帳戶,以避免額外的數據輸出成本。

針對這兩種驗證類型,建立或更新媒體服務帳戶的主體必須具有記憶體帳戶的 'Microsoft.Storage/storageAccounts/listkeys/action' 許可權。

概觀

重要

針對對媒體服務的所有要求,請使用 2020-05-01 API。

以下是針對媒體服務建立受信任的儲存體的一般步驟:

  1. 建立資源群組。
  2. 建立儲存體帳戶。
  3. 輪詢儲存體帳戶,直到其準備就緒為止。 當儲存體帳戶準備就緒時,要求會傳回服務主體識別碼。
  4. 尋找「儲存體 Blob 資料參與者」角色的識別碼。
  5. 呼叫授權提供者並新增角色指派。
  6. 更新媒體服務帳戶,以使用受控識別向儲存體帳戶進行驗證。
  7. 如果您不想繼續使用資源並支付費用,請刪除資源。

先決條件

您需要 Azure 訂用帳戶才能開始進行。 如果您沒有 Azure 訂用帳戶,請建立免費試用帳戶

取得您的租用戶識別碼和訂用帳戶識別碼

如果您不知道如何取得租使用者標識碼和訂用帳戶標識碼,請參閱 如何尋找您的訂用帳戶和租使用者標識符

建立服務主體和祕密

如果您不知道如何建立服務主體和祕密,請參閱取得認證以存取媒體服務 API

使用 REST 用戶端

此指令碼適用於 REST 用戶端,例如 Visual Studio 程式碼延伸模組中所提供的內容。 針對您的開發環境加以調整。

設定初始變數

指令碼的這個部分是用於 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

取得適用於圖形 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}}

儲存服務主體識別碼

@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

建立具有系統指派的受控識別的媒體服務帳戶

// @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}}

設定儲存體角色指派

角色指派指出媒體服務帳戶的服務主體具有儲存體角色「儲存體 Blob 資料參與者」。 這可能需要一段時間,也請您請務必等候,否則媒體服務帳戶將無法正確設定。

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}}"
  }
}

授與受控識別針對儲存體帳戶的略過存取權

此動作會將系統受控識別的存取權變更為受控識別。 如此一來,儲存體帳戶就可以透過防火牆存取儲存體帳戶,因為不論 IP 存取規則 (ACL) 為何,Azure 服務都可以存取儲存體帳戶。

同樣地,請等到角色已在儲存體帳戶中指派,否則媒體服務帳戶將無法正確設定。

// @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"
      }
    }
}

更新媒體服務帳戶以使用受控識別

此要求可能需要重試數次,因為儲存體角色指派可能需要幾分鐘的時間才能傳播。

// @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}}

取得說明及支援

您可以連絡媒體服務並提出問題,或遵循下列其中一種方法來追蹤我們的更新: