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

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

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

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

始める前に

必要なロール

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 ロールごとに、この手順を繰り返します。

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

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"
    }
  ]
}

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

レスポンスで長時間実行オペレーションを識別できます。ユーザーが更新されるまでに数秒かかります。

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