Zestaw Azure SDK dla języka Go z jednostką usługi
W tym samouczku użyjesz zestawu Azure SDK dla języka Go, aby uwierzytelnić się na platformie Azure przy użyciu jednostki usługi platformy Azure przy użyciu wpisu tajnego lub certyfikatu.
Jednostki usługi platformy Azure definiują zasady dostępu i uprawnienia w dzierżawie firmy Microsoft Entra, włączając podstawowe funkcje, takie jak uwierzytelnianie podczas logowania i autoryzacji podczas dostępu do zasobów. Usuwają konieczność używania kont osobistych do uzyskiwania dostępu do zasobów platformy Azure. Jednostkę usługi można przypisać dokładnie wymagane uprawnienia dla aplikacji i opracowywać względem tych uprawnień, zamiast korzystać z konta osobistego, które może mieć więcej uprawnień w dzierżawie, niż wymaga aplikacja. Jednostki usługi można również używać w przypadku aplikacji hostowanych lokalnie, które muszą korzystać z zasobów platformy Azure. Moduł Azure SDK for Go Azure Identity umożliwia wygodne uwierzytelnianie na platformie Azure przy użyciu jednostki usługi przy użyciu zmiennych środowiskowych oraz wpisu tajnego lub certyfikatu.
Wykonaj czynności opisane w tym samouczku, aby utworzyć i uwierzytelnić się za pomocą zestawu Azure SDK dla języka Go przy użyciu jednostki usługi.
Wymagania wstępne
- Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Zainstalowany program Go: wersja 1.18 lub nowsza
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 utwórz nową grupę zasobów i wystąpienie magazynu kluczy.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Zastąp <keyVaultName>
ciąg globalnie unikatową nazwą.
Zanotuj id
właściwość z danych wyjściowych az keyvault create
polecenia . Użyjesz go w następnej sekcji, aby zdefiniować zakres autoryzacji dla jednostki usługi. Wartość id
ma następującą formę: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>
.
2. Tworzenie jednostki usługi platformy Azure
Użyj jednej z następujących technik, aby utworzyć jednostkę usługi platformy Azure i przypisać jej rolę "Key Vault Secrets Officer" w magazynie kluczy:
- Opcja 1. Tworzenie jednostki usługi platformy Azure z wpisem tajnym
- Opcja 2. Tworzenie jednostki usługi platformy Azure przy użyciu certyfikatu
Aby dowiedzieć się więcej o jednostkach usługi platformy Azure, zobacz Obiekt jednostki usługi.
Przypisanie roli "Key Vault Secrets Officer" do jednostki usługi, autoryzowanie jej do tworzenia, odczytywania, aktualizowania i usuwania wpisów tajnych w magazynie kluczy. Aby dowiedzieć się więcej na temat wbudowanych ról usługi 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.
Opcja 1. Tworzenie jednostki usługi platformy Azure z wpisem tajnym
Uruchom następujące polecenia, aby utworzyć jednostkę usługi platformy Azure i przypisać jej rolę "Key Vault Secrets Officer" w magazynie kluczy.
az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Zastąp <servicePrincipalName>
wartości i <keyVaultId>
odpowiednimi wartościami.
Zanotuj password
właściwości , tenant
i appId
z danych wyjściowych. Będą one potrzebne w następnej sekcji.
Po utworzeniu nie można pobrać hasła jednostki usługi. Jeśli zapomnisz hasło, możesz zresetować poświadczenia jednostki usługi.
Opcja 2. Tworzenie jednostki usługi platformy Azure przy użyciu certyfikatu
Uruchom następujące polecenia, aby utworzyć jednostkę usługi platformy Azure korzystającą z certyfikatu i przypisać jej rolę "Key Vault Secrets Officer" w magazynie kluczy.
az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>
Zastąp <servicePrincipalName>
wartości i <keyVaultId>
odpowiednimi wartościami.
Zanotuj fileWithCertAndPrivateKey
właściwości , tenantId
i appId
z danych wyjściowych. Będą one potrzebne w następnej sekcji.
3. Uwierzytelnianie na platformie Azure przy użyciu jednostki usługi
Za pomocą programu DefaultAzureCredential
można uniknąć pisania kodu specyficznego dla środowiska w celu uwierzytelniania na platformie Azure. Za pomocą DefaultAzureCredential
polecenia można skonfigurować poświadczenia jednostki usługi, definiując zmienne środowiskowe.
Wybierz jedną z następujących opcji, aby skonfigurować poświadczenia jednostki usługi:
- Opcja 1. Uwierzytelnianie przy użyciu wpisu tajnego
- Opcja 2. Uwierzytelnianie przy użyciu certyfikatu
Aby dowiedzieć się więcej na temat usługi , zapoznaj się z tematem DefaultAzureCredential
Uwierzytelnianie platformy Azure za pomocą zestawu Azure SDK dla języka Go
Opcja 1. Uwierzytelnianie przy użyciu wpisu tajnego
Zdefiniuj następujące zmienne środowiskowe:
Nazwa zmiennej | Wartość |
---|---|
AZURE_CLIENT_ID |
Identyfikator aplikacji jednostki usługi platformy Azure |
AZURE_TENANT_ID |
Identyfikator dzierżawy firmy Microsoft Entra aplikacji |
AZURE_CLIENT_SECRET |
Hasło jednostki usługi platformy Azure |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Opcja 2. Uwierzytelnianie przy użyciu certyfikatu
Nazwa zmiennej | Wartość |
---|---|
AZURE_CLIENT_ID |
Identyfikator aplikacji jednostki usługi platformy Azure |
AZURE_TENANT_ID |
Identyfikator dzierżawy firmy Microsoft Entra aplikacji |
AZURE_CLIENT_CERTIFICATE_PATH |
Ścieżka do pliku certyfikatu PEM lub PKCS12, w tym klucza prywatnego. Jeśli wykonano kroki interfejsu wiersza polecenia platformy Azure, plik nie jest chroniony hasłem. Jeśli wykonano kroki dla programu Azure PowerShell, plik jest chroniony hasłem i musisz również ustawić zmienną AZURE_CLIENT_CERTIFICATE_PASSWORD środowiskową. |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
Hasło wprowadzone podczas tworzenia jednostki usługi. Wymagane tylko w przypadku wykonania kroków dla programu Azure PowerShell. |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Użyj wartości domyślnejAzureCredential do uwierzytelniania klienta zasobów
Po ustawieniu zmiennych środowiskowych można użyć DefaultAzureCredential
w module Azure Identity w celu uwierzytelnienia klienta zasobów. Poniższy kod pokazuje, jak uzyskać wystąpienie klasy DefaultAzureCredential
.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Tworzenie wpisu tajnego magazynu kluczy za pomocą języka Go
Skorzystaj z poniższego przykładu kodu, aby sprawdzić, czy jednostka usługi uwierzytelnia się na platformie Azure i ma odpowiednie uprawnienia do magazynu kluczy.
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"
Utwórz plik o nazwie
main.go
i dodaj 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(name, value string) { keyVaultName := os.Getenv("KEY_VAULT_NAME") 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: &value} resp, err := client.SetSecret(context.TODO(), name, 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("ExamplePassword", "hVFkk965BuUv") }
Utwórz zmienną środowiskową o nazwie
KEY_VAULT_NAME
. Ustaw wartość zmiennej środowiskowej na nazwę utworzonej wcześniej usługi Azure Key Vault.export KEY_VAULT_NAME=<keyVaultName>
Zastąp
<keyVaultName>
ciąg nazwą wystąpienia usługi Azure Key Vault.Uruchom polecenie ,
go run
aby utworzyć nowy 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/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
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 --yes
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.
Na koniec należy usunąć rejestrację aplikacji i jednostkę usługi.
az ad app delete --id <servicePrincipalAppId>
Zastąp <servicePrincipalAppId>
ciąg identyfikatorem aplikacji jednostki usługi.