Controle de acesso baseado em IP

O Managed Lustre oferece controle de acesso baseado em IP com o recurso "root squash".

O root squash é um recurso de segurança que impede que um usuário raiz em uma VM de cliente tenha privilégios de raiz em um sistema de arquivos Lustre gerenciado. Quando um usuário root acessa o sistema de arquivos Lustre gerenciado, os privilégios dele são "reduzidos" aos de um usuário com menos privilégios.

É possível configurar o root squash para uma instância nova ou atual do Managed Lustre. É possível aplicar uma configuração padrão de compactação de raiz a todos os clientes ou especificar regras personalizadas para alguns deles.

Por padrão, o root squash não é configurado em uma instância gerenciada do Lustre.

Limitações e recomendações de segurança

Restringir o acesso root em VMs de cliente

O melhor mecanismo para restringir o acesso root é impedir que os usuários sejam root desde o início. Conceder privilégios de raiz aos usuários em uma VM pode expor você a riscos de persistência: os usuários podem abusar desses privilégios para criar novas contas de usuário ou instalar backdoors para manter o acesso persistente à VM. Consulte Práticas recomendadas para controlar o acesso de login SSH e saiba como restringir o acesso root.

Se não for possível impedir que os usuários tenham privilégios de raiz em VMs, o recurso de controle de acesso baseado em IP do Managed Lustre poderá restringir os privilégios de usuário raiz ao acessar instâncias do Managed Lustre. No entanto, essas verificações de acesso são feitas com o melhor esforço possível, e o recurso não foi criado para ser uma garantia de segurança. Use as regras de firewall da VPC como perímetro de segurança principal e garanta que apenas VMs cliente confiáveis que usam imagens de VM confiáveis tenham acesso à rede das suas instâncias do Managed Lustre. Consulte as práticas recomendadas de segurança do Google Cloud para mais informações.

Desativar o encaminhamento de IP

A configuração padrão do Compute Engine permite que as instâncias ativem o encaminhamento de IP. Para impedir que os usuários burlem as políticas de squash de raiz se passando por um endereço IP de origem diferente, desative o encaminhamento de IP usando a política da organização constraints/compute.vmCanIpForward. Consulte Como criar e gerenciar políticas da organização para instruções.

Configurar o squash de raiz padrão

Para aplicar o root squash a todos os clientes que se conectam à instância, especifique um UID e GID de squash padrão e defina o modo de squash como ROOT_SQUASH. Um valor usado com frequência para UID e GID é 65534, que se traduz no usuário nobody.

Por padrão, um usuário do nobody tem acesso limitado apenas para leitura e execução. Somente usuários root e membros do grupo Owner têm acesso de gravação ao sistema de arquivos.

Criar instância

Para criar uma instância com o squash de raiz padrão:

gcloud

Use as flags --default-squash-mode, --default-squash-uid e --default-squash-gid para definir os valores padrão:

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

Em que:

  • --default-squash-mode é ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid especificam os IDs padrão para conversão de usuários root.

Para conferir uma lista completa e uma descrição dos campos disponíveis ao criar uma instância, consulte a referência gcloud lustre instances create.

REST

Para criar uma instância usando a API REST, envie uma solicitação para o seguinte endpoint e inclua um objeto 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
  }
}

Em que:

  • defaultSquashMode é ROOT_SQUASH.
  • defaultSquashUid e defaultSquashGid são os valores de ID do usuário e do grupo para os quais converter os usuários raiz.

Para detalhes sobre como criar uma instância usando a API REST, consulte a referência da API projects.locations.instances.create.

Console do Google Cloud

Não é possível configurar o root squash usando o console do Google Cloud .

Atualizar instância

Para atualizar uma instância e usar o squash de raiz padrão:

gcloud

Use as flags --default-squash-mode, --default-squash-uid e --default-squash-gid para definir os valores padrão:

gcloud lustre instances update INSTANCE_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --default-squash-mode=ROOT_SQUASH \
  --default-squash-uid=UID \
  --default-squash-gid=GID

Em que:

  • --default-squash-mode é ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid especificam os IDs padrão para os quais os usuários raiz serão compactados.

REST

Para atualizar uma instância usando a API REST, envie uma solicitação PATCH ao endpoint específico dela. É necessário especificar accessRulesOptions no 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
  }
}

Em que:

  • defaultSquashMode é ROOT_SQUASH.
  • defaultSquashUid e defaultSquashGid são os valores de ID do usuário e do grupo para os quais converter os usuários raiz.

Para mais informações sobre como atualizar uma instância, consulte Gerenciar instâncias.

Console do Google Cloud

Não é possível configurar o root squash usando o console do Google Cloud .

Configurar o squash de raiz com exceções

Para aplicar o root squash a todos os clientes, exceto um conjunto específico de clientes confiáveis, especifique uma regra de acesso. Essa regra especifica o UID e o GID padrão para compactar usuários root, além de uma regra que isenta determinados clientes de serem compactados com base no endereço IP ou nos intervalos de endereços.

Um valor usado com frequência para o UID e o GID de squash é 65534, que se traduz no usuário nobody. O usuário nobody não tem acesso de gravação ao sistema de arquivos. Somente usuários root e membros do grupo Owner têm acesso de leitura, gravação e execução. Outros usuários só têm acesso de leitura e execução.

Criar uma instância

gcloud

Para criar uma instância:

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

Em que:

  • --default-squash-mode é ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid especificam os IDs padrão para os quais os usuários raiz serão compactados.
  • --access-rules especifica as exceções ao squash de raiz. Os seguintes valores precisam ser especificados:
    • name é o nome dessa regra de acesso.
    • ipAddressRanges é uma lista separada por vírgulas de um ou mais endereços IP ou intervalos CIDR que não se sobrepõem. Os intervalos são especificados no seguinte formato: 192.168.0.0/24.
    • squashMode precisa ser NO_SQUASH.

Para uma lista completa e descrição dos campos disponíveis, consulte Criar uma instância do Managed Lustre.

REST

Para criar uma instância usando a API REST, envie uma solicitação para o seguinte endpoint e inclua um objeto 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
  }
}

Ao definir uma regra de acesso específica, os seguintes campos são obrigatórios:

  • name é um nome definido pelo usuário para essa regra. Ele precisa usar apenas caracteres alfanuméricos e sublinhados (_) e ter no máximo 16 caracteres.

  • ipAddressRanges é uma lista de um ou mais endereços IP ou intervalos CIDR que não se sobrepõem. Os intervalos são especificados no seguinte formato: 192.168.0.0/24.

  • squashMode é sempre NO_SQUASH.

  • defaultSquashMode é ROOT_SQUASH.

  • defaultSquashUid e defaultSquashGid são os valores de ID do usuário e do grupo para converter usuários raiz que não correspondem a nenhuma regra de acesso específica.

Por exemplo, para definir um root squash padrão com uma exceção para usuários raiz de um intervalo específico de endereços IP e um endereço IP específico, o objeto accessRulesOptions tem esta aparência:

{
  "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
  }
}

Para detalhes sobre como criar uma instância usando a API REST, consulte Criar uma instância gerenciada do Lustre.

Console do Google Cloud

Não é possível configurar o root squash usando o console do Google Cloud .

Atualizar uma instância

gcloud

Para atualizar uma instância:

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

Em que:

  • --default-squash-mode é ROOT_SQUASH.
  • --default-squash-uid e --default-squash-gid especificam os IDs padrão para os quais os usuários raiz serão compactados.
  • --access-rules especifica as exceções ao squash de raiz. Os seguintes valores precisam ser especificados:
    • name é o nome dessa regra de acesso.
    • ipAddressRanges é uma lista separada por vírgulas de um ou mais endereços IP ou intervalos CIDR que não se sobrepõem. Os intervalos são especificados no seguinte formato: 192.168.0.0/24.
    • squashMode precisa ser NO_SQUASH.

Para mais informações sobre como atualizar uma instância, consulte Gerenciar instâncias.

REST

Para atualizar uma instância usando a API REST, envie uma solicitação PATCH ao endpoint específico dela. Especifique accessRulesOptions como o valor de updateMask no URL do endpoint:

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
  }
}

Para mais informações sobre como atualizar uma instância, consulte Gerenciar instâncias.

Console do Google Cloud

Não é possível configurar o root squash usando o console do Google Cloud .

Remover o root squash de uma instância

Para remover todas as configurações de root squash de uma instância, atualize a instância para limpar as regras de acesso e definir o modo padrão como 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 do Google Cloud

Não é possível configurar o root squash usando o console do Google Cloud .