Configurer la gestion des accès Kubernetes

Conditions nécessaires

  • Une équipe Okta Privileged Access existante avec la fonctionnalité de gestion des accès Kubernetes activée
  • Un cluster K8s existant
  • Un appareil sur lequel Terraform et le fournisseur OktaPAM Terraform sont installés et configurés.
  • Un appareil avec le client Okta Privileged Access version 1.61.2 ou ultérieure installé
  • Un appareil avec kubectl installé

Préparer le fournisseur Okta PAM Terraform

Pour commencer, les administrateurs doivent créer un fichier Terraform qui définit les ressources de cluster à créer dans Okta Privileged Access. Ce fichier doit également inclure les informations d'authentification pour une équipe Okta Privileged Access spécifique. Pour en savoir plus, voir Authentification.

Exemple

terraform {
	required_providers {
		oktapam = {
			source = "okta/oktapam"
			version = "0.2.1"
		}
	}
}

provider "oktapam" {
	# Authentication options
	oktapam_key = # An Okta PAM API Key
	oktapam_secret = # An Okta PAM API Secret
	oktapam_team = # An Okta PAM Team Name

}			

Configurer Okta Privileged Access pour la gestion des accès dans Kubernetes

Pour que Okta Privileged Access puisse gérer l'accès aux clusters Kubernetes, Okta Privileged Access et les clusters gérés doivent être configurés avec des informations mutuelles.

Pour gérer efficacement chaque cluster, il est essentiel de créer et de mettre à jour un objet de cluster qui inclut l'adresse du serveur API et le certificat TLS du cluster. Chaque cluster géré par Kubernetes doit être configuré de manière à utiliser Okta Privileged Access comme point de terminaison d'authentification OIDC. Le fournisseur OktaPAM Terraform prend en charge les ressources spécifiques à Kubernetes qui sont utilisées pour configurer Okta Privileged Access avec ces informations pour chaque cluster.

Une fois les ressources pour votre cluster créées dans Okta Privileged Access, les administrateurs Okta Privileged Access peuvent consulter les informations relatives aux clusters depuis la section Kubernetes de la console Okta Privileged Access.

Clusters : affiche la liste de tous les clusters précédemment ajoutés. Les équipes peuvent également voir rapidement les libellés associées sur cette page. En cliquant sur un cluster spécifique, vous ouvrez une vue détaillée où les équipes peuvent récupérer l'URL d'authentification OIDC associée au cluster.

Groupes de clusters : affiche la liste de tous les groupes de clusters précédemment ajoutés. Les équipes peuvent voir les libellés pour chaque groupe de clusters sur cette page.

Tâche 1 : Ajouter un cluster à Okta Privileged Access

Tout d'abord, les administrateurs de ressources Okta Privileged Access doivent ajouter les blocs de ressources qui définissent une ou plusieurs ressources de cluster K8 à créer dans Okta Privileged Access. Chaque ressource de cluster dispose d'une URL OIDC associée qui est ensuite utilisée pour configurer l'authentification pour le cluster spécifique. Les équipes peuvent ajouter plusieurs clusters en même temps, mais elles doivent créer un bloc de ressources distinct pour chaque cluster.

Les équipes peuvent éventuellement définir un ou plusieurs sélecteurs de libellés pour la ressource de cluster. Ces libellés permettent aux équipes de contrôler l'accès de groupe à chaque cluster.

Requête
Paramètre Description
auth_mechanism Mécanisme spécifique utilisé pour fournir des informations d'authentification au cluster. Actuellement, seul OIDC_RSA2048 est pris en charge.
key Nom lisible utilisé pour identifier le cluster dans Okta Privileged Access. Il ne peut pas inclure d'espaces. Les caractères autorisés sont A à Z et 0 à 9.
labels Carte des libellés utilisées pour contrôler l'accès des groupes dans Okta Privileged Access.
Réponse
Propriété Description
id ID de la ressource créée dans Okta Privileged Access.
oidc_issuer_url URL de l'émetteur OIDC à utiliser lors de la configuration de votre cluster K8s.
Exemple
resource "oktapam_kubernetes_cluster" "asa_docs" {
	auth_mechanism    = "OIDC_RSA2048"
	key		 = "asadocs"
	labels		= { env = "prod", tier = "gold" }
}	

Tâche 2 : Mettre à jour Okta Privileged Access avec les informations de cluster

Okta Privileged Access a besoin d'informations supplémentaires sur les clusters qu'il gère pour gérer les fichiers de configuration kubectl et garantir que les utilisateurs peuvent accéder aux clusters. Ces informations comprennent l'adresse du serveur API du cluster et le certificat utilisé pour la connexion HTTPS établie avec le serveur API du cluster. En fonction de la façon dont votre cluster a été créé et de l'endroit où il est hébergé, vous pouvez récupérer ces informations à partir d'un fichier d'état Terraform (pour les clusters créés avec Terraform) ou à partir de la console de gestion du cluster ou du serveur API.

Requête
Paramètre Description
cluster_id ID du cluster renvoyé depuis la ressource oktapam_kubernetes_cluste.
api_url URL HTTPS du cluster Kubernetes. Il s'agit du point de terminaison qui est configuré dans les fichiers kubeconfig de l'utilisateur par le client Okta Privileged Access .
public_certificate Certificat TLS au format PEM utilisé par le serveur API du cluster. Ce certificat est utilisé par kubectl pour vérifier le certificat présenté par le serveur API du cluster.
Réponse
Propriété Description
id ID de la ressource créée dans Okta Privileged Access.
oidc_issuer_url URL de l'émetteur OIDC à utiliser lors de la configuration de votre cluster K8s.
Exemple
resource "oktapam_kubernetes_cluster_connection" "asa_docs" {
	cluster_id         = oktapam_kubernetes_cluster.asa_docs.id
	api_url            = data.tls_certificate.asa_docs.url
	public_certificate = data.tls_certificate.asa_docs.certificates[0].cert_pem
} 

Tâche 3 : Créer un groupe de clusters

Enfin, les administrateurs doivent créer un ou plusieurs blocs de ressources de groupe de clusters. Les groupes de clusters mappent les groupes Okta Privileged Access existants avec les clusters Kubernetes et permettent aux équipes de définir des libellés et des demandes spécifiques pour chaque groupe. Les équipes peuvent ajouter plusieurs groupes de clusters en même temps, mais elles doivent créer un bloc de ressources distinct pour chaque groupe.

Les libellés déterminent à quel cluster les membres d'un groupe peuvent accéder. Par exemple, une équipe peut appliquer le sélecteur env: prod à certains clusters et le sélecteur env: dev à d'autres. Dans ce cas, elle n'affectera l'étiquette prod qu'à un groupe spécifique.

Les demandes sont incluses dans des jetons créés par Okta Privileged Access et sont utilisées par les clusters Kubernetes pour mapper un jeton à une liaison de rôle Kubernetes. Tous les membres d'un groupe reçoivent ce rôle lorsqu'ils interagissent avec un cluster associé.

Requête
Paramètre Description
cluster_selector Un sélecteur de libellé est utilisé pour faire correspondre les clusters K8.
group_name Nom lisible d'un groupe Okta Privileged Access. Les valeurs sont sensibles à la casse (maj/min).
claims Mappage des demandes à inclure avec les identifiants utilisateur en vue d'une utilisation avec l'authentification en cluster. Les demandes correspondent à des liaisons de rôles préconfigurées sur le cluster.
Réponse
Propriété Description
id ID de la ressource créée dans Okta Privileged Access.
Exemple

resource "oktapam_kubernetes_cluster_group" "asa_docs" {
	cluster_selector  = "env=prod"
	group_name		= "existingGroup"
	claims		= { groups = "ExampleGroup" }
}	

Tâche 4 : Configurer votre cluster

Une fois que l'équipe a créé des ressources dans Okta Privileged Access, les administrateurs doivent configurer un cluster afin d'utiliser Okta Privileged Access pour l'authentification.

Lorsqu'une équipe ajoute un cluster avec le fournisseur OktaPam Terraform, elle reçoit une URL d'authentification OIDC unique. Les administrateurs se servent de l'URL pour forcer le cluster à authentifier les utilisateurs avec Okta Privileged Access. Consultez la documentation Kubernetes.

Clusters minikube

Si vous prévoyez de tester la fonctionnalité de gestion des accès Kubernetes sur un cluster minikube, le tableau suivant décrit les paramètres qui doivent être transmis à la commande de démarrage minikube.

Arguments de démarrage minikube
Paramètre Description
apiserver.authorization-mode Définissez cette valeur sur RBAC pour activer le protocole RBAC Kubernetes sur le cluster.
apiserver.oidc-issuer-url URL OIDC générée par Okta Privileged Access lors de la création du cluster. Vous pouvez la consulter sur la page Détails du cluster dans Okta Privileged Access Dashboard.
apiserver.oidc-username-claim Demande JWT qui définit le nom d'utilisateur.

Saisissez sub.

apiserver.oidc-groups-claim Demande JWT qui définit le groupe. Cette valeur doit correspondre à une ou plusieurs demandes de groupes configurées dans Okta Privileged Access ClusterGroups. Elle est généralement définies sur « groups ».
apiserver.oidc-client-id Définissez cette valeur sur kubernetes.
Exemple de commande de démarrage minikube
minikube start \
	--extra-config=apiserver.authorization-mode=Node,RBAC \
	--extra-config=apiserver.oidc-issuer-url=\
	    https://app.scaleft.com/v1/teams/XXXXXX/kubernetes/clusters/XXXX-XXXX-XXXX-XXXX \
	--extra-config=apiserver.oidc-username-claim=sub \
	--extra-config=apiserver.oidc-client-id=kubernetes \
	--extra-config=apiserver.oidc-groups-claim=groups	

Cluster AWS ECS

Les clusters AWS EKS nécessitent une configuration plus poussée pour authentifier les clusters avec Okta Privileged Access. Le tableau suivant fournit un exemple simple de configuration d'un cluster EKS. Pour en savoir plus, consultez la documentation Authentification de cluster EKS. Un fichier YAML d'exemple pour l'association d'identités aux clusters EKS, l'activation de l'authentification et de l'accès avec Okta Privileged Access, est documenté ci-dessous pour une utilisation avec l'interface de ligne de commande eksctl.

Configuration EKS
Paramètre Description
IssuerUrl Un sélecteur de libellé est utilisé pour faire correspondre les clusters K8.
ClientId Nom lisible d'un groupe Okta Privileged Access existant. Les valeurs sont sensibles à la casse (maj/min).
UsernameClaim Mappage des demandes à inclure avec les identifiants utilisateur en vue d'une utilisation avec l'authentification en cluster. Les demandes correspondent à des liaisons de rôles préconfigurées sur le cluster.
GroupsClaim Demande JWT qui définit le groupe. Cette valeur doit correspondre à une ou plusieurs demandes de groupes configurées dans Okta Privileged Access ClusterGroups. Elle est généralement définies sur « groups ».
UsernamePrefix Facultatif. Chaîne ajoutée aux comptes utilisateur pour éviter les conflits.

Saisissez une chaîne descriptive, par exemple : ASAUser:.

GroupsPrefix Facultatif. Chaîne ajoutée aux groupes d'utilisateurs pour éviter les conflits.

Saisissez une chaîne descriptive, par exemple : ASAGroup:.

Exemple de fichier de Fournisseur d'identité associé (à utiliser avec eksctl)

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
	name: eks-k8s-beta
	region: us-east-1

identityProviders:
	- name: okta-asa-k8s
	type: oidc
	issuerUrl: <ASA OIDC URL>
	clientId: kubernetes
	usernameClaim: sub
	groupsClaim: groups	

Exemple de rôle de cluster

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
	name: ASA-readonly
rules:
	- apiGroups: ["*"]
	resources: ["*"]
	verbs: ["get", "list"]	

Exemple de liaison de rôle

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
	name: ASA-readonly-binding
roleRef:
	kind: ClusterRole
	name: ASA-readonly
	apiGroup: rbac.authorization.k8s.io
subjects:
	- kind: Group
	name: ASAGroup:ExampleGroup
	apiGroup: rbac.authorization.k8s.io

Rubriques connexes

Gestion des accès Kubernetes

Connexions en cluster Kubernetes