Udostępnij za pośrednictwem


Używanie kontroli dostępu opartej na rolach platformy Azure na potrzeby autoryzacji platformy Kubernetes

W tym artykule opisano, jak używać Azure RBAC do autoryzacji w Kubernetes, co umożliwia ujednolicone zarządzanie i kontrolę dostępu w zasobach Azure, AKS oraz zasobach Kubernetes. Aby uzyskać więcej informacji, zobacz Azure RBAC for Kubernetes Authorization (Kontrola dostępu na podstawie ról platformy Azure dla autoryzacji na platformie Kubernetes).

Uwaga

W przypadku korzystania ze zintegrowanego uwierzytelniania między identyfikatorem Entra firmy Microsoft i usługą AKS można użyć użytkowników, grup lub jednostek usługi firmy Microsoft jako podmiotów w kontroli dostępu opartej na rolach (Kubernetes RBAC) platformy Kubernetes. Dzięki tej funkcji nie musisz oddzielnie zarządzać tożsamościami użytkowników i poświadczeniami dla platformy Kubernetes. Jednak nadal trzeba skonfigurować kontrolę dostępu opartą na rolach platformy Azure oraz kontrolę dostępu opartą na rolach platformy Kubernetes i zarządzać nimi oddzielnie.

Zanim rozpoczniesz

  • Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.24.0 lub nowszej zainstalowany i skonfigurowany. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Potrzebujesz kubectl, z minimalną wersją 1.18.3.
  • Aby można było dodać Azure RBAC na potrzeby autoryzacji Kubernetes, konieczne jest włączenie zarządzanej integracji Microsoft Entra w klastrze. Jeśli musisz włączyć zarządzaną integrację z usługą Microsoft Entra, zobacz Korzystanie z identyfikatora Microsoft Entra w usłudze AKS.
  • Jeśli masz CRDs i tworzysz niestandardowe definicje ról, jedynym sposobem na ich uwzględnienie jest obecnie użycie Microsoft.ContainerService/managedClusters/*/read. W przypadku pozostałych obiektów można użyć określonych grup interfejsów API, takich jak Microsoft.ContainerService/apps/deployments/read.
  • Nowe przypisania ról mogą zajmować do pięciu minut na rozpropagowanie i zaktualizowanie przez serwer autoryzacji.
  • Kontrola dostępu oparta na rolach platformy Azure dla autoryzacji platformy Kubernetes wymaga, aby dzierżawa firmy Microsoft skonfigurowana do uwierzytelniania jest taka sama jak dzierżawa subskrypcji, która przechowuje klaster usługi AKS.

Tworzenie nowego klastra AKS z zarządzaną integracją Microsoft Entra i kontrolą dostępu opartą na rolach Azure (RBAC) dla autoryzacji Kubernetes.

  1. Utwórz grupę zasobów platformy Azure przy użyciu az group create polecenia .

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Utwórz klaster usługi AKS z zarządzaną integracją Microsoft Entra i Azure RBAC dla autoryzacji Kubernetes przy użyciu polecenia az aks create.

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

Włącz Azure RBAC w istniejącym klastrze AKS

  • Włącz Azure RBAC dla autoryzacji Kubernetes w istniejącym klastrze AKS, używając polecenia az aks update z flagą --enable-azure-rbac.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

Wyłączanie Azure RBAC dla Autoryzacji Kubernetes z klastra AKS

  • Usuń Azure RBAC dla autoryzacji Kubernetes z istniejącego klastra AKS za pomocą polecenia az aks update z flagą --disable-azure-rbac.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Wbudowane role usługi AKS

Usługa AKS udostępnia następujące wbudowane role:

Rola opis
Czytelnik RBAC w usłudze Azure Kubernetes Service Umożliwia dostęp tylko do odczytu, aby wyświetlić większość obiektów w przestrzeni nazw. Nie zezwala na wyświetlanie ról ani powiązań ról. Ta rola nie zezwala na wyświetlanie Secrets, ponieważ odczytywanie zawartości tajemnic umożliwia dostęp do poświadczeń konta usługi w przestrzeni nazw, co mogłoby umożliwić dostęp do API jako dowolne konto usługi w tej przestrzeni nazw (forma eskalacji uprawnień).
Piszący RBAC usługi Azure Kubernetes Service 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 Secrets i uruchamianie Podów jako dowolne konto usługi w przestrzeni nazw, dzięki czemu można zyskać poziom dostępu do interfejsu API dowolnego konta usługi w przestrzeni nazw.
Administrator kontroli dostępu opartej na rolach usługi Azure Kubernetes Service Zezwala na dostęp administratora, który powinien być udzielany w przestrzeni nazw. Umożliwia dostęp do odczytu/zapisu do większości zasobów w przestrzeni nazw (lub zakresie klastra), 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 limitu przydziału zasobów ani do samej przestrzeni nazw.
Administrator klastra RBAC usługi Azure Kubernetes Umożliwia dostęp administratora do wykonywania dowolnej akcji na dowolnym zasobie. Zapewnia pełną kontrolę nad każdym zasobem w klastrze i we wszystkich przestrzeniach nazw.

Tworzenie przypisań ról na potrzeby dostępu do klastra

  1. Pobierz identyfikator zasobu usługi AKS za pomocą polecenia az aks show.

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Utwórz przypisanie roli używając polecenia az role assignment create. <AAD-ENTITY-ID> może być nazwą użytkownika lub identyfikatorem klienta jednostki usługi. W poniższym przykładzie utworzono przypisanie roli dla roli Azure Kubernetes Service RBAC Admin.

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Uwaga

    Możesz utworzyć przypisania ról Azure Kubernetes Service RBAC Reader i Azure Kubernetes Service RBAC Writer o zakresie ograniczonym do określonego obszaru nazw w klastrze, używając polecenia az role assignment create i ustawiając zakres na żądaną przestrzeń nazw.

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

Tworzenie definicji ról niestandardowych

Poniższa przykładowa definicja roli niestandardowej umożliwia użytkownikowi tylko odczytywanie wdrożeń i nic innego. Aby uzyskać pełną listę możliwych akcji, zobacz Operacje Microsoft.ContainerService.

  1. Aby utworzyć własne definicje ról niestandardowych, skopiuj następujący plik, zastępując <YOUR SUBSCRIPTION ID> swoim identyfikatorem subskrypcji, a następnie zapisz go jako deploy-view.json.

    {
        "Name": "AKS Deployment Reader",
        "Description": "Lets you view all deployments in cluster/namespace.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/apps/deployments/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR SUBSCRIPTION ID>"
        ]
    }
    
  2. Utwórz definicję roli przy użyciu polecenia az role definition create, ustawiając --role-definition na plik deploy-view.json, który utworzyłeś w poprzednim kroku.

    az role definition create --role-definition @deploy-view.json 
    
  3. Przypisz definicję roli do użytkownika lub innej tożsamości przy użyciu az role assignment create polecenia .

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Używanie kontroli dostępu opartej na rolach platformy Azure dla autoryzacji platformy Kubernetes za pomocą polecenia kubectl

  1. Upewnij się, że masz wbudowaną rolę Użytkownika klastra usługi Azure Kubernetes Service, a następnie pobierz kubeconfig swojego klastra AKS używając polecenia az aks get-credentials.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Teraz możesz użyć kubectl do zarządzania klastrem. Można na przykład wyświetlić listę węzłów w klastrze przy użyciu polecenia kubectl get nodes.

    kubectl get nodes
    

    Przykładowe wyjście:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Używanie kontroli dostępu opartej na rolach platformy Azure dla autoryzacji platformy Kubernetes za pomocą polecenia kubelogin

Usługa AKS stworzyła wtyczkę kubelogin, aby umożliwić odblokowanie scenariuszy, takich jak logowanie nieinterakcyjne, starsze wersje kubectl lub korzystanie z jednokrotnego logowania w wielu klastrach bez konieczności logowania do nowego klastra.

  1. kubelogin Użyj wtyczki, uruchamiając następujące polecenie:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Możesz teraz użyć kubectl do zarządzania klastrem. Można na przykład wyświetlić listę węzłów w klastrze przy użyciu polecenia kubectl get nodes.

    kubectl get nodes
    

    Przykładowe wyjście:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Czyszczenie zasobów

Usunięcie przypisania roli

  1. Aby wyświetlić listę przypisań ról, użyj polecenia az role assignment list.

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Usuń przypisania ról przy użyciu az role assignment delete polecenia .

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

Usuwanie definicji roli

  • Usuń definicję roli niestandardowej przy użyciu polecenia az role definition delete.

    az role definition delete --name "AKS Deployment Reader"
    

Usuń grupę zasobów i klaster usługi AKS

  • Usuń grupę zasobów i klaster AKS używając polecenia az group delete.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Następne kroki

Aby dowiedzieć się więcej na temat uwierzytelniania i autoryzacji dla AKS, RBAC Kubernetes oraz RBAC platformy Azure, zapoznaj się z: