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 à suivre pour ajouter un utilisateur à un serveur SFTP :

  1. Configurez les autorisations pour 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 de 10 clés publiques au maximum.

Avant de commencer

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

  2. Récupérez 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

    De quel format de clé avez-vous besoin ?

    Le format de clé dont vous avez besoin dépend du client que vous utilisez pour vous connecter au serveur SFTP. Pour en savoir plus, consultez Clients SFTP compatibles.

    Format PEM

    1. Pour créer une paire de clés OpenSSH (format PEM), 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 le nom de la paire de clés, par exemple sftp_user_key.

    2. Extrayez la clé publique :

      cat ~/.ssh/KEY_PAIR_NAME.pub

    Format PPK

    1. Pour créer une paire de clés PuTTY (format PPK), utilisez l'outil PuTTYgen.

      Sur la machine cliente qui se connectera au serveur SFTP, exécutez la commande suivante :

      puttygen -t rsa -b 4096 -o KEY_PAIR_NAME.ppk

      Remplacez KEY_PAIR_NAME par le nom de la paire de clés, par exemple sftp_user_key.

    2. Extrayez la clé publique :

      puttygen -L KEY_PAIR_NAME.ppk

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'autorisation ftp.users.create, 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. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :

    gcloud init

    Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  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. La longueur ne doit pas dépasser 32 caractères.

    Si l'opération réussit, 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.iam.gserviceaccount.com \
          --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 (et non une application), cette valeur correspond à l'adresse e-mail que vous utilisez pour accéder à Google Cloud.

      Si l'opération réussit, un message semblable à celui-ci s'affiche :

      Updated IAM policy for serviceAccount [example-userid-sa@example-project.iam.gserviceaccount.com].
      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 des objets de l'espace de stockage (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.iam.gserviceaccount.com" \
        --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 en savoir plus, 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.iam.gserviceaccount.com \
          --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 les autorisations configurées pour un utilisateur, vous créez l'utilisateur 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 commande gcloud alpha storage ftp users create.

    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.iam.gserviceaccount.com.
    • LOCATION_ID : emplacement du serveur, par exemple 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 du 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 logique au répertoire de destination 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, indiquez le flag --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 fichier credentials.json.

    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
    La création de l'utilisateur prend quelques secondes.

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

    • Nom d'utilisateur SFTP de l'utilisateur.

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

      • Adresse IP du serveur externe.

      • Pour un serveur interne, l'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 méthode servers.users.create.

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

    • PROJECT_ID : ID Google Cloud du projet du serveur.
    • LOCATION_ID : emplacement du serveur, par exemple 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 du 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.
    • DIRECTORY : chemin d'accès logique au répertoire de destination 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.iam.gserviceaccount.com.
    • 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 liste storageDirectoryMappings.
    • Pour configurer plusieurs clés publiques pour un utilisateur, fournissez plusieurs identifiants dans la liste userCredentials.

    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 aura besoin pour se connecter au serveur :

    • Nom d'utilisateur SFTP de l'utilisateur.

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

      • Adresse IP du serveur externe.

      • Pour un serveur interne, l'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.

Étapes suivantes