Buckets für einen SFTP-Nutzer aktualisieren

In diesem Dokument wird beschrieben, wie Sie die Cloud Storage-Buckets für einen Cloud FTP-Nutzer aktualisieren. Dazu gehört auch, auf welche Buckets ein Nutzer zugreifen kann und welche Berechtigungen er hat.

Im Großen und Ganzen sind das die Schritte zum Aktualisieren der Buckets für einen Nutzer:

  1. Aktualisieren Sie die IAM-Rollen für das Dienstkonto des Nutzers.
  2. Ordnen Sie die Verzeichnisse des Nutzers den aktualisierten Buckets zu.

Hinweis

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „FTP-Administrator “ (roles/ftp.admin) für Ihr Projekt zu gewähren, um die Berechtigung zum Aktualisieren von SFTP-Nutzern zu erhalten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die ftp.users.update Berechtigung, die zum Aktualisieren von SFTP-Nutzern erforderlich ist.

Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

IAM-Rollen für das Dienstkonto eines Nutzers aktualisieren

Wenn Sie ändern, auf welche Buckets ein Nutzer zugreifen kann, oder wenn Sie die Berechtigung ändern, die ein Nutzer für eine vorhandene Verzeichniszuordnung hat, müssen Sie das Dienstkonto des Nutzers mit den entsprechenden IAM-Rollen aktualisieren. Gehen Sie so vor:

  1. Rufen Sie die E‑Mail-Adresse des Dienstkontos des Nutzers ab. Eine Anleitung finden Sie unter Details zu einem Nutzer abrufen.

  2. Wenn Sie der Verzeichniszuordnung neue Buckets hinzufügen oder den Zugriff auf vorhandene Buckets erhöhen, gehen Sie so vor:

    1. Weisen Sie sich selbst die Rolle „Storage-Bucket-Betrachter“ (roles/storage.bucketViewer) für den Bucket zu, falls Sie sie noch nicht haben:

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

      Ersetzen Sie Folgendes:

      • ADMINISTRATOR_EMAIL: die E‑Mail-Adresse des Hauptkontos, das den SFTP-Nutzer erstellt. Wenn Sie den Nutzer erstellen (im Gegensatz zu einer Anwendung), ist dieser Wert die E‑Mail Adresse, mit der Sie auf zugreifen Google Cloud.

      • BUCKET_NAME: der Name des Buckets.

    2. Weisen Sie sich selbst die Rolle „Storage-Objekt-Betrachter“ (roles/storage.objectViewer) für den Bucket zu, falls Sie sie noch nicht haben:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.objectViewer"
    3. Weisen Sie dem Dienstkonto des Nutzers die IAM-Rollen zu, die für den Zugriff auf die Buckets erforderlich sind:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member="serviceAccount:SERVICE_ACCOUNT" \
        --role="ROLE_TO_GRANT"

      Ersetzen Sie Folgendes:

      • SERVICE_ACCOUNT: die E‑Mail-Adresse des Dienstkontos des Nutzers.
      • ROLE_TO_GRANT: die zuzuweisende IAM-Rolle. Geben Sie eine der folgenden Rollen an:

        • Verwenden Sie für schreibgeschützten Zugriff die Rolle roles/storage.objectViewer.
        • Verwenden Sie für Lese- und Schreibzugriff die Rolle roles/storage.objectAdmin.
    4. Wiederholen Sie die vorherigen Schritte für jeden Bucket, auf den der Nutzer zugreifen muss.

  3. Wenn Sie Buckets aus der Verzeichniszuordnung entfernen oder den Zugriff auf vorhandene Buckets verringern, widerrufen Sie den Zugriff vom Dienstkonto des Nutzers:

    gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME \
      --member="serviceAccount:SERVICE_ACCOUNT" \
      --role="ROLE_TO_REVOKE"

    Ersetzen Sie ROLE_TO_REVOKE durch die IAM-Rolle, die Sie widerrufen möchten.

    Wiederholen Sie diesen Schritt für jeden Bucket und jede IAM-Rolle, auf die der Nutzer keinen Zugriff mehr haben soll.

Buckets eines Nutzers aktualisieren

gcloud

Führen Sie den gcloud alpha storage ftp users update Befehl aus, um die Buckets für einen SFTP-Nutzer zu aktualisieren.

Ersetzen Sie vor der Verwendung der folgenden Befehlsdaten Folgendes:

  • USERNAME: der Nutzername des SFTP-Nutzers.
  • LOCATION_ID: der Standort des Servers, z. B. us-west1.
  • SERVER_ID: die Server-ID.
  • BUCKET_NAME: der Name eines Buckets, auf den der SFTP-Nutzer Zugriff hat, z. B. example-bucket. Lassen Sie gs:// weg.
  • Optional: BUCKET_PREFIX: der Pfad eines Ordners im Bucket, der als Stammverzeichnis für diese Verzeichniszuordnung festgelegt werden soll. Wenn Sie die bucket_prefix Property weglassen, verwendet Cloud FTP das Bucket-Stammverzeichnis.
  • DIRECTORY: der logische Pfad des Zielverzeichnisses, der dem SFTP-Nutzer angezeigt wird. Beispiel: /home/uploads.

    Wenn Sie mehrere Buckets oder Ordner zuordnen, geben Sie für jede Zuordnung einen eindeutigen Verzeichnispfad an.

    Verschachtelte logische Verzeichnisse werden nicht unterstützt. Wenn Sie mehrere Zuordnungen für ein Verzeichnis angeben, geben Sie die Verzeichnisse in einer flachen Struktur an, nicht in einer verschachtelten Struktur. Verwenden Sie beispielsweise /dir1 und /dir2 anstelle von /dir1 und /dir1/dir2.

  • SFTP_PERMISSION: die Zugriffsebene für das Verzeichnis. Setzen Sie diesen Wert für schreibgeschützten Zugriff auf READ_ONLY. Setzen Sie diesen Wert für Lese- und Schreibzugriff auf READ_WRITE.

Wenn Sie einem Nutzer Zugriff auf mehrere Buckets gewähren möchten, geben Sie das --storage-directory-mapping Flag mehrmals an, mit einer Verzeichniszuordnung für jeden Bucket.

Führen Sie den folgenden Befehl aus:

Linux, macOS oder Cloud Shell

gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID \
    --server=SERVER_ID \
    --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION

Windows (PowerShell)

gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID `
    --server=SERVER_ID `
    --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION

Windows (cmd.exe)

gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID ^
    --server=SERVER_ID ^
    --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION
Es dauert einige Sekunden, bis der Nutzer aktualisiert wird.

Wenn ein Nutzer eine aktive SFTP-Verbindung hat, muss er möglicherweise die Verbindung trennen und dann wieder herstellen, damit die aktualisierten Bucket Einstellungen wirksam werden.

REST

Verwenden Sie die servers.users.patch Methode, um die Buckets für einen SFTP-Nutzer zu aktualisieren. Geben Sie im Suchparameter updateMask das Feld storageDirectoryMappings an.

Ersetzen Sie vor der Verwendung der Anfragedaten Folgendes:

  • PROJECT_ID: die Google Cloud Projekt-ID des Servers.
  • LOCATION_ID: der Standort des Servers, z. B. us-west1.
  • SERVER_ID: die Server-ID.
  • USERNAME: der Nutzername des SFTP-Nutzers.
  • BUCKET_NAME: der Name eines Buckets, auf den der SFTP-Nutzer Zugriff hat, z. B. example-bucket. Lassen Sie gs:// weg.
  • Optional: BUCKET_PREFIX: der Pfad eines Ordners im Bucket, der als Stammverzeichnis für diese Verzeichniszuordnung festgelegt werden soll. Wenn Sie diesen Wert weglassen, verwendet Cloud FTP das Bucket Stammverzeichnis.
  • DIRECTORY: der logische Pfad des Zielverzeichnisses, der dem SFTP-Nutzer angezeigt wird. Beispiel: /home/uploads. Wenn Sie diesen Wert weglassen, legt Cloud FTP das Zielverzeichnis auf / fest.

    Wenn Sie mehrere Buckets oder Ordner zuordnen, geben Sie für jede Zuordnung einen eindeutigen Verzeichnispfad an.

    Verschachtelte logische Verzeichnisse werden nicht unterstützt. Wenn Sie mehrere Zuordnungen für ein Verzeichnis angeben, geben Sie die Verzeichnisse in einer flachen Struktur an, nicht in einer verschachtelten Struktur. Verwenden Sie beispielsweise /dir1 und /dir2 anstelle von /dir1 und /dir1/dir2.

  • SFTP_PERMISSION: die Zugriffsebene für das Verzeichnis. Setzen Sie diesen Wert für schreibgeschützten Zugriff auf READ_ONLY. Setzen Sie diesen Wert für Lese- und Schreibzugriff auf READ_WRITE.

Wenn Sie einem Nutzer Zugriff auf mehrere Buckets gewähren möchten, geben Sie in der storageDirectoryMappings Liste mehrere Bucket-Zuordnungen an.

HTTP-Methode und URL:

PATCH https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users/USERNAME?updateMask=storageDirectoryMappings

JSON-Text der Anfrage:

{
  "storageDirectoryMappings": [
    {
      "bucket": "BUCKET_NAME",
      "bucketPrefix": "BUCKET_PREFIX",
      "directory": "DIRECTORY",
      "permission": "SFTP_PERMISSION"
    }
  ]
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Die Antwort gibt einen Vorgang mit langer Ausführungszeit an. Es dauert einige Sekunden, bis der Nutzer aktualisiert wird.

Wenn ein Nutzer eine aktive SFTP-Verbindung hat, muss er möglicherweise die Verbindung trennen und dann wieder herstellen, damit die aktualisierten Bucket Einstellungen wirksam werden.

Clientbibliotheken

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der Cloud FTP C# API Referenzdokumentation.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

using Google.Cloud.Ftp.V1;
using Google.LongRunning;
using Google.Protobuf.WellKnownTypes;
using System.Threading.Tasks;

public sealed partial class GeneratedCloudFtpClientSnippets
{
    /// <summary>Snippet for UpdateUserAsync</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public async Task UpdateUserAsync()
    {
        // Create client
        CloudFtpClient cloudFtpClient = await CloudFtpClient.CreateAsync();
        // Initialize request argument(s)
        User user = new User();
        FieldMask updateMask = new FieldMask();
        // Make the request
        Operation<User, OperationMetadata> response = await cloudFtpClient.UpdateUserAsync(user, updateMask);

        // Poll until the returned long-running operation is complete
        Operation<User, OperationMetadata> completedResponse = await response.PollUntilCompletedAsync();
        // Retrieve the operation result
        User result = completedResponse.Result;

        // Or get the name of the operation
        string operationName = response.Name;
        // This name can be stored, then the long-running operation retrieved later by name
        Operation<User, OperationMetadata> retrievedResponse = await cloudFtpClient.PollOnceUpdateUserAsync(operationName);
        // Check if the retrieved long-running operation has completed
        if (retrievedResponse.IsCompleted)
        {
            // If it has completed, then access the result
            User retrievedResult = retrievedResponse.Result;
        }
    }
}

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der Cloud FTP Go API Referenzdokumentation.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


//go:build examples

package main

import (
	"context"

	ftp "cloud.google.com/go/ftp/apiv1"
	ftppb "cloud.google.com/go/ftp/apiv1/ftppb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := ftp.NewCloudFtpRESTClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &ftppb.UpdateUserRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/ftp/apiv1/ftppb#UpdateUserRequest.
	}
	op, err := c.UpdateUser(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}

	resp, err := op.Wait(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der APIJava Referenzdokumentation zu Cloud FTP.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import com.google.api.core.ApiFuture;
import com.google.cloud.ftp.v1.CloudFtpClient;
import com.google.cloud.ftp.v1.UpdateUserRequest;
import com.google.cloud.ftp.v1.User;
import com.google.longrunning.Operation;
import com.google.protobuf.FieldMask;

public class AsyncUpdateUser {

  public static void main(String[] args) throws Exception {
    asyncUpdateUser();
  }

  public static void asyncUpdateUser() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (CloudFtpClient cloudFtpClient = CloudFtpClient.create()) {
      UpdateUserRequest request =
          UpdateUserRequest.newBuilder()
              .setUpdateMask(FieldMask.newBuilder().build())
              .setUser(User.newBuilder().build())
              .build();
      ApiFuture<Operation> future = cloudFtpClient.updateUserCallable().futureCall(request);
      // Do something.
      Operation response = future.get();
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der Cloud FTP Node.js API Referenzdokumentation.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Optional. Field mask is used to specify the fields to be overwritten in the
 *  User resource by the update.
 *  The fields specified in the update_mask are relative to the resource, not
 *  the full request. A field will be overwritten if it is in the mask. If the
 *  user does not provide a mask then all fields present in the request will be
 *  overwritten.
 */
// const updateMask = {}
/**
 *  Required. The resource being updated
 */
// const user = {}

// Imports the Ftp library
const {CloudFtpClient} = require('@google-cloud/ftp').v1;

// Instantiates a client
const ftpClient = new CloudFtpClient();

async function callUpdateUser() {
  // Construct request
  const request = {
    user,
  };

  // Run request
  const [operation] = await ftpClient.updateUser(request);
  const [response] = await operation.promise();
  console.log(response);
}

callUpdateUser();

PHP

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der Cloud FTP PHP API Referenzdokumentation.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

use Google\ApiCore\ApiException;
use Google\ApiCore\OperationResponse;
use Google\Cloud\Ftp\V1\Client\CloudFtpClient;
use Google\Cloud\Ftp\V1\StorageDirectoryMapping;
use Google\Cloud\Ftp\V1\StorageDirectoryMapping\Permission;
use Google\Cloud\Ftp\V1\UpdateUserRequest;
use Google\Cloud\Ftp\V1\User;
use Google\Cloud\Ftp\V1\UserCredential;
use Google\Cloud\Ftp\V1\UserCredential\Type;
use Google\Rpc\Status;

/**
 * Updates the parameters of a single User.
 *
 * @param string $userCustomerServiceAccount             Service account in customer project attached to this SFTP User.
 * @param string $userUserCredentialsCredentialName      Name of the user credential.
 * @param int    $userUserCredentialsCredentialType      Type of credential.
 * @param string $userStorageDirectoryMappingsBucket     Name of the bucket.
 * @param string $userStorageDirectoryMappingsDirectory  Directory where the user lands in the SFTP server.
 * @param int    $userStorageDirectoryMappingsPermission Permission to the bucket.
 */
function update_user_sample(
    string $userCustomerServiceAccount,
    string $userUserCredentialsCredentialName,
    int $userUserCredentialsCredentialType,
    string $userStorageDirectoryMappingsBucket,
    string $userStorageDirectoryMappingsDirectory,
    int $userStorageDirectoryMappingsPermission
): void {
    // Create a client.
    $cloudFtpClient = new CloudFtpClient();

    // Prepare the request message.
    $userCredential = (new UserCredential())
        ->setCredentialName($userUserCredentialsCredentialName)
        ->setCredentialType($userUserCredentialsCredentialType);
    $userUserCredentials = [$userCredential];
    $storageDirectoryMapping = (new StorageDirectoryMapping())
        ->setBucket($userStorageDirectoryMappingsBucket)
        ->setDirectory($userStorageDirectoryMappingsDirectory)
        ->setPermission($userStorageDirectoryMappingsPermission);
    $userStorageDirectoryMappings = [$storageDirectoryMapping];
    $user = (new User())
        ->setCustomerServiceAccount($userCustomerServiceAccount)
        ->setUserCredentials($userUserCredentials)
        ->setStorageDirectoryMappings($userStorageDirectoryMappings);
    $request = (new UpdateUserRequest())
        ->setUser($user);

    // Call the API and handle any network failures.
    try {
        /** @var OperationResponse $response */
        $response = $cloudFtpClient->updateUser($request);
        $response->pollUntilComplete();

        if ($response->operationSucceeded()) {
            /** @var User $result */
            $result = $response->getResult();
            printf('Operation successful with response data: %s' . PHP_EOL, $result->serializeToJsonString());
        } else {
            /** @var Status $error */
            $error = $response->getError();
            printf('Operation failed with error data: %s' . PHP_EOL, $error->serializeToJsonString());
        }
    } catch (ApiException $ex) {
        printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
    }
}

/**
 * Helper to execute the sample.
 *
 * This sample has been automatically generated and should be regarded as a code
 * template only. It will require modifications to work:
 *  - It may require correct/in-range values for request initialization.
 *  - It may require specifying regional endpoints when creating the service client,
 *    please see the apiEndpoint client configuration option for more details.
 */
function callSample(): void
{
    $userCustomerServiceAccount = '[CUSTOMER_SERVICE_ACCOUNT]';
    $userUserCredentialsCredentialName = '[CREDENTIAL_NAME]';
    $userUserCredentialsCredentialType = Type::TYPE_UNSPECIFIED;
    $userStorageDirectoryMappingsBucket = '[BUCKET]';
    $userStorageDirectoryMappingsDirectory = '[DIRECTORY]';
    $userStorageDirectoryMappingsPermission = Permission::PERMISSION_UNSPECIFIED;

    update_user_sample(
        $userCustomerServiceAccount,
        $userUserCredentialsCredentialName,
        $userUserCredentialsCredentialType,
        $userStorageDirectoryMappingsBucket,
        $userStorageDirectoryMappingsDirectory,
        $userStorageDirectoryMappingsPermission
    );
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud FTP Python.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import ftp_v1


def sample_update_user():
    # Create a client
    client = ftp_v1.CloudFtpClient()

    # Initialize request argument(s)
    user = ftp_v1.User()
    user.customer_service_account = "customer_service_account_value"
    user.user_credentials.credential_name = "credential_name_value"
    user.user_credentials.credential_type = "PUBLIC_KEY"
    user.storage_directory_mappings.bucket = "bucket_value"
    user.storage_directory_mappings.directory = "directory_value"
    user.storage_directory_mappings.permission = "READ_WRITE"

    request = ftp_v1.UpdateUserRequest(
        user=user,
    )

    # Make the request
    operation = client.update_user(request=request)

    print("Waiting for operation to complete...")

    response = operation.result()

    # Handle the response
    print(response)

Ruby

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud FTP finden Sie unter Cloud FTP-Clientbibliotheken. Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud FTPRuby.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud FTP zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

require "google/cloud/ftp/v1"

##
# Snippet for the update_user call in the CloudFtp service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::Ftp::V1::CloudFtp::Rest::Client#update_user.
#
def update_user
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::Ftp::V1::CloudFtp::Rest::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::Ftp::V1::UpdateUserRequest.new

  # Call the update_user method.
  result = client.update_user request

  # The returned object is of type Gapic::Operation. You can use it to
  # check the status of an operation, cancel it, or wait for results.
  # Here is how to wait for a response.
  result.wait_until_done! timeout: 60
  if result.response?
    p result.response
  else
    puts "No response received."
  end
end