Ajouter des utilisateurs à un serveur SFTP

Ce document explique comment ajouter des utilisateurs à un serveur Cloud FTP. Les utilisateurs, tels que les partenaires externes et les parties prenantes internes, peuvent utiliser le serveur pour transférer des fichiers de manière sécurisée vers et depuis Cloud Storage.

Voici les étapes générales à suivre pour ajouter un utilisateur à un serveur SFTP :

  1. Configurez les autorisations de l'utilisateur.
  2. Créez un utilisateur SFTP et mappez ses répertoires à des buckets Cloud Storage.

Pour savoir comment créer un serveur, consultez Créer un serveur SFTP externe et Créer un serveur SFTP interne.

Remarques

  • Vous pouvez accorder à un utilisateur l'accès à un maximum de 10 buckets.

  • Un utilisateur peut disposer d'un maximum de 10 clés publiques.

Avant de commencer

  1. Créez un ou plusieurs buckets Cloud Storage pour stocker les données avec lesquelles l'utilisateur travaillera, si les buckets n'existent pas déjà exist.

  2. Obtenez la clé publique de l'utilisateur à partir de chaque paire de clés SSH qu'il utilisera pour se connecter au serveur.

    Si l'utilisateur ne dispose pas d'une paire de clés SSH, procédez comme suit pour en générer une.

    Générer une paire de clés SSH

    Pour générer une paire de clés SSH, utilisez l'utilitaire ssh-keygen. Sur la machine cliente qui se connectera au serveur SFTP, exécutez la commande suivante :

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/KEY_PAIR_NAME

    Remplacez KEY_PAIR_NAME par un nom pour la paire de clés, tel que sftp_user_key.

    La clé publique est enregistrée dans le fichier ~/.ssh/KEY_PAIR_NAME.pub.

Rôles requis

Pour obtenir l'autorisation nécessaire pour ajouter des utilisateurs SFTP, demandez à votre administrateur de vous accorder le rôle IAM Administrateur FTP (roles/ftp.admin) sur votre projet. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient l' ftp.users.create autorisation, qui est requise pour ajouter des utilisateurs SFTP.

Vous pouvez également obtenir cette autorisation avec des rôles personnalisés ou d'autres rôles prédéfinis.

Configurer les autorisations d'un utilisateur

  1. Installez la Google Cloud CLI, puis connectez-vous à la gcloud CLI avec votre identité fédérée. Après vous être connecté, initialisez la Google Cloud CLI en exécutant la commande suivante :

    gcloud init
  2. Définissez le projet :

    gcloud config set project PROJECT_ID

    Remplacez PROJECT_ID par l'ID du projet contenant le serveur SFTP.

  3. Créez un compte de service pour l'utilisateur, s'il n'en existe pas déjà un. Le compte de service accède aux ressources Cloud Storage au nom de l'utilisateur.

    gcloud iam service-accounts create USERNAME-sa \
        --description="USERNAME SFTP Service Account" \
        --display-name="USERNAME SFTP Service Account"

    Remplacez USERNAME par un nom d'utilisateur unique pour l'utilisateur SFTP. Le nom d'utilisateur doit commencer par une lettre minuscule et peut inclure des lettres minuscules, des chiffres ou des traits d'union.

    En cas de réussite, un message semblable à Created service account [example-userid-sa] s'affiche.

  4. Attribuez des rôles IAM à l'administrateur qui crée l'utilisateur SFTP :

    1. Attribuez-vous le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) :

      gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID. \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/iam.serviceAccountUser"

      Remplacez ADMINISTRATOR_EMAIL par l'adresse e-mail du principal qui crée l'utilisateur SFTP. Si vous créez l'utilisateur (par opposition à une application), cette valeur correspond à l'adresse e-mail que vous utilisez pour accéder à Google Cloud.

      En cas de réussite, un message semblable à celui-ci s'affiche :

      Updated IAM policy for serviceAccount [example-userid-sa@example-project.].
      bindings:
      - members:
      - user:admin@example.com
      role: roles/iam.serviceAccountUser
      etag: BwZJk7OiSzw=
      version: 1
      
    2. Attribuez-vous le rôle Lecteur de buckets Storage (roles/storage.bucketViewer) sur le bucket :

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.bucketViewer"

      Remplacez BUCKET_NAME par le nom du bucket.

      Répétez cette étape pour chaque bucket auquel l'utilisateur doit accéder.

    3. Attribuez-vous le rôle Lecteur d'objets Storage (roles/storage.objectViewer) sur le bucket :

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.objectViewer"

      Répétez cette étape pour chaque bucket auquel l'utilisateur doit accéder.

  5. Attribuez au compte de service de l'utilisateur le rôle IAM nécessaire pour accéder au bucket :

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member="serviceAccount:USERNAME-sa@PROJECT_ID." \
        --role="ROLE"

    Remplacez ROLE par l'un des rôles IAM suivants :

    • Pour un accès en lecture seule, utilisez le rôle roles/storage.objectViewer.
    • Pour un accès en lecture et en écriture, utilisez le rôle roles/storage.objectAdmin.

    Répétez cette étape pour chaque bucket auquel l'utilisateur doit accéder.

  6. Autorisez l'agent de service Cloud FTP à générer des jetons pour le compte de service de l'utilisateur :

    1. Obtenez l'adresse e-mail de l'agent de service du serveur. Pour savoir comment procéder, consultez Obtenir des informations sur un serveur.

    2. Autorisez l'agent de service Cloud FTP :

      gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID. \
          --member="serviceAccount:SERVICE_AGENT_EMAIL" \
          --role="roles/iam.serviceAccountTokenCreator"

      Remplacez SERVICE_AGENT_EMAIL par l'adresse e-mail de l'agent de service.

Ensuite, créez un utilisateur.

Créer un utilisateur de serveur SFTP

Une fois que vous avez configuré les autorisations d'un utilisateur, créez-le et mappez ses répertoires à un ou plusieurs buckets Cloud Storage.

gcloud

  1. Pour créer un utilisateur pour un serveur SFTP, exécutez la gcloud alpha storage ftp users create commande.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • CREDENTIAL_NAME : nom unique permettant d'identifier les identifiants de l'utilisateur.
    • SSH_PUBLIC_KEY : corps de la clé publique SSH de l'utilisateur, au format OpenSSH. Exemple : ssh-rsa AAAAB3NzaC1ycRexample....
    • USERNAME : nom d'utilisateur SFTP.
    • SERVICE_ACCOUNT : compte de service de l'utilisateur. Exemple : username-sa@example-project..
    • LOCATION_ID : l'emplacement du serveur, tel que us-west1.
    • SERVER_ID : ID du serveur.
    • BUCKET_NAME : nom d'un bucket auquel l'utilisateur SFTP a accès, tel que example-bucket. Omettez gs://.
    • (Facultatif) BUCKET_PREFIX : chemin d'accès à un dossier dans le bucket à définir comme répertoire racine pour ce mappage de répertoire. Si vous omettez la propriété bucket_prefix, Cloud FTP utilise la racine du bucket.
    • DIRECTORY : chemin d'accès au répertoire de destination logique présenté à l'utilisateur SFTP. Exemple : /home/uploads.

      Si vous mappez plusieurs buckets ou dossiers, fournissez un chemin d'accès unique pour chaque mappage.

      Les répertoires logiques imbriqués ne sont pas acceptés. Si vous fournissez plusieurs mappages pour un répertoire, fournissez les répertoires dans une structure plate plutôt qu'imbriquée. Par exemple, utilisez /dir1 et /dir2 au lieu de /dir1 et /dir1/dir2.

    • SFTP_PERMISSION : niveau d'accès au répertoire. Pour un accès en lecture seule, définissez cette valeur sur READ_ONLY. Pour un accès en lecture et en écriture, définissez cette valeur sur READ_WRITE.

    Veuillez noter les points suivants :

    • Pour accorder à un utilisateur l'accès à plusieurs buckets, fournissez l'option --storage-directory-mapping plusieurs fois, avec un mappage de répertoire pour chaque bucket.
    • Pour configurer plusieurs clés publiques pour un utilisateur, fournissez plusieurs identifiants dans le credentials.json fichier.

    Enregistrez le code suivant dans un fichier nommé credentials.json :

    [
      {
        "credentialName": "CREDENTIAL_NAME",
        "credentialType": "PUBLIC_KEY",
        "sshPublicKeyBody": "SSH_PUBLIC_KEY"
      }
    ]

    Exécutez la commande suivante :

    Linux, macOS ou Cloud Shell

    gcloud alpha storage ftp users create USERNAME \
        --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID \
        --server=SERVER_ID \
        --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION \
        --user-credentials-from-file=credentials.json

    Windows (PowerShell)

    gcloud alpha storage ftp users create USERNAME `
        --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID `
        --server=SERVER_ID `
        --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION `
        --user-credentials-from-file=credentials.json

    Windows (cmd.exe)

    gcloud alpha storage ftp users create USERNAME ^
        --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID ^
        --server=SERVER_ID ^
        --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION ^
        --user-credentials-from-file=credentials.json

  2. Fournissez à l'utilisateur les informations suivantes, dont il a besoin pour se connecter au serveur :

    • Nom d'utilisateur SFTP.

    • Configuration d'accès du serveur, qui dépend du type de serveur :

      • Pour un serveur externe, adresse IP du serveur.

      • Pour un serveur interne, URI du rattachement de service du serveur.

      Pour savoir comment obtenir la configuration d'accès du serveur, consultez Obtenir des informations sur un serveur.

    • (Facultatif) Empreinte numérique de la clé du serveur.

REST

  1. Pour créer un utilisateur pour un serveur SFTP, utilisez la servers.users.create méthode.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • PROJECT_ID : ID du Google Cloud projet du serveur.
    • LOCATION_ID : l'emplacement du serveur, tel que us-west1.
    • SERVER_ID : ID du serveur.
    • USERNAME : nom d'utilisateur SFTP.
    • BUCKET_NAME : nom d'un bucket auquel l'utilisateur SFTP a accès, tel que example-bucket. Omettez gs://.
    • (Facultatif) BUCKET_PREFIX : chemin d'accès à un dossier dans le bucket à définir comme répertoire racine pour ce mappage de répertoire. Si vous omettez cette valeur, Cloud FTP utilise la racine du bucket root.
    • DIRECTORY : chemin d'accès au répertoire de destination logique présenté à l'utilisateur SFTP. Exemple : /home/uploads. Si vous omettez cette valeur, Cloud FTP définit le répertoire de destination sur /.

      Si vous mappez plusieurs buckets ou dossiers, fournissez un chemin d'accès unique pour chaque mappage.

      Les répertoires logiques imbriqués ne sont pas acceptés. Si vous fournissez plusieurs mappages pour un répertoire, fournissez les répertoires dans une structure plate plutôt qu'imbriquée. Par exemple, utilisez /dir1 et /dir2 au lieu de /dir1 et /dir1/dir2.

    • SFTP_PERMISSION : niveau d'accès au répertoire. Pour un accès en lecture seule, définissez cette valeur sur READ_ONLY. Pour un accès en lecture et en écriture, définissez cette valeur sur READ_WRITE.
    • SERVICE_ACCOUNT : compte de service de l'utilisateur. Exemple : username-sa@example-project..
    • CREDENTIAL_NAME : nom unique permettant d'identifier les identifiants de l'utilisateur.
    • SSH_PUBLIC_KEY : corps de la clé publique SSH de l'utilisateur, au format OpenSSH. Exemple : ssh-rsa AAAAB3NzaC1ycRexample....

    Veuillez noter les points suivants :

    • Pour accorder à un utilisateur l'accès à plusieurs buckets, fournissez plusieurs mappages de buckets dans la storageDirectoryMappings liste.
    • Pour configurer plusieurs clés publiques pour un utilisateur, fournissez plusieurs identifiants dans la userCredentials liste.

    Méthode HTTP et URL :

    POST https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users?userId=USERNAME

    Corps JSON de la requête :

    {
      "storageDirectoryMappings": [
        {
          "bucket": "BUCKET_NAME",
          "bucketPrefix": "BUCKET_PREFIX",
          "directory": "DIRECTORY",
          "permission": "SFTP_PERMISSION"
        }
      ],
      "customerServiceAccount": "SERVICE_ACCOUNT",
      "userCredentials": [
        {
          "credentialName": "CREDENTIAL_NAME",
          "credentialType": "PUBLIC_KEY",
          "sshPublicKeyBody": "SSH_PUBLIC_KEY"
        }
      ]
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    La réponse identifie une opération de longue durée. La création de l'utilisateur prend quelques secondes.

  2. Fournissez à l'utilisateur les informations suivantes, dont il a besoin pour se connecter au serveur :

    • Nom d'utilisateur SFTP.

    • Configuration d'accès du serveur, qui dépend du type de serveur :

      • Pour un serveur externe, adresse IP du serveur.

      • Pour un serveur interne, URI du rattachement de service du serveur.

      Pour savoir comment obtenir la configuration d'accès du serveur, consultez Obtenir des informations sur un serveur.

    • (Facultatif) Empreinte numérique de la clé du serveur.

Étape suivante