BitLocker では、クラウド プラットフォーム システム (CPS) を有効にする方法

概要

この資料では、クラウド プラットフォーム システム (CPS) の暗号化でデータを提供する BitLocker® を有効にする方法について説明します。

詳細

マイクロソフトのクラウド プラットフォームのシステムでは、BitLocker® を使用してクラスター共有ボリューム (CSV) を暗号化する Windows Server 2012 の機能を活用します。この資料では、BitLocker を有効にする方法について説明します。プロセスを自動化するスクリプトも用意されています。

注: プロセスは、大幅なダウンタイムを生成するため、CPS のライフ サイクルのできるだけ早く BitLocker を有効にする必要があります。つまり、BitLocker を有効にするのには、すべてのテナントの Vm、Vm (AD DC または Vm) を除くすべての管理をオフにする必要があります。

慎重に手順に従います。これを行うには、障害が発生すると、拡張のダウンタイムやデータの破損する恐れがありますが、
  1. ストレージ ・ クラスターの各ノードに BitLocker ドライブ暗号化機能を有効にします。

    1.1 は、次のコードをコピーし、コンソールの VM 上で <myFolder> を有効にする-BitLockerFeature.ps1 として保存します。

     <#################################################### #
    # Copyright (c) Microsoft. All rights reserved. #
    # #
    ##################################################>
    <#
    .SYNOPSIS
    Install BitLocker Drive Encryption feature on each of the storage cluster nodes
    .DESCRIPTION
    Install BitLocker Drive Encryption feature on each node of the storage cluster.
    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
    #>
     
    Param(
    [Parameter (Mandatory = $true)] [string] $storageClusterName
    )
    $clusterNodes =Invoke-Command -ComputerName $storageClusterName {Get-ClusterNode}
    if($clusterNodes -eq $null)
    {
    $errorMessageForUser = "Failed while retrieving the nodes of the storage cluster $storageClusterName"
    throw $errorMessageForUser
    }
    foreach ($node in $clusterNodes.Name)
    {
    Write-Verbose "Installing BitLocker feature on node $node..."
    $BitlockerStatus = Invoke-Command -ComputerName $node {Add-WindowsFeature Bitlocker -Verbose}
    if(($BitlockerStatus -eq $null) -or (!$BitlockerStatus.Success))
    {
    $errorMessageForUser = "Add-WindowsFeature failed on node $node. Please try to install the feature on this node manually and then rerun this script to continue with the installation on the other nodes. "
    throw $errorMessageForUser
    }
    if($BitlockerStatus.RestartNeeded -eq "Yes")
    {
    Write-Verbose "Restarting Node $node..."
    Restart-Computer -ComputerName $BitlockerStatus.PSComputerName -wait
    Write-Verbose "Node $node restarted."
    }
    }
    $installedCounter=0
    foreach ($node in $clusterNodes.Name)
    {
    $featureState = Invoke-Command -ComputerName $node {Get-WindowsFeature "bitlocker"}
    if($featureState -eq $null)
    {
    $errorMessageForUser = "Could not verify that BitLocker feature is correctly installed on storage node $node. Please connect to the node and run 'Get-WindowsFeature bitlocker' to verify the correct installation."
    Write-Warning $errorMessageForUser
    }
    if ($featureState.InstallState -eq "Installed")
    {
    $installedCounter++
    }
    }
    if($installedCounter -eq $clusterNodes.Count)
    {
    Write-Verbose "BitLocker feature is now installed on all the nodes of the storage cluster"
    }
    else
    {
    Write-Error "BitLocker feature was not properly installed on all the nodes of the storage cluster"
    }

    1.2 コンソール VM、PowerShell コンソールを開く管理者権限を持つ、<myFolder> に移動し、し、次のように入力します。
    ./Enable-BitLockerFeature.ps1 -storageClusterName <yourStorageCluster> -verbose
    スクリプトでは、ストレージ ・ クラスターのすべてのノードを反復処理し、BitLocker をインストールします。プロセス中に、ノードを再起動します。

    1.3 が正常に実行されているスクリプトの実行後は、手順 2 に進みます。

  2. Active Directory ベースの BitLocker 回復用の GPO を作成します。

    2.1 から VM のコンソールで、グループ ポリシー管理エディターを開きます。

    2.2 フォレストを展開する、CPS のドメインを右クリックし、[このドメインに GPO を作成し、ここにリンク] をクリックします。

    2.3 は、GPO の選択 (など)、BitLocker の名前を付けるし、[ OK] をクリックします。

    2.4 新しい GPO は、以下の CPS のドメインの下に表示されます。BitLocker の GPO の設定] タブをクリックして、コンピューターの構成] を右クリックし、[編集] をクリックします。別のグループ ポリシー管理エディター] ウィンドウが開きます。

    2.5 で、グループ ポリシー管理エディターの左側のペインの [コンピューターの構成に移動ポリシー ] の [管理用テンプレート] の [ Windows コンポーネント] の [ BitLocker ドライブ暗号化] のメニューの [固定データ ドライブ、し、右クリックオプションを指定して BitLocker で保護された方法固定ドライブをリカバリすることができます

    2.6 のポリシー設定のポップアップ ダイアログ ボックスで、ポリシーを有効にして、次のオプションを設定します。
    1. データ回復エージェントを許可します。
    2. 固定データ ドライブの AD DS に BitLocker 回復情報を保存します。
    3. 固定データ ドライブの AD DS に回復情報が格納されるまで BitLocker を有効にしません。

    2.7 には[ok]、をクリックし、エディター ウィンドウを閉じます。

    2.8 [セキュリティ フィルター処理のフレームでは、すべてのストレージ ・ ノードのコンピューター アカウントを追加するのには追加をクリックします。CPS では、ラックあたりの 4 つのノードがあります。それらを追加した後は、セキュリティ フィルターをフレーム内のすべてのノードが表示されます。既定の承認されたユーザー グループを削除することができます。

    2.9 の左側のペインでは、BitLocker のポリシーを右クリックし、[強制] をクリックします。グループ ポリシー管理エディターを閉じます。

    2.10 この時点で、ポリシーを適用するが、反映には 1 時間に限りがかかる場合があります。
    1. ポリシーを伝達するまで待機したくない場合に手動で適用できます、各ストレージ ・ ノードにログインし、実行しているPS C:\Users\admin1\Desktop > gpupdate/force
    2. 次のコマンドレットを実行する各ストレージ ・ ノード上で、ポリシーが正常に適用されたことを確認します。

      PS C:\Users\admin1\Desktop > gpresult/scope コンピューター/v
    3. 出力では、適用されるグループ ポリシー オブジェクトを探します。(この例では、BitLocker を呼び出しています) では、ポリシーを表示すると、そのポリシーを適用すると、手順 3 に移動することができます。

  3. 重要 [このステップをスキップしません]:オフにする特定の順序を必要とするテナントのクラスターで実行されているワークロードがあれば、今すぐ始めましょう。手順 4 でのスクリプトのスタンプにアクティブな仮想マシンをすべてオフになります。AD DC と仮想マシンの電源を切らないでください。ボリュームがある、状態が [オンライン (リダイレクトされた)は後の Vm のテナントを安全に再起動できます。
  4. すべてのストレージ ・ ボリュームの BitLocker 暗号化を有効にします。重要: この手順必要があります各ラックには、独自のストレージ ・ クラスターとは、CPS スタンプの各ラックに繰り返されます。

    4.1 は、次のコードをコピーし、として保存を有効にする ClusterDiskBitlocker.ps1 <myFolder> の 1 つのストレージ ・ クラスターのノードにします。ノード <myStorageNode> を呼び出してみましょう。
    <################################################### #                                                 #
    # Copyright (c) Microsoft. All rights reserved. #
    # #
    ##################################################>
    <#
    .SYNOPSIS
    Enable Bitlocker on all the Cluster Shared Volumes in CPS.
    .DESCRIPTION
    Enable Bitlocker on all the Cluster Shared Volumes on the rack. The volumes will be fully encrypted. The encryption process may take long time (48-72h), depending on the amount of data stored. During that time,
    the volumes will be in a redirected state. The volumes will automatically go back to Online once the encryption process is complete.
    NOTE: Please put all the VMs, both management and tenants, into a save state. Failing to do so will result in the VMs crashing and possibly getting into an inconsistent state.
    Once the volumes are in Online (Redirected) status, the VMs can be safely restarted.
    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
    #>

    Function Stop-ClusterVMs
    {
    #Stop all VMs passed as input
    param([string]$ClusterName,[Object[]]$TargetVMs)
    $proceed = Get-Confirmation -question "The script will now turn off ALL the virtual machines in the $ClusterName cluster"
    $TargetVMs | Out-File ".\$ClusterName.txt"
    if($proceed -eq $true)
    {
    $counter=1
    foreach ($vm in $TargetVMs)
    {
    $progress= [int] ($counter / $TargetVMs.Count * 100 )
    Write-Progress -Activity "Stopping $ClusterName Virtual Machines..." `
    -PercentComplete $progress `
    -CurrentOperation "$progress% complete" `
    -Status "Please wait."
    $counter++
    Write-Verbose "Now turning off $vm.Name on node $vm.OwnerNode"
    Stop-VM -Name $vm.Name -ComputerName $vm.OwnerNode -Force

    }
    Write-Progress -Activity "Stopping $ClusterName Virtual Machines..." `
    -Completed -Status "All VMs are shut down."
    }
    else
    {
    exit
    }
    }
    Function Start-ClusterVMs
    {
    #start all the VMs passed as input
    param([string]$ClusterName,[Object[]]$TargetVMs)

    $counter=1
    foreach ($vm in $TargetVMs)
    {
    $progress= [int] ($counter / $TargetVMs.Count * 100 )
    Write-Progress -Activity "Starting $ClusterName Virtual Machines..." `
    -PercentComplete $progress `
    -CurrentOperation "$progress% complete" `
    -Status "Please wait."
    $counter++
    Write-Verbose "Now turning on $vm.Name..."
    Start-VM -Name $vm.Name -ComputerName $vm.OwnerNode
    }
    Write-Progress -Activity "Starting $ClusterName Virtual Machines..." `
    -Completed -Status "All VMs are running."
    }
    Function Get-ClusterVMs
    {
    #create a table with VM, OwnerNode for the given cluster
    param([string]$Cluster)
    $resultTable = @{Expression={$_.Name};Label="Volume Name";width=80},`
    @{Expression={$_.OwnerNode};Label="Owner Node";width=50}


    $nodes = Get-ClusterNode -Cluster $Cluster

    foreach($node in $nodes)
    {
    $targetVMs = Get-VM -ComputerName $node | Where{$_.State -like "Running"}
    foreach($vm in $targetVMs)
    {
    [PSCustomObject] @{
    "Name" = $vm.Name
    "OwnerNode" = $node
    }
    }
    }
    }
    Function Get-Confirmation
    {
    param([string]$Question, [string]$message="Do you want to proceed?")
    $optionYes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes"
    $optionNo = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No"
    $options = [System.Management.Automation.Host.ChoiceDescription[]]($optionYes, $optionNo)
    $result = $host.ui.PromptForChoice($Question, $message, $options, 0)
    switch ($result)
    {
    0 {Return $true }
    1 {Return $false }
    }
    }
    Function Suspend-ClusterVMs
    {
    #stop the cluster and put all VMs in saved state
    param([string]$ClusterName)
    $proceed = Get-Confirmation -question "The script will now suspend ALL the virtual machines in the $ClusterName cluster"

    Get-ClusterNode -Cluster $ClusterName | Out-File ".\$ClusterName.txt"
    if($proceed -eq $true)
    {
    Stop-Cluster -Cluster $ClusterName -Verbose -Force
    }
    else
    {
    exit
    }
    }
    Function Enable-ClusterDiskBitlocker
    {
    Param(
    [Parameter (Mandatory = $true)] [System.Security.SecureString] $bitlockerEncryptionKey,
    [Parameter (Mandatory = $false)] [String] $managementClusterName,
    [Parameter (Mandatory = $true)] [String] $computeClusterName,
    [Parameter (Mandatory = $true)] [String] $edgeClusterName
    )
    $ErrorActionPreference = "Stop"
    $creds = get-credential -Message "Please provide Admin credentials to enable BitLocker"
    if($managementClusterName -eq $null)
    {
    $managementClusterName = Read-Host "If you are enabling BitLocker on rack #1, please provide the name of the management cluster. If you are enabling BitLocker on rack #2, 3 or 4, please leave this null"
    }
    #Verifying that cluster names are correct
    if($managementClusterName -ne $null)
    {
    while ((Get-Cluster $managementClusterName) -eq $null)
    {
    $managementClusterName = Read-Host "The name provided for the management cluster is not correct. Please provide name of the management cluster"
    }
    }
    while ((Get-Cluster $computeClusterName) -eq $null)
    {
    $computeClusterName = Read-Host "The name provided for the compute cluster is not correct. Please provide name of the compute cluster"
    }

    while ((Get-Cluster $edgeClusterName) -eq $null)
    {
    $edgeClusterName = Read-Host "The name provided for the edge cluster is not correct. Please provide name of the edge cluster"
    }
    #enabling hyper-v-powershell feature on the storage node
    if(!(Get-WindowsFeature |?{$_.Name -match "Hyper-V-Powershell"} | select -ExpandProperty Installed))
    {
    Write-Verbose "Installing Hyper-V-Powershell feature..."
    Add-WindowsFeature "Hyper-V-Powershell" -Verbose
    }


    #data structures needed to restart the vms later
    if($managementClusterName -ne $null)
    {
    $managementClusterNodes = Get-ClusterNode -Cluster $managementClusterName
    if($managementClusterNodes -eq $null)
    {
    Write-Warning "Could not retrieve the nodes of the management cluster"
    }
    }
    $edgeClusterVMs = Get-ClusterVMs -Cluster $edgeClusterName
    if($edgeClusterVMs -eq $null)
    {
    Write-Warning "Could not retrieve the virtual machines of the edge cluster"
    }
    $computeClusterVMs = Get-ClusterVMs -Cluster $computeClusterName
    if($computeClusterVMs -eq $null)
    {
    Write-Warning "Could not retrieve the virtual machines of the compute cluster"
    }

    #turning off all VMs to prevent them from crashing and risk of data corruption
    $proceed = Get-Confirmation -Question "Have you enabled RDP connectivity on a storage node?"
    if($proceed -eq $false)
    {
    Write-Error "This script must be run from a storage node. Please enable RDP on a storage node, connect to it and restart the script."
    exit
    }
    $proceed = Get-Confirmation -Question "Are you running this script from a storage node?"
    if($proceed -eq $false)
    {
    Write-Error "This script must be run from a storage node. Please RDP into a storage node and restart the script."
    exit
    }
    Stop-ClusterVMs -ClusterName $computeClusterName -targetVMs $computeClusterVMs
    Stop-ClusterVMs -ClusterName $edgeClusterName -targetVMs $edgeClusterVMs
    if($managementClusterName -ne $null)
    {
    Suspend-ClusterVMs -ClusterName $managementClusterName
    }
    $storageClusterName = (Get-Cluster).name
    while ($storageClusterName -eq $null)
    {
    $storageClusterName = Read-Host "Please provide name of the storage cluster"
    }
    $clusterNodes = (Get-ClusterNode -Cluster $storageClusterName).Name
    if($clusterNodes -eq $null)
    {
    Write-Error "Could not retrieve the nodes of the storage cluster"
    }
    $ClusterSharedVolumes = Get-ClusterSharedVolume -Cluster $storageClusterName
    if($ClusterSharedVolumes -eq $null)
    {
    Write-Error "'Get-ClusterSharedVolume -Cluster' $storageClusterName failed. Could not retrieve the list of volumes of the storage cluster"
    }
    #temporarily enable CredSSP on the SOFS nodes
    foreach($clusterNode in $clusterNodes)
    {
    Write-Verbose "Enabling CredSSP Client role for $clusterNode..."
    Enable-WSManCredSSP -role Client -DelegateComputer * -Force
    Write-Verbose "Enabling CredSSP Server role on $clusterNode..."
    Invoke-Command -ComputerName $clusterNode {Enable-WSManCredSSP -Role Server -Force}
    }


    $counter = 1
    foreach ($clusterSharedVolumeObject in $ClusterSharedVolumes) {

    $progress= [int] ($counter / $ClusterSharedVolumes.Count * 100 )
    Write-Progress -Activity "Enabling BitLocker on the volumes..." `
    -PercentComplete $progress `
    -CurrentOperation "$progress% complete" `
    -Status "Please wait."
    $counter++

    $clusterSharedVolume = $clusterSharedVolumeObject.Name
    $CSVPhysicalOwner = $clusterSharedVolumeObject.OwnerNode


    #Verifying the status of the volume before starting the encryption process. only fullydecrypted is acceptable.
    $clusterSharedVolumeStatus = (Invoke-Command -Authentication Credssp -Credential $creds -ComputerName $CSVPhysicalOwner -ArgumentList $clusterSharedVolumeObject {param($clusterSharedVolumeObject) Get-BitlockerVolume -MountPoint $clusterSharedVolumeObject.SharedVolumeInfo.FriendlyVolumeName}).VolumeStatus
    switch ($clusterSharedVolumeStatus) {
    "FullyDecrypted" {"Starting encryption process for $clusterSharedVolume..."; $continueWithEncryption = $true}
    "FullyEncrypted" {"$clusterSharedVolume is already encrypted. Moving to the next volume."; $continueWithEncryption = $false}
    "EncryptionInProgress" {"$clusterSharedVolume is currently being encrypted. Moving to the next volume"; $continueWithEncryption = $false}
    default {"$clusterSharedVolume status is unknown. Moving to the next volume"; $continueWithEncryption = $false}
    }
    if (!$continueWithEncryption){continue}
    try{
    #Put ClusterSharedVolume in Maintenance Mode
    Write-Verbose "Putting the $clusterSharedVolume in maintenance mode..."
    Invoke-Command -ComputerName $CSVPhysicalOwner -ArgumentList $clusterSharedVolume {param($clusterSharedVolume) Get-ClusterSharedVolume $clusterSharedVolume | Suspend-ClusterResource -Force}

    #Configure BitLocker on the volume
    $CSVMountPoint = Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $clusterSharedVolume {param($clusterSharedVolume) (Get-ClusterSharedVolume $clusterSharedVolume).SharedVolumeInfo.FriendlyVolumeName}
    if($CSVMountPoint -eq $null)
    {
    $errorMessageForUser = "Failed while retrieving the MountPoint associated with $clusterSharedVolume on server node $CSVPhysicalOwner"
    throw $errorMessageForUser
    }
    Write-Verbose "Invoking Enable-Bitlocker on $clusterSharedVolume..."
    Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $CSVMountPoint {param($CSVMountPoint) Enable-BitLocker $CSVMountPoint -RecoveryPasswordProtector}
    Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $CSVMountPoint,$bitlockerEncryptionKey {param($CSVMountPoint, $bitlockerEncryptionKey) Add-BitLockerKeyProtector $CSVMountPoint -PasswordProtector –Password $bitlockerEncryptionKey}
    #enable using a recovery password protector and backup the protector to Active Directory
    write-verbose "Backup BitLocker Key Protector on AD for $clusterSharedVolume..."
    $protectorId = Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $CSVMountPoint {param($CSVMountPoint) (Get-BitLockerVolume $CSVMountPoint).Keyprotector | Where-Object {$_.KeyProtectorType -eq "RecoveryPassword”
    }} if($protectorId -eq $null) {
    $errorMessageForUser = "Failed while retrieving the protector Id associated with $CSVMountPoint on server node $CSVPhysicalOwner"
    throw $errorMessageForUser
    }

    Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $CSVMountPoint,$protectorId {param($CSVMountPoint, $protectorId) Backup-BitLockerKeyProtector $CSVMountPoint -KeyProtectorId $protectorId.KeyProtectorId}
    #Determine the Cluster Name Object for your cluster:
    $cno = $storageClusterName + "$"
    #Add an Active Directory Security Identifier (SID) to the CSV disk using the Cluster Name Object (CNO)
    Write-Verbose "Enabling ADProtector on $clusterSharedVolume..."
    Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $CSVMountPoint,$cno {param($CSVMountPoint, $cno) Add-BitLockerKeyProtector $CSVMountPoint -ADAccountOrGroupProtector –ADAccountOrGroup $cno}

    #Put the ClusterSharedVolume back online
    Write-Verbose "Putting $clusterSharedVolume back online..."
    Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $clusterSharedVolume {param($clusterSharedVolume) Get-ClusterSharedVolume $clusterSharedVolume | Resume-ClusterResource}
    }
    catch
    {
    Invoke-Command -ComputerName $CSVPhysicalOwner -Authentication Credssp -Credential $creds -ArgumentList $CSVMountPoint{param($CSVMountPoint) manage-bde -off $CSVMountPoint}
    Write-Host "The encryption process of $CSVMountPoint encountered a problem. Execution stopped. Disabling BitLocker and decrypting volume $CSVMountPoint" -ForegroundColor Red
    Write-Host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red
    exit
    }

    }

    #restart all VMs that were previously shut down or suspended
    Write-Verbose "Encryption enabled on all the CSVs. Restarting now all the VMs that were previously shut down or suspended"
    if($managementClusterName -ne $null)
    {
    #restarting management cluster
    $tempCounter = 0
    $sizeManagementCluster = $managementClusterNodes.length - 1
    $managmentClusterObject = Start-Cluster $managementClusterNodes[$tempCounter]
    while (($managementClusterObject -eq $null ) -and ($tempCounter -lt $sizeManagementCluster))
    {
    Write-Verbose "Management Cluster did not start on node $managementClusterNodes[$tempCounter]"
    $tempCounter++
    Write-Verbose "Trying now to start the management cluster on node $managementClusterNodes[$tempCounter]"
    $managmentClusterObject = Start-Cluster $managementClusterNodes[$tempCounter]
    }
    if ($managementClusterObject -eq $null)
    {
    Write-Host "Management cluster could not be started. Please restart it manually" -ForegroundColor Red
    }
    }
    Start-ClusterVMs -ClusterName $edgeClusterName -TargetVMs $edgeClusterVMs
    Start-ClusterVMs -ClusterName $computeClusterName -TargetVMs $computeClusterVMs

    #disable credSSP on the SOFS nodes
    foreach($clusterNode in $listOfNodes)
    {
    write-verbose "Disabling CredSSP on $clusterNode..."
    Invoke-Command -ComputerName $clusterNode {Disable-WSManCredSSP -Role Server}
    }
    write-verbose "Disabling CredSSP on local machine..."
    Disable-WSManCredSSP -role Client

    Write-Progress -Activity "Enabling BitLocker on the volumes..." `
    -Completed -Status "All done."
    }
    Enable-ClusterDiskBitlocker -Verbose


    4.2 では、リモート デスクトップを使用して管理者の資格情報を使用して <myStorageNode> に接続して、管理者権限を持つ PowerShell コンソールを開きます。接続できない場合は、ストレージ ・ ノードでリモート デスクトップを有効にします。リモート デスクトップを有効にする方法の詳細についてを参照してください: Windows 2012 コア サバイバル ガイド: リモート デスクトップです

    4.3 <myFolder> には、とし、次のコマンドラインを入力してください。
    PS C:\Users\admin1\Desktop> .\Enable-ClusterDiskBitlocker.ps1 –bitlockerEncryptionKey <myEncryptionKey> -Verbose
    暗号化キーは、bitlocker を使用するキーです。スクリプトは、管理者の資格情報、およびクラスターの管理、計算クラスター、およびエッジ クラスターの名前のメッセージが表示されます。

    4.5 スクリプト最初にオフになります (除く AD DC または Vm) で、スタンプのすべての仮想マシン コンソールの VM への接続が失われますので。スクリプトは、各クラスターのディスクを通過し、BitLocker 暗号化を有効にするには。すべてのクラスター ディスクで BitLocker を有効にすると、スクリプトにはすべての Vm オンライン処理中にオフになっていたが表示されます。

    スクリプト内部で何が起こっての学習に関心がある場合は、次のブログ投稿の手順とほとんど同じです。

    Windows Server 2012 でクラスター化されたディスクの BitLocker 暗号化を構成する方法

    このプロセスは、ストレージ ・ クラスターごとに約 30 分かかります。

    4.6 スクリプトが実行を完了した後は、フェールオーバー クラスター マネージャーを開きます。すべてのクラスター ディスクには、状態が [オンライン (リダイレクトされた)が必要です。以前無効にしたすべての仮想マシンをオンにし、CPS ラックを通常どおりに動作できます。暗号化プロセスでは、ディスクに書き込まれるデータの量に応じて、完了までに数日をかかる場合があります。クラスター ディスクが完全に暗号化され、その状態は自動的にオンラインに戻ります。

    4.7 と暗号化処理が完了したら、ストレージ ・ ノードにはしてくださいリモート デスクトップを無効にします。リモート デスクトップを無効にする方法の詳細についてを参照してください: Windows 2012 コア サバイバル ガイド: リモート デスクトップです
  5. スタンプの暗号化ステータスを確認します

    暗号化プロセスの進捗状況の更新を取得する、またはコンプライアンス上の理由から暗号化ステータスの印刷イメージを取得するには、次のGet VolumeEncryptionStatusコマンドレットを実行します。

    <#################################################### #
    # Copyright (c) Microsoft. All rights reserved. #
    # #
    ##################################################>
    <#
    .SYNOPSIS
    Collect encryption status for each of the volumes in the storage cluster.
    .DESCRIPTION
    Collect encryption status for each of the volumes in the storage cluster. For each volume, this script returns Volume Name, Owner Node, Encryption Status and Encryption Percentage.
    The script requires the Bitlocker Feature installed on every node of the cluster and credssp enabled.
    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
    #>
    Param(
    [Parameter (Mandatory = $true)] [string] $storageClusterName
    )
    $ClusterSharedVolumes = Get-ClusterSharedVolume -Cluster $storageClusterName
    if($ClusterSharedVolumes -eq $null)
    {
    Write-Error "'Get-ClusterSharedVolume -Cluster' $storageClusterName failed. Could not retrieve the list of volumes of the storage cluster"
    }
    try{
    $resultTable = @{Expression={$_.Name};Label="Volume Name";width=45},`
    @{Expression={$_.OwnerNode};Label="Owner Node";width=15}, `
    @{Expression={$_.VolumeStatus};Label="Encryption Status";width=25}, `
    @{Expression={$_.EncryptionPercentage};Label="Encryption Percentage";width=15}
     
    $counter = 1
    $temp = foreach($clusterSharedVolumeObject in $ClusterSharedVolumes)
    {
    $progress= [int] ($counter / $ClusterSharedVolumes.Count * 100 )
    Write-Progress -Activity "Collecting data..." `
    -PercentComplete $progress `
    -CurrentOperation "$progress% complete" `
    -Status "Please wait."
    $bitlockerVolume = Invoke-Command -ComputerName $clusterSharedVolumeObject.OwnerNode.Name -ArgumentList $clusterSharedVolumeObject {param($clusterSharedVolumeObject) Get-BitlockerVolume -MountPoint $clusterSharedVolumeObject.SharedVolumeInfo.FriendlyVolumeName}
    [PSCustomObject] @{
    "Name" = $clusterSharedVolumeObject.Name
    "OwnerNode" = $clusterSharedVolumeObject.OwnerNode.Name
    "VolumeStatus" = $bitlockerVolume.VolumeStatus
    "EncryptionPercentage" = $bitlockerVolume.EncryptionPercentage
    }
    $counter++
    }
     
    $temp | Format-Table $resultTable
    Write-Progress -Activity "Collecting data..." `
    -Completed -Status "All done."
    }
    catch
    {
    Write-Host "The cmdlet encountered a problem. Execution stopped." -ForegroundColor Red
    write-host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red
    }

    5.1 は、このコードをコピーし、コンソールの VM に <myFolder> では、Get-VolumeEncryptionStatus.ps1 として保存します。

    5.2 では、Powershell コンソールを開く管理者権限を持つし、ストレージ ・ クラスターの名前を渡すには、次のコマンドレットを実行します。
    PS C:\Users\admin1\Desktop> .\Get-VolumeEncryptionStatus.ps1 -storageClusterName
プロパティ

文書番号:3078425 - 最終更新日: 2017/02/01 - リビジョン: 1

Cloud Platform System, Windows Server 2012 R2 Datacenter

フィードバック