Mengamankan parameter Anda

Selesai

Terkadang Anda perlu meneruskan nilai sensitif ke penyebaran Anda, seperti kata sandi dan kunci API. Namun, Anda harus memastikan nilai-nilai ini dilindungi. Dalam beberapa situasi, Anda tidak ingin orang yang membuat penyebaran mengetahui nilai-nilai rahasia tersebut. Di lain waktu, seseorang akan memasukkan nilai parameter saat mereka membuat penyebaran, tetapi Anda perlu memastikan nilai rahasia tidak dicatat. Dalam unit ini, Anda akan mempelajari tentang cara Anda dapat melindungi parameter Anda.

Tip

Pendekatan terbaik adalah menghindari penggunaan kredensial sepenuhnya. Identitas terkelola untuk sumber daya Azure dapat memungkinkan komponen solusi Anda berkomunikasi satu sama lain dengan aman tanpa kredensial apa pun. Identitas terkelola tidak tersedia untuk setiap sumber daya, tetapi ada baiknya menggunakannya di mana pun Anda bisa. Jika tidak bisa, Anda dapat menggunakan pendekatan yang dijelaskan di sini.

Catatan

Perintah dalam unit ini ditampilkan untuk mengilustrasikan konsep. Jangan jalankan perintah terlebih dahulu. Anda akan segera mempraktikkan apa yang Anda pelajari di sini.

Menentukan parameter aman

@secureDekorator dapat diterapkan ke parameter string dan objek yang mungkin berisi nilai rahasia. Saat Anda menentukan parameter sebagai @secure, Azure tidak akan membuat nilai parameter tersedia dalam log penyebaran. Selain itu, jika Anda membuat penyebaran secara interaktif menggunakan Azure CLI atau Azure PowerShell dan Anda harus memasukkan nilai selama penyebaran, terminal tidak akan menampilkan teks di layar Anda.

Sebagai bagian dari migrasi aplikasi SDM, Anda harus menyebarkan server dan database logis Azure SQL. Anda akan menyediakan server logis dengan login administrator dan kata sandi. Karena bersifat sensitif, Anda harus mengamankan nilai-nilai ini. Berikut adalah deklarasi contoh untuk membuat dua parameter string untuk detail administrator server SQL:

@secure()
param sqlServerAdministratorLogin string

@secure()
param sqlServerAdministratorPassword string

Perhatikan bahwa tidak ada parameter yang memiliki nilai default yang ditentukan. Ini adalah praktik yang baik untuk menghindari penentuan nilai default untuk nama pengguna, kata sandi, dan rahasia lainnya. Jika tidak, jika seseorang menyebarkan templat Anda dan tidak menyadari bahwa mereka harus menimpa nilai, mereka akan melemahkan keamanan mereka karena akan mendapatkan nilai default alih-alih sesuatu yang mereka pilih sendiri.

Tip

Pastikan Anda tidak membuat output untuk data sensitif. Nilai output dapat diakses oleh siapa saja yang memiliki akses ke riwayat penyebaran. Ini tidak tepat untuk menangani rahasia.

Hindari menggunakan file parameter untuk rahasia

Seperti yang Anda pelajari di unit sebelumnya, file parameter adalah cara yang bagus untuk menentukan sekumpulan nilai parameter. Anda akan sering membuat file parameter untuk setiap lingkungan tempat Anda menyebarkan. Secara umum, Anda harus menghindari penggunaan file parameter untuk menentukan nilai rahasia. File parameter sering kali disimpan ke sistem kontrol versi terpusat, seperti Git. Banyak orang mungkin memiliki akses ke sistem tersebut nantinya. Jangan simpan data sensitif ke sistem kontrol versi karena tidak dirancang untuk menyimpan informasi semacam ini.

Mengembangkan Azure Key Vault

Azure Key Vault adalah layanan yang dirancang untuk menyimpan dan menyediakan akses ke rahasia. Anda dapat mengintegrasikan templat Bicep Anda dengan Key Vault menggunakan file parameter dengan referensi ke rahasia Key Vault.

Anda dapat menggunakan fitur ini dengan merujuk ke key vault dan rahasia dalam file parameter Anda. Nilainya tidak pernah diekspos karena Anda hanya merujuk pengidentifikasinya, yang bukan sesuatu yang rahasia. Saat Anda menyebarkan templat, Azure Resource Manager akan menghubungi key vault dan mengambil data.

Tip

Anda dapat merujuk ke rahasia di key vault yang terletak di grup sumber daya atau langganan yang berbeda dari yang Anda sebarkan.

Diagram that shows a parameter file reference Azure Key Vault and pass secret to Bicep template to deploy Azure resources.

Berikut adalah file parameter yang menggunakan referensi Key Vault untuk mencari login dan kata sandi administrator server logis SQL yang digunakan:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "sqlServerAdministratorLogin": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets"
        },
        "secretName": "sqlAdminLogin"
      }
    },
    "sqlServerAdministratorPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets"
        },
        "secretName": "sqlAdminLoginPassword"
      }
    }
  }
}

Perhatikan bahwa alih-alih menentukan value untuk setiap parameter, file ini memiliki objek reference, yang berisi detail key vault dan rahasia.

Penting

Key vault Anda harus dikonfigurasi untuk mengizinkan Resource Manager mengakses data di key vault selama penyebaran templat. Selain itu, pengguna yang menyebarkan templat harus memiliki izin untuk mengakses key vault. Anda akan mempelajari cara melakukan tugas ini di unit berikutnya.

Menggunakan Key Vault dengan modul

Modul memungkinkan Anda membuat file Bicep yang dapat digunakan kembali yang merangkum serangkaian sumber daya. Menggunakan modul untuk menyebarkan bagian dari solusi Anda umum dilakukan. Modul mungkin memiliki parameter yang menerima nilai rahasia, dan Anda dapat menggunakan integrasi Key Vault Bicep untuk menyediakan nilai-nilai ini dengan aman. Berikut adalah contoh file Bicep yang menyebarkan modul dan memberikan nilai parameter rahasia ApiKey dengan mengambilnya langsung dari Key Vault:

resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = {
  name: keyVaultName
}

module applicationModule 'application.bicep' = {
  name: 'application-module'
  params: {
    apiKey: keyVault.getSecret('ApiKey')
  }
}

Perhatikan bahwa dalam file Bicep ini, sumber daya Key Vault dirujuk dengan menggunakan existing kata kunci. Kata kunci memberi tahu Bicep bahwa Key Vault sudah ada, dan kode ini adalah referensi ke vault tersebut. Bicep tidak akan menyebarkannya kembali. Selain itu, perhatikan bahwa kode modul menggunakan getSecret() fungsi dalam nilai untuk parameter modul apiKey . Ini adalah fungsi Bicep khusus yang hanya dapat digunakan dengan parameter modul yang aman. Secara internal, Bicep menerjemahkan ekspresi ini ke jenis referensi Key Vault yang sama dengan yang Anda pelajari sebelumnya.