获取 SFTP 用户信息

本文档介绍了如何获取有关 Cloud FTP 用户的信息。您可以列出服务器的所有用户。您还可以获取有关特定用户的详细信息,例如用户的 Cloud Storage 目录映射和权限。

所需的角色

如需获得获取有关 SFTP 用户的信息所需的权限,请让您的管理员向您授予项目的Cloud FTP Viewer (roles/ftp.viewer) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

此预定义角色可提供 获取有关 SFTP 用户的信息所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

获取有关 SFTP 用户的信息需要以下权限:

  • 列出用户: ftp.users.list
  • 获取用户详细信息: ftp.users.get

您也可以使用自定义角色或其他预定义角色来获取这些权限。

列出用户

gcloud

如需列出服务器的 SFTP 用户,请运行 gcloud alpha storage ftp users list 命令。

在使用以下任何命令数据之前, 请进行以下替换:

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud alpha storage ftp users list --location=LOCATION_ID --server=SERVER_ID

Windows (PowerShell)

gcloud alpha storage ftp users list --location=LOCATION_ID --server=SERVER_ID

Windows (cmd.exe)

gcloud alpha storage ftp users list --location=LOCATION_ID --server=SERVER_ID

REST

如需列出服务器的 SFTP 用户,请使用 servers.users.list 方法。

在使用任何请求数据之前, 请进行以下替换:

  • PROJECT_ID: Google Cloud 项目 ID。
  • LOCATION_ID:服务器的位置,例如 us-west1。
  • SERVER_ID:服务器 ID。

HTTP 方法和网址:

GET https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users

如需发送您的请求,请展开以下选项之一:

响应正文是一个 JSON 对象,其中包含 User 资源的列表。

客户端库

C#

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP C# API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

using Google.Api.Gax;
using Google.Cloud.Ftp.V1;
using System;
using System.Threading.Tasks;

public sealed partial class GeneratedCloudFtpClientSnippets
{
    /// <summary>Snippet for ListUsersAsync</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 ListUsersAsync()
    {
        // Create client
        CloudFtpClient cloudFtpClient = await CloudFtpClient.CreateAsync();
        // Initialize request argument(s)
        string parent = "projects/[PROJECT]/locations/[LOCATION]/servers/[SERVER]";
        // Make the request
        PagedAsyncEnumerable<ListUsersResponse, User> response = cloudFtpClient.ListUsersAsync(parent);

        // Iterate over all response items, lazily performing RPCs as required
        await foreach (User item in response)
        {
            // Do something with each item
            Console.WriteLine(item);
        }

        // Or iterate over pages (of server-defined size), performing one RPC per page
        await foreach (ListUsersResponse page in response.AsRawResponses())
        {
            // Do something with each page of items
            Console.WriteLine("A page of results:");
            foreach (User item in page)
            {
                // Do something with each item
                Console.WriteLine(item);
            }
        }

        // Or retrieve a single page of known size (unless it's the final page), performing as many RPCs as required
        int pageSize = 10;
        Page<User> singlePage = await response.ReadPageAsync(pageSize);
        // Do something with the page of items
        Console.WriteLine($"A page of {pageSize} results (unless it's the final page):");
        foreach (User item in singlePage)
        {
            // Do something with each item
            Console.WriteLine(item);
        }
        // Store the pageToken, for when the next page is required.
        string nextPageToken = singlePage.NextPageToken;
    }
}

Go

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Go API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。


//go:build examples

package main

import (
	"context"

	ftp "cloud.google.com/go/ftp/apiv1"
	ftppb "cloud.google.com/go/ftp/apiv1/ftppb"
	"google.golang.org/api/iterator"
)

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.ListUsersRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/ftp/apiv1/ftppb#ListUsersRequest.
	}
	it := c.ListUsers(ctx, req)
	for {
		resp, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			// TODO: Handle error.
		}
		// TODO: Use resp.
		_ = resp

		// If you need to access the underlying RPC response,
		// you can do so by casting the `Response` as below.
		// Otherwise, remove this line. Only populated after
		// first call to Next(). Not safe for concurrent access.
		_ = it.Response.(*ftppb.ListUsersResponse)
	}
}

Java

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Java API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

import com.google.api.core.ApiFuture;
import com.google.cloud.ftp.v1.CloudFtpClient;
import com.google.cloud.ftp.v1.ListUsersRequest;
import com.google.cloud.ftp.v1.ServerName;
import com.google.cloud.ftp.v1.User;
import com.google.cloud.ftp.v1.UserView;

public class AsyncListUsers {

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

  public static void asyncListUsers() 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()) {
      ListUsersRequest request =
          ListUsersRequest.newBuilder()
              .setParent(ServerName.of("[PROJECT]", "[LOCATION]", "[SERVER]").toString())
              .setPageSize(883849137)
              .setPageToken("pageToken873572522")
              .setFilter("filter-1274492040")
              .setOrderBy("orderBy-1207110587")
              .setView(UserView.forNumber(0))
              .build();
      ApiFuture<User> future = cloudFtpClient.listUsersPagedCallable().futureCall(request);
      // Do something.
      for (User element : future.get().iterateAll()) {
        // doThingsWith(element);
      }
    }
  }
}

Node.js

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Node.js API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

/**
 * 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.
 */
/**
 *  Required. Parent value for ListUsersRequest
 */
// const parent = 'abc123'
/**
 *  Optional. Requested page size. User may return fewer items than requested.
 *  The maximum value is 1000; The default value is 50 if the field is omitted
 *  (or set to 0).
 */
// const pageSize = 1234
/**
 *  Optional. A token identifying a page of results the user should return.
 */
// const pageToken = 'abc123'
/**
 *  Optional. Filtering results
 */
// const filter = 'abc123'
/**
 *  Optional. Hint for how to order the results
 */
// const orderBy = 'abc123'
/**
 *  Optional. The view of the User resource to return.
 */
// const view = {}

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

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

async function callListUsers() {
  // Construct request
  const request = {
    parent,
  };

  // Run request
  const iterable = ftpClient.listUsersAsync(request);
  for await (const response of iterable) {
      console.log(response);
  }
}

callListUsers();

PHP

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP PHP API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

use Google\ApiCore\ApiException;
use Google\ApiCore\PagedListResponse;
use Google\Cloud\Ftp\V1\Client\CloudFtpClient;
use Google\Cloud\Ftp\V1\ListUsersRequest;

/**
 * Lists Users in a given project and location.
 *
 * @param string $formattedParent Parent value for ListUsersRequest
 *                                Please see {@see CloudFtpClient::serverName()} for help formatting this field.
 */
function list_users_sample(string $formattedParent): void
{
    // Create a client.
    $cloudFtpClient = new CloudFtpClient();

    // Prepare the request message.
    $request = (new ListUsersRequest())
        ->setParent($formattedParent);

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

        foreach ($response as $element) {
            printf('Element data: %s' . PHP_EOL, $element->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
{
    $formattedParent = CloudFtpClient::serverName('[PROJECT]', '[LOCATION]', '[SERVER]');

    list_users_sample($formattedParent);
}

Python

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Python API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

# 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_list_users():
    # Create a client
    client = ftp_v1.CloudFtpClient()

    # Initialize request argument(s)
    request = ftp_v1.ListUsersRequest(
        parent="parent_value",
    )

    # Make the request
    page_result = client.list_users(request=request)

    # Handle the response
    for response in page_result:
        print(response)

Ruby

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Ruby API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

require "google/cloud/ftp/v1"

##
# Snippet for the list_users 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#list_users.
#
def list_users
  # 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::ListUsersRequest.new

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

  # The returned object is of type Gapic::PagedEnumerable. You can iterate
  # over elements, and API calls will be issued to fetch pages as needed.
  result.each do |item|
    # Each element is of type ::Google::Cloud::Ftp::V1::User.
    p item
  end
end

获取有关用户的详细信息

如需获取有关特定用户的详细信息,例如用户的 Cloud Storage 目录映射和权限、代表用户访问 Cloud Storage 资源的服务帐号的电子邮件地址,以及用户的凭据,请按以下步骤操作。

gcloud

如需获取有关 SFTP 用户的详细信息,请运行 gcloud alpha storage ftp users describe 命令。

在使用以下任何命令数据之前, 请进行以下替换:

  • USERNAME:SFTP 用户的用户名。
  • LOCATION_ID:服务器的位置,例如 us-west1。
  • SERVER_ID:SFTP 服务器 ID。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud alpha storage ftp users describe USERNAME --location=LOCATION_ID \
    --server=SERVER_ID

Windows (PowerShell)

gcloud alpha storage ftp users describe USERNAME --location=LOCATION_ID `
    --server=SERVER_ID

Windows (cmd.exe)

gcloud alpha storage ftp users describe USERNAME --location=LOCATION_ID ^
    --server=SERVER_ID

REST

如需获取有关 SFTP 用户的详细信息,请使用 servers.users.get 方法。

在使用任何请求数据之前, 请进行以下替换:

  • PROJECT_ID:项目 Google Cloud ID。
  • LOCATION_ID:服务器的位置,例如 us-west1。
  • SERVER_ID:SFTP 服务器 ID。
  • USERNAME:SFTP 用户的用户名。

HTTP 方法和网址:

GET https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users/USERNAME

如需发送您的请求,请展开以下选项之一:

响应正文是一个 User资源。

客户端库

C#

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP C# API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

using Google.Cloud.Ftp.V1;
using System.Threading.Tasks;

public sealed partial class GeneratedCloudFtpClientSnippets
{
    /// <summary>Snippet for GetUserAsync</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 GetUserAsync()
    {
        // Create client
        CloudFtpClient cloudFtpClient = await CloudFtpClient.CreateAsync();
        // Initialize request argument(s)
        string name = "projects/[PROJECT]/locations/[LOCATION]/servers/[SERVER]/users/[USER]";
        // Make the request
        User response = await cloudFtpClient.GetUserAsync(name);
    }
}

Go

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Go API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。


//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.GetUserRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/ftp/apiv1/ftppb#GetUserRequest.
	}
	resp, err := c.GetUser(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Java API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

import com.google.api.core.ApiFuture;
import com.google.cloud.ftp.v1.CloudFtpClient;
import com.google.cloud.ftp.v1.GetUserRequest;
import com.google.cloud.ftp.v1.User;
import com.google.cloud.ftp.v1.UserName;
import com.google.cloud.ftp.v1.UserView;

public class AsyncGetUser {

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

  public static void asyncGetUser() 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()) {
      GetUserRequest request =
          GetUserRequest.newBuilder()
              .setName(UserName.of("[PROJECT]", "[LOCATION]", "[SERVER]", "[USER]").toString())
              .setView(UserView.forNumber(0))
              .build();
      ApiFuture<User> future = cloudFtpClient.getUserCallable().futureCall(request);
      // Do something.
      User response = future.get();
    }
  }
}

Node.js

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Node.js API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

/**
 * 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.
 */
/**
 *  Required. Name of the resource
 */
// const name = 'abc123'
/**
 *  Optional. The view of the User resource to return.
 */
// const view = {}

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

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

async function callGetUser() {
  // Construct request
  const request = {
    name,
  };

  // Run request
  const response = await ftpClient.getUser(request);
  console.log(response);
}

callGetUser();

PHP

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP PHP API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

use Google\ApiCore\ApiException;
use Google\Cloud\Ftp\V1\Client\CloudFtpClient;
use Google\Cloud\Ftp\V1\GetUserRequest;
use Google\Cloud\Ftp\V1\User;

/**
 * Gets details of a single User.
 *
 * @param string $formattedName Name of the resource
 *                              Please see {@see CloudFtpClient::userName()} for help formatting this field.
 */
function get_user_sample(string $formattedName): void
{
    // Create a client.
    $cloudFtpClient = new CloudFtpClient();

    // Prepare the request message.
    $request = (new GetUserRequest())
        ->setName($formattedName);

    // Call the API and handle any network failures.
    try {
        /** @var User $response */
        $response = $cloudFtpClient->getUser($request);
        printf('Response data: %s' . PHP_EOL, $response->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
{
    $formattedName = CloudFtpClient::userName('[PROJECT]', '[LOCATION]', '[SERVER]', '[USER]');

    get_user_sample($formattedName);
}

Python

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Python API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

# 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_get_user():
    # Create a client
    client = ftp_v1.CloudFtpClient()

    # Initialize request argument(s)
    request = ftp_v1.GetUserRequest(
        name="name_value",
    )

    # Make the request
    response = client.get_user(request=request)

    # Handle the response
    print(response)

Ruby

如需了解如何安装和使用 Cloud FTP 的客户端库,请参阅 Cloud FTP 客户端库。 如需了解详情,请参阅 Cloud FTP Ruby API 参考文档。

如需向 Cloud FTP 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。

require "google/cloud/ftp/v1"

##
# Snippet for the get_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#get_user.
#
def get_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::GetUserRequest.new

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

  # The returned object is of type Google::Cloud::Ftp::V1::User.
  p result
end