Azure CLI による仮想マシン スケール セットの OS および接続されているデータ ディスクの暗号化

Azure CLI は、コマンドラインやスクリプトで Azure リソースを作成および管理するために使用します。 このクイック スタートでは、Azure CLI を使用して仮想マシン スケール セットを作成、暗号化する方法を示します。 仮想マシン スケール セットへの Azure Disk Encryption の適用の詳細については、「仮想マシン スケール セットの Azure Disk Encryption」を参照してください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この記事では、Azure CLI のバージョン 2.0.31 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

スケール セットを作成する

スケール セットを作成する前に、az group create を使ってリソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroup --location eastus

ここでは、az vmss create を使用して仮想マシン スケール セットを作成します。 以下の例では、myScaleSet という名前のスケール セットを作成します。このスケール セットは、変更が適用されると自動的に更新するように設定され、SSH キーが ~/.ssh/id_rsa に存在しない場合は生成します。 VM インスタンスのそれぞれに 32 Gb のディスクが接続され、Azure Custom Script Extension では、az vmss extension set を使用してデータ ディスクが作成されます。

重要

必ず ADE でサポートされているオペレーティング システムを選択してください。 ADE でサポートされている OS

# Create a scale set with attached data disk
az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode Flexible \
  --image <SKU Linux Image> \
  --admin-username azureuser \
  --generate-ssh-keys \
  --data-disk-sizes-gb 32

# Prepare the data disk for use with the Custom Script Extension
az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings '{"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/prepare_vm_disks.sh"],"commandToExecute":"./prepare_vm_disks.sh"}'

すべてのスケール セットのリソースと VM を作成および構成するのに数分かかります。

ディスクの暗号化を有効にした Azure キー コンテナーを作成する

Azure Key Vault は、キー、シークレット、パスワードを格納して、アプリケーションとサービスに安全に実装できるようにします。 暗号化キーは、ソフトウェア保護を使って Azure Key Vault に保存されます。または、FIPS 140 適合標準に認定されたハードウェア セキュリティ モジュール (HSM) でキーをインポートまたは生成することもできます。 これらの暗号化キーは、VM に接続された仮想ディスクの暗号化/暗号化解除に使われます。 これらの暗号化キーの制御を維持し、その使用を監査することができます。

一意の keyvault_name を定義します。 az keyvault create を使用して、スケール セットと同じサブスクリプションとリージョンに KeyVault を作成し、 --enabled-for-disk-encryption アクセス ポリシーを設定します。

# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname

# Create Key Vault
az keyvault create --resource-group myResourceGroup --name $keyvault_name --enabled-for-disk-encryption

既存の Key Vault を使用する

この手順は、ディスク暗号化で使用する既存の Key Vault がある場合にのみ必要です。 前のセクションで Key Vault を作成した場合は、この手順をスキップしてください。

一意の keyvault_name を定義します。 az keyvault update を使用して KeyVault を更新し、 --enabled-for-disk-encryption アクセス ポリシーを設定します。

# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname

# Create Key Vault
az keyvault update --name $keyvault_name --enabled-for-disk-encryption

暗号化を有効にする

Note

フレキシブル オーケストレーション モードで Virtual Machine Scale Sets を使用する場合、新しいインスタンスのみが暗号化されます。 スケール セット内の既存のインスタンスは、個別に暗号化するか、削除して置き換える必要があります。

スケールセット内の VM インスタンスを暗号化するには、まず az keyvault show を使用して Key Vault のリソース ID に関する一部情報を取得します。 これらの変数は、この後、az vmss encryption enable を使用した暗号化プロセスの開始に使用されます。

# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)

# Enable encryption of the data disks in a scale set
az vmss encryption enable \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --disk-encryption-keyvault $vaultResourceId \
    --volume-type DATA

暗号化プロセスを開始するのに 1 から 2 分ほどかかります。

前の手順で作成したスケールセットのアップグレード ポリシーが automatic に設定されているため、各 VM インスタンスは自動的に暗号化プロセスを開始します。 アップグレード ポリシーが manual に設定されているスケール セットでは、az vmss update-instances を使用して手動で 各 VM インスタンスに対して暗号化プロセスを開始します。

キーをラップする KEK を使用して暗号化を有効にします。

仮想マシン スケール セットを暗号化するときに、セキュリティ強化のためキーの暗号化キーを使用することもできます。

# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)

# Enable encryption of the data disks in a scale set
az vmss encryption enable \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --disk-encryption-keyvault $vaultResourceId \
    --key-encryption-key myKEK \
    --key-encryption-keyvault $vaultResourceId \
    --volume-type DATA

Note

disk-encryption-keyvault パラメーターの値は、次のように、完全な識別子文字列の形式で表されます:
/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]

key-encryption-key パラメーターは KEK の完全な URI であり、次の形式で表されます:
https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]

暗号化の進行状況を確認する

ディスク暗号化の進行状況を確認するには、az vmss encryption show を使用します。

az vmss encryption show --resource-group myResourceGroup --name myScaleSet

VM インスタンスが暗号化されていると、以下の出力例に見られるようにステータスコード EncryptionState/encrypted が報告されます。

[
  {
    "disks": [
      {
        "encryptionSettings": null,
        "name": "myScaleSet_myScaleSet_0_disk2_3f39c2019b174218b98b3dfae3424e69",
        "statuses": [
          {
            "additionalProperties": {},
            "code": "EncryptionState/encrypted",
            "displayStatus": "Encryption is enabled on disk",
            "level": "Info",
            "message": null,
            "time": null
          }
        ]
      }
    ],
    "id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualMachines/0",
    "resourceGroup": "MYRESOURCEGROUP"
  }
]

暗号化を無効にする

暗号化された VM インスタンス ディスクを使用しない場合は、次のように az vmss encryption disable で暗号化を無効にすることができます。

az vmss encryption disable --resource-group myResourceGroup --name myScaleSet

次のステップ

  • この記事では、Azure CLI を使用して仮想マシン スケール セットを暗号化しました。 また、Azure PowerShell または Azure Resource Manager テンプレートも使用できます。
  • 別の拡張機能がプロビジョニングされた後で Azure Disk Encryption を適用する場合、extension sequencingを使用できます。
  • Linux スケール セット データ ディスクの暗号化のエンドツーエンド バッチ ファイルの例については、こちらを参照してください。 この例では、リソース グループ、Linux スケール セットを作成し、5 GB のデータ ディスクをマウントし、仮想マシン スケール セットを暗号化します。