Protection des ressources de cluster avec des restrictions contextuelles
Les restrictions basées sur le contexte permettent aux propriétaires de comptes et aux administrateurs de définir et d'appliquer des restrictions d'accès aux ressources IBM Cloud® en fonction du contexte des demandes d'accès. L'accès aux ressources IBM Cloud Kubernetes Service peut être contrôlé par des restrictions contextuelles et des politiques de gestion des identités et des accès.
Ces restrictions fonctionnent avec des règles IAM classiques, qui reposent sur l'identité, afin de fournir une couche de protection supplémentaire. Contrairement aux politiques IAM, les restrictions basées sur le contexte n'affectent pas d'accès. Elles permettent de vérifier qu'une demande d'accès provient d'un contexte autorisé que vous configurez. Etant donné que l'accès IAM ainsi que les restrictions basées sur le contexte contrôlent l'accès, les restrictions basées sur le contexte offrent une protection même si les données d'identification sont compromises ou mal gérées. Pour plus d'informations, voir Que sont les restrictions basées sur le contexte ?.
Un utilisateur doit avoir le rôle d'administrateur sur le service IBM Cloud Kubernetes Service pour créer, mettre à jour ou supprimer des règles. De plus, un utilisateur doit disposer du rôle Editeur ou Administrateur sur le service de restrictions basées sur le contexte pour créer, mettre à jour ou supprimer des zones réseau.
Tous les événements Activity Tracker ou de journal d'audit générés proviennent du service de restrictions contextuelles et non de IBM Cloud Kubernetes Service. Pour plus d'informations, voir Contrôle des restrictions basées sur le contexte.
Les tentatives d'accès au plan de contrôle du cluster, qui peuvent être restreintes en utilisant le type d'API Cluster, ne génèrent pas d'événements Activity Tracker ou de journal d'audit.
Comment IBM Cloud Kubernetes Service s'intègre aux restrictions contextuelles
Vous pouvez créer des restrictions basées sur le contexte (CBR) pour les API du plan de contrôle de votre cluster ou pour les API de gestion du cluster IBM Cloud. Avec les restrictions basées sur le contexte, vous pouvez protéger les ressources suivantes.
- API du plan de contrôle de la grappe
- Protège l'accès aux API IBM Cloud Kubernetes Service pour vos clusters ou à des espaces de noms spécifiques dans vos clusters. Par exemple, vous pouvez protéger l'API pour créer un espace de noms Kubernetes.
- API de gestion
- Protège l'accès aux API de IBM Cloud Kubernetes Service pour des clusters spécifiques. Par exemple, vous pouvez protéger l'API pour créer un cluster.
Les applications fonctionnant sur les clusters IBM Cloud Kubernetes Service, par exemple les serveurs web exposés par un Kubernetes LoadBalancer, ne sont pas limitées par les règles CBR.
Protection des ressources de cluster
Vous pouvez créer des règles CBR pour protéger des régions et des clusters spécifiques.
- Cluster
- Protège un cluster IBM Cloud Kubernetes Service spécifique. Si vous sélectionnez un cluster dans votre règle CBR, seul le trafic provenant des ressources des zones réseau que vous associez à la règle peut interagir avec ce cluster.
- Si vous utilisez le CLI, vous pouvez spécifier l'option
--service-instance CLUSTER-IDpour protéger un cluster spécifique. - Si vous utilisez l'API, vous pouvez spécifier
"name": "serviceInstance","value": "CLUSTER-ID"dans les attributs de la ressource. - Région
- Protège les ressources IBM Cloud Kubernetes Service dans une région spécifique. Si vous sélectionnez une région dans votre règle CBR, seul le trafic provenant des ressources des zones réseau que vous associez à la règle peut interagir avec les ressources de cette région.
- Si vous utilisez le CLI, vous pouvez spécifier l'option
--region REGIONpour protéger les ressources dans une région spécifique. - Si vous utilisez l'API, vous pouvez spécifier le champ
"name": "region","value": "REGION"dans les attributs de la ressource. - Groupe de ressources
- Protège les ressources IBM Cloud Kubernetes Service dans un groupe de ressources spécifique.
- Si vous utilisez le CLI, vous pouvez spécifier l'option
--resource-group-id RESOURCE-GROUP-IDpour protéger les ressources d'un groupe de ressources spécifique. - Si vous utilisez l'API, vous pouvez spécifier le champ
"name": "resourceGroupId","value": "RESOURCE-GROUP-ID"dans les attributs de la ressource.
Protection d'API spécifiques
Vous pouvez créer des règles CBR pour protéger les types d'API suivants pour IBM Cloud Kubernetes Service.
- API de plan de contrôle de cluster
- Protégez l'accès aux API dans vos clusters, telles que les API pour la création d'espaces de nom, de pods, etc. Les règles CBR qui s'appliquent au type d'API de cluster contrôlent l'accès à votre serveur d'API de cluster, qui inclut toutes
les commandes
kubectlà ce cluster. Si vous sélectionnez les API de plan de contrôle de cluster dans votre règle CBR, seul le trafic provenant des ressources des zones réseau associées à cette règle peut interagir avec les API de plan de contrôle de cluster. Toutes les autres demandes sont bloquées. - Si vous utilisez l'interface de programmation, vous pouvez spécifier l'option
--api-typeset le typecrn:v1:bluemix:public:containers-kubernetes::::api-type:cluster. - Si vous utilisez l'API, vous pouvez spécifier
"api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"dans la spécification"operations". - API de gestion
- Protégez l'accès aux API pour la mise à disposition et la gestion de clusters, de pools de noeuds worker, etc. Les règles CBR qui s'appliquent au type d'API de gestion contrôlent l'accès aux API IBM Cloud Kubernetes Service, qui incluent
tous les appels de commandes
ibmcloud ks, tels queibmcloud ks clusters,ibmcloud ks cluster create, etc. Si vous sélectionnez les API de gestion dans votre règle CBR, les ressources de la zone réseau associées à la règle peuvent interagir avec les API de gestion. - Si vous utilisez l'interface de programmation, vous pouvez spécifier l'option
--api-typeset le typecrn:v1:bluemix:public:containers-kubernetes::::api-type:management. - Si vous utilisez l'API, vous pouvez spécifier
"api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:management"dans la spécification"operations".
Pour suivre un exemple de scénario CBR, voir Configuration de restrictions contextuelles.
Pour obtenir une liste des cibles de référence de service dans l'interface de gestion, exécutez la commande ibmcloud cbr service-ref-targets.
Veiller à ce que IBM Cloud Kubernetes Service puisse conserver l'accès à d'autres ressources IBM Cloud lorsque la RBC est activée pour eux
Vous devez ajouter le containers-kubernetes à vos zones réseau pour les règles créées par rapport aux services suivants.
- Service d'identité IAM
- Autorisez IBM Cloud Kubernetes Service à créer des jetons et des clés d'API tels que la clé d'API de cluster et le jeton et la clé d'API IBM Cloud Container Registry.
- Service de gestion des accès IAM
- Autorisez IBM Cloud Kubernetes Service à créer une règle d'accès IAM pour le rôle d'accès au service Reader dans IBM Cloud Container Registry.
- Service des groupes d'accès IAM
- Autorisez IBM Cloud Kubernetes Service à rechercher des groupes d'accès lors de la synchronisation de règles d'accès IAM avec RBAC dans le cluster.
- Gestion des utilisateurs
- Autorisez IBM Cloud Kubernetes Service à accéder aux informations utilisateur lors de la synchronisation des règles d'accès IAM avec RBAC dans le cluster.
- Protection par clé:
- Autorisez IBM Cloud Kubernetes Service à activer le chiffrement sur le cluster.
- Block Storage for VPC (Server Protect)
- Permettre à IBM Cloud Kubernetes Service d'accéder aux volumes de Block Storage for VPC et de les chiffrer.
- VPC
- Autoriser l'accès de IBM Cloud Kubernetes Service aux ressources du VPC.
Création de zones réseau
Les zones réseau servent de listes autorisées pour les ressources cible que vous définissez lorsque vous créez des règles CBR. Après avoir créé une zone réseau ou une liste autorisée, vous pouvez créer des règles qui définissent les ressources auxquelles la zone réseau peut accéder.
Veillez à ajouter le service containers-kubernetes à vos zones réseau pour les règles qui s'appliquent à d'autres ressources IBM Cloud, telles qu'une règle qui protège IBM Cloud Object Storage ou certaines opérations de cluster
pourraient échouer. Pour plus d'informations, voir Permettre à IBM Cloud Kubernetes Service d'accéder à d'autres ressources IBM Cloud en utilisant CBR.
Passez en revue les limitations avant de créer des zones réseau.
Création de zones réseau à partir de l'API
Vous pouvez créer des zones réseau à l'aide de l'API /v1/zones. Pour plus d'informations, voir Docs d'API. Vous pouvez ajouter le service containers-kubernetes à vos zones réseau pour permettre à IBM Cloud Kubernetes Service d'accéder aux ressources et aux services de votre compte.
Vous pouvez inclure plusieurs types d'adresse dans le contenu de votre zone réseau. Pour plus d'informations, voir l'exemple de contenu dans la documentation sur les API.
Exemple de contenu permettant d'ajouter IBM Cloud Kubernetes Service à une zone réseau. L'attribut serviceRef pour IBM Cloud Kubernetes Service est containers-kubernetes.
{
"name": "Example zone 1",
"description": "",
"addresses": [
{
"type": "serviceRef",
"ref": {
"service_name": "containers-kubernetes",
"account_id": "ACCOUNT-ID"
}
}
]
}
Exemple de contenu permettant d'ajouter plusieurs services, adresses IP et VPC à une zone réseau.
{
"name": "zone",
"description": "",
"addresses": [
{
"type": "ipAddress",
"value": "192.168.0.0"
},
{
"type": "vpc",
"value": "crn:v1:bluemix:public:is:us-east:a/CRN"
},
{
"type": "vpc",
"value": "crn:v1:bluemix:public:is:us-south:a/CRN"
},
{
"type": "serviceRef",
"ref": {
"service_name": "cloud-object-storage",
"account_id": "ACCOUNT-ID"
}
},
{
"type": "serviceRef",
"ref": {
"service_name": "codeengine",
"account_id": "ACCOUNT-ID"
}
},
{
"type": "serviceRef",
"ref": {
"service_name": "containers-kubernetes",
"account_id": "ACCOUNT-ID"
}
},
{
"type": "serviceRef",
"ref": {
"service_type": "platform_service",
"account_id": "ACCOUNT-ID"
}
},
{
"type": "serviceRef",
"ref": {
"service_name": "iam-groups",
"account_id": "ACCOUNT-ID"
}
}
],
"excluded": []
}
Création de zones réseau à partir de l'interface de ligne de commande
-
Pour créer des zones réseau à partir de l'interface de ligne de commande, installez le plug-in d'interface de ligne de commande CBR.
-
Vous pouvez utiliser la commande
cbr-zone-createpour ajouter des ressources à des zones réseau. Pour plus d'informations, voir la référence de l'interface de ligne de commande de CBR. Notez queservice_namepour IBM Cloud Kubernetes Service estcontainers-kubernetes.Pour obtenir la liste des références de service disponibles, exécutez la
ibmcloud cbr service-ref-targetscommande .Exemple de commande permettant d'ajouter le service
containers-kubernetesà une zone réseau.ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=containers-kubernetesL'exemple suivant crée une zone réseau pour autoriser l'accès à une adresse IP publique unique. Vous pouvez également utiliser cet exemple avec l'exemple de règle d'adresse IP unique. Pour plus d'informations sur ce scénario, voir Configuration de restrictions contextuelles.
ibmcloud cbr zone-create --addresses 129.41.86.7 --description "Allow only client IP" --name allow-client-ip
Création de zones réseau à partir de la console
- Déterminez les ressources que vous souhaitez ajouter à votre liste autorisée.
- Suivez les étapes pour créer des restrictions contextuelles dans la console. Ajoutez le service Kubernetes à vos zones réseau pour permettre à IBM Cloud Kubernetes Service d'accéder aux services et aux ressources de votre compte.
Création de règles
Définissez des règles pour protéger l'accès aux ressources de votre compte. Les contextes que vous définissez dans vos règles déterminent comment les ressources de vos zones réseau (listes autorisées) peuvent interagir avec les ressources définies dans la règle.
Passez en revue les limitations avant de créer des règles.
Création de règles en utilisant l'API
Passez en revue les exemples de demande suivants pour créer des règles. Pour plus d'informations sur l'API v1/rules, voir la documentation sur les API.
Une fois que vous avez créé une règle, la mise à jour de cette règle peut prendre jusqu'à 10 minutes en raison de la mise en cache de la réponse TTL IAM.
L'exemple de contenu suivant crée une règle qui protège le cluster CLUSTER-ID. Seules les ressources de la zone NETWORK-ZONE-ID peuvent accéder au cluster. Comme aucun operations n'est spécifié, les ressources
de la zone NETWORK-ZONE-ID peuvent accéder à la fois aux API cluster et management.
{
"description": "Example rule 1",
"resources": [
{
"attributes": [
{
"name": "accountId",
"value": "ACCOUNT-ID"
},
{
"name": "serviceName",
"value": "containers-kubernetes"
},
{
"name": "serviceInstance",
"value": "CLUSTER-ID"
}
]
}
],
"contexts": [
{
"attributes": [
{
"name": "networkZoneId",
"value": "NETWORK-ZONE-ID"
},
{
"name": "endpointType",
"value": "private"
}
]
}
]
}
L'exemple de contenu suivant crée une règle qui protège le cluster CLUSTER-ID. Seules les ressources définies dans la zone NETWORK-ZONE-ID peuvent accéder au cluster. Etant donné que le type d'API cluster est spécifié, les ressources de la zone NETWORK-ZONE-ID peuvent accéder au cluster via les API de cluster sur le réseau privé.
{
"description": "Example rule 2",
"resources": [
{
"attributes": [
{
"name": "accountId",
"value": "ACCOUNT-ID"
},
{
"name": "serviceName",
"value": "containers-kubernetes"
},
{
"name": "serviceInstance",
"value": "CLUSTER-ID"
}
]
}
],
"operations": {
"api_types": [
{
"api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"
}
]
},
"contexts": [
{
"attributes": [
{
"name": "networkZoneId",
"value": "NETWORK-ZONE-ID"
},
{
"name": "endpointType",
"value": "private"
}
]
}
]
}
Création de règle depuis l'interface de ligne de commande
- Pour créer des règles à partir de l'interface de ligne de commande, installez le plug-in d'interface de ligne de commande CBR.
- Vous pouvez utiliser la
ibmcloud cbr rule-createcommande pour créer des règles CBR. Pour plus d'informations, voir la référence de l'interface de ligne de commande de CBR. Notez queservice_namepour IBM Cloud Kubernetes Service estcontainers-kubernetes. Pour trouver une liste de noms de service, exécutez la commandeibmcloud cbr service-ref-targets. Pour trouver la liste des types d'API d'un service, exécutez la commandeibmcloud cbr api-types --service-name SERVICE.
Exemple de commande permettant de créer une règle qui utilise la clé addresses, le type d'API cluster et le type ipAddress.
ibmcloud cbr rule-create my-rule-1 --service-name containers-kubernetes --api-type crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --zone-id ZONE-ID
La commande suivante crée une règle qui protège le cluster CLUSTER-ID. Seules les ressources de la zone réseau NETWORK-ZONE-ID peuvent accéder au cluster. Cette règle inclut les types d'API cluster et
management.
ibmcloud cbr rule-create my-rule-2 --service-name containers-kubernetes --service-instance CLUSTER-ID --zone-id NETWORK-ZONE-ID
L'exemple de commande suivant crée une règle qui autorise toutes les connexions de réseau privé, mais autorise uniquement les ressources de la zone réseau allow-client-ip à se connecter au cluster sur le réseau public. Pour plus
d'informations sur ce scénario, voir Configuration des restrictions basées sur le contexte.
ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=allow-client-ip
Créer des règles à partir de la console
- Passez en revue les contextes disponibles et déterminez les règles que vous souhaitez créer.
- Suivez les étapes pour créer des restrictions contextuelles dans la console.
Limitations
- Une fois que vous avez créé, appliqué ou désactivé l'application d'une règle, l'application de la modification peut prendre jusqu'à 10 minutes.
- Les limitations suivantes s'appliquent aux règles CBR de IBM Cloud Kubernetes Service qui s'appliquent à tous les types d'API ou aux types d'API
cluster:- Ils ne doivent pas faire référence à des zones de réseau contenant des adresses IPv6. Les API incluses dans le type
clusterne prennent pas en charge IPv6. - Ils ne doivent pas faire référence à d'autres services tels que IBM Cloud Object Storage ou Key Protect dans les zones de réseau appliquées.
- Ils ne prennent pas en charge l'application de
Report-onlypour le type d'API cluster. - Ils sont limités à 200 IP/sous-réseaux pour les règles privées et à 500 IP/sous-réseaux pour les règles publiques.
- Ils ne doivent pas faire référence à des zones de réseau contenant des adresses IPv6. Les API incluses dans le type
- Certains clusters IBM Cloud Kubernetes Service créés avant le 8 octobre 2022 ne sont pas en mesure d'appliquer des règles CBR publiques pour le serveur API du cluster. Pour vérifier si votre cluster prend en charge ces règles CBR de type API
de cluster public, exécutez la commande
ibmcloud ks cluster get -c <CLUSTER-ID>. Si l'une des URL de noeud final de service commence parhttps://cXXX(où XXX est un nombre à trois chiffres), le cluster prend en charge les règles CBR publiques. Si les URL de noeud final de service commencent parhttps://cX(où le nombre aprèscest un chiffre unique), le cluster ne peut pas appliquer les règles CBR publiques pour le serveur API du cluster. Pour utiliser les règles CBR publiques, vous devez créer un nouveau cluster.