このドキュメントでは、Cloud FTP ユーザーの Cloud Storage バケットを更新する方法について説明します。これには、ユーザーがアクセスできるバケットと、ユーザーが持つ権限が含まれます。
ユーザーのバケットを更新する手順の概要は次のとおりです。
- ユーザーのサービス アカウントの IAM ロールを更新します。
- ユーザーのディレクトリを更新されたバケットにマッピングします。
始める前に
バケットがまだ存在しない場合は、ユーザーが使用するデータを保存するための Cloud Storage バケットを 1 つ以上作成します。ユーザーにアクセス権を付与できるバケットは最大 10 個です。
必要なロール
SFTP ユーザーの更新に必要な権限を取得するには、プロジェクトに対する FTP 管理者 (roles/ftp.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
この事前定義ロールには、SFTP ユーザーの更新に必要な ftp.users.update 権限が含まれています。
カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
ユーザーのサービス アカウントの IAM ロールを更新する
ユーザーがアクセスできるバケットを変更した場合、または既存のディレクトリ マッピングに対するユーザーの権限を変更した場合は、関連する IAM ロールを使用してユーザーのサービス アカウントを更新する必要があります。次の操作を行います。
ユーザーのサービス アカウントのメールアドレスを取得します。手順については、ユーザーの詳細情報を取得するをご覧ください。
ディレクトリ マッピングに新しいバケットを追加するか、既存のバケットへのアクセス権を増やす場合は、次の操作を行います。
バケットに対する 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: バケットの名前。
バケットに対する Storage オブジェクト閲覧者(
roles/storage.objectViewer)ロールを自分に付与します(まだロールが付与されていない場合)。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="user:ADMINISTRATOR_EMAIL" \ --role="roles/storage.objectViewer"
バケットへのアクセスに必要な 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ロールを使用します。
- 読み取り専用アクセス権を付与するには、
ユーザーがアクセスする必要があるバケットごとに、上記の手順を繰り返します。
ディレクトリ マッピングからバケットを削除するか、既存のバケットへのアクセス権を減らす場合は、ユーザーのサービス アカウントからアクセス権を取り消します。
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"
}
]
}
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスは、長時間実行オペレーションを識別します。ユーザーの更新には数秒かかります。 <0SFTP 接続がアクティブな場合は、更新されたバケット設定を有効にするために、接続を解除してから再接続する必要があることがあります。