Managed Lustre fournit un contrôle des accès basé sur les adresses IP grâce à la fonctionnalité root squash.
Root squash est une fonctionnalité de sécurité qui empêche un utilisateur racine d'une VM cliente de disposer de privilèges root 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 "réduits" à ceux d'un utilisateur moins privilégié.
Root squash peut être configuré pour une instance Managed Lustre nouvelle ou 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, root squash n'est pas configuré sur une instance Managed Lustre.
Limites et recommandations de sécurité
Limiter l'accès root sur les VM clientes
Le meilleur mécanisme pour limiter l'accès root consiste à empêcher les utilisateurs d'être root. 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 limiter l'accès root, consultez Bonnes pratiques pour contrôler l'accès à la connexion SSH.
Si vous ne pouvez pas empêcher les utilisateurs de disposer de privilèges root sur les VM, la fonctionnalité de contrôle des accès basée sur les adresses IP de Managed Lustre peut limiter les privilèges des utilisateurs root lors de l'accès aux instances Managed Lustre. Toutefois, ces vérifications d'accès sont effectuées au mieux et cette fonctionnalité n'est pas destinée à garantir la 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 approuvées utilisant des images de VM approuvées ont un accès réseau à vos instances Managed Lustre. Pour en savoir plus, consultez Bonnes pratiques de sécurité Google Cloud.
Désactiver le transfert IP
La configuration par défaut de Compute Engine permet aux instances d'activer le transfert IP. Pour empêcher les utilisateurs de contourner les règles root squash en se faisant passer pour une autre adresse IP source, vous devez désactiver le transfert 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 root squash par défaut
Pour appliquer root squash à tous les clients qui se connectent à l'instance, spécifiez un UID et un GID squash par défaut, et définissez le mode squash sur ROOT_SQUASH. 65534 est une valeur couramment utilisée pour l'UID et le GID, qui correspond à l'utilisateur nobody.
Notez que, par défaut, un utilisateur nobody est limité à l'accès en lecture et en exécution uniquement.
Seuls les utilisateurs root et les membres du groupe Owner disposent d'un accès en écriture au système de fichiers.
Créer une instance
Pour créer une instance avec root squash par défaut :
gcloud
Utilisez les options --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 root.
Pour obtenir la liste complète des champs disponibles et leur description lors de la création d'une instance,
consultez la documentation de référence 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 vers lesquelles convertir les utilisateurs root.
Pour en savoir plus sur la création d'une instance à l'aide de l'API REST, consultez la
projects.locations.instances.create documentation de référence sur l'API.
Google Cloud Console
Il n'est pas possible de configurer root squash à l'aide de la Google Cloud console.
Mettre à jour l'instance
Pour mettre à jour une instance existante afin d'utiliser root squash par défaut :
gcloud
Utilisez les options --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 vers lesquels réduire les utilisateurs root.
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 vers lesquelles convertir les utilisateurs root.
Pour en savoir plus sur la mise à jour d'une instance, consultez Gérer les instances.
Google Cloud Console
Il n'est pas possible de configurer root squash à l'aide de la Google Cloud console.
Configurer root squash avec des exceptions
Pour appliquer root squash à tous les clients, à l'exception d'un ensemble spécifique de clients approuvés, spécifiez une règle d'accès. Cette règle spécifie l'UID et le GID par défaut vers lesquels réduire les utilisateurs root, ainsi qu'une règle qui exempte certains clients de la réduction en fonction de leur adresse IP ou de leurs plages d'adresses.
65534 est une valeur couramment utilisée pour l'UID et le GID squash, qui correspond à l'utilisateur nobody.
Notez que l'utilisateur nobody ne dispose pas d'un accès en écriture au système de fichiers. Seuls les utilisateurs root 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 à l'accès en lecture et en exécution uniquement.
Créer une instance
gcloud
Pour créer une instance :
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 vers lesquels réduire les utilisateurs root.--access-rulesspécifie les exceptions à root squash. 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 séparées par une virgule qui ne se chevauchent pas. Les plages sont spécifiées au format suivant :192.168.0.0/24.squashModedoit êtreNO_SQUASH.
Pour obtenir la liste complète des champs disponibles et leur description, 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 contenir que des caractères alphanumériques et des traits de soulignement (_), et ne 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 utilisateur et de groupe vers lesquelles convertir les utilisateurs root qui ne correspondent à aucune règle d'accès spécifique.
Par exemple, pour définir un root squash par défaut avec une exception pour les utilisateurs root 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 en savoir plus sur la création d'une instance à l'aide de l'API REST, consultez Créer une instance Managed Lustre.
Google Cloud Console
Il n'est pas possible de configurer root squash à l'aide de la Google Cloud console.
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 vers lesquels réduire les utilisateurs root.--access-rulesspécifie les exceptions à root squash. 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 séparées par une virgule qui ne se chevauchent pas. 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.
Google Cloud Console
Il n'est pas possible de configurer root squash à l'aide de la Google Cloud console.
Supprimer root squash 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 définissez 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"
}
}
Google Cloud Console
Il n'est pas possible de configurer root squash à l'aide de la Google Cloud console.