Używanie kontroli dostępu opartej na rolach platformy Azure w klastrach Kubernetes z obsługą usługi Azure Arc (wersja zapoznawcza)
Typy obiektów Kubernetes ClusterRoleBinding i RoleBinding ułatwiają definiowanie autoryzacji na platformie Kubernetes natywnie. Za pomocą tej funkcji można użyć usługi Azure Active Directory (Azure AD) i przypisań ról na platformie Azure w celu kontrolowania kontroli autoryzacji w klastrze. Przypisania ról platformy Azure umożliwiają szczegółową kontrolę nad tym, którzy użytkownicy mogą odczytywać, zapisywać i usuwać obiekty Kubernetes, takie jak wdrażanie, zasobnik i usługa.
Aby zapoznać się z koncepcyjnym omówieniem tej funkcji, zobacz Kontrola RBAC platformy Azure w usłudze Azure Arc z włączoną usługą Kubernetes.
Ważne
Funkcje platformy Kubernetes z obsługą usługi Azure Arc w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane "jak jest" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze platformy Kubernetes z obsługą usługi Azure Arc są częściowo objęte pomocą techniczną klienta w oparciu o najlepsze wysiłki.
Wymagania wstępne
Zainstaluj lub uaktualnij interfejs wiersza polecenia platformy Azure do najnowszej wersji.
Zainstaluj najnowszą wersję rozszerzenia interfejsu wiersza polecenia platformy
connectedk8s
Azure:az extension add --name connectedk8s
connectedk8s
Jeśli rozszerzenie jest już zainstalowane, możesz zaktualizować je do najnowszej wersji przy użyciu następującego polecenia:az extension update --name connectedk8s
Połącz się z istniejącym klastrem Kubernetes z obsługą usługi Azure Arc:
- Jeśli jeszcze nie nawiązaliśmy połączenia z klastrem, skorzystaj z naszego przewodnika Szybki start.
- Uaktualnij agentów do najnowszej wersji.
Uwaga
Nie można skonfigurować tej funkcji dla biblioteki Red Hat OpenShift ani dla zarządzanych ofert dostawców usług w chmurze, takich jak Elastic Kubernetes Service lub Google Kubernetes Engine, gdzie użytkownik nie ma dostępu do serwera interfejsu API klastra. W przypadku klastrów Azure Kubernetes Service (AKS) ta funkcja jest dostępna natywnie i nie wymaga połączenia klastra usługi AKS z usługą Azure Arc. W przypadku usługi AKS w usłudze Azure Stack HCI zobacz Używanie kontroli dostępu opartej na rolach platformy Azure dla klastrów hybrydowych usługi AKS (wersja zapoznawcza).
Konfigurowanie aplikacji usługi Azure AD
- Interfejs wiersza polecenia >platformy Azure = wersja 2.3.7
- Interfejs wiersza polecenia < platformy Azure w wersji 2.3.7
Tworzenie aplikacji serwera
Utwórz nową aplikację Azure AD i uzyskaj jej
appId
wartość. Ta wartość jest używana w kolejnych krokach jakoserverApplicationId
.CLUSTER_NAME="<name-of-arc-connected-cluster>" TENANT_ID="<tenant>" SERVER_UNIQUE_SUFFIX="<identifier_suffix>" SERVER_APP_ID=$(az ad app create --display-name "${CLUSTER_NAME}Server" --identifier-uris "api://${TENANT_ID}/${SERVER_UNIQUE_SUFFIX}" --query appId -o tsv) echo $SERVER_APP_ID
Aby przyznać uprawnienia interfejsu API logowania i odczytu do aplikacji serwera, skopiuj ten kod JSON i zapisz go w pliku oauth2-permissions.json:
{ "oauth2PermissionScopes": [ { "adminConsentDescription": "Sign in and read user profile", "adminConsentDisplayName": "Sign in and read user profile", "id": "<paste_the_SERVER_APP_ID>", "isEnabled": true, "type": "User", "userConsentDescription": "Sign in and read user profile", "userConsentDisplayName": "Sign in and read user profile", "value": "User.Read" } ] }
Zaktualizuj oświadczenia członkostwa w grupie aplikacji. Uruchom polecenia w tym samym katalogu co
oauth2-permissions.json
plik. Kontrola dostępu oparta na rolach dla platformy Kubernetes z obsługą usługi Azure Arc wymagasignInAudience
ustawienia azureADMyOrg:az ad app update --id "${SERVER_APP_ID}" --set groupMembershipClaims=All az ad app update --id ${SERVER_APP_ID} --set api=@oauth2-permissions.json az ad app update --id ${SERVER_APP_ID} --set signInAudience=AzureADMyOrg SERVER_OBJECT_ID=$(az ad app show --id "${SERVER_APP_ID}" --query "id" -o tsv) az rest --method PATCH --headers "Content-Type=application/json" --uri https://graph.microsoft.com/v1.0/applications/${SERVER_OBJECT_ID}/ --body '{"api":{"requestedAccessTokenVersion": 1}}'
Utwórz jednostkę usługi i pobierz jej
password
wartość pola. Ta wartość jest wymagana później, gdyserverApplicationSecret
włączysz tę funkcję w klastrze. Ten wpis tajny jest domyślnie ważny przez jeden rok i należy go obrócić po tym. Aby ustawić niestandardowy czas wygaśnięcia, użyj poleceniaaz ad sp credential reset
:az ad sp create --id "${SERVER_APP_ID}" SERVER_APP_SECRET=$(az ad sp credential reset --id "${SERVER_APP_ID}" --query password -o tsv)
Udziel uprawnień interfejsu API "Zaloguj się i odczyt profilu użytkownika" do aplikacji przy użyciu polecenia
az ad app permission
:az ad app permission add --id "${SERVER_APP_ID}" --api 00000003-0000-0000-c000-000000000000 --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope az ad app permission grant --id "${SERVER_APP_ID}" --api 00000003-0000-0000-c000-000000000000 --scope User.Read
Uwaga
Administrator aplikacji platformy Azure musi uruchomić ten krok.
W przypadku użycia tej funkcji w środowisku produkcyjnym zalecamy utworzenie innej aplikacji serwera dla każdego klastra.
Tworzenie aplikacji klienckiej
Utwórz nową aplikację Azure AD i uzyskaj jej
appId
wartość. Ta wartość jest używana w kolejnych krokach jakoclientApplicationId
.CLIENT_UNIQUE_SUFFIX="<identifier_suffix>" CLIENT_APP_ID=$(az ad app create --display-name "${CLUSTER_NAME}Client" --is-fallback-public-client --public-client-redirect-uris "api://${TENANT_ID}/${CLIENT_UNIQUE_SUFFIX}" --query appId -o tsv) echo $CLIENT_APP_ID
Utwórz jednostkę usługi dla tej aplikacji klienckiej:
az ad sp create --id "${CLIENT_APP_ID}"
oAuthPermissionId
Pobierz wartość aplikacji serwera:az ad app show --id "${SERVER_APP_ID}" --query "api.oauth2PermissionScopes[0].id" -o tsv
Udziel wymaganych uprawnień dla aplikacji klienckiej. Kontrola dostępu oparta na rolach dla platformy Kubernetes z obsługą usługi Azure Arc wymaga
signInAudience
ustawienia azureADMyOrg:az ad app permission add --id "${CLIENT_APP_ID}" --api "${SERVER_APP_ID}" --api-permissions <oAuthPermissionId>=Scope RESOURCE_APP_ID=$(az ad app show --id "${CLIENT_APP_ID}" --query "requiredResourceAccess[0].resourceAppId" -o tsv) az ad app permission grant --id "${CLIENT_APP_ID}" --api "${RESOURCE_APP_ID}" --scope User.Read az ad app update --id ${CLIENT_APP_ID} --set signInAudience=AzureADMyOrg CLIENT_OBJECT_ID=$(az ad app show --id "${CLIENT_APP_ID}" --query "id" -o tsv) az rest --method PATCH --headers "Content-Type=application/json" --uri https://graph.microsoft.com/v1.0/applications/${CLIENT_OBJECT_ID}/ --body '{"api":{"requestedAccessTokenVersion": 1}}'
Tworzenie przypisania roli dla aplikacji serwera
Aplikacja serwera potrzebuje Microsoft.Authorization/*/read
uprawnień, aby potwierdzić, że użytkownik wysyłający żądanie jest autoryzowany w obiektach Kubernetes uwzględnionych w żądaniu.
Utwórz plik o nazwie accessCheck.json z następującą zawartością:
{ "Name": "Read authorization", "IsCustom": true, "Description": "Read authorization", "Actions": ["Microsoft.Authorization/*/read"], "NotActions": [], "DataActions": [], "NotDataActions": [], "AssignableScopes": [ "/subscriptions/<subscription-id>" ] }
Zastąp
<subscription-id>
element rzeczywistym identyfikatorem subskrypcji.Uruchom następujące polecenie, aby utworzyć nową rolę niestandardową:
ROLE_ID=$(az role definition create --role-definition ./accessCheck.json --query id -o tsv)
Utwórz przypisanie roli w aplikacji serwera jako
assignee
przy użyciu utworzonej roli:az role assignment create --role "${ROLE_ID}" --assignee "${SERVER_APP_ID}" --scope /subscriptions/<subscription-id>
Włączanie kontroli dostępu na podstawie ról platformy Azure w klastrze
Włącz kontrolę dostępu opartą na rolach (RBAC) platformy Azure w klastrze Kubernetes z obsługą usługi Azure Arc, uruchamiając następujące polecenie:
az connectedk8s enable-features -n <clusterName> -g <resourceGroupName> --features azure-rbac --app-id "${SERVER_APP_ID}" --app-secret "${SERVER_APP_SECRET}"
Uwaga
Przed uruchomieniem poprzedniego polecenia upewnij się, że kubeconfig
plik na maszynie wskazuje klaster, w którym włączysz funkcję RBAC platformy Azure.
Użyj --skip-azure-rbac-list
z poprzednim poleceniem dla rozdzielanej przecinkami listy nazw użytkowników, wiadomości e-mail i połączeń OpenID poddawanych kontroli autoryzacji przy użyciu funkcji natywnej ClusterRoleBinding
i RoleBinding
obiektów platformy Kubernetes zamiast kontroli dostępu opartej na rolach platformy Azure.
Klaster ogólny, w którym żaden uzgadnianie nie jest uruchomione w specyfikacji apiserver
Protokół SSH do każdego węzła głównego klastra i wykonaj następujące kroki:
Jeśli jest to
kube-apiserver
statyczny zasobnik:Wpis
azure-arc-guard-manifests
tajny wkube-system
przestrzeni nazw zawiera dwa pliki:guard-authn-webhook.yaml
iguard-authz-webhook.yaml
. Skopiuj te pliki do/etc/guard
katalogu węzła.sudo mkdir -p /etc/guard kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authn-webhook.yaml"' | base64 -d > /etc/guard/guard-authn-webhook.yaml kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authz-webhook.yaml"' | base64 -d > /etc/guard/guard-authz-webhook.yaml
Otwórz manifest w trybie edycji
apiserver
:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
Dodaj następującą specyfikację w obszarze
volumes
:- name: azure-rbac hostPath: path: /etc/guard type: Directory
Dodaj następującą specyfikację w obszarze
volumeMounts
:- mountPath: /etc/guard name: azure-rbac readOnly: true
Jeśli nie
kube-apiserver
jest to statyczny zasobnik:Otwórz manifest w trybie edycji
apiserver
:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
Dodaj następującą specyfikację w obszarze
volumes
:- name: azure-rbac secret: secretName: azure-arc-guard-manifests
Dodaj następującą specyfikację w obszarze
volumeMounts
:- mountPath: /etc/guard name: azure-rbac readOnly: true
Dodaj następujące
apiserver
argumenty:- --authentication-token-webhook-config-file=/etc/guard/guard-authn-webhook.yaml - --authentication-token-webhook-cache-ttl=5m0s - --authorization-webhook-cache-authorized-ttl=5m0s - --authorization-webhook-config-file=/etc/guard/guard-authz-webhook.yaml - --authorization-webhook-version=v1 - --authorization-mode=Node,RBAC,Webhook
Jeśli klaster Kubernetes jest w wersji 1.19.0 lub nowszej, należy również ustawić następujący
apiserver
argument:- --authentication-token-webhook-version=v1
Zapisz i zamknij edytor, aby zaktualizować
apiserver
zasobnik.
Klaster utworzony przy użyciu interfejsu API klastra
Skopiuj wpis tajny straży zawierający pliki konfiguracji elementu webhook uwierzytelniania i autoryzacji z klastra obciążenia na maszynę:
kubectl get secret azure-arc-guard-manifests -n kube-system -o yaml > azure-arc-guard-manifests.yaml
namespace
Zmień pole w pliku azure-arc-guard-manifests.yaml na przestrzeń nazw w klastrze zarządzania, w którym stosujesz zasoby niestandardowe do tworzenia klastrów obciążeń.Zastosuj ten manifest:
kubectl apply -f azure-arc-guard-manifests.yaml
Edytuj obiekt,
KubeadmControlPlane
uruchamiając poleceniekubectl edit kcp <clustername>-control-plane
:Dodaj następujący fragment kodu w obszarze
files
:- contentFrom: secret: key: guard-authn-webhook.yaml name: azure-arc-guard-manifests owner: root:root path: /etc/kubernetes/guard-authn-webhook.yaml permissions: "0644" - contentFrom: secret: key: guard-authz-webhook.yaml name: azure-arc-guard-manifests owner: root:root path: /etc/kubernetes/guard-authz-webhook.yaml permissions: "0644"
Dodaj następujący fragment kodu w obszarze
apiServer
>extraVolumes
:- hostPath: /etc/kubernetes/guard-authn-webhook.yaml mountPath: /etc/guard/guard-authn-webhook.yaml name: guard-authn readOnly: true - hostPath: /etc/kubernetes/guard-authz-webhook.yaml mountPath: /etc/guard/guard-authz-webhook.yaml name: guard-authz readOnly: true
Dodaj następujący fragment kodu w obszarze
apiServer
>extraArgs
:authentication-token-webhook-cache-ttl: 5m0s authentication-token-webhook-config-file: /etc/guard/guard-authn-webhook.yaml authentication-token-webhook-version: v1 authorization-mode: Node,RBAC,Webhook authorization-webhook-cache-authorized-ttl: 5m0s authorization-webhook-config-file: /etc/guard/guard-authz-webhook.yaml authorization-webhook-version: v1
Zapisz i zamknij, aby zaktualizować
KubeadmControlPlane
obiekt. Poczekaj na wyświetlenie tych zmian w klastrze obciążenia.
Tworzenie przypisań ról dla użytkowników w celu uzyskania dostępu do klastra
Właściciele zasobu Kubernetes z obsługą usługi Azure Arc mogą używać wbudowanych ról lub ról niestandardowych, aby udzielić innym użytkownikom dostępu do klastra Kubernetes.
Wbudowane role
Rola | Opis |
---|---|
Azure Arc Kubernetes Viewer | Umożliwia dostęp tylko do odczytu, aby wyświetlić większość obiektów w przestrzeni nazw. Ta rola nie zezwala na wyświetlanie wpisów tajnych, ponieważ read uprawnienie do wpisów tajnych umożliwiłoby dostęp do ServiceAccount poświadczeń w przestrzeni nazw. Te poświadczenia z kolei zezwalałyby na dostęp do interfejsu API za pośrednictwem tej ServiceAccount wartości (forma eskalacji uprawnień). |
Składnik zapisywania kubernetes usługi Azure Arc | Umożliwia dostęp do odczytu/zapisu do większości obiektów w przestrzeni nazw. Ta rola nie zezwala na wyświetlanie ani modyfikowanie ról ani powiązań ról. Jednak ta rola umożliwia dostęp do wpisów tajnych i uruchamiania zasobników jako dowolnej ServiceAccount wartości w przestrzeni nazw, dzięki czemu może służyć do uzyskiwania poziomów dostępu interfejsu API dowolnej ServiceAccount wartości w przestrzeni nazw. |
Azure Arc Kubernetes Administracja | Zezwala na dostęp administratora. Ma zostać udzielona w przestrzeni nazw za pośrednictwem elementu RoleBinding . Jeśli używasz go w RoleBinding programie , umożliwia dostęp do odczytu/zapisu do większości zasobów w przestrzeni nazw, w tym możliwość tworzenia ról i powiązań ról w przestrzeni nazw. Ta rola nie zezwala na dostęp do zapisu do przydziału zasobów ani do samej przestrzeni nazw. |
Administracja klastra Kubernetes usługi Azure Arc | Umożliwia dostęp superużytkownika do wykonywania dowolnej akcji w dowolnym zasobie. Gdy używasz go w programie ClusterRoleBinding , zapewnia pełną kontrolę nad każdym zasobem w klastrze i we wszystkich przestrzeniach nazw. Gdy używasz go w programie RoleBinding , zapewnia pełną kontrolę nad każdym zasobem w przestrzeni nazw powiązania roli, w tym nad samą przestrzenią nazw. |
Przypisania ról można tworzyć w zakresie klastra Kubernetes z obsługą usługi Azure Arc w Azure Portal w okienku Access Control (IAM) zasobu klastra. Możesz również użyć następujących poleceń interfejsu wiersza polecenia platformy Azure:
az role assignment create --role "Azure Arc Kubernetes Cluster Admin" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID
W tych poleceniach AZURE-AD-ENTITY-ID
może być nazwa użytkownika (na przykład testuser@mytenant.onmicrosoft.com
) lub nawet appId
wartość jednostki usługi.
Oto kolejny przykład tworzenia przypisania roli o określonym zakresie w określonej przestrzeni nazw w klastrze:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
Uwaga
Przypisania ról można tworzyć w zakresie klastra przy użyciu Azure Portal lub interfejsu wiersza polecenia platformy Azure. Jednak tylko interfejs wiersza polecenia platformy Azure może służyć do tworzenia przypisań ról w zakresie przestrzeni nazw.
Role niestandardowe
Możesz utworzyć własną definicję roli do użycia w przypisania ról.
Zapoznaj się z poniższym przykładem definicji roli, która umożliwia użytkownikowi odczytywanie tylko wdrożeń. Aby uzyskać więcej informacji, zobacz pełną listę akcji danych, których można użyć do konstruowania definicji roli.
Skopiuj następujący obiekt JSON do pliku o nazwie custom-role.json. Zastąp <subscription-id>
symbol zastępczy rzeczywistym identyfikatorem subskrypcji. Rola niestandardowa używa jednej z akcji danych i umożliwia wyświetlenie wszystkich wdrożeń w zakresie (klastrze lub przestrzeni nazw), w którym jest tworzone przypisanie roli.
{
"Name": "Arc Deployment Viewer",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<subscription-id>"
]
}
Utwórz definicję roli, uruchamiając następujące polecenie z folderu, w którym zapisano plik custom-role.json:
az role definition create --role-definition @custom-role.json
Utwórz przypisanie roli przy użyciu tej niestandardowej definicji roli:
az role assignment create --role "Arc Deployment Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
Konfigurowanie narzędzia kubectl przy użyciu poświadczeń użytkownika
Istnieją dwa sposoby uzyskiwania pliku kubeconfig potrzebnego do uzyskania dostępu do klastra:
- Używasz funkcji cluster Connect (
az connectedk8s proxy
) klastra Kubernetes z obsługą usługi Azure Arc. - Administrator klastra współużytkuje plik kubeconfig ze wszystkimi innymi użytkownikami.
Korzystanie z połączenia z klastrem
Uruchom następujące polecenie, aby uruchomić proces serwera proxy:
az connectedk8s proxy -n <clusterName> -g <resourceGroupName>
Po uruchomieniu procesu serwera proxy możesz otworzyć inną kartę w konsoli, aby rozpocząć wysyłanie żądań do klastra.
Używanie udostępnionego pliku kubeconfig
Użycie udostępnionej konfiguracji kubeconfig wymaga nieco różnych kroków w zależności od wersji platformy Kubernetes.
Uruchom następujące polecenie, aby ustawić poświadczenia użytkownika:
kubectl config set-credentials <testuser>@<mytenant.onmicrosoft.com> \ --auth-provider=azure \ --auth-provider-arg=environment=AzurePublicCloud \ --auth-provider-arg=client-id=<clientApplicationId> \ --auth-provider-arg=tenant-id=<tenantId> \ --auth-provider-arg=apiserver-id=<serverApplicationId>
Otwórz utworzony wcześniej plik kubeconfig . W obszarze
contexts
sprawdź, czy kontekst skojarzony z klastrem wskazuje poświadczenia użytkownika utworzone w poprzednim kroku. Aby ustawić bieżący kontekst na te poświadczenia użytkownika, uruchom następujące polecenie:kubectl config set-context --current=true --user=<testuser>@<mytenant.onmicrosoft.com>
Dodaj ustawienie trybu konfiguracji w obszarze
user
>config
:name: testuser@mytenant.onmicrosoft.com user: auth-provider: config: apiserver-id: $SERVER_APP_ID client-id: $CLIENT_APP_ID environment: AzurePublicCloud tenant-id: $TENANT_ID config-mode: "1" name: azure
Uwaga
Wtyczka Exec to strategia uwierzytelniania platformy Kubernetes, która umożliwia kubectl
wykonywanie zewnętrznego polecenia w celu odbierania poświadczeń użytkownika do wysyłania do apiserver
usługi . Począwszy od platformy Kubernetes w wersji 1.26, domyślna wtyczka autoryzacji platformy Azure nie jest już uwzględniona w client-go
systemach i kubectl
. W przypadku nowszych wersji, aby użyć wtyczki exec do odbierania poświadczeń użytkownika, należy użyć wtyczki Azure Kubelogin, client-go
wtyczki poświadczeń (exec), która implementuje uwierzytelnianie platformy Azure.
Zainstaluj usługę Azure Kubelogin:
W przypadku systemu Windows lub Mac postępuj zgodnie z instrukcjami instalacji usługi Azure Kubelogin.
W przypadku systemu Linux lub Ubuntu pobierz najnowszą wersję narzędzia kubelogin, a następnie uruchom następujące polecenia:
curl -LO https://github.com/Azure/kubelogin/releases/download/"$KUBELOGIN_VERSION"/kubelogin-linux-amd64.zip unzip kubelogin-linux-amd64.zip sudo mv bin/linux_amd64/kubelogin /usr/local/bin/ sudo chmod +x /usr/local/bin/kubelogin
Przekonwertuj kubelogin, aby użyć odpowiedniego trybu logowania. Na przykład w przypadku logowania kodu urządzenia przy użyciu użytkownika usługi Azure Active Directory polecenia będą następujące:
export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Wysyłanie żądań do klastra
Uruchom dowolne
kubectl
polecenie. Na przykład:kubectl get nodes
kubectl get pods
Po wyświetleniu monitu o uwierzytelnienie oparte na przeglądarce skopiuj adres URL logowania urządzenia (
https://microsoft.com/devicelogin
) i otwórz go w przeglądarce internetowej.Wprowadź kod wydrukowany w konsoli. Skopiuj i wklej kod w terminalu do monitu o wprowadzenie uwierzytelniania urządzenia.
Wprowadź nazwę użytkownika (
testuser@mytenant.onmicrosoft.com
) i skojarzone hasło.Jeśli zostanie wyświetlony następujący komunikat o błędzie, oznacza to, że nie masz autoryzacji dostępu do żądanego zasobu:
Error from server (Forbidden): nodes is forbidden: User "testuser@mytenant.onmicrosoft.com" cannot list resource "nodes" in API group "" at the cluster scope: User doesn't have access to the resource in Azure. Update role assignment to allow access.
Administrator musi utworzyć nowe przypisanie roli, które autoryzuje tego użytkownika do uzyskania dostępu do zasobu.
Używanie dostępu warunkowego z Azure AD
Podczas integrowania Azure AD z klastrem Kubernetes z włączoną usługą Azure Arc można również użyć dostępu warunkowego w celu kontrolowania dostępu do klastra.
Uwaga
Azure AD dostęp warunkowy jest funkcją Azure AD Premium.
Aby utworzyć przykładowe zasady dostępu warunkowego do użycia z klastrem:
W górnej części Azure Portal wyszukaj i wybierz pozycję Azure Active Directory.
W menu usługi Azure Active Directory po lewej stronie wybierz pozycję Aplikacje dla przedsiębiorstw.
W menu aplikacji dla przedsiębiorstw po lewej stronie wybierz pozycję Dostęp warunkowy.
W menu dostępu warunkowego po lewej stronie wybierz pozycję Zasady>Nowe zasady.
Wprowadź nazwę zasad, na przykład arc-k8s-policy.
Wybierz pozycję Użytkownicy i grupy. W obszarze Dołącz wybierz pozycję Wybierz użytkowników i grupy. Następnie wybierz użytkowników i grupy, w których chcesz zastosować zasady. W tym przykładzie wybierz tę samą grupę Azure AD, która ma dostęp administracyjny do klastra.
Wybierz pozycję Aplikacje w chmurze lub akcje. W obszarze Dołącz wybierz pozycję Wybierz aplikacje. Następnie wyszukaj i wybierz utworzoną wcześniej aplikację serwera.
W obszarze Kontrole dostępu wybierz pozycję Udziel. Wybierz pozycję Udziel dostępu>Wymagaj, aby urządzenie było oznaczone jako zgodne.
W obszarze Włącz zasady wybierz pozycję Przy>tworzeniu.
Ponownie uzyskaj dostęp do klastra. Na przykład uruchom kubectl get nodes
polecenie , aby wyświetlić węzły w klastrze:
kubectl get nodes
Postępuj zgodnie z instrukcjami, aby zalogować się ponownie. Komunikat o błędzie informuje o pomyślnym zalogowaniu, ale administrator wymaga, aby urządzenie, które żąda dostępu, było zarządzane przez Azure AD w celu uzyskania dostępu do zasobu. Wykonaj następujące kroki:
W witrynie Azure Portal przejdź do pozycji Azure Active Directory.
Wybierz pozycję Aplikacje dla przedsiębiorstw. Następnie w obszarze Działanie wybierz pozycję Logowania.
Wpis w górnej części zawiera informację Niepowodzenie dla stanu i powodzeniadostępu warunkowego. Wybierz wpis, a następnie wybierz pozycję Dostęp warunkowy w obszarze Szczegóły. Zwróć uwagę, że twoje zasady dostępu warunkowego znajdują się na liście.
Konfigurowanie dostępu do klastra just in time za pomocą Azure AD
Inną opcją kontroli dostępu do klastra jest użycie Privileged Identity Management (PIM) dla żądań just in time.
Uwaga
Azure AD PIM to funkcja Azure AD Premium, która wymaga jednostki SKU Premium P2. Aby uzyskać więcej informacji na temat Azure AD jednostek SKU, zobacz przewodnik po cenach.
Aby skonfigurować żądania dostępu just in time dla klastra, wykonaj następujące kroki:
W górnej części Azure Portal wyszukaj i wybierz pozycję Azure Active Directory.
Zanotuj identyfikator dzierżawy. W pozostałej części tych instrukcji będziemy odwoływać się do tego identyfikatora jako
<tenant-id>
.W menu usługi Azure Active Directory po lewej stronie w obszarze Zarządzanie wybierz pozycję Grupy>Nowa grupa.
Upewnij się, że wybrano opcję Zabezpieczenia dla typu grupy. Wprowadź nazwę grupy, taką jak myJITGroup. W obszarze Azure AD Role można przypisać do tej grupy (wersja zapoznawcza), wybierz pozycję Tak. Na koniec wybierz pozycję Utwórz.
Wrócisz do strony Grupy . Wybierz nowo utworzoną grupę i zanotuj identyfikator obiektu. W pozostałej części tych instrukcji będziemy odwoływać się do tego identyfikatora jako
<object-id>
.Po powrocie do Azure Portal w menu Działanie po lewej stronie wybierz pozycję Uprzywilejowany dostęp (wersja zapoznawcza). Następnie wybierz pozycję Włącz dostęp uprzywilejowany.
Wybierz pozycję Dodaj przypisania , aby rozpocząć udzielanie dostępu.
Wybierz rolę Członek i wybierz użytkowników i grupy, którym chcesz udzielić dostępu do klastra. Administrator grupy może w dowolnym momencie modyfikować te przypisania. Gdy wszystko będzie gotowe do przejścia, wybierz pozycję Dalej.
Wybierz typ przypisania Aktywny, wybierz żądany czas trwania i podaj uzasadnienie. Gdy wszystko będzie gotowe do kontynuowania, wybierz pozycję Przypisz. Aby uzyskać więcej informacji na temat typów przypisań, zobacz Przypisywanie uprawnień do uprzywilejowanej grupy dostępu (wersja zapoznawcza) w Privileged Identity Management.
Po utworzeniu przypisań sprawdź, czy dostęp just in time działa, korzystając z klastra. Na przykład użyj kubectl get nodes
polecenia , aby wyświetlić węzły w klastrze:
kubectl get nodes
Zwróć uwagę na wymaganie dotyczące uwierzytelniania i wykonaj kroki uwierzytelniania. Jeśli uwierzytelnianie zakończy się pomyślnie, powinny zostać wyświetlone dane wyjściowe podobne do następujących:
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME STATUS ROLES AGE VERSION
node-1 Ready agent 6m36s v1.18.14
node-2 Ready agent 6m42s v1.18.14
node-3 Ready agent 6m33s v1.18.14
Odświeżanie wpisu tajnego aplikacji serwera
Jeśli wpis tajny jednostki usługi aplikacji serwera wygasł, należy ją obrócić.
SERVER_APP_SECRET=$(az ad sp credential reset --name "${SERVER_APP_ID}" --credential-description "ArcSecret" --query password -o tsv)
Zaktualizuj wpis tajny w klastrze. Uwzględnij wszystkie parametry opcjonalne skonfigurowane podczas uruchamiania polecenia.
az connectedk8s enable-features -n <clusterName> -g <resourceGroupName> --features azure-rbac --app-id "${SERVER_APP_ID}" --app-secret "${SERVER_APP_SECRET}"
Następne kroki
- Bezpiecznie nawiąż połączenie z klastrem przy użyciu narzędzia Cluster Connect.
- Przeczytaj o architekturze kontroli dostępu opartej na rolach platformy Azure na platformie Kubernetes z obsługą usługi Arc.