자습서: Key Vault 키를 사용하여 데이터를 Media Services 계정으로 암호화

Media Services 로고 v3


경고

Azure Media Services는 2024년 6월 30일에 사용 중지됩니다. 자세한 내용은 AMS 사용 중지 가이드를 참조하세요.

참고

관리 ID는 v3 API를 사용하여 만든 Media Services 계정에만 사용할 수 있습니다. v2 API를 사용 중이며 관리 ID를 사용하려는 경우 v2에서 v3으로 마이그레이션합니다. Media Services v2에서 v3으로 마이그레이션 소개를 참조하세요.

Key Vault 키를 사용하여 Media Services에서 데이터를 암호화하려면 Media Services 계정에 Key Vault에 대한 ‘액세스 권한’이 부여되어야 합니다. 아래 단계에 따라 Media Services 계정에 대한 관리 ID를 만들고 Media Services CLI를 사용하여 이 ID에 Key Vault에 대한 액세스 권한을 부여합니다.

Media Services 계정은 관리 ID와 함께 Key Vault를 사용함

이 자습서에서는 2020-05-01 Media Services API를 사용합니다.

Azure에 로그인

이 문서의 명령을 사용하려면 먼저 사용하려는 구독에 로그인해야 합니다.

Azure에 로그인합니다. 이 명령을 사용하는 경우 사용하려는 구독을 묻는 메시지가 표시됩니다.

az login

구독 설정

이 명령을 사용하여 작업할 구독을 설정합니다.

CLI를 사용하여 Azure 구독 설정

다음 명령에서 Media Services 계정에 사용할 Azure 구독 ID를 제공합니다.

az account set --subscription <subscriptionName>

리소스 이름

시작하기 전에 만들려는 리소스의 이름을 결정합니다. 하나의 집합으로 쉽게 식별할 수 있어야 합니다. 특히 테스트를 마친 후에 사용할 계획이 없다면 더 필요합니다. 명명 규칙은 다양한 리소스 유형에 따라 다르므로 모두 소문자를 사용하는 것이 가장 좋습니다. 예를 들어, 리소스 그룹 이름은 "mediatest1rg", 스토리지 계정 이름은 "mediatest1stor"를 사용합니다. 이 문서의 각 단계에 동일한 이름을 사용합니다.

아래 명령에서 이러한 이름이 참조된 것을 볼 수 있습니다. 필요한 리소스의 이름은 다음과 같습니다.

  • myRG
  • myStorageAccount
  • myAmsAccount
  • myKeyVault
  • myKey
  • 위치

참고

위의 하이픈은 안내 단어를 구분하는 데만 사용됩니다. Azure 서비스에서 리소스 이름 지정이 불일치하기 때문에 리소스 이름을 지정할 때는 하이픈을 사용하지 마십시오. 또한 지역 이름은 사용자가 만들지 않습니다. 지역 이름은 Azure에서 결정합니다.

Azure 지역 나열

사용할 실제 지역 이름을 잘 모르는 경우 다음 명령을 사용하여 목록을 표시합니다.

이 명령을 사용하여 계정에 사용할 수 있는 지역을 나열합니다.

az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table

시퀀스

아래의 각 단계는 특정 순서로 수행됩니다. JSON 응답의 값 하나 이상이 시퀀스의 다음 단계에서 사용되기 때문입니다.

Storage 계정 만들기

직접 만들 Media Services 계정에는 스토리지 계정이 연결되어 있어야 합니다. 먼저 Media Services 계정에 대한 스토리지 계정을 만듭니다. 후속 단계에 your-storage-account-name을 사용합니다.

CLI를 사용하여 Azure Storage 계정 만들기

다음 명령을 사용하여 Azure Storage 계정을 만들 수 있습니다.

스토리지 계정을 만들려면 먼저 위치 내에 리소스 그룹을 만들어야 합니다.

사용 가능한 위치를 나열하려면 다음 명령을 사용합니다.

CLI를 사용하여 사용 가능한 위치 나열

사용 가능한 위치를 나열하려면 다음 명령을 사용합니다.

az account list-locations

CLI를 사용하여 리소스 그룹 만들기

리소스 그룹을 만들려면 다음 명령을 사용합니다.

az group create -n <resourceGroupName> --location chooseLocation

SKU 선택

스토리지 계정의 SKU도 선택해야 합니다. 스토리지 계정을 나열할 수 있습니다.

Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS 목록에서 SKU를 선택합니다.

  • myStorageAccount를 길이가 24자 미만인 고유 이름으로 변경합니다.
  • chooseLocation을 작업하려는 지역으로 변경합니다.
  • chooseSKU를 선호하는 SKU로 변경합니다.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

서비스 주체(관리 ID)를 사용하여 Media Services 계정 만들기

이제 관리 ID라고도 하는 서비스 주체를 사용하여 Media Services 계정을 만듭니다.

중요

명령에서 --mi 플래그를 사용하는 것을 기억해야 합니다. 그렇지 않으면 이후 단계를 위한 principalId를 찾을 수 없습니다.

다음 Azure CLI 명령은 새 Media Services 계정을 만듭니다. your-media-services-account-name, your-storage-account-name, your-resource-group-name 값을 사용하려는 이름으로 바꿉니다. 이 명령은 리소스 그룹 및 스토리지 계정을 이미 만들었다고 가정합니다.

Media Services 계정에 --mi-system-assigned 플래그가 있는 시스템 할당 관리 ID를 제공합니다.


az ams account create --name <your-media-services-account-name> --resource-group <your-resource-group-name> --mi-system-assigned --storage-account <your-storage-account-name>

예제 JSON 응답:

{
  "encryption": {
    "keyVaultProperties": null,
    "type": "SystemKey"
  },
  "id": "/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/your-resource-group/providers/Microsoft.Media/mediaservices/your-media-services-account-name",
  "identity": {
    "principalId": "00000000-0000-0000-0000-00000000",
    "tenantId": "00000000-0000-0000-0000-00000000",
    "type": "SystemAssigned"
  },
  "location": "your-region",
  "mediaServiceId": "00000000-0000-0000-0000-00000000",
  "name": "your-media-services-account-name",
  "resourceGroup": "your-resource-group",
  "storageAccounts": [
    {
      "id": "/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/mediatest1rg/providers/Microsoft.Storage/storageAccounts/your-storage-account-name",
      "resourceGroup": "your-resource-group",
      "type": "Primary"
    }
  ],
  "storageAuthentication": "System",
  "systemData": {
    "createdAt": "2021-05-14T21:25:12.3492071Z",
    "createdBy": "you@example.com",
    "createdByType": "User",
    "lastModifiedAt": "2021-05-14T21:25:12.3492071Z",
    "lastModifiedBy": "you@example.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "type": "Microsoft.Media/mediaservices"
}

주요 자격 증명 모음 만들기

Key Vault 만들기 Key Vault는 미디어 데이터를 암호화하는 데 사용됩니다. 후속 단계를 위해 your-keyvault-name을 사용하여 키를 만듭니다.

다음 명령을 사용하여 Key Vault 및 키를 만듭니다. your-resource-group-name, your-keyvault-name, your-key-name을 사용하려는 값으로 변경합니다. 이 명령은 리소스 그룹을 이미 만들었다고 가정합니다.

참고

--bypass AzureServices를 사용하면 Key Vault 네트워크 ACL을 통해 일반적으로 액세스가 차단되는 경우에도 Media Services(및 기타 Azure 서비스)에서 Key Vault에 액세스할 수 있습니다. --enable-purge-protection이 설정되지 않은 경우 키를 사용할 수 없습니다.

Key Vault 만들기


az keyvault create --resource-group <your-resource-group-name> --bypass AzureServices --enable-purge-protection --name <your-keyvault-name>

예제 JSON 응답:

{
  "id": "/subscriptions/the-subscription-id/resourceGroups/your-resource-group-name/providers/Microsoft.KeyVault/vaults/your-keyvault-name",
  "location": "your-region",
  "name": "your-keyvault-name",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-0000-000000000000",
        "permissions": {
          "certificates": [
            "get",
            "list",
            "delete",
            "create",
            "import",
            "update",
            "managecontacts",
            "getissuers",
            "listissuers",
            "setissuers",
            "deleteissuers",
            "manageissuers",
            "recover"
          ],
          "keys": [
            "get",
            "create",
            "delete",
            "list",
            "update",
            "import",
            "backup",
            "restore",
            "recover"
          ],
          "secrets": [
            "get",
            "list",
            "set",
            "delete",
            "backup",
            "restore",
            "recover"
          ],
          "storage": [
            "get",
            "list",
            "delete",
            "set",
            "update",
            "regeneratekey",
            "setsas",
            "listsas",
            "getsas",
            "deletesas"
          ]
        },
        "tenantId": "the-tenant-id"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "the-tenant-id",
    "vaultUri": "https://your-keyvault-name.vault.azure.net/"
  },
  "resourceGroup": "your-resource-group-name",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

키 만들기

az keyvault key create --kty RSA --name your-key-name --vault-name your-keyvault-name

예제 JSON 응답:


{
  "attributes": {
    "created": "2021-05-12T22:41:29+00:00",
    "enabled": true,
    "expires": null,
    "notBefore": null,
    "recoveryLevel": "Recoverable",
    "updated": "2021-05-12T22:41:29+00:00"
  },
  "key": {
    "crv": null,
    "d": null,
    "dp": null,
    "dq": null,
    "e": "AQAB",
    "k": null,
    "keyOps": [
      "encrypt",
      "decrypt",
      "sign",
      "verify",
      "wrapKey",
      "unwrapKey"
    ],
    "kid": "https://your-keyvault-name.vault.azure.net/keys/your-key-name/your-subsription-id",
    "kty": "RSA",
    "n": "THISISTHEKEY51V9thvU7KsBUo/q1mEOcuxqt0qUcnx0IRO9YCL32fPjD/nnS8hKS5qkgUKfe2NRAtzVQ+elQAha65l7OsHu+TXmH/n/RPCgstpqSdCfiUR1JTmFYFRWdxCPwoKJMYaqlCEhn2Dkon3StTN0Id0sjRSA/YOLjgWU7YnVbntg5/048HgcTKn3PCWCuJc+P8hI/8Os5EAIpun62PffYwPX0/NIA1PY8wIB+sYEY0zxVGwWrCu7VgCo9xeqbMQEq5OenYmYpc+cjLozU/ohGhfWTpQU8d7fFypTHQraENDOFKEY",
    "p": null,
    "q": null,
    "qi": null,
    "t": null,
    "x": null,
    "y": null
  },
  "managed": null,
  "tags": null
}

Media Services 시스템 할당 관리 ID에 Key Vault에 대한 액세스 권한 부여

Media Services 관리 ID에 Key Vault에 대한 액세스 권한을 부여합니다. 해당 명령에는 다음 두 가지가 있습니다.

Media Services 계정의 관리 ID 가져오기(표시)

아래의 첫 번째 명령은 Media Services 계정의 관리 ID 즉, 명령에서 반환된 JSON에 나열된 principalId를 보여줍니다.

이 명령은 Media Services 계정의 모든 속성을 표시합니다.

az ams account show --name <your-media-services-account-name> --resource-group <your-resource-group>

참고

Media Services 계정에 액세스 역할을 할당한 경우 이 줄은 "storageAuthentication": "ManagedIdentity"를 반환합니다.

예제 JSON 응답:

{
  "encryption": {
    "keyVaultProperties": null,
    "type": "SystemKey"
  },
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.Media/mediaservices/your-media-services-account",
  "identity": {
    "principalId": "00000000-0000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "type": "SystemAssigned"  //Type will show "Managed Identity" if you have assigned a role to the Media Services account.
  },
  "location": "your-region",
  "mediaServiceId": "00000000-0000-0000-0000-000000000000",
  "name": "your-media-services-account",
  "resourceGroup": "your-resource-group-name",
  "storageAccounts": [
    {
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.Storage/storageAccounts/your-storage-account-name",
      "resourceGroup": "your-resource-group-name",
      "type": "Primary"
    }
  ],
  "storageAuthentication": "System", //If you have assigned access roles to the account, this line will return storageAuthentication": "ManagedIdentity"
  "systemData": {
    "createdAt": "2021-05-14T21:25:12.3492071Z",
    "createdBy": "you@example.com",
    "createdByType": "User",
    "lastModifiedAt": "2021-05-14T21:25:12.3492071Z",
    "lastModifiedBy": "you@example.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "type": "Microsoft.Media/mediaservices"
}

Key Vault 정책 설정

두 번째 명령은 보안 주체 ID에 Key Vault에 대한 액세스 권한을 부여합니다. object-id를 이전 단계에서 얻은 principalId의 값으로 설정합니다.

이 명령을 사용하려면 Media Services principalIdobject-id로 포함해야 합니다. 아직 수행하지 않은 경우 az ams account show --name <your-media-services-account-name> --resource-group <your-resource-group>을 사용하여 이 ID를 가져옵니다.

az keyvault set-policy --name <your-keyvault-name> --object-id <principalId> --key-permissions decrypt encrypt get list unwrapKey wrapKey

예제 JSON 응답:

{
  "id": "/subscriptions/00000000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.KeyVault/vaults/your-keyvault-name",
  "location": "your-region",
  "name": "your-keyvault-name",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-000000000000",
        "permissions": {
          "certificates": [
            "get",
            "list",
            "delete",
            "create",
            "import",
            "update",
            "managecontacts",
            "getissuers",
            "listissuers",
            "setissuers",
            "deleteissuers",
            "manageissuers",
            "recover"
          ],
          "keys": [
            "get",
            "create",
            "delete",
            "list",
            "update",
            "import",
            "backup",
            "restore",
            "recover"
          ],
          "secrets": [
            "get",
            "list",
            "set",
            "delete",
            "backup",
            "restore",
            "recover"
          ],
          "storage": [
            "get",
            "list",
            "delete",
            "set",
            "update",
            "regeneratekey",
            "setsas",
            "listsas",
            "getsas",
            "deletesas"
          ]
        },
        "tenantId": "00000000-0000-0000-000000000000"
      },
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-000000000000",
        "permissions": {
          "certificates": null,
          "keys": [
            "encrypt",
            "get",
            "list",
            "wrapKey",
            "decrypt",
            "unwrapKey"
          ],
          "secrets": null,
          "storage": null
        },
        "tenantId": "00000000-0000-0000-000000000000"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "00000000-0000-0000-000000000000",
    "vaultUri": "https://your-keyvault-name.vault.azure.net/"
  },
  "resourceGroup": "your-resource-group-name",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

Key Vault의 키를 사용하도록 Media Services 설정

만든 키를 사용하도록 Media Services를 설정합니다. key-identifier 속성의 값은 키가 생성되었을 때 출력에서 제공됩니다. 이 명령은 액세스 제어 변경 내용을 전파하는 데 걸리는 시간 때문에 실패할 수 있습니다. 이 경우 몇 분 후에 다시 시도하세요.

이 명령을 사용하려면 Key Vault 및 키를 이미 만들었어야 합니다.

az ams account encryption set --account-name <your-media-services-account-name> --resource-group <your-resource-group> --key-type CustomerKey --key-identifier https://<your-keyvault-name>.vault.azure.net/keys/<your-key-name>

예제 JSON 응답:

{
  "id": "/subscriptions/00000000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.KeyVault/vaults/your-keyvault-name",
  "location": "your-region",
  "name": "your-keyvault-name",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-000000000000",
        "permissions": {
          "certificates": [
            "get",
            "list",
            "delete",
            "create",
            "import",
            "update",
            "managecontacts",
            "getissuers",
            "listissuers",
            "setissuers",
            "deleteissuers",
            "manageissuers",
            "recover"
          ],
          "keys": [
            "get",
            "create",
            "delete",
            "list",
            "update",
            "import",
            "backup",
            "restore",
            "recover"
          ],
          "secrets": [
            "get",
            "list",
            "set",
            "delete",
            "backup",
            "restore",
            "recover"
          ],
          "storage": [
            "get",
            "list",
            "delete",
            "set",
            "update",
            "regeneratekey",
            "setsas",
            "listsas",
            "getsas",
            "deletesas"
          ]
        },
        "tenantId": "the-tenant-id"
      },
      {
        "applicationId": null,
        "objectId": "the-media-services-account-id",
        "permissions": {
          "certificates": null,
          "keys": [
            "encrypt",
            "get",
            "list",
            "wrapKey",
            "decrypt",
            "unwrapKey"
          ],
          "secrets": null,
          "storage": null
        },
        "tenantId": "the-tenant-id"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "the-tenant-id",
    "vaultUri": "https://your-keyvault-name.vault.azure.net/"
  },
  "resourceGroup": "your-resource-group-name",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

유효성 검사

고객 관리형 키를 사용하여 계정이 암호화되었는지 확인하려면 계정 암호화 속성을 확인합니다.

CLI를 사용하여 계정 암호화 표시

이 명령에 대한 자세한 내용은 Media Services CLI 참조를 참조하세요.

type 속성은 CustomerKey를 표시해야 하고, currentKeyIdentifier는 고객의 Key Vault에 있는 키의 경로로 설정해야 합니다.

리소스 정리

직접 만든 리소스를 사용할 계획이 없으면 리소스 그룹을 삭제합니다.

CLI를 사용하여 리소스 그룹 삭제

az group delete --name <your-resource-group-name>

도움말 및 지원 보기

다음 방법 중 하나로 Media Services에 질문하거나 업데이트를 따를 수 있습니다.