Azure Purview を使い始める

20 min読了の目安(約18600字TECH技術記事

この記事について

この記事は、2020 年 12 月 29 日に開催した第 5 回 Azure Cosmos DB 勉強会のフィードバック記事です。
ライブデモで実施した流れと同じ形で、Azure Purview を使用できる環境を整えていきます。

Azure Purview は、オンプレミスやマルチクラウド、SaaS のデータの管理と制御を支援する統合データガバナンスサービスです。
データソースを一元的に登録でき、どんなデータが社内に存在しているのかを可視化することができます。
Azure Purview は、実際のデータを可視化するわけではありません。自企業内に、どのような形式のデータが存在しており、データのどの箇所が機密データや個人情報のデータに該当するのか、タグ付けや注釈などをつけることができるサービスです。

2021 年 1 月 1 日現在、Azure Purview はプレビュー状態です。

この記事では、サンプルとして、Azure Cosmos DB 環境を Azure Purview に接続し、Azure Cosmos DB のデータ構造をスキャンさせ、機密情報などのタグ付けを行うまでをやってみます。

関連動画

Azure Purview および本記事に類似する内容については、Japan Azure Cosmos DB User Group 主催の 第 5 回 Azure Cosmos DB 勉強会 でも取り上げていますので、こちらも合わせてご覧ください。

環境構築

Azure CLI を最新化

Azure Purview を Azure CLI でデプロイするには、最新バージョンの Azure CLI を使用する必要があります。
Azure CLI のバージョンは、az version で確認できます。
バージョンが 2.11.0 以降の場合は、以下のコマンドでバージョンアップを行ってください。

az upgrade

バージョンが 2.11.0 未満の場合は、Homebrew を使用してアップデートを行ってください。

brew list | grep azure-cli
brew upgrade azure-cli

Azure CLI で Azure にサインイン

Azure CLI で Azure にサインインします。

az login

Web ブラウザが起動し、Azure へのサインインを求められるので、情報を入力してください。

サインインが成功したら、Web ブラウザを終了して、Azure CLI に戻ります。

複数のサブスクリプションを所有している場合は、どのサブスクリプションを使用するか洗濯しておきます。

az account set --subscription <サブスクリプション ID または サブスクリプション名>

Azure Purview を作成

Azure Purview をデプロイするためのリソースグループを作成します。

既にリソースグループを作成済みの場合は、リソースグループは作成しなくて OK です。

2020 年 12 月 17 日現在、Azure Purview は以下のリージョンでのみ作成することが可能になっています。
そのため、リソースグループも可能であれば同じリージョンで作成することを推奨します。

az group create \
  --name myResourceGroup \
  --location "East US 2"

次に purviewtemplate.json を作成します。

purviewtemplate.json
{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "name": "<任意の Azure Purview アカウント名>",
      "type": "Microsoft.Purview/accounts",
      "apiVersion": "2020-12-01-preview",
      "location": "EastUs2",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "networkAcls": {
          "defaultAction": "Allow"
        }
      },
      "dependsOn": [],
      "sku": {
        "name": "Standard",
        "capacity": "4"
      },
      "tags": {}
    }
  ],
  "outputs": {}
}

purviewtemplate.json を作成したら、Azure CLI を使ってデプロイを実行します。

az deployment group create --resource-group "<使用するリソースグループ名>" --template-file "purviewtemplate.json の相対パス>"

以下のような結果が帰ってきたら、デプロイ成功です。

{- Finished ..
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/selfstudy-dataplatform-eastus2/providers/Microsoft.Resources/deployments/purviewtemplate",
  "location": null,
  "name": "purviewtemplate",
  "properties": {
    "correlationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "debugSetting": null,
    "dependencies": [],
    "duration": "PT3M18.0549813S",
    "error": null,
    "mode": "Incremental",
    "onErrorDeployment": null,
    "outputResources": [
      {
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/selfstudy-dataplatform-eastus2/providers/Microsoft.Purview/accounts/jcdug20201229purview",
        "resourceGroup": "selfstudy-dataplatform-eastus2"
      }
    ],
    "outputs": {},
    "parameters": null,
    "parametersLink": null,
    "providers": [
      {
        "id": null,
        "namespace": "Microsoft.Purview",
        "registrationPolicy": null,
        "registrationState": null,
        "resourceTypes": [
          {
            "aliases": null,
            "apiProfiles": null,
            "apiVersions": null,
            "capabilities": null,
            "defaultApiVersion": null,
            "locations": [
              "eastus"
            ],
            "properties": null,
            "resourceType": "accounts"
          }
        ]
      }
    ],
    "provisioningState": "Succeeded",
    "templateHash": "xxxxxxxxxxxxxxxxxxx",
    "templateLink": null,
    "timestamp": "2020-12-17T14:09:36.853134+00:00",
    "validatedResources": null
  },
  "resourceGroup": "selfstudy-dataplatform-eastus2",
  "tags": null,
  "type": "Microsoft.Resources/deployments"
}

Azure Cosmos DB の作成

今回、Azure Purview でのスキャン対象となる Azure Cosmos DB を作成します。

resourceGroupName='<使用するリソースグループ名>'
accountName='<任意の Cosmos DB アカウント名>'
az cosmosdb create \
    -n $accountName \
    -g $resourceGroupName \
    --default-consistency-level Session \
    --locations regionName='East US 2' failoverPriority=0 isZoneRedundant=False \
    --enable-free-tier

すでに、Free Tier が適用された Cosmos DB アカウントを作成済みの場合は、--enable-free-tier 部分は不要です。

以下のような結果が帰ってきたら、デプロイ成功です。

{
  "apiProperties": null,
  "capabilities": [],
  "connectorOffer": null,
  "consistencyPolicy": {
    "defaultConsistencyLevel": "Session",
    "maxIntervalInSeconds": 5,
    "maxStalenessPrefix": 100
  },
  "cors": [],
  "databaseAccountOfferType": "Standard",
  "disableKeyBasedMetadataWriteAccess": false,
  "documentEndpoint": "https://<任意の Cosmos DB アカウント名>.documents.azure.com:443/",
  "enableAnalyticalStorage": false,
  "enableAutomaticFailover": false,
  "enableCassandraConnector": null,
  "enableFreeTier": true,
  "enableMultipleWriteLocations": false,
  "failoverPolicies": [
    {
      "failoverPriority": 0,
      "id": "<任意の Cosmos DB アカウント名>-eastus2",
      "locationName": "East US 2"
    }
  ],
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<使用するリソースグループ名>/providers/Microsoft.DocumentDB/databaseAccounts/<任意の Cosmos DB アカウント名>",
  "ipRules": [],
  "isVirtualNetworkFilterEnabled": false,
  "keyVaultKeyUri": null,
  "kind": "GlobalDocumentDB",
  "location": "East US 2",
  "locations": [
    {
      "documentEndpoint": "https://<任意の Cosmos DB アカウント名>-eastus2.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<任意の Cosmos DB アカウント名>-eastus2",
      "isZoneRedundant": false,
      "locationName": "East US 2",
      "provisioningState": "Succeeded"
    }
  ],
  "name": "<任意の Cosmos DB アカウント名>",
  "privateEndpointConnections": null,
  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "readLocations": [
    {
      "documentEndpoint": "https://<任意の Cosmos DB アカウント名>-eastus2.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<任意の Cosmos DB アカウント名>-eastus2",
      "isZoneRedundant": false,
      "locationName": "East US 2",
      "provisioningState": "Succeeded"
    }
  ],
  "resourceGroup": "<使用するリソースグループ名>",
  "systemData": {
    "createdAt": "2020-12-30T15:55:39.3596662Z"
  },
  "tags": {},
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "virtualNetworkRules": [],
  "writeLocations": [
    {
      "documentEndpoint": "https://<任意の Cosmos DB アカウント名>-eastus2.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "<任意の Cosmos DB アカウント名>-eastus2",
      "isZoneRedundant": false,
      "locationName": "East US 2",
      "provisioningState": "Succeeded"
    }
  ]
}

Azure Key Vault の作成

Azure CLI で Azure Key Vault を作成します。
まだ、Key Vault リソースプロバイダーの登録を行っていない場合は、Key Vault リソースプロバイダーをサブスクリプションに登録します。

az provider register -n Microsoft.KeyVault

az keyvault create コマンドを使用して、Azure Key Vault を作成します。

az keyvault create --name "<任意の Key Vault 名>" --resource-group "<使用するリソースグループ名>" --location "East US 2"

Azure Key Vault には、論理的な削除のリテンション期間が存在します。
指定した名前で作成できない時は、Azure Portal 上で完全消去を行うか、別名で作成するようにしてください。

以下のような結果が帰ってきたら、デプロイ成功です。

{- Finished ..
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<使用したリソースグループ名>/providers/Microsoft.KeyVault/vaults/<任意の Key Vault 名>",
  "location": "eastus2",
  "name": "<任意の Key Vault 名>",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "dcbd4bd7-8dac-424d-bf91-0c63d5c4e91c",
        "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": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": null,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "family": "A",
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "vaultUri": "https://<任意の Key Vault 名>.vault.azure.net/"
  },
  "resourceGroup": "<使用したリソースグループ名>",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

Azure Key Vault のアクセスポリシーを設定

Azure Portal にアクセスします。
先ほど作成した Azure Key Vault の画面に移動し、アクセスポリシーを選択します。
+ アクセスポリシーの追加を選択します。

シークレットのアクセス許可取得を選択します。
プリンシパルの選択選択されていませんを選択します。

検索窓に先ほど作成した Azure Purview アカウント名を入力し、選択後、選択を選択します。

プリンシパルが追加されたことを確認し、追加を選択します。

アプリケーション欄に、先ほど追加した内容が追加されていることを確認し、保存を選択します。

Azure Key Vault に Cosmos DB のキーを登録

Azure Portal にアクセスします。
先ほど作成した Azure Cosmos DB の画面に移動し、キーを選択します。
プライマリ キーに表示されている値をコピーして控えておきます。

Azure Portal で先ほど作成した Azure Key Vault に戻り、シークレットを選択します。
+ 生成/インポートを選択します。

アップロードオプションで、手動を選択します。
名前で、任意の名前を入力します。この名前は後で使用するので、何か別のところに控えておいてください。
値で、先ほど確認したAzure Cosmos DB のプライマリ キーを入力します。
入力が完了したら、選択を選択します。

Azure Cosmos DB を Azure Purview に登録

Azure Portal で、先ほど作成した Azure Purview アカウントにアクセスします。

Sources メニューを選択し、Register を選択します。

ソースの一覧から、Azure Cosmos DB (SQL API) を選択し、Continue を選択します。

Cosmos DB のソース情報を設定します。
Cosmos DB account name の欄で、Azure Purview に接続する Cosmos DB アカウントを選択してください。
Select a collection の欄は、None で問題ありません。(この後の図の例では、CosmosDB というコレクションを新規作成した状態となっているので注意してください)
情報を入力したら、Register を選択します。

ここで表示されている Select a collection は、Cosmos DB のコレクションを意味するものではありません。
Azure Purview では、コレクションの単位でソース情報をグルーピングできる機能があり、ここでは、そのコレクションを指しています。
複数ソースを登録する際は、是非、活用するといいでしょう。
また、2021 年 1 月 1 日現在、コレクション名にスペースをつけることはできませんので、注意してください。

正常に登録が完了できたら、以下のように、Cosmos DB のソースが表示されるはずです。

Azure Purview でデータをスキャン

それでは、実際に Cosmos DB の中にあるデータをスキャンして、データ構造に紐づくタグ付けを行っていきます。
Azure Purview では、データのヘッダーやカラム名、実データの一部について、既定もしくは独自に定義したルールに従ってスキャンを行い、スキーマや要素に対してタグ付けを行うことができます。

実データに対して、タグ付けを行ったりするものではありません。
また、Azure Purview 上では、実際のデータの中身についても確認することはできません。

Cosmos DB にデータを登録

Azure Purview でデータをスキャンするための、サンプルデータを用意します。
ここでは、好きなデータを Cosmos DB に投入してください。
この例では、以下の記事を参考に、世界の火山データを Cosmos DB に投入します。

Azure Purview でスキャン

準備が終わったので、実際に Azure Purview でスキャンを行います。
Sources の画面より、先ほど登録した Cosmos DB のスキャンボタンを選択します。

Name には、スキャンを識別するための任意の名前を入力します。
Credential の選択欄から、+ New を選択します。

Azure Key Vault の資格情報を登録します。
Name には任意の資格情報名を入力します。
Key Vault connection の選択欄より + New を選択します。

Name には、Azure Key Vault を識別するための任意の名前を入力します。
Key Vault selection method から、先ほど作成した Azure key Valut のシークレットを選択します。
選択後、Create を選択します。

以下のような表示が行われた場合は、Confirm を選択して、Azure Purview が Azure Key Vault にアクセスできるようにアクセスポリシーを付与します。

Account Key 欄に、先ほど作成した Key Vault connection と Azure Key Vault のシークレットを作成した際に控えておいた名前を入力します。
Create を選択します。

Credential で先ほど作成した資格情報を選択します。
必要に応じて、Test connection を選択し、Cosmos DB への接続を確認します。
Continue を選択します。

データをスキャンする Cosmos DB のコレクションを指定します。
ここで指定したコレクションは、Azure Purview によって、全ての要素コレクション内の一部のデータがオンメモリでスキャンされることになります。
Continue を選択します。

データの何パーセントをスキャン対象とするかは、任意で変更することが可能です。

システム既定のスキャンルール、あるいは事前に作成済みのスキャンルールを選択します。
ここでは、システム既定のスキャンルールを選択しています。
スキャンルールを指定したら、Continue を選択します。

スキャンのトリガーを設定します。
今回は、Once (一度のみ実行) を選択します。
Continue を選択します。

Recurring を選択すると、指定のタイミングでスキャンを実行されるようにトリガーを設定できます。
実際の運用では、定期的にスキャンを実行させ、最新のカタログ情報を維持するようにします。

設定した内容を確認し、Save and Run でスキャンを開始します。

スキャン状況の確認

スキャンのトリガーの状態については、各データソースの詳細画面で確認できます。
Sources 欄にて、先ほど登録した Cosmos DB のデータソースの View details を選択します。

スキャン名ごとに、最後のスキャン結果が表示されます。
スキャン結果が Completed になっていることを確認します。

スキャン結果を使用したデータソース検索

スキャンが完了したら、データがタグ付けされているか確認します。
Home 欄にて、Browse assets を選択します。

スキャンが完了していれば、Cosmos DB の項目が表示されているはずです。
Azure Cosmos DB を選択します。

先ほどスキャンを行った Cosmos DB アカウントを選択します。

スキャンされた Cosmos DB コレクションを選択します。

Cosmos DB コレクションに紐づくメタデータやスキーマ情報などをここで確認できます。
Schema タブを選択すると、スキーマに紐づくタグ情報や辞書に紐づく用語タグを確認することができます。

Contacts タブを選択すると、このデータソースの所有者やエキスパートの情報を確認することができます。
初期では未登録の状態のため、Edit ボタンから登録するようにしてください。
Azure 上で確認できる Azure AD に紐づくユーザーを設定することができます。

データソースの検索

実際に付与されたタグ情報を使用して、データソースの検索を行います。
Home 欄にある検索窓に、Country と入力し、Enter を押して検索を実行します。

Country と入力したので、Country タグが設定されているデータソースが検索結果に表示されます。
このような形で、自企業に所属する社員が、社内にあるデータソースを検索でき、DX や新サービスなどへの足掛かりとさせることができます。
また、セキュリティ管理者やデータ責任者などは、自社内にあるデータソースを一元管理でき、情報漏洩対策や機密データの管理を効率的に行うことが可能です。

さいごに

Azure Purview を使用することで、データソースの一元管理が簡単に行えることが確認できたと思います。
現在は英語のみでの提供ですが、これからのサービスですので、是非一度、触ってみてください。
Azure Purview についてのより詳しい内容については、是非、参考情報に載せている Ken さんのブログを参照してください。

フィードバック

Azure Purview はプレビューのサービスです。
不便な点や改善を希望する場合は、こちらのリンクからフィードバックを送ってください。

参考情報

Ken さんの Azure Purview 関連ブログ