VPC Service Controls と Storage Transfer Service を使用して Amazon S3 から Cloud Storage にデータを転送する


このチュートリアルでは、VPC Service Controls 境界で Storage Transfer Service を使用して、Amazon Simple Storage Service(Amazon S3)から Cloud Storage へのデータ転送を強化する方法について説明します。このチュートリアルは、Amazon S3 に保存されたデータを持ち、そのデータを Google Cloud に安全に処理または移行することを希望するデータ所有者を対象としています。

このチュートリアルでは、ユーザーが Amazon Web Services(AWS)とオブジェクト ストアのデータ処理の基本に精通していることを前提としています。このチュートリアルでは、Access Context Manager を使用してアクセスを制御するサービス アカウント ベースによる方法を対象としています。サービス アカウント ベースによる方法以外の高度なアクセスレベルについては、アクセスレベルの作成をご覧ください。

アーキテクチャ

次の図は、VPC Service Controls アーキテクチャの概要を示しています。

制御された境界外で Google Cloud サービス間の通信が拒否された VPC Service Controls のアーキテクチャ。

上の図では、両方のプロジェクトが制御された境界にない場合、VPC Service Controls は Google Cloud サービス間の通信を明示的に拒否します。

目標

  • AWS アクセスを構成します。
  • VPC Service Controls の境界を作成します。
  • Access Context Manager を使用して、アクセス ポリシーとアクセスレベルを作成します。
  • Storage Transfer Service を使用して、Amazon S3 と Cloud Storage 間でデータを移動します。
  • Storage Transfer Service をスケジュールして、スケジュールに基づいてデータを取得します。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

Storage Transfer Service を使用するための追加費用はかかりませんが、Storage Transfer Service を使用する際には、Cloud Storage の料金と外部プロバイダの料金が適用されます。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

このチュートリアルでは、Google Cloud リソースに加えて、次の Amazon Web Services(AWS)リソースを使用しますが、これには料金が発生する場合があります。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Access Context Manager, Cloud Storage, and Storage Transfer Service API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Access Context Manager, Cloud Storage, and Storage Transfer Service API を有効にします。

    API を有効にする

  8. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  9. Google Cloud コンソールで [IAM と管理] ページに移動して、ストレージ管理者のロールと Access Context Manager 管理者のロールをアカウントに付与します。
    [IAM と管理] ページに移動
  10. ストレージ管理者のロールには次の権限があります。

    • firebase.projects.get
    • resourcemanager.projects.get
    • resourcemanager.projects.list
    • storage.buckets.*
    • storage.objects.*

    Access Context Manager 管理者のロールには次の権限があります。

    • accesscontextmanager.accessLevels.*
    • accesscontextmanager.accessPolicies.*
    • accesscontextmanager.accessPolicies.setIamPolicy
    • accesscontextmanager.accessPolicies.update
    • accesscontextmanager.accessZones.*
    • accesscontextmanager.policies.*
    • accesscontextmanager.servicePerimeters.*
    • resourcemanager.organizations.get

AWS アクセスの構成

このチュートリアルでは、既存の AWS Identity and Access Management(AWS IAM)ユーザーと連携して、Storage Transfer Service とインターフェースを持つことができるよう AWS IAM ポリシーを作成します。これらのポリシーとユーザーは、Google Cloud への接続認証と転送中のデータ保護のために必要です。このチュートリアルでは、データの転送元の Amazon S3 バケットが必要になります。これには、既存の Amazon S3 バケットを使用するか、新しいバケットを作成できます。テスト アカウントまたはサンドボックス AWS アカウントを使用すれば、同じアカウントで本番環境のリソースに影響を及ぼす心配もありません。

Storage Transfer Service 用の AWS IAM ポリシーを作成してバケットに適用する

  1. AWS Management Console で、[IAM] ページに移動します。
  2. [Policy]、[Create Policy] の順にクリックします。
  3. ビジュアル エディタで、[IAM Policy] をクリックします。
  4. [S3] をクリックします。
  5. 次の [Access Level] チェックボックスを選択します。

    • [List]
    • [Read]
    • [Write]
  6. [Resources] ペインで、[Specific] を選択します。

  7. [Bucket] ペインで、[Add ARN] をクリックします。

  8. [Bucket Name] フィールドに、データ転送元のバケットの名前を入力します。

  9. [Review Policy] をクリックし、「transfer-user-policy」などの名前を入力します。

  10. [Create Policy] をクリックします。

AWS IAM ユーザーを AWS IAM ポリシーに追加する

  1. AWS Management Console で、[IAM] ページに移動します。
  2. [Users]、[Add User] の順にクリックします。
  3. [Name] フィールドに「transfer-user」と入力します。
  4. [Access Type] で、[Programmatic Access] をクリックし、そのユーザー用に作成した transfer-user-policy をアタッチします。
  5. ユーザーを作成したら、チュートリアルの後半で使用するため、アクセス ID とシークレット キーのペアをメモしておきます。
  6. [Save] をクリックします。

Cloud Storage バケットを作成する

VPC Service Controls の境界を有効にする前に、Cloud Storage バケットを作成する必要があります。

  1. Google Cloud コンソールで Cloud Storage のブラウザページに移動します。

    Cloud Storage のブラウザページに移動

  2. [バケットを作成] をクリックします。

  3. [名前] フィールドに、「project-id-destination-bucket」などの名前を入力します。project-id は Google Cloud プロジェクト ID を表します。

  4. バケットの [デフォルトのストレージ クラス] では、[Regional storage] をクリックします。

  5. [ロケーション] プルダウン リストから、バケットデータが保存されているリージョンをクリックします。

  6. [作成] をクリックします。

転送オペレーションのサービス アカウントの名前を確認する

Storage Transfer Service は、Google マネージド サービス アカウントを使用して、プロジェクト内の Cloud Storage リソースや Pub/Sub リソースと通信します。このチュートリアルの後半で使用するサービス アカウントの名前を確認する必要があります。Storage Transfer Service をまだ使用していない場合は、次の手順で Storage Transfer Service サービス アカウントを作成します。Google マネージド サービス アカウントの詳細については、サービス アカウントをご覧ください。

  1. サービス アカウントの名前を確認するには、Storage Transfer Service API のページに移動します。
  2. [文字列] フィールドに、Google Cloud プロジェクト ID を入力します。

    通常、サービス アカウントの名前は、project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com の形式になります。

Access Context Manager でのアクセス ポリシーを作成する

アクセス ポリシーにより、組織に作成したサービス境界とアクセスレベルを収集します。1 つの組織に設定できるアクセス ポリシーは 1 つだけです。

  1. Google Cloud コンソールで [設定] ページに移動します。

    [設定] ページに移動

  2. Google Cloud プロジェクト ID と組織名をメモしておきます。

  3. Cloud Shell で、ポリシーを作成します。

    gcloud access-context-manager policies create \
        --organization organization-id --title policy-title
    
    • organization-id は、前半で確認した組織 ID です。
    • policy-title は、境界のタイトルです。例: Example-Company-Access-Policy

    出力は次のとおりです。

    Create request issued
    Waiting for operation [accessPolicies/policy-title/create/policy-number] to complete...done.
    Created.
    

    policy-number は、ポリシーのタイトルに割り当てられた一意の ID を表します。

VPC Service Controls の境界を作成する

VPC Service Controls の境界を作成すると、すべてのトラフィックが許可されない状態で開始します。次に、明示的なアクセスレベルを作成して、制御された境界に転送オペレーションがデータを送信できるようにします。

  1. Google Cloud コンソールで、[VPC Service Controls] ページに移動します。

    [VPC Service Controls] ページに移動

  2. [新しい境界] をクリックします。

  3. [名前] フィールドに、「data-transfer-perimeter」などの境界の名前を入力します。

  4. [標準境界] が選択された状態にします。

  5. [プロジェクトの追加] をクリックして、このチュートリアルで作成したプロジェクトをリストに追加し、プロジェクトを保護します。

  6. [Cloud Storage API] をクリックします。

  7. [アクセスレベル] はデフォルト値のままにします。

  8. [保存] をクリックします。

アクセス ポリシー内にアクセスレベルを作成する

このセクションでは、サービス アカウントを使用して VPC へのアクセスを制限します。

  1. Cloud Shell で、「conditions.yaml」という名前の YAML ファイルを作成します。このファイルには、アクセスを許可するメンバーを記述します。

     - members:
         - serviceAccount:project-project-number@storage-transfer-service.iam.gserviceaccount.com
         - user:sysadmin@example.com
     

  2. アクセスレベルを作成します。

    gcloud access-context-manager levels create name \
        --title title \
        --basic-level-spec ~./conditions.yaml \
        --combine-function=OR \
        --policy=policy-id
    
    • name はアクセスレベルの一意の名前です。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。
    • title は、ポリシーに固有のタイトルです(trusted-identity-ingest など)
    • policy-id は、組織のアクセス ポリシーの ID(番号)です。
    • combine-functionOR に設定されています。デフォルト値 AND では、アクセスレベルが付与される前にすべての条件が満たされる必要があります。IP アドレスや、その他の必須アクセスレベルから継承された条件など、他の条件が満たされていない場合でも、OR 値によってプリンシパルにアクセス権が付与されます。

    出力は次のようになります。

    Create request issued for: name
    Waiting for operation [accessPolicies/policy-id/accessLevels/name/create/access-level-number] to complete...done.
    Created level name.
    

    access-level-number はアクセスレベルに割り当てられた一意の ID を表します。

アクセスレベルを VPC Service Controls にバインドする

  1. Google Cloud コンソールで、[VPC Service Controls] に移動します。

    [VPC Service Controls] ページに移動

  2. VPC Service Controls で [編集] をクリックします。

  3. [アクセスレベル] をクリックし、trusted-identity-ingest アクセスレベルを選択します。

  4. [保存] をクリックします。

これで、制御された境界で許可される操作は、定義したサービス アカウントからのみになります。

転送の開始

  1. Google Cloud コンソールで [転送] ページに移動します。

    [転送] ページに移動

  2. [転送を作成] をクリックします。

  3. [Amazon S3 バケット] をクリックします。

  4. [Amazon S3 バケット] フィールドに、AWS Management Console に表示される転送元の Amazon S3 バケット名を入力します。

  5. Amazon S3 バケットに関連付けられているアクセスキー ID およびシークレット キーを入力します。このチュートリアルの冒頭でメモした値です。

  6. [保存先を選択] で、境界で作成したバケットの名前(project-id-destination-bucket など)を入力します。

  7. [転送の構成] で、転送ジョブのスケジュールを設定し今すぐ実行します。

  8. 省略可: 転送ジョブの名前を編集します。

  9. [説明] には、わかりやすい一意の名前を使用して、後で転送ジョブを識別できるようにします。

  10. [作成] をクリックします。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

  • Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center を確認する。
  • アクセスレベルを有効にする、より高度な方法を学習する(Access Context Manager を使用)。