Bagikan melalui


Kode Galat REST API Azure Key Vault

Kode kesalahan berikut ini dapat dikembalikan oleh operasi pada layanan web Azure Key Vault.

HTTP 401: Permintaan Tidak Diautentikasi

401 berarti bahwa permintaan tidak diautentikasi untuk Key Vault.

Permintaan diautentikasi jika:

  • Brankas kunci mengetahui identitas penelepon; dan
  • Penelepon diperbolehkan untuk mencoba mengakses sumber daya Key Vault.

Ada berbagai alasan mengapa permintaan dapat menghasilkan 401.

Tidak ada token autentikasi yang dilampirkan ke permintaan

Berikut adalah contoh permintaan PUT, mengatur nilai rahasia:

PUT https://putreqexample.vault.azure.net//secrets/DatabaseRotatingPassword?api-version=7.0 HTTP/1.1
x-ms-client-request-id: 03d275a2-52a4-4bed-82c8-6fe15165affb
accept-language: en-US
Authorization: Bearer     eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5iQ3dXMTF3M1hrQi14VWFYd0tSU0xqTUhHUSIsImtpZCI6Im5iQ3dXMTF3M1hrQi14VWFYd0tSU0xqTUhHUSJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0Ny8iLCJpYXQiOjE1NDg2OTc1MTMsIm5iZiI6MTU0ODY5NzUxMywiZXhwIjoxNTQ4NzAxNDEzLCJhaW8iOiI0MkpnWUhoODVqaVBnZHF5ZlRGZE5TdHY3bGUvQkFBPSIsImFwcGlkIjoiZmFkN2Q1YjMtNjlkNi00YjQ4LTkyNTktOGQxMjEyNGUxY2YxIiwiYXBwaWRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjQ3LyIsIm9pZCI6IjM5NzVhZWVkLTdkMDgtNDUzYi1iNmY0LTQ0NWYzMjY5ODA5MSIsInN1YiI6IjM5NzVhZWVkLTdkMDgtNDUzYi1iNmY0LTQ0NWYzMjY5ODA5MSIsInRpZCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsInV0aSI6IjItZ3JoUmtlSWs2QmVZLUxuNDJtQUEiLCJ2ZXIiOiIxLjAifQ.fgubiz1MKqTJTXI8dHIV7t9Fle6FdHrkaGYKcBeVRX1WtLVuk1QVxzIFDlZKLXJ7QPNs0KWpeiWQI9IWIRK-8wO38yCqKTfDlfHOiNWGOpkKddlG729KFqakVf2w0GPyGPFCONRDAR5wjQarN9Bt8I8YbHwZQz_M1hztlnv-Lmsk1jBmech9ujD9-lTMBmSfFFbHcqquev119V7sneI-zxBZLf8C0pIDkaXf1t8y6Xr8CUJDMdlWLslCf3pBCNIOy65_TyGvy4Z4AJryTPBarNBPwOkNAtjCfZ4BDc2KqUZM5QN_VK4foP64sVzUL6mSr0Gh7lQJIL5b1qIpJxjxyQ
User-Agent: FxVersion/4.7.3324.0 OSName/Windows OSVersion/6.2.9200.0 Microsoft.Azure.KeyVault.KeyVaultClient/3.0.3.0
Content-Type: application/json; charset=utf-8
Host: putreqexample.vault.azure.net
Content-Length: 31

{
   "value": "m*gBJ7$Zuoz)"
}

Header "Otorisasi" adalah token akses yang diperlukan dengan setiap panggilan ke Key Vault untuk operasi sarana data. Jika header hilang, maka respons pasti 401.

Token tidak memiliki sumber daya yang benar yang terkait dengannya

Saat meminta token akses dari titik akhir Azure OAUTH, parameter yang disebut "resource" adalah wajib. Nilai tersebut penting bagi penyedia token karena mencakup token untuk penggunaan yang dimaksudkan. Sumber daya untuk semua token untuk mengakses Key Vault adalah https://vault.keyvault.net (tanpa garis miring berikutnya).

Token kedaluwarsa

Token dikodekan dengan base64 dan nilainya dapat didekodekan di situs web seperti http://jwt.calebb.net. Berikut adalah token di atas yang diterjemahkan:

    {
 typ: "JWT",
 alg: "RS256",
 x5t: "nbCwW11w3XkB-xUaXwKRSLjMHGQ",
 kid: "nbCwW11w3XkB-xUaXwKRSLjMHGQ"
}.
{
 aud: "https://vault.azure.net",
 iss: "https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/",
 iat: 1548697513,
 nbf: 1548697513,
 exp: 1548701413,
 aio: "42JgYHh85jiPgdqyfTFdNStv7le/BAA=",
 appid: "fad7d5b3-69d6-4b48-9259-8d12124e1cf1",
 appidacr: "1",
 idp: "https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/",
 oid: "3975aeed-7d08-453b-b6f4-445f32698091",
 sub: "3975aeed-7d08-453b-b6f4-445f32698091",
 tid: "72f988bf-86f1-41af-91ab-2d7cd011db47",
 uti: "2-grhRkeIk6BeY-Ln42mAA",
 ver: "1.0"
}.
[signature]

Kita dapat melihat banyak bagian penting dalam token ini:

  • aud (audiens): Sumber daya token. Perhatikan bahwa ini https://vault.azure.net adalah. Token ini TIDAK akan berfungsi untuk sumber daya apa pun yang tidak secara eksplisit cocok dengan nilai ini, seperti grafik.
  • iat (dikeluarkan di): Jumlah tick sejak awal epoch saat token diterbitkan.
  • nbf (tidak sebelumnya): Jumlah tick sejak dimulainya masa ketika token ini menjadi valid.
  • exp (kedaluwarsa): Jumlah tick sejak awal masa ketika token ini kedaluwarsa.
  • appid (ID aplikasi): GUID untuk ID aplikasi yang membuat permintaan ini.
  • tid (ID penyewa): GUID untuk ID penyewa utama yang membuat permintaan ini

Penting bahwa semua nilai diidentifikasi dengan benar dalam token agar permintaan berfungsi. Jika semuanya benar, maka permintaan tidak akan menghasilkan 401.

Pemecahan Masalah 401

401 harus diselidiki dari titik pembuatan token, sebelum permintaan dibuat ke brankas kunci. Umumnya kode sedang digunakan untuk meminta token. Setelah token diterima, token diteruskan ke permintaan Key Vault. Jika kode berjalan secara lokal, Anda dapat menggunakan Fiddler untuk menangkap permintaan/respons ke https://login.microsoftonline.com. Permintaan terlihat seperti ini:


POST https://login.microsoftonline.com/<key vault tenant ID>/oauth2/token HTTP/1.1
Accept: application/json
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: login.microsoftonline.com
Content-Length: 192

resource=https%3A%2F%2Fvault.azure.net&client_id=<registered-app-ID>&client_secret=<registered-app-secret>&client_info=1&grant_type=client_credentials

Informasi yang diberikan pengguna berikut harus benar:

  • ID penyewa brankas kunci
  • Nilai sumber daya disetel ke https%3A%2F%2Fvault.azure.net (URL dikodekan)
  • ID klien
  • Rahasia Klien

Pastikan sisa permintaan hampir identik.

Jika Anda hanya bisa mendapatkan token akses respons, Anda dapat mendekodenya untuk memastikan ID penyewa, ID klien (ID aplikasi), dan sumber daya.

HTTP 403: Izin tidak memadai

HTTP 403 berarti bahwa permintaan telah diautentikasi (ia tahu identitas yang diminta) tetapi identitas tidak memiliki izin untuk mengakses sumber daya yang diminta. Ada dua penyebab:

  • Tidak ada kebijakan akses untuk identitas.
  • Alamat IP sumber daya yang meminta tidak disetujui dalam pengaturan firewall brankas kunci.

HTTP 403 sering terjadi ketika aplikasi pelanggan tidak menggunakan ID klien seperti yang dipikirkan pelanggan. Itu biasanya berarti bahwa kebijakan akses tidak disiapkan dengan benar untuk identitas panggilan yang sebenarnya.

Jika Anda menerima kesalahan 403 segera setelah menambahkan identitas ke kebijakan akses, Anda dapat menanganinya dengan menambahkan coba lagi secara berkala.

Pemecahan Masalah 403

Pertama, aktifkan pengelogan. Untuk instruksi tentang cara melakukannya, lihat Pengelogan Azure Key Vault.

Setelah pengelogan diaktifkan, Anda dapat menentukan apakah 403 disebabkan oleh kebijakan akses atau kebijakan firewall.

Kesalahan karena kebijakan firewall

“Alamat klien (00.00.00.00) tidak diotorisasi dan pemanggil bukan layanan tepercaya”

Terdapat daftar terbatas "Layanan Tepercaya Azure". Situs Web Azure bukan Layanan Azure Tepercaya. Untuk informasi selengkapnya, lihat postingan blog Akses Firewall Key Vault oleh Azure App Services.

Anda harus menambahkan alamat IP Situs Web Azure ke Key Vault agar bisa berfungsi.

Jika karena kebijakan akses: temukan ID objek untuk permintaan dan pastikan bahwa ID objek cocok dengan objek yang pengguna coba tetapkan kebijakan aksesnya. Sering kali akan ada beberapa objek dalam ID Microsoft Entra, yang memiliki nama yang sama, jadi memilih objek yang benar itu penting. Dengan menghapus dan membaca kebijakan akses, dimungkinkan untuk melihat apakah ada beberapa objek dengan nama yang sama.

Selain itu, sebagian besar kebijakan akses tidak memerlukan penggunaan "Aplikasi resmi" seperti yang ditunjukkan di portal. Aplikasi resmi digunakan untuk skenario autentikasi "atas nama", yang jarang terjadi.

HTTP 429: Terlalu Banyak Permintaan

Pembatasan terjadi ketika jumlah permintaan melebihi jumlah maksimum yang ditentukan untuk jangka waktu tersebut. Jika terjadi pembatasan, respons Key Vault adalah HTTP 429. Terdapat jumlah maksimum yang dinyatakan untuk jenis permintaan yang dibuat. Misalnya: pembuatan kunci HSM 2048-bit adalah 10 permintaan per 10 detik, tetapi semua transaksi HSM lainnya memiliki batas 2.000 permintaan/10 detik. Oleh karena itu penting untuk memahami jenis panggilan mana yang dilakukan ketika menentukan penyebab pembatasan. Secara umum, permintaan ke Key Vault dibatasi hingga 4.000 permintaan/10 detik. Pengecualian adalah Operasi Kunci, seperti yang didokumentasikan dalam batas layanan Key Vault

Pemecahan Masalah 429

Pembatasan dikerjakan dengan menggunakan teknik-teknik ini:

  • Kurangi jumlah permintaan yang dibuat ke Key Vault dengan menentukan apakah ada pola ke sumber yang diminta dan mencoba menyimpannya dalam cache di aplikasi panggilan.

  • Ketika pembatasan Key Vault terjadi, sesuaikan kode yang meminta untuk menggunakan backoff eksponensial untuk mencoba kembali. Algoritma tersebut dijelaskan di sini: Cara membatasi aplikasi Anda

  • Jika jumlah permintaan tidak dapat dikurangi dengan penembolokan dan backoff berwaktu tidak berfungsi, maka pertimbangkan untuk membagi kunci menjadi beberapa Key Vault. Batas layanan untuk satu langganan adalah 5x batas Key Vault individu. Jika menggunakan lebih dari lima Key Vault, pertimbangan harus diberikan untuk menggunakan beberapa langganan.

Panduan mendetail termasuk permintaan untuk meningkatkan batas, dapat ditemukan di sini: Panduan pembatasan Key Vault