Managed Lustre fournit un contrôle des accès basé sur les adresses IP grâce à la fonctionnalité de compression de l'utilisateur racine.
Root squash est une fonctionnalité de sécurité qui empêche un utilisateur racine d'une VM cliente de disposer de privilèges racine sur un système de fichiers Managed Lustre. Lorsqu'un utilisateur racine accède au système de fichiers Managed Lustre, ses privilèges sont "écrasés" et ramenés à ceux d'un utilisateur moins privilégié.
Vous pouvez configurer le root squash pour une nouvelle instance Managed Lustre ou pour une instance existante. Vous pouvez appliquer un paramètre root squash par défaut à tous les clients ou spécifier des règles personnalisées pour certains clients.
Par défaut, la compression root n'est pas configurée sur une instance Lustre gérée.
Limites et recommandations de sécurité
Restreindre l'accès racine sur les VM clientes
Le meilleur mécanisme pour restreindre l'accès racine consiste à interdire aux utilisateurs d'être racine en premier lieu. Le fait d'accorder à des utilisateurs des privilèges racine sur une VM peut vous exposer à des risques de persistance. En effet, les utilisateurs peuvent abuser de ces privilèges pour créer des comptes utilisateur ou installer des portes dérobées afin de conserver un accès permanent à la VM. Pour savoir comment restreindre l'accès root, consultez Bonnes pratiques pour contrôler l'accès à la connexion SSH.
Si vous ne parvenez pas à empêcher les utilisateurs de disposer de privilèges root sur les VM, la fonctionnalité de contrôle des accès basé sur les adresses IP de Managed Lustre peut limiter les privilèges des utilisateurs root lorsqu'ils accèdent aux instances Managed Lustre. Toutefois, ces vérifications d'accès sont effectuées au mieux et cette fonctionnalité n'est pas censée être une garantie de sécurité. Vous devez vous appuyer sur les règles de pare-feu VPC comme périmètre de sécurité principal et vous assurer que seules les VM clientes fiables utilisant des images de VM fiables ont un accès réseau à vos instances Managed Lustre. Pour en savoir plus, consultez les bonnes pratiques de sécurité de Google Cloud.
Désactiver le transfert IP
La configuration Compute Engine par défaut permet aux instances d'activer le transfert IP. Pour empêcher les utilisateurs de contourner les règles de squash de racine en se faisant passer pour une autre adresse IP source, vous devez désactiver le transfert d'adresse IP à l'aide de la règle d'administration constraints/compute.vmCanIpForward. Pour obtenir des instructions, consultez Créer et gérer des règles d'administration.
Configurer la compression racine par défaut
Pour appliquer root squash à tous les clients qui se connectent à l'instance, spécifiez un UID et un GID de squash par défaut, et définissez le mode de squash sur ROOT_SQUASH. Une valeur couramment utilisée pour l'UID et le GID est 65534, qui correspond à l'utilisateur nobody.
Notez que, par défaut, un utilisateur nobody est limité à l'accès en lecture et à l'exécution uniquement.
Seuls les utilisateurs racine et les membres du groupe Owner ont un accès en écriture au système de fichiers.
Créer une instance
Pour créer une instance avec l'écrasement de la racine par défaut :
gcloud
Utilisez les indicateurs --default-squash-mode, --default-squash-uid et --default-squash-gid pour définir les valeurs par défaut :
gcloud lustre instances create INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--network=NETWORK_NAME \
--per-unit-storage-throughput=PER_UNIT_STORAGE_THROUGHPUT \
--capacity-gib=CAPACITY \
--filesystem=FS_NAME \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID
Où :
--default-squash-modeestROOT_SQUASH.--default-squash-uidet--default-squash-gidspécifient les ID par défaut vers lesquels convertir les utilisateurs racine.
Pour obtenir la liste complète et la description des champs disponibles lors de la création d'une instance, consultez la documentation de référence sur gcloud lustre instances create.
REST
Pour créer une instance à l'aide de l'API REST, envoyez une requête au point de terminaison suivant et incluez un objet accessRulesOptions :
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances?instanceId=INSTANCE_NAME
Authorization: Bearer AUTH_TOKEN
{
"filesystem": "FS_NAME",
"perUnitStorageThroughput": "PER_UNIT_STORAGE_THROUGHPUT",
"capacityGib": "CAPACITY_GIB",
"network": "NETWORK",
"accessRulesOptions": {
"defaultSquashMode": "SQUASH_MODE",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
Où :
defaultSquashModeestROOT_SQUASH.defaultSquashUidetdefaultSquashGidsont les valeurs d'ID utilisateur et de groupe auxquelles convertir les utilisateurs racine.
Pour savoir comment créer une instance à l'aide de l'API REST, consultez la documentation de référence sur l'API projects.locations.instances.create.
Console Google Cloud
Vous ne pouvez pas configurer la suppression de l'utilisateur racine à l'aide de la console Google Cloud .
Mettre à jour l'instance
Pour mettre à jour une instance existante afin qu'elle utilise la compression root par défaut :
gcloud
Utilisez les indicateurs --default-squash-mode, --default-squash-uid et --default-squash-gid pour définir les valeurs par défaut :
gcloud lustre instances update INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID
Où :
--default-squash-modeestROOT_SQUASH.--default-squash-uidet--default-squash-gidspécifient les ID par défaut auxquels les utilisateurs racine doivent être associés.
REST
Pour mettre à jour une instance à l'aide de l'API REST, envoyez une requête PATCH à son point de terminaison spécifique. Vous devez spécifier accessRulesOptions dans updateMask :
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN
{
"accessRulesOptions": {
"defaultSquashMode": "ROOT_SQUASH",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
Où :
defaultSquashModeestROOT_SQUASH.defaultSquashUidetdefaultSquashGidsont les valeurs d'ID utilisateur et de groupe auxquelles convertir les utilisateurs racine.
Pour en savoir plus sur la mise à jour d'une instance, consultez Gérer les instances.
Console Google Cloud
Vous ne pouvez pas configurer la suppression de l'utilisateur racine à l'aide de la console Google Cloud .
Configurer root squash avec des exceptions
Pour appliquer root squash à tous les clients, à l'exception d'un ensemble spécifique de clients de confiance, spécifiez une règle d'accès. Cette règle spécifie l'UID et le GID par défaut pour écraser les utilisateurs racine, ainsi qu'une règle qui exempte certains clients d'être écrasés en fonction de leur adresse IP ou de leurs plages d'adresses.
Une valeur couramment utilisée pour l'UID et le GID de compression est 65534, qui correspond à l'utilisateur nobody.
Notez que l'utilisateur nobody n'a pas accès en écriture au système de fichiers. Seuls les utilisateurs racine et les membres du groupe Owner disposent d'un accès en lecture, en écriture et en exécution.
Les autres utilisateurs sont limités à un accès en lecture et en exécution uniquement.
Créer une instance
gcloud
Pour créer une instance, procédez comme suit :
gcloud lustre instances create INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--network=NETWORK_NAME \
--per-unit-storage-throughput=PER_UNIT_STORAGE_THROUGHPUT \
--capacity-gib=CAPACITY \
--filesystem=FS_NAME \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID \
--access-rules=name="ACCESS_RULE_NAME",ipAddressRanges="IP_ADDRESS_OR_CIDR_RANGE",squashMode=NO_SQUASH
Où :
--default-squash-modeestROOT_SQUASH.--default-squash-uidet--default-squash-gidspécifient les ID par défaut auxquels les utilisateurs racine doivent être associés.--access-rulesspécifie les exceptions à la compression root. Les valeurs suivantes doivent être spécifiées :nameest le nom de cette règle d'accès.ipAddressRangesest une liste d'une ou de plusieurs adresses IP ou plages CIDR qui ne se chevauchent pas, séparées par une virgule. Les plages sont spécifiées au format suivant :192.168.0.0/24.squashModedoit êtreNO_SQUASH.
Pour obtenir la liste complète et la description des champs disponibles, consultez Créer une instance Managed Lustre.
REST
Pour créer une instance à l'aide de l'API REST, envoyez une requête au point de terminaison suivant et incluez un objet accessRulesOptions :
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances?instanceId=INSTANCE_NAME
Authorization: Bearer AUTH_TOKEN
{
"filesystem": "FS_NAME",
"perUnitStorageThroughput": "PER_UNIT_STORAGE_THROUGHPUT",
"capacityGib": "CAPACITY_GIB",
"network": "NETWORK",
"accessRulesOptions": {
"accessRules": [
{
"name": "ACCESS_RULE_NAME",
"ipAddressRanges": [
"IP_ADDRESS_OR_CIDR_RANGE_1",
"IP_ADDRESS_OR_CIDR_RANGE_2"
],
"squashMode": "NO_SQUASH"
}
],
"defaultSquashMode": "SQUASH_MODE",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
Lorsque vous définissez une règle d'accès spécifique, les champs suivants sont obligatoires :
nameest un nom défini par l'utilisateur pour cette règle. Il ne doit comporter que des caractères alphanumériques et des traits de soulignement (_), et ne doit pas dépasser 16 caractères.ipAddressRangesest une liste d'une ou de plusieurs adresses IP ou plages CIDR qui ne se chevauchent pas. Les plages sont spécifiées au format suivant :192.168.0.0/24.squashModeest toujoursNO_SQUASH.defaultSquashModeestROOT_SQUASH.defaultSquashUidetdefaultSquashGidsont les valeurs d'ID d'utilisateur et de groupe auxquelles convertir les utilisateurs racine qui ne correspondent à aucune règle d'accès spécifique.
Par exemple, pour définir un squash racine par défaut avec une exception pour les utilisateurs racine d'une plage d'adresses IP spécifique et d'une adresse IP particulière, l'objet accessRulesOptions se présente comme suit :
{
"accessRulesOptions": {
"accessRules": [
{
"name": "dont_squash",
"ipAddressRanges": [
"192.100.1.10",
"192.168.0.0/24"
],
"squashMode": "NO_SQUASH"
}
],
"defaultSquashMode": "ROOT_SQUASH",
"defaultSquashUid": 65534,
"defaultSquashGid": 65534
}
}
Pour savoir comment créer une instance à l'aide de l'API REST, consultez Créer une instance Lustre gérée.
Console Google Cloud
Vous ne pouvez pas configurer la suppression de l'utilisateur racine à l'aide de la console Google Cloud .
Mettre à jour une instance
gcloud
Pour mettre à jour une instance :
gcloud lustre instances update INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--default-squash-mode=ROOT_SQUASH \
--default-squash-uid=UID \
--default-squash-gid=GID \
--access-rules=name="ACCESS_RULE_NAME",ipAddressRanges="IP_ADDRESS_OR_CIDR_RANGE",squashMode=NO_SQUASH
Où :
--default-squash-modeestROOT_SQUASH.--default-squash-uidet--default-squash-gidspécifient les ID par défaut auxquels les utilisateurs racine doivent être associés.--access-rulesspécifie les exceptions à la compression root. Les valeurs suivantes doivent être spécifiées :nameest le nom de cette règle d'accès.ipAddressRangesest une liste d'une ou de plusieurs adresses IP ou plages CIDR qui ne se chevauchent pas, séparées par une virgule. Les plages sont spécifiées au format suivant :192.168.0.0/24.squashModedoit êtreNO_SQUASH.
Pour en savoir plus sur la mise à jour d'une instance, consultez Gérer les instances.
REST
Pour mettre à jour une instance à l'aide de l'API REST, envoyez une requête PATCH à son point de terminaison spécifique. Vous devez spécifier accessRulesOptions comme valeur de updateMask dans l'URL du point de terminaison :
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN
{
"accessRulesOptions": {
"accessRules": [
{
"name": "ACCESS_RULE_NAME",
"ipAddressRanges": [
"IP_ADDRESS_OR_CIDR_RANGE_1",
"IP_ADDRESS_OR_CIDR_RANGE_2"
],
"squashMode": "NO_SQUASH"
}
],
"defaultSquashMode": "SQUASH_MODE",
"defaultSquashUid": UID,
"defaultSquashGid": GID
}
}
Pour en savoir plus sur la mise à jour d'une instance, consultez Gérer les instances.
Console Google Cloud
Vous ne pouvez pas configurer la suppression de l'utilisateur racine à l'aide de la console Google Cloud .
Supprimer la compression root d'une instance
Pour supprimer tous les paramètres root squash d'une instance, mettez à jour l'instance afin d'effacer les règles d'accès et de définir le mode par défaut sur NO_SQUASH.
gcloud
gcloud lustre instances update INSTANCE_NAME \
--project=PROJECT_ID \
--location=LOCATION \
--default-squash-mode=NO_SQUASH \
--clear-access-rules \
--default-squash-uid=0 --default-squash-gid=0
REST
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/instances/INSTANCE_NAME?updateMask=accessRulesOptions
Authorization: Bearer AUTH_TOKEN
{
"accessRulesOptions": {
"defaultSquashMode": "NO_SQUASH"
}
}
Console Google Cloud
Vous ne pouvez pas configurer la suppression de l'utilisateur racine à l'aide de la console Google Cloud .