Azure Key Vault REST API-felkoder
Följande felkoder kan returneras av en åtgärd i en Azure Key Vault-webbtjänst.
HTTP 401: Ej autentiserad begäran
401 innebär att begäran är oautentiserad för Key Vault.
En begäran autentiseras om:
- Nyckelvalvet känner till anroparens identitet. och
- Anroparen kan försöka komma åt Key Vault-resurser.
Det finns flera orsaker till varför en begäran kan returnera 401.
Ingen autentiseringstoken är kopplad till begäran
Här är ett exempel på PUT-begäran som anger värdet för en hemlighet:
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)"
}
Rubriken "Auktorisering" är den åtkomsttoken som krävs för varje anrop till Key Vault för dataplansåtgärder. Om rubriken saknas måste svaret vara 401.
Token saknar rätt resurs som är associerad med den
När du begär en åtkomsttoken från Azure OAUTH-slutpunkten är en parameter som kallas "resurs" obligatorisk. Värdet är viktigt för tokenprovidern eftersom det omfångsbegränsar token för avsedd användning. Resursen för alla token för åtkomst till ett Key Vault är https://vault.keyvault.net (utan avslutande snedstreck).
Token har upphört att gälla
Tokens är base64-kodade och värdena kan avkodas på webbplatser som http://jwt.calebb.net. Här är ovanstående token avkodad:
{
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]
Vi kan se många viktiga delar i den här token:
- aud (målgrupp): Resursen för token. Observera att det här är
https://vault.azure.net
. Den här token fungerar INTE för någon resurs som inte uttryckligen matchar det här värdet, till exempel diagram. - iat (utfärdat på): Antalet fästingar sedan början av epoken när token utfärdades.
- nbf (inte tidigare): Antalet fästingar sedan epokens början när denna token blir giltig.
- exp (förfallodatum): Antalet tick sedan epokens början när denna token upphör att gälla.
- appid (program-ID): GUID för program-ID:t som gör den här begäran.
- tid (klientorganisations-ID): GUID för klient-ID:t för huvudkontot som gör den här begäran
Det är viktigt att alla värden identifieras korrekt i token för att begäran ska fungera. Om allt är korrekt resulterar inte begäran i 401.
Felsöka 401
401s bör undersökas från tokengenereringspunkten innan begäran görs till nyckelvalvet. Vanligtvis används kod för att begära token. När token har tagits emot skickas den till Key Vault-begäran. Om koden körs lokalt kan du använda Fiddler för att samla in begäran/svaret på https://login.microsoftonline.com
. En begäran ser ut så här:
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
Följande användarinformation måste vara korrekt:
- Klient-ID för nyckelvalvet
- Resursvärde inställt på https%3A%2F%2Fvault.azure.net (URL-kodad)
- Klient-ID
- Klienthemlighet
Kontrollera att resten av begäran är nästan identisk.
Om du bara kan hämta svarsåtkomsttoken kan du avkoda den för att säkerställa klientorganisations-ID, klient-ID (app-ID) och resursen.
HTTP 403: Otillräckliga behörigheter
HTTP 403 innebär att begäran autentiserades (den känner till den begärda identiteten) men identiteten har inte behörighet att komma åt den begärda resursen. Det finns två orsaker:
- Det finns ingen åtkomstprincip för identiteten.
- IP-adressen för den begärande resursen godkänns inte i nyckelvalvets brandväggsinställningar.
HTTP 403 inträffar ofta när kundens program inte använder det klient-ID som kunden tror att det är. Det innebär vanligtvis att åtkomstprinciperna inte är korrekt konfigurerade för den faktiska anropande identiteten.
Om du får ett 403-fel omedelbart efter att du har lagt till en identitet i åtkomstprincipen kan du hantera det genom att lägga till regelbundna återförsök.
Felsöka 403
Aktivera först loggning. Anvisningar om hur du gör det finns i Azure Key Vault-loggning.
När loggningen är aktiverad kan du avgöra om 403 beror på åtkomstprincip eller brandväggsprincip.
Fel på grund av brandväggsprincip
"Klientadressen (00.00.00.00) är inte auktoriserad och anroparen är inte en betrodd tjänst"
Det finns en begränsad lista över "Azure Trusted Services". Azure-webbplatser är inte en betrodd Azure-tjänst. Mer information finns i blogginlägget Betrodda tjänster.
Du måste lägga till IP-adressen för Azure-webbplatsen i Key Vault för att den ska fungera.
Om det beror på åtkomstprincipen: leta upp objekt-ID:t för begäran och se till att objekt-ID:t matchar det objekt som användaren försöker tilldela åtkomstprincipen till. Det finns ofta flera objekt i Microsoft Entra-ID, som har samma namn, så det är viktigt att välja rätt objekt. Genom att ta bort och läsa åtkomstprincipen kan du se om det finns flera objekt med samma namn.
Dessutom kräver de flesta åtkomstprinciper inte användning av det "auktoriserade programmet" som visas i portalen. Auktoriserade program används för autentiseringsscenarier som är sällsynta.
HTTP 429: För många begäranden
Bandbreddsbegränsningar används när antalet begäranden överskrider det angivna maxvärdet för tidsramen. När begränsningar används svarar Key Vault med HTTP 429. Det finns angivna max för typer av begäranden som görs. Till exempel: skapandet av en HSM 2048-bitarsnyckel är 10 begäranden per 10 sekunder, men alla andra HSM-transaktioner har en gräns på 2 000 begäranden/10 sekunder. Därför är det viktigt att förstå vilka typer av anrop som görs när du fastställer orsaken till begränsningen. I allmänhet är begäranden till Key Vault begränsade till 4 000 begäranden/10 sekunder. Undantag är nyckelåtgärder, enligt beskrivningen i Key Vault-tjänstbegränsningar
Felsökning av 429
Du kan komma runt bandbreddsbegränsningar med hjälp av följande metoder:
Du kan minska antalet begäranden till Key Vault genom att ta reda på om det finns mönster för en begärd resurs och försöka cachelagra dem i det anropande programmet.
När Key Vault-begränsning inträffar anpassar du den begärda koden så att den använder en exponentiell backoff för att försöka igen. Algoritmen förklaras här: Begränsa din app
Om det inte går att minska antalet begäranden genom cachelagring och en tidsinställd backoff inte fungerar, bör du överväga att dela upp nycklarna i flera nyckelvalv. Tjänstgränsen för en enskild prenumeration är 5 gånger gränsen för ett enskilt nyckelvalv. Om du använder fler än fem Key Vaults bör du överväga att använda flera prenumerationer.
Detaljerad vägledning, inklusive begäran om att öka gränserna, finns här: Vägledning för Key Vault-begränsning