Hızlı başlangıç: JavaScript kullanarak uyumlu olmayan kaynakları belirlemek için bir ilke ataması oluşturma

Azure’da uyumluluğu anlamanın ilk adımı, kaynaklarınızın durumunu belirlemektir. Bu hızlı başlangıçta, yönetilen disk kullanmayan sanal makineleri belirlemek için bir ilke ataması oluşturacaksınız. Bu tamamlandığında, uyumlu olmayan sanal makineleri tanımlayacaksınız.

JavaScript kitaplığı, Azure kaynaklarını komut satırından veya betiklerden yönetmek için kullanılır. Bu kılavuzda, bir ilke ataması oluşturmak için JavaScript kitaplığı 'nın nasıl kullanılacağı açıklanmaktadır.

Önkoşullar

  • Azure aboneliği: bir Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Node.js: Node.js sürüm 12 veya üzeri gereklidir.

Azure Cloud Shell kullanma

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell’i barındırır. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Bu makaledeki kodu, yerel ortamınıza herhangi bir şey yüklemeye gerek kalmadan çalıştırmak için Cloud Shell’in önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell’i başlatmak için:

Seçenek Örnek/Bağlantı
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Deneyin seçeneği belirlendiğinde, kod otomatik olarak Cloud Shell’e kopyalanmaz. Azure Cloud Shell için Deneyin örneği
Cloud Shell’i tarayıcınızda açmak için https://shell.azure.com bölümüne gidin veya Cloud Shell’i Başlat düğmesini seçin. Cloud Shell’i yeni bir pencerede başlatma
Azure portalın sağ üst köşesindeki menü çubuğunda yer alan Cloud Shell düğmesini seçin. Azure portaldaki Cloud Shell düğmesi

Azure Cloud Shell’de bu makaledeki kodu çalıştırmak için:

  1. Cloud Shell’i başlatın.

  2. Kodu kopyalamak için kod bloğunda Kopyala düğmesini seçin.

  3. Windows ve Linux sisteminde Ctrl+Shift+V tuşlarını kullanarak veya macOS’de Cmd+Shift+V tuşlarını kullanarak kodu Cloud Shell oturumuna yapıştırın.

  4. Kodu çalıştırmak için Enter tuşuna basın.

Ilke kitaplıklarını ekleme

JavaScript 'ı Azure Ilkesiyle çalışacak şekilde etkinleştirmek için, kitaplıkların eklenmesi gerekir. Bu kitaplıklar, Bash Windows 10de dahil olmak üzere JavaScript 'in kullanılabileceği her yerde çalışır.

  1. Aşağıdaki komutu çalıştırarak yeni bir Node.js projesi ayarlayın.

    npm init -y
    
  2. Yargs kitaplığına bir başvuru ekleyin.

    npm install yargs
    
  3. Azure Ilke kitaplıklarına bir başvuru ekleyin.

    # arm-policy is for working with Azure Policy objects such as definitions and assignments
    npm install @azure/arm-policy
    
    # arm-policyinsights is for working with Azure Policy compliance data such as events and states
    npm install @azure/arm-policyinsights
    
  4. Azure kimlik doğrulama kitaplığına bir başvuru ekleyin.

    npm install @azure/ms-rest-nodeauth
    

    Not

    package.json @azure/arm-policy 'ın sürüm 3.1.0 veya üzeri olduğundan emin olun, @azure/arm-policyinsights Sürüm 3.2.0 veya üzeri, sürüm @azure/ms-rest-nodeauth 3.0.5 veya üzeri.

İlke ataması oluşturma

Bu hızlı başlangıçta, bir ilke ataması oluşturup yönetilen diskler () tanımını kullanmayan denetim sanal makinelerini atarsınız 06a78e20-9358-41c9-923c-fb736d382a4d . Bu ilke tanımı, ilke tanımında ayarlanan koşullarla uyumlu olmayan kaynakları belirler.

  1. policyAssignment.js adlı yeni bir dosya oluşturun ve aşağıdaki kodu girin.

    const argv = require("yargs").argv;
    const authenticator = require("@azure/ms-rest-nodeauth");
    const policyObjects = require("@azure/arm-policy");
    
    if (argv.subID && argv.name && argv.displayName && argv.policyDefID && argv.scope && argv.description) {
    
        const createAssignment = async () => {
            const credentials = await authenticator.interactiveLogin();
            const client = new policyObjects.PolicyClient(credentials, argv.subID);
            const assignments = new policyObjects.PolicyAssignments(client);
    
            const result = await assignments.create(
                argv.scope,
                argv.name,
                {
                    displayName: argv.displayName,
                    policyDefinitionId: argv.policyDefID,
                    description: argv.description
                }
            );
            console.log(result);
        };
    
        createAssignment();
    }
    
  2. Terminalde aşağıdaki komutu girin:

    node policyAssignment.js `
       --subID "{subscriptionId}" `
       --name "audit-vm-manageddisks" `
       --displayName "Audit VMs without managed disks Assignment" `
       --policyDefID "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" `
       --description "Shows all virtual machines not using managed disks" `
       --scope "{scope}"
    

Yukarıdaki komutlarda aşağıdaki bilgiler kullanılmaktadır:

  • Subıd -kimlik doğrulama bağlamı IÇIN abonelik kimliği. Aboneliğiniz ile değiştirdiğinizden emin olun {subscriptionId} .
  • ad -ilke atama nesnesinin benzersiz adı. Yukarıdaki örnekte audit-VM-manageddisks kullanılır.
  • DisplayName -ilke ataması için görünen ad. Bu durumda, yönetilen disk ataması olmadan VM 'Leri denetleme kullanıyorsunuz demektir.
  • Policydefıd -atamayı oluşturmak için kullandığınız ilke tanım yolu. Bu durumda, yönetilen diskleri kullanmayan ilke tanımı denetim VM'lerinin kimliğidir.
  • Açıklama -ilkenin ne yaptığını veya neden bu kapsama atandığını daha derin bir açıklama.
  • kapsam -bir kapsam, ilke atamasının hangi kaynaklarda veya gruplandırmaya uygulanacağını belirler. Bir yönetim grubundan tek bir kaynağa kadar değişebilir. {scope}Aşağıdaki desenlerden biriyle değiştirdiğinizden emin olun:
    • Yönetim grubu: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Abonelik: /subscriptions/{subscriptionId}
    • Kaynak grubu: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Kaynak /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]

Artık ortamınızın uyumluluk durumunu anlamak için uyumlu olmayan kaynakları belirlemek için hazırsınız demektir.

Uyumlu olmayan kaynakları belirleme

İlke atamalarınız oluşturuldığına göre, uyumlu olmayan kaynakları belirleyebilirsiniz.

  1. policyState.js adlı yeni bir dosya oluşturun ve aşağıdaki kodu girin.

    const argv = require("yargs").argv;
    const authenticator = require("@azure/ms-rest-nodeauth");
    const policyInsights = require("@azure/arm-policyinsights");
    
    if (argv.subID && argv.name) {
    
        const getStates = async () => {
    
            const credentials = await authenticator.interactiveLogin();
            const client = new policyInsights.PolicyInsightsClient(credentials);
            const policyStates = new policyInsights.PolicyStates(client);
            const result = await policyStates.listQueryResultsForSubscription(
                "latest",
                argv.subID,
                {
                    queryOptions: {
                        filter: "IsCompliant eq false and PolicyAssignmentId eq '" + argv.name + "'",
                        apply: "groupby((ResourceId))"
                    }
                }
            );
            console.log(result);
        };
    
        getStates();
    }
    
  2. Terminalde aşağıdaki komutu girin:

    node policyState.js --subID "{subscriptionId}" --name "audit-vm-manageddisks"
    

{subscriptionId}Önceki adımlarda oluşturduğumuz ' denetim-VM-manageddisks ' adlı ilke atamasının uyumluluk sonuçlarını görmek istediğiniz abonelikle değiştirin. Diğer kapsamların listesi ve verileri özetleme yolları için bkz. Policystates * yöntemleri.

Sonuçlarınız aşağıdaki örneğe benzer:

{
    'additional_properties': {
        '@odata.nextLink': None
    },
    'odatacontext': 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest',
    'odatacount': 12,
    'value': [{data}]
}

Sonuçlar, Azure portal görünümündeki bir ilke atamasının kaynak uyumluluğu sekmesinde gördüklerinize göre eşleşir.

Kaynakları temizleme

  • Portal üzerinden yönetilen disk ataması olmadan VM 'Leri denetleme ilke atamasını silin. İlke tanımı yerleşik bir derleme olduğundan, kaldırılacak tanım yok.

  • Yüklü kitaplıkları uygulamanızdan kaldırmak istiyorsanız aşağıdaki komutu çalıştırın.

    npm uninstall @azure/arm-policy @azure/arm-policyinsights @azure/ms-rest-nodeauth yargs
    

Sonraki adımlar

Bu hızlı başlangıçta, Azure ortamınızda uyumlu olmayan kaynakları belirlemek üzere bir ilke tanımı atadınız.

Yeni kaynakların uyumlu olduğunu doğrulamak üzere ilke tanımları atama hakkında daha fazla bilgi edinmek için öğreticiye geçin: