このドキュメントでは、Cloud FTP サーバーにユーザーを追加する方法について説明します。外部パートナーや内部関係者などのユーザーは、このサーバーを使用して Cloud Storage との間でファイルを安全に転送できます。
SFTP サーバーにユーザーを追加する手順の概要は次のとおりです。
- ユーザーの権限を構成します。
- SFTP ユーザーを作成し、ディレクトリを Cloud Storage バケットにマッピングします。
サーバーを作成する手順については、外部 SFTP サーバーを作成すると内部 SFTP サーバーを作成するをご覧ください。
考慮事項
ユーザーにアクセス権を付与できるバケットは最大 10 個です。
ユーザーは最大 10 個の公開鍵を持つことができます。
始める前に
バケットがまだ存在しない場合は、ユーザーが使用するデータを保存するための Cloud Storage バケットを 1 つ以上作成します。
サーバーへの接続に使用する各 SSH 鍵ペアからユーザーの公開鍵を取得します。
SSH 認証鍵ペアがない場合は、次の手順で生成します。
SSH 認証鍵ペアを生成する
SSH 認証鍵ペアを生成するには、
ssh-keygenユーティリティを使用します。SFTP サーバーに接続するクライアント マシンで、次のコマンドを実行します。ssh-keygen -t rsa -b 4096 -f ~/.ssh/KEY_PAIR_NAME
KEY_PAIR_NAMEは、sftp_user_keyなどの鍵ペアの名前に置き換えます。公開鍵は
~/.ssh/KEY_PAIR_NAME.pubファイルに保存されます。
必要なロール
SFTP ユーザーを追加するために必要な権限を取得するには、プロジェクトに対する FTP 管理者 (roles/ftp.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
この事前定義ロールには、SFTP ユーザーを追加するために必要な ftp.users.create 権限が含まれています。
カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
ユーザーの権限を構成する
-
Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。ログイン後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_IDは、SFTP サーバーを含むプロジェクトの ID に置き換えます。サービス アカウントがまだ存在しない場合は、ユーザーのサービス アカウントを作成します。サービス アカウントは、ユーザーの代わりに Cloud Storage リソースにアクセスします。
gcloud iam service-accounts create USERNAME-sa \ --description="USERNAME SFTP Service Account" \ --display-name="USERNAME SFTP Service Account"
USERNAMEは、SFTP ユーザーの一意のユーザー名に置き換えます。ユーザー名の先頭は英小文字にする必要があります。英小文字、数字、ハイフンを使用できます。成功すると、
Created service account [example-userid-sa]のようなメッセージが表示されます。SFTP ユーザーを作成する管理者に IAM ロールを付与します。
サービス アカウント ユーザー(
roles/iam.serviceAccountUser)ロールを自分に付与します。gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID. \ --member="user:ADMINISTRATOR_EMAIL" \ --role="roles/iam.serviceAccountUser"
ADMINISTRATOR_EMAILは、SFTP ユーザーを作成するプリンシパルのメールアドレスに置き換えます。ユーザー(アプリケーションではなく)を作成する場合は、この値は Google Cloudへのアクセスに使用するメールアドレスです。成功すると、次のようなメッセージが表示されます。
Updated IAM policy for serviceAccount [example-userid-sa@example-project.]. bindings: - members: - user:admin@example.com role: roles/iam.serviceAccountUser etag: BwZJk7OiSzw= version: 1バケットに対する Storage バケット閲覧者(
roles/storage.bucketViewer)ロールを自分に付与します。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="user:ADMINISTRATOR_EMAIL" \ --role="roles/storage.bucketViewer"
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:USERNAME-sa@PROJECT_ID." \ --role="ROLE"
ROLEは、次のいずれかの IAM ロールに置き換えます。- 読み取り専用アクセス権を付与するには、
roles/storage.objectViewerロールを使用します。 - 読み取り / 書き込みアクセス権の場合は、
roles/storage.objectAdminロールを使用します。
ユーザーがアクセスする必要があるバケットごとにこの手順を繰り返します。
- 読み取り専用アクセス権を付与するには、
ユーザーのサービス アカウントのトークンを生成する権限を Cloud FTP サービス エージェントに付与します。
サーバーのサービス エージェントのメールアドレスを取得します。手順については、サーバーの詳細を取得するをご覧ください。
Cloud FTP サービス エージェントを承認します。
gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID. \ --member="serviceAccount:SERVICE_AGENT_EMAIL" \ --role="roles/iam.serviceAccountTokenCreator"
SERVICE_AGENT_EMAILは、サービス エージェントのメールアドレスに置き換えます。
次に、ユーザーを作成します。
SFTP サーバー ユーザーを作成する
ユーザーの権限を構成したら、ユーザーを作成し、そのディレクトリを 1 つ以上の Cloud Storage バケットにマッピングします。
gcloud
SFTP サーバーのユーザーを作成するには、
gcloud alpha storage ftp users createコマンドを実行します。後述のコマンドデータを使用する前に、次のように置き換えます。
- CREDENTIAL_NAME: ユーザー認証情報を識別する一意の名前。
- SSH_PUBLIC_KEY: OpenSSH 形式のユーザーの SSH 公開鍵の本文。例:
ssh-rsa AAAAB3NzaC1ycRexample... - USERNAME: SFTP ユーザーのユーザー名。
- SERVICE_ACCOUNT: ユーザーのサービス アカウント。例:
username-sa@example-project. - 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フラグを複数回指定します。 - ユーザーに複数の公開鍵を構成するには、
credentials.jsonファイルに複数の認証情報を指定します。
次の内容を
credentials.jsonという名前のファイルに保存します。[ { "credentialName": "CREDENTIAL_NAME", "credentialType": "PUBLIC_KEY", "sshPublicKeyBody": "SSH_PUBLIC_KEY" } ]
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud alpha storage ftp users create USERNAME \ --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID \ --server=SERVER_ID \ --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION \ --user-credentials-from-file=credentials.json
Windows(PowerShell)
gcloud alpha storage ftp users create USERNAME ` --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID ` --server=SERVER_ID ` --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION ` --user-credentials-from-file=credentials.json
Windows(cmd.exe)
gcloud alpha storage ftp users create USERNAME ^ --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID ^ --server=SERVER_ID ^ --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION ^ --user-credentials-from-file=credentials.json
サーバーに接続するために必要な次の情報をユーザーに提供します。
ユーザーの SFTP ユーザー名。
サーバーのアクセス構成。これはサーバーのタイプによって異なります。
外部サーバーの場合は、サーバーの IP アドレス。
内部サーバーの場合、サーバーのサービス アタッチメントの URI。
サーバーのアクセス構成を取得する手順については、サーバーの詳細を取得するをご覧ください。
(省略可)サーバーのキーのフィンガープリント。
REST
SFTP サーバーのユーザーを作成するには、
servers.users.createメソッドを使用します。リクエストのデータを使用する前に、次のように置き換えます。
- 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に設定します。 - SERVICE_ACCOUNT: ユーザーのサービス アカウント。例:
username-sa@example-project. - CREDENTIAL_NAME: ユーザー認証情報を識別する一意の名前。
- SSH_PUBLIC_KEY: OpenSSH 形式のユーザーの SSH 公開鍵の本文。例:
ssh-rsa AAAAB3NzaC1ycRexample...
次の点にご注意ください。
- 複数のバケットへのアクセス権をユーザーに付与するには、
storageDirectoryMappingsリストに複数のバケット マッピングを指定します。 - ユーザーに複数の公開鍵を構成するには、
userCredentialsリストに複数の認証情報を指定します。
HTTP メソッドと URL:
POST https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users?userId=USERNAME
リクエストの本文(JSON):
{ "storageDirectoryMappings": [ { "bucket": "BUCKET_NAME", "bucketPrefix": "BUCKET_PREFIX", "directory": "DIRECTORY", "permission": "SFTP_PERMISSION" } ], "customerServiceAccount": "SERVICE_ACCOUNT", "userCredentials": [ { "credentialName": "CREDENTIAL_NAME", "credentialType": "PUBLIC_KEY", "sshPublicKeyBody": "SSH_PUBLIC_KEY" } ] }リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスで長時間実行オペレーションを識別できます。ユーザーの作成には数秒かかります。
サーバーに接続するために必要な次の情報をユーザーに提供します。
ユーザーの SFTP ユーザー名。
サーバーのアクセス構成。これはサーバーのタイプによって異なります。
外部サーバーの場合は、サーバーの IP アドレス。
内部サーバーの場合、サーバーのサービス アタッチメントの URI。
サーバーのアクセス構成を取得する手順については、サーバーの詳細を取得するをご覧ください。
(省略可)サーバーのキーのフィンガープリント。
次のステップ
- 外部 SFTP サーバーに接続します。
- 内部 SFTP サーバーに接続する。
- SFTP コマンドを使用してデータを転送する。
- Cloud Storage バケットのデータ保護、バックアップ、復元のオプションについて学習する。