Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak skonfigurować zewnętrznych dostawców tożsamości GitHub i Google Identity dla potrzeby uwierzytelniania płaszczyzny sterowania usługi Azure Kubernetes Service (AKS) przy użyciu uwierzytelniania zorganizowanego. Dowiesz się, jak utworzyć uwierzytelnianie tokenu internetowego JSON (JWT), skonfigurować walidację i mapowanie oświadczeń oraz przetestować przepływ uwierzytelniania.
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Wymagania wstępne
- Zapoznaj się z omówieniem koncepcyjnym uwierzytelniania w usłudze AKS przy użyciu zewnętrznego dostawcy tożsamości.
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz temat Rozpoczynanie pracy z Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza poleceń lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze platformy Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze platformy Docker.
Jeśli używasz instalacji lokalnej, zaloguj się do Azure CLI przy użyciu polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie do usługi Azure za pomocą Azure CLI.
Po wyświetleniu monitu zainstaluj rozszerzenie Azure CLI podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą Azure CLI.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby zaktualizować do najnowszej wersji, uruchom az upgrade.
Ten artykuł wymaga wersji 2.77.0 lub nowszej Azure CLI. Jeśli używasz Azure Cloud Shell, najnowsza wersja jest już tam zainstalowana. Aby zainstalować lub zaktualizować Azure CLI na komputerze lokalnym, zobacz Instaluj Azure CLI.
Aby korzystać z funkcji uwierzytelniania ustrukturyzowanego, należy zainstalować rozszerzenie
aks-previewAzure CLI w wersji 18.0.0b41 lub nowszej.Jeśli nie masz
aks-previewjeszcze rozszerzenia, zainstaluj je przy użyciuaz extension addpolecenia .az extension add --name aks-previewJeśli masz już rozszerzenie
aks-preview, zaktualizuj je, aby upewnić się, że masz najnowszą wersję z użyciem poleceniaaz extension update.az extension update --name aks-previewSprawdź, czy masz wymaganą wersję
aks-previewrozszerzenia przy użyciuaz extension showpolecenia .az extension show --name aks-preview --query version
Klaster usługi AKS z uruchomioną platformą Kubernetes w wersji 1.30 lub nowszej. Aby utworzyć klaster usługi AKS, zobacz Wdrażanie klastra usługi Azure Kubernetes (AKS) przy użyciu interfejsu wiersza polecenia Azure CLI.
kubectlNarzędzie wiersza polecenia umożliwiające interakcję z klastrem Kubernetes.kubectljest już zainstalowany, jeśli używasz Azure Cloud Shell. Można zainstalowaćkubectllokalnie za pomocą poleceniaaz aks install-cli.az aks install-cliZewnętrzny dostawca tożsamości obsługujący openID Connect (OIDC).
Łączność sieciowa z węzłów klastra do dostawcy tożsamości.
Jeśli planujesz używać wtyczki, zainstaluj ją, postępując zgodnie z instrukcjami w przewodniku
kubeloginkonfiguracji narzędzia kubelogin.
Ustawianie zmiennych środowiskowych
Ustaw następujące zmienne środowiskowe dla grupy zasobów i nazwy klastra:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Zarejestruj funkcję JWTAuthenticatorPreview
Zarejestruj funkcję
JWTAuthenticatorPreviewprzy użyciu poleceniaaz feature register.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceSprawdź stan rejestracji funkcji przy użyciu
az feature showpolecenia .az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceGdy
Registeredpokaże stan, odśwież rejestrację dostawcy zasobów dlaMicrosoft.ContainerService, używając poleceniaaz provider register.az provider register --namespace Microsoft.ContainerService
Konfiguracja uwierzytelniania OIDC dla GitHub Actions
Upewnij się, że przepływy pracy GitHub Actions mają niezbędne uprawnienia.
id-token: writeSkonfiguruj uprawnienie w plikach przepływu pracy. Przykład:permissions: id-token: write contents: readSkonfiguruj odpowiednie repozytorium i ustawienia organizacji na potrzeby dostępu do tokenów OIDC. Skonfiguruj ustawienia OIDC repozytorium i zasady zabezpieczeń organizacji w zakresie użycia tokenów.
Skonfiguruj uwierzytelnianie Google Identity OAuth 2.0
- Przejdź do konsoli Google Cloud Console.
- Utwórz lub wybierz projekt.
- Utwórz poświadczenia protokołu OAuth 2.0.
- Zanotuj identyfikator klienta i klucz tajny klienta do późniejszego użycia.
Utwórz konfigurację uwierzytelniania JWT dla GitHub Actions OIDC
Utwórz plik o nazwie
jwt-config.jsonz następującą konfiguracją:{ "issuer": { "url": "https://token.actions.githubusercontent.com", "audiences": [ "my-api" ] }, "claimValidationRules": [ { "expression": "has(claims.sub)", "message": "must have sub claim" } ], "claimMappings": { "username": { "expression": "'aks:jwt:github:' + claims.sub" } }, "userValidationRules": [ { "expression": "has(user.username)", "message": "must have username" }, { "expression": "!user.username.startsWith('aks:jwt:github:system')", "message": "username must not start with 'aks:jwt:github:system'" } ] }
Utwórz konfigurację uwierzytelniania JWT dla tożsamości Google
Utwórz plik o nazwie
jwt-config.jsonz następującą konfiguracją:{ "issuer": { "url": "https://accounts.google.com", "audiences": [ "your-client-id.apps.googleusercontent.com" ] }, "claimValidationRules": [ { "expression": "has(claims.sub)", "message": "must have sub claim" } ], "claimMappings": { "username": { "expression": "'aks:jwt:google:' + claims.sub" }, "groups": { "expression": "has(claims.groups) ? claims.groups.split(',').map(g, 'aks:jwt:' + g) : []" } }, "userValidationRules": [ { "expression": "has(user.username)", "message": "must have username" }, { "expression": "!user.username.startsWith('aks:jwt:google:system')", "message": "username must not start with 'aks:jwt:google:system'" } ] }
Elementy konfiguracji uwierzytelniającego JWT
Konfiguracja uwierzytelniacza JWT obejmuje następujące kluczowe elementy: issuer, claimValidationRules, claimMappings, i userValidationRules. Każdy element służy określonemu celowi w definiowaniu sposobu, w jaki usługa AKS weryfikuje i przetwarza tokeny JWT od zewnętrznego dostawcy tożsamości.
Konfiguracja wydawcy
W poniższej tabeli opisano kluczowe elementy issuer konfiguracji:
| Element konfiguracji wystawcy | Opis |
|---|---|
url |
Adres URL wystawcy OIDC, który musi być zgodny z oświadczeniem iss w JWT. |
audiences |
Lista odbiorców, dla których muszą być wystawiane JWTs (sprawdzane pod kątem aud oświadczenia). |
Konfiguracja reguł weryfikacji oświadczeń
W poniższej tabeli opisano kluczowe elementy claimValidationRules konfiguracji:
| Element reguły weryfikacji oświadczeń | Opis |
|---|---|
expression |
Wyrażenie CEL, które definiuje logikę walidacji, która ma być stosowana do oświadczeń JWT. Wyrażenie musi mieć wartość true, aby token został zaakceptowany. |
message |
Komunikat o błędzie zwrócony, gdy reguła sprawdzania poprawności nie powiedzie się. |
Konfiguracja mapowania roszczeń
W poniższej tabeli opisano kluczowe elementy claimMappings konfiguracji:
| Element mapowania roszczeń | Opis |
|---|---|
username |
Wyrażenie CEL definiujące sposób konstruowania nazwy użytkownika Kubernetes z oświadczeń JWT.
Musi zawierać aks:jwt: prefiks, aby zapobiec konfliktom z innymi metodami uwierzytelniania. |
groups |
Wyrażenie CEL definiujące sposób konstruowania członkostwa w grupach systemu Kubernetes z oświadczeń JWT.
Musi zawierać aks:jwt: prefiks, aby zapobiec konfliktom z innymi metodami uwierzytelniania. |
uid |
Opcjonalne wyrażenie CEL, które definiuje unikatowy identyfikator użytkownika. |
extra |
Opcjonalna mapa dodatkowych atrybutów użytkownika zdefiniowanych przez wyrażenia CEL. |
Konfiguracja reguł walidacji użytkownika
W poniższej tabeli opisano kluczowe elementy userValidationRules konfiguracji:
| Element reguły weryfikacji użytkownika | Opis |
|---|---|
expression |
Wyrażenie CEL definiujące dodatkową logikę walidacji, która ma być stosowana do końcowych mapowanych informacji o użytkowniku. Wyrażenie musi mieć wartość true, aby użytkownik został zaakceptowany. |
message |
Komunikat o błędzie zwracany, gdy reguła walidacji użytkownika nie zostanie spełniona. |
Utwórz uwierzytelniacz JWT
Dodaj uwierzytelniacz JWT do klastra AKS przy użyciu polecenia
az aks jwtauthenticator add.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Zarządzanie wystawcami uwierzytelnień JWT
Wyświetlanie listy wszystkich wystawców uwierzytelnień JWT
Wyświetl listę wszystkich autentykatorów JWT w twoim klastrze za pomocą polecenia
az aks jwtauthenticator list.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Uzyskaj szczegóły dla określonego uwierzytelniającego JWT
Uzyskaj szczegółowe informacje dotyczące określonego modułu
az aks jwtauthenticator showuwierzytelniania JWT przy użyciu polecenia .az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Konfigurowanie GitHub Actions OIDC na potrzeby uwierzytelniania
Utwórz zmienne środowiskowe i ustaw następujące wymagane wpisy tajne w repozytorium GitHub:
-
AKS_SERVER_URL: adres URL interfejsu API serwera klastra AKS. -
AKS_CA_DATA: dane autoryzacji certyfikatu zakodowane w formacie Base64 dla klastra usługi AKS.
-
Utwórz przepływ pracy, który uzyskuje token OIDC i używa go do uwierzytelniania w klastrze AKS. Poniższy przykładowy przepływ pracy pobiera wszystkie zasobniki uruchomione w klastrze:
Uwaga / Notatka
Wartość
my-apiodbiorcy powinna odpowiadać odbiorcom skonfigurowanym w konfiguracji uwierzytelniacza JWT.name: AKS Access with GitHub OIDC on: workflow_dispatch: push: branches: [main] permissions: id-token: write contents: read jobs: aks-access: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install kubectl uses: azure/setup-kubectl@v3 with: version: 'latest' - name: Get GitHub OIDC token id: get_token run: | TOKEN=$(curl -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \ "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=my-api" | \ jq -r '.value') echo "::add-mask::$TOKEN" echo "oidc_token=$TOKEN" >> $GITHUB_OUTPUT - name: Create kubeconfig with OIDC token run: | cat <<EOF > kubeconfig apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: ${{ secrets.AKS_CA_DATA }} server: ${{ secrets.AKS_SERVER_URL }} name: aks-cluster contexts: - context: cluster: aks-cluster user: github-oidc-user name: aks-context current-context: aks-context users: - name: github-oidc-user user: token: ${{ steps.get_token.outputs.oidc_token }} EOF - name: List all pods in the cluster run: | export KUBECONFIG=./kubeconfig kubectl get pods --all-namespaces
Pobierz informacje o klastrze dla konfiguracji uwierzytelniacza JWT
Uzyskaj adres URL serwera API dla klastra, korzystając z polecenia
az aks show.az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Pobierz dane urzędu certyfikacji zakodowane w formacie base64 dla klastra
az aks get-credentialsprzy użyciu polecenia .# Get CA data (base64 encoded) az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --file - --format exec | \ grep certificate-authority-data | awk '{print $2}'
Konfigurowanie usługi Google Identity OAuth 2.0 na potrzeby uwierzytelniania
Uwierzytelnianie tożsamości Google można skonfigurować przy użyciu kubelogin wtyczki lub bezpośrednio przy użyciu tokenu statycznego.
Dodaj nowy kontekst użytkownika do pliku kubeconfig. Przykład:
users: - name: external-user user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: kubectl args: - oidc-login - get-token - --oidc-issuer-url=https://accounts.google.com - --oidc-client-id=your-client-id.apps.googleusercontent.com - --oidc-client-secret=your-client-secret
Testowanie uwierzytelniania
Wyzwól przepływ pracy przez wypchnięcie do gałęzi głównej lub ręczne wyzwolenie go z karty Akcje w repozytorium.
Monitoruj wykonywanie przepływu pracy na karcie Akcje, aby sprawdzić, czy uwierzytelnianie działa.
Oczekiwane rezultaty pierwszej konfiguracji przed ustawieniem Role-Based Access Control (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:github:your-sub" cannot list resource "nodes" in API group "" at the cluster scopeTen błąd wskazuje na pomyślne uwierzytelnienie, ale brak autoryzacji.
Przetestuj uwierzytelnianie przy użyciu polecenia
kubectl get nodesz flagą--user, aby określić kontekst użytkownika utworzony na potrzeby uwierzytelniania Google Identity. Przykład:kubectl get nodes --user external-userOczekiwane rezultaty pierwszej konfiguracji przed ustawieniem Role-Based Access Control (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:google:your-subject" cannot list resource "nodes" in API group "" at the cluster scopeTen błąd wskazuje na pomyślne uwierzytelnienie, ale brak autoryzacji.
Konfiguracja kontroli dostępu na podstawie roli (RBAC) w Kubernetes
Utwórz odpowiednie powiązania RBAC dla użytkowników zewnętrznych i użyj poświadczeń administratora klastra, aby zastosować te konfiguracje.
Utwórz plik o nazwie
rbac-config.yamlw celu skonfigurowania powiązań RBAC dla użytkowników zewnętrznych. Przykład:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-user-role rules: - apiGroups: [""] resources: ["pods", "services", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-user-binding subjects: - kind: User # This matches the username expression in claim mappings for GitHub; example of GitHub subject is "repo:<organization-name>/<repository-name>:ref:refs/heads/main" name: aks:jwt:github:your-github-sub apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: external-user-role apiGroup: rbac.authorization.k8s.ioZastosuj konfigurację RBAC, używając polecenia
kubectl apply.kubectl apply -f rbac-config.yaml
Utwórz plik o nazwie
rbac-config.yamlw celu skonfigurowania powiązań RBAC dla użytkowników zewnętrznych. Przykład:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-user-role rules: - apiGroups: [""] resources: ["pods", "services", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-user-binding subjects: - kind: User # This matches the username expression in claim mappings for Google name: aks:jwt:google:your-subject-claim apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: external-user-role apiGroup: rbac.authorization.k8s.ioZastosuj konfigurację RBAC, używając polecenia
kubectl apply.kubectl apply -f rbac-config.yaml
Weryfikowanie dostępu za pomocą kontroli dostępu opartej na rolach
Sprawdź, czy użytkownik zewnętrzny może teraz uzyskiwać dostęp do zasobów zgodnie z uprawnieniami RBAC skonfigurowanymi za pomocą poleceń
kubectl get nodesikubectl get podsoraz flagi--user. Przykład:kubectl get nodes --user external-user kubectl get pods --user external-user
Usuń autentykator JWT
Jeśli nie potrzebujesz już uwierzytelniania JWT, usuń go z klastra usługi AKS przy użyciu polecenia
az aks jwtauthenticator delete.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth