SFTP ユーザーのバケットを更新する

このドキュメントでは、Cloud FTP ユーザーの Cloud Storage バケットを更新する方法について説明します。これには、ユーザーがアクセスできるバケットと、ユーザーが持つ権限が含まれます。

ユーザーのバケットを更新する手順の概要は次のとおりです。

  1. ユーザーのサービス アカウントの IAM ロールを更新します。
  2. ユーザーのディレクトリを更新されたバケットにマッピングします。

始める前に

  • バケットがまだ存在しない場合は、ユーザーが使用するデータを保存するための Cloud Storage バケットを 1 つ以上作成します。ユーザーにアクセス権を付与できるバケットは最大 10 個です。

必要なロール

SFTP ユーザーの更新に必要な権限を取得するには、プロジェクトに対する FTP 管理者 (roles/ftp.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、SFTP ユーザーの更新に必要な ftp.users.update 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

ユーザーのサービス アカウントの IAM ロールを更新する

ユーザーがアクセスできるバケットを変更した場合、または既存のディレクトリ マッピングに対するユーザーの権限を変更した場合は、関連する IAM ロールを使用してユーザーのサービス アカウントを更新する必要があります。次の操作を行います。

  1. ユーザーのサービス アカウントのメールアドレスを取得します。手順については、ユーザーの詳細情報を取得するをご覧ください。

  2. ディレクトリ マッピングに新しいバケットを追加するか、既存のバケットへのアクセス権を増やす場合は、次の操作を行います。

    1. バケットに対する Storage バケット閲覧者(roles/storage.bucketViewer)ロールを自分に付与します(まだロールが付与されていない場合)。

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

      次のように置き換えます。

      • ADMINISTRATOR_EMAIL: SFTP ユーザーを作成するプリンシパルのメールアドレス。ユーザー(アプリケーションではなく)を作成する場合は、この値は Google Cloudへのアクセスに使用するメールアドレスです。

      • BUCKET_NAME: バケットの名前。

    2. バケットに対する Storage オブジェクト閲覧者(roles/storage.objectViewer)ロールを自分に付与します(まだロールが付与されていない場合)。

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.objectViewer"
    3. バケットへのアクセスに必要な IAM ロールをユーザーのサービス アカウントに付与します。

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

      次のように置き換えます。

      • SERVICE_ACCOUNT: ユーザーのサービス アカウントのメールアドレス。
      • ROLE_TO_GRANT: 付与する IAM ロール。次のいずれかのロールを指定します。

        • 読み取り専用アクセス権を付与するには、roles/storage.objectViewer ロールを使用します。
        • 読み取り / 書き込みアクセス権の場合は、roles/storage.objectAdmin ロールを使用します。
    4. ユーザーがアクセスする必要があるバケットごとに、上記の手順を繰り返します。

  3. ディレクトリ マッピングからバケットを削除するか、既存のバケットへのアクセス権を減らす場合は、ユーザーのサービス アカウントからアクセス権を取り消します。

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

    ROLE_TO_REVOKE は、取り消す IAM ロールに置き換えます。

    ユーザーがアクセスできなくなるバケットと IAM ロールごとに、この手順を繰り返します。

ユーザーのバケットを更新する

gcloud

SFTP ユーザーのバケットを更新するには、gcloud alpha storage ftp users update コマンドを実行します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • USERNAME: SFTP ユーザーのユーザー名。
  • LOCATION_ID: サーバーのロケーション(us-west1 など)。
  • SERVER_ID: サーバー ID。
  • BUCKET_NAME: SFTP ユーザーにアクセス権が付与されているバケットの名前(example-bucket など)。gs:// を省略します。
  • (省略可)BUCKET_PREFIX: このディレクトリ マッピングのルート ディレクトリとして設定するバケット内のフォルダのパス。bucket_prefix プロパティを省略すると、Cloud FTP はバケットのルートを使用します。
  • DIRECTORY: SFTP ユーザーに表示される論理ランディング ディレクトリのパス。例: /home/uploads。

    複数のバケットまたはフォルダをマッピングする場合は、マッピングごとに一意のディレクトリ パスを指定します。

    ネストされた論理ディレクトリはサポートされていません。ディレクトリに複数のマッピングを指定する場合は、ネストされた構造ではなく、フラットな構造でディレクトリを指定します。たとえば、/dir1 と /dir1/dir2 ではなく /dir1 と /dir2 を使用します。

  • SFTP_PERMISSION: ディレクトリのアクセスレベル。読み取り専用アクセスの場合、この値を READ_ONLY に設定します。読み取り / 書き込みアクセス権の場合は、この値を READ_WRITE に設定します。

複数のバケットへのアクセス権をユーザーに付与するには、バケットごとにディレクトリ マッピングを指定して --storage-directory-mapping フラグを複数回指定します。

次のコマンドを実行します。

Linux、macOS、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
ユーザーの更新には数秒かかります。

SFTP 接続がアクティブな場合は、更新されたバケット設定を有効にするために、接続を解除してから再接続する必要があることがあります。

REST

SFTP ユーザーのバケットを更新するには、servers.users.patch メソッドを使用します。updateMask クエリ パラメータで、storageDirectoryMappings フィールドを指定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: サーバーの Google Cloud プロジェクト ID。
  • LOCATION_ID: サーバーのロケーション(us-west1 など)。
  • SERVER_ID: サーバー ID。
  • USERNAME: SFTP ユーザーのユーザー名。
  • BUCKET_NAME: SFTP ユーザーにアクセス権が付与されているバケットの名前(example-bucket など)。gs:// を省略します。
  • (省略可)BUCKET_PREFIX: このディレクトリ マッピングのルート ディレクトリとして設定するバケット内のフォルダのパス。この値を省略すると、Cloud FTP はバケットのルートを使用します。
  • DIRECTORY: SFTP ユーザーに表示される論理ランディング ディレクトリのパス。例: /home/uploads。この値を省略すると、Cloud FTP はランディング ディレクトリを / に設定します。

    複数のバケットまたはフォルダをマッピングする場合は、マッピングごとに一意のディレクトリ パスを指定します。

    ネストされた論理ディレクトリはサポートされていません。ディレクトリに複数のマッピングを指定する場合は、ネストされた構造ではなく、フラットな構造でディレクトリを指定します。たとえば、/dir1 と /dir1/dir2 ではなく /dir1 と /dir2 を使用します。

  • SFTP_PERMISSION: ディレクトリのアクセスレベル。読み取り専用アクセスの場合、この値を READ_ONLY に設定します。読み取り / 書き込みアクセス権の場合は、この値を READ_WRITE に設定します。

複数のバケットへのアクセス権をユーザーに付与するには、storageDirectoryMappings リストに複数のバケット マッピングを指定します。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

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

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスは、長時間実行オペレーションを識別します。ユーザーの更新には数秒かかります。 <0

SFTP 接続がアクティブな場合は、更新されたバケット設定を有効にするために、接続を解除してから再接続する必要があることがあります。