Hoppa till innehållet
Stackship-dokumentation English

Managed identitiesAnvändareMaskinöversatt

Använd en managed identity i kod

Hämta en token för en arbetslasts managed identity inifrån dess podd, med .NET-klienten eller ett vanligt HTTP-anrop.

Kod som körs i en arbetslasts podd kan hämta en kortlivad åtkomsttoken för arbetslastens managed identity. Med token kan koden anropa plattformens tjänster som arbetslasten, med de rättigheter identitetens roller ger — inget mer.

Viktigt

En annan arbetslasts poddar kan inte få den här token, men personer kan. Den som kan köra kommandon i arbetslastens poddar (Kubernetes pods/exec: Owner, Contributor, Apps Operator, Blueprints Operator, Platform Owner och Platform Contributor, tilldelade på resursgruppen eller högre) kan läsa poddens bevis och hämta token. Den som kan skapa poddar i resursgruppens namnrymd (Owner, Contributor, Platform Owner, Platform Contributor, med direkt åtkomst till klustret) kan få en token för vilken identitet som helst i resursgruppen. Att ge en identitet en roll ger den därför i praktiken till dem också — se Hur arbetslasttoken utfärdas.

Vad podden får

Variabel Värde
STACKSHIP_IDENTITY_RESOURCE_UID Vilken identitet som ska begäras
STACKSHIP_IDENTITY_TOKEN_ENDPOINT Var den ska begäras, inne i klustret
STACKSHIP_IDENTITY_POD_TOKEN_PATH Filen med poddens bevis på vem den är

Container instances får också STACKSHIP_IDENTITY_PRINCIPAL_ID och STACKSHIP_IDENTITY_CLIENT_ID när instansens spec.identity anger dem.

Vilka containrar som får dem:

Arbetslast Containrar
App Appens container, i varje slot
Funktion Funktionens container; identiteten är funktionsnamnutrymmets
Container instance Varje container och init-container i en komponent som refererar till en valvhemlighet, eller som begär identiteten med identityInjection: true i API:t eller en blueprint-mall. Andra komponenter får inga

Plattformens secret-init-container, som hämtar valvhemligheter när en podd startar, får dem också. Filagentens sidecar i en arbetslast med en beständig volym får inga.

Med .NET

Paketet Stackship.Identity.Client riktar sig mot .NET 10. ManagedIdentityCredential läser variablerna ovan och hämtar och cachar token; DefaultStackshipCredential använder den när variablerna finns, och faller annars tillbaka på ett tjänstekontos uppgifter från STACKSHIP_CLIENT_ID, STACKSHIP_CLIENT_SECRET och STACKSHIP_TOKEN_ENDPOINT — praktiskt på en utvecklares dator.

csharp
using Stackship.Identity.Client;

var credential = new DefaultStackshipCredential();
var token = await credential.GetTokenAsync();

token.Token är bearer-token och token.ExpiresOn när den löper ut.

För att lägga token på varje utgående anrop ger du en HttpClient hanteraren:

csharp
var http = new HttpClient(new StackshipTokenCredentialHandler(credential));

services.AddDefaultStackshipCredential() registrerar autentiseringen för dependency injection som StackshipTokenCredential.

Secrets-klienten tar samma autentisering — se .NET-klienten.

Med ett vanligt HTTP-anrop

Skicka en POST till tokenslutpunkten med identitetens UID i sökvägen och poddens bevis i huvudet X-Stackship-Pod-Token:

bash
curl -s -X POST \
  -H "X-Stackship-Pod-Token: $(cat "$STACKSHIP_IDENTITY_POD_TOKEN_PATH")" \
  "$STACKSHIP_IDENTITY_TOKEN_ENDPOINT/$STACKSHIP_IDENTITY_RESOURCE_UID/token"

Svaret är JSON med access_token, token_type (Bearer), expires_in i sekunder, client_id och principal_id. Fråga igen när token löper ut, och läs beviset från filen på nytt varje gång: det byts ut regelbundet.

När den svarar 404

Slutpunkten svarar 404 Not Found på samma sätt vid varje avvisning — ingen sådan identitet, inget eller ett ogiltigt bevis, ett bevis från en annan arbetslasts podd eller ett anrop utifrån klustret — så att den inte avslöjar vilka identiteter som finns. Kontrollera att anropet görs inne i arbetslastens egen podd, att de tre variablerna är satta och att beviset finns i filen.

En token bevisar bara vem arbetslasten är. Vad den får göra kommer från identitetens roller — se Ge en managed identity en roll.