Udostępnij za pośrednictwem


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

W tym artykule opisano sposób używania kontroli dostępu opartej na rolach platformy Azure dla autoryzacji kubernetes, co umożliwia ujednolicone zarządzanie i kontrolę dostępu między zasobami platformy Azure, usługą AKS i zasobami 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 i kontrolę dostępu opartą na rolach platformy Kubernetes i zarządzać nią 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.
  • Potrzebna jest kubectlwersja minimalna 1.18.3.
  • Aby można było dodać kontrolę dostępu opartą na rolach platformy Azure na potrzeby autoryzacji kubernetes, potrzebna jest zarządzana integracja firmy 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 identyfikatory CRD i tworzysz niestandardowe definicje ról, jedynym sposobem na pokrycie crDs jest obecnie użycie funkcji 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.
  • Propagowanie nowych przypisań ról przez serwer autoryzacji może potrwać do pięciu minut .
  • 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 usługi AKS z zarządzaną integracją firmy Microsoft i kontrolą dostępu opartą na rolach platformy Azure na potrzeby autoryzacji platformy 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ą firmy Microsoft Entra i kontrolą dostępu opartą na rolach az aks create platformy Azure dla autoryzacji kubernetes przy użyciu polecenia .

    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łączanie kontroli dostępu opartej na rolach platformy Azure w istniejącym klastrze usługi AKS

  • Włącz kontrolę dostępu opartą na rolach platformy Azure dla autoryzacji kubernetes w istniejącym klastrze usługi AKS przy użyciu az aks update polecenia z flagą --enable-azure-rbac .

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

Wyłączanie kontroli dostępu opartej na rolach platformy Azure dla autoryzacji kubernetes z klastra usługi AKS

  • Usuń kontrolę dostępu opartą na rolach platformy Azure dla autoryzacji kubernetes z istniejącego klastra usługi AKS przy użyciu az aks update polecenia 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 kontroli dostępu opartej na rolach usługi 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 Secretselementu , ponieważ odczytywanie zawartości wpisów tajnych umożliwia dostęp do poświadczeń usługi ServiceAccount w przestrzeni nazw, co umożliwi dostęp do interfejsu API jako dowolne konto usługi w przestrzeni nazw (forma eskalacji uprawnień).
Składnik zapisywania kontroli dostępu opartej na rolach 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 uzyskiwanie Secrets dostępu do zasobników i uruchamianie ich jako dowolnego konta usługi w przestrzeni nazw, dzięki czemu może służyć do uzyskiwania poziomów 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 ma 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 Service 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 przy użyciu az aks show polecenia .

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Utwórz przypisanie roli przy użyciu az role assignment create polecenia . <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 administratora RBAC usługi Azure Kubernetes Service.

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

    Uwaga

    Można utworzyć czytelnik kontroli dostępu opartej na rolach usługi Azure Kubernetes Service i przypisania ról modułu zapisywania RBAC usługi Azure Kubernetes Service w zakresie określonego obszaru nazw w klastrze przy użyciu az role assignment create polecenia i ustawić 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> ciąg własnym 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 az role definition create polecenia , ustawiając wartość --role-definition deploy-view.json dla pliku utworzonego 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 konfigurację kubeconfig klastra usługi AKS przy użyciu az aks get-credentials polecenia .

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Teraz możesz użyć kubectl polecenia 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 utworzyła wtyczkę kubelogin , aby ułatwić odblokowanie scenariuszy, takich jak logowanie nieinterakcyjne, starsze kubectl wersje lub korzystanie z logowania jednokrotnego w wielu klastrach bez konieczności logowania się do nowego klastra.

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

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Teraz możesz użyć kubectl polecenia 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. Wyświetlanie listy przypisań ról przy az role assignment list użyciu polecenia .

    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 az role definition delete przy użyciu polecenia .

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

Usuwanie grupy zasobów i klastra usługi AKS

  • Usuń grupę zasobów i klaster usługi AKS przy użyciu az group delete polecenia .

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

Następne kroki

Aby dowiedzieć się więcej na temat uwierzytelniania, autoryzacji, kontroli dostępu opartej na rolach platformy Kubernetes i kontroli dostępu opartej na rolach platformy Azure, zobacz: