Uwierzytelnianie za pomocą zestawu Azure SDK dla języka Go przy użyciu tożsamości zarządzanej
W tym samouczku skonfigurujesz maszynę wirtualną platformy Azure z tożsamością zarządzaną w celu uwierzytelniania na platformie Azure przy użyciu zestawu Azure SDK dla języka Go.
Tożsamości zarządzane eliminują konieczność zarządzania poświadczeniami, zapewniając tożsamość bezpośrednio do zasobu platformy Azure. Uprawnienia przypisane do tożsamości zapewniają dostęp do zasobów innych zasobów platformy Azure, które obsługują tożsamości zarządzane, co pozwala usunąć konieczność przekazania poświadczeń w aplikacji. Tożsamości zarządzane umożliwiają uwierzytelnianie i autoryzację aplikacji hostowanych na platformie Azure za pomocą innych zasobów platformy Azure.
Postępuj zgodnie z tym samouczkiem, aby przypisać tożsamość zarządzaną do maszyny wirtualnej i uwierzytelnić się na platformie Azure przy użyciu tożsamości zarządzanej.
Wymagania wstępne
- Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Jeśli chcesz użyć interfejsu wiersza polecenia platformy Azure, aby uruchomić kroki opisane w tym artykule:
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Jeśli chcesz użyć programu Azure PowerShell, aby uruchomić kroki opisane w tym artykule:
- Jeśli zdecydujesz się używać programu Azure PowerShell lokalnie:
- Zainstaluj najnowszą wersję modułu Az programu PowerShell.
- Połączenie do konta platformy Azure przy użyciu polecenia cmdlet Połączenie-AzAccount.
- Jeśli zdecydujesz się używać usługi Azure Cloud Shell:
- Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Cloud Shell .
- Jeśli zdecydujesz się używać programu Azure PowerShell lokalnie:
1. Tworzenie zasobów platformy Azure
Przed rozpoczęciem należy utworzyć nową grupę zasobów, maszynę wirtualną i wystąpienie magazynu kluczy.
Wdrażanie maszyny wirtualnej
Wdrażanie maszyny wirtualnej na platformie Azure. Uruchom kod Języka Go, aby utworzyć wpis tajny w usłudze Azure Key Vault na podstawie tej maszyny wirtualnej.
Utwórz grupę zasobów platformy Azure.
az group create --name go-on-azure --location eastus
Zmień parametr na
--location
odpowiednią wartość dla danego środowiska.Utwórz maszynę wirtualną platformy Azure.
az vm create \ --resource-group go-on-azure \ --name go-on-azure-vm \ --image canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \ --admin-username azureuser \ --admin-password <password>
Zastąp
<password>
hasło.
Aby dowiedzieć się więcej o innych usługach obsługujących tożsamości zarządzane, zobacz Usługi obsługujące tożsamości zarządzane dla zasobów platformy Azure.
Wdrażanie wystąpienia magazynu kluczy
Utwórz nowe wystąpienie usługi Azure Key Vault, uruchamiając następujące polecenie:
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Zastąp <keyVaultName>
ciąg globalnie unikatową nazwą.
2. Tworzenie tożsamości zarządzanej
Na platformie Azure są obsługiwane dwa typy tożsamości zarządzanych; przypisane przez system i przypisane przez użytkownika.
Tożsamości przypisane przez system są bezpośrednio dołączone do zasobu platformy Azure i ograniczone tylko do tego zasobu. Tożsamości przypisane przez użytkownika są zasobami autonomicznymi, które można przypisać do co najmniej jednego zasobu platformy Azure.
Aby dowiedzieć się więcej o różnicy między przypisanymi przez system i przypisanymi przez użytkownika, zobacz Typy tożsamości zarządzanych.
Wybierz jedną z następujących opcji:
- Opcja 1. Tworzenie tożsamości przypisanej przez system
- Opcja 2. Tworzenie tożsamości przypisanej przez użytkownika
Opcja 1. Tworzenie tożsamości przypisanej przez system
Uruchom następujące polecenia, aby utworzyć tożsamość zarządzaną przypisaną przez system:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Opcja 2. Tworzenie tożsamości przypisanej przez użytkownika
Uruchom następujące polecenia, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity
Aby dowiedzieć się więcej, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
3. Przypisywanie roli do tożsamości zarządzanej
Po utworzeniu tożsamości zarządzanej przypiszesz role, aby przyznać tożsamości uprawnienia dostępu do innego zasobu platformy Azure. W tym samouczku przypiszesz wbudowaną rolę Key Vault Secrets Officer
do tożsamości zarządzanej, aby aplikacja Go mogła utworzyć wpis tajny w wystąpieniu magazynu kluczy.
Wybierz jedną z następujących opcji:
- Opcja 1. Przypisywanie roli do tożsamości przypisanej przez system
- Opcja 2. Przypisywanie roli do tożsamości przypisanej przez użytkownika
Opcja 1. Przypisywanie roli do tożsamości przypisanej przez system
Uruchom następujące polecenia, aby przypisać Key Vault Secrets Officer
rolę do przypisanej przez system tożsamości zarządzanej:
#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query principalId -o tsv
#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
W drugim poleceniu zastąp <keyVaultName>
ciąg nazwą magazynu kluczy. W ostatnim poleceniu zastąp <principalId>
wartości i <keyVaultId>
danymi wyjściowymi z dwóch pierwszych poleceń.
Opcja 2. Przypisywanie roli do tożsamości przypisanej przez użytkownika
Uruchom następujące polecenia, aby przypisać Key Vault Secrets Officer
rolę do tożsamości zarządzanej przypisanej przez użytkownika:
#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query principalId -o tsv
#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
W drugim poleceniu zastąp <keyVaultName>
ciąg nazwą magazynu kluczy. W ostatnim poleceniu zastąp <principalId>
wartości i <keyVaultId>
danymi wyjściowymi z dwóch pierwszych poleceń.
Aby dowiedzieć się więcej na temat wbudowanych ról w usłudze Azure Key Vault, zobacz Zapewnianie dostępu do kluczy, certyfikatów i wpisów tajnych usługi Key Vault przy użyciu kontroli dostępu opartej na rolach platformy Azure. Aby dowiedzieć się więcej na temat wbudowanych ról na platformie Azure, zobacz Role wbudowane platformy Azure.
4. Tworzenie wpisu tajnego magazynu kluczy za pomocą języka Go
Następnie za pomocą protokołu SSH na maszynie wirtualnej platformy Azure zainstaluj język Go i skompiluj pakiet Go.
Instalowanie języka Go na maszynie wirtualnej platformy Azure
Uzyskaj publiczny adres IP maszyny wirtualnej platformy Azure.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
Połączenie SSH z maszyną wirtualną platformy Azure.
ssh azureuser@<public-ip>
Zastąp
<public-ip>
ciąg publicznym adresem IP maszyny wirtualnej platformy Azure.Instalowanie języka Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Tworzenie pakietu Języka Go
Utwórz nowy katalog o nazwie
go-on-azure
w katalogu głównym.mkdir ~/go-on-azure
Przejdź do
go-on-azure
katalogu.cd ~/go-on-azure
Uruchom polecenie
go mod init
, aby utworzyćgo.mod
plik.go mod init go-on-azure
Uruchom polecenie
go get
, aby zainstalować wymagane moduły języka Go.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
main.go
Utwórz plik i skopiuj do niego następujący kod.package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets" ) func createSecret() { keyVaultName := os.Getenv("KEY_VAULT_NAME") secretName := "quickstart-secret" secretValue := "createdWithGO" keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName) cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } client, err := azsecrets.NewClient(keyVaultUrl, cred, nil) if err != nil { log.Fatalf("failed to create a client: %v", err) } params := azsecrets.SetSecretParameters{Value: &secretValue} resp, err := client.SetSecret(context.TODO(), secretName, params, nil) if err != nil { log.Fatalf("failed to create a secret: %v", err) } fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value) } func main() { createSecret() }
Utwórz zmienną środowiskową o nazwie
KEY_VAULT_NAME
. Zastąp<keyVaultName>
ciąg nazwą wystąpienia usługi Azure Key Vault.export KEY_VAULT_NAME=<keyVaultName>
Uruchom
go run
polecenie , aby utworzyć wpis tajny magazynu kluczy.go run main.go
W przypadku powodzenia dane wyjściowe są podobne do następujących:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Możesz sprawdzić, czy wpis tajny magazynu kluczy został utworzony przy użyciu programu Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub witryny Azure Portal.
Uwaga
Jeśli używasz interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell, musisz upewnić się, że twoje konto użytkownika platformy Azure ma przypisaną rolę, która umożliwia odczytywanie wpisów tajnych w magazynie kluczy, takich jak "Key Vault Secrets Officer" lub "Użytkownik wpisów tajnych usługi Key Vault".
5. Czyszczenie zasobów
Jeśli nie chcesz już używać zasobów platformy Azure utworzonych w tym artykule, dobrym rozwiązaniem jest ich usunięcie. Usunięcie nieużywanych zasobów pomaga uniknąć naliczania bieżących opłat i utrzymuje subskrypcję nieużywaną. Najprostszym sposobem usunięcia zasobów użytych w tym samouczku jest usunięcie grupy zasobów.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
Argument force-deletion-type
informuje polecenie, aby wymusić usunięcie maszyn wirtualnych w grupie zasobów. Argument --yes
informuje polecenie, aby nie prosić o potwierdzenie.
Poprzednie polecenie wykonuje usuwanie nietrwałe w magazynie kluczy w grupie zasobów. Aby trwale usunąć ją z subskrypcji, wprowadź następujące polecenie:
az keyvault purge --name <keyVaultName> --no-wait
Zastąp <keyVaultName>
ciąg nazwą magazynu kluczy.