VM イメージのインポートとエクスポートの前提条件


このドキュメントでは、Compute Engine でイメージをインポートおよびエクスポートするための前提条件について説明します。

Cloud Storage からイメージをインポートまたはエクスポートすることで、他のクラウド環境またはオンプレミス環境から仮想マシン(VM)インスタンス、仮想ディスク ファイル、マシンイメージを共有できます。次のチェックリストは、イメージをインポートまたはエクスポートする際の前提条件をまとめたものです。

  1. Cloud Storage バケットへのアクセスを設定する
  2. 必要なロールをユーザー アカウントに付与する
  3. 必要なロールを Cloud Build サービス アカウントに付与する
  4. 必要なロールを Compute Engine サービス アカウントに付与する

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

Cloud Storage バケットへのアクセスを設定する

インポート ツールまたはエクスポート ツールで使用できる Cloud Storage バケットにアクセスできる必要があります。Cloud Storage バケットがない場合は、Cloud Storage バケットの作成をご覧ください。

Cloud Storage バケットへのアクセスを設定するには、必要なロールをアカウントに付与するCompute Engine サービス アカウントをご覧ください。

  • イメージをエクスポートすると、エクスポート ツールによって Cloud Storage バケットにイメージがアップロードされます。

  • イメージをインポートする場合は、最初にイメージを Cloud Storage バケットにアップロードする必要があります。インポート ツールは、Cloud Storage バケットから Compute Engine にファイルをダウンロードし、そのディスク ファイルから Compute Engine にイメージを作成します。

必要な IAM ロールを付与する

VM イメージのインポート ツールとエクスポート ツールには、ユーザーに代わって処理を実行するため、以下のアカウントが必要になります。

  • ユーザー アカウント。インポート コマンドとエクスポート コマンドを実行するアカウント。
  • Cloud Build サービス アカウント。デフォルトの Cloud Build サービス アカウントは、インポート ツールまたはエクスポート ツールで Cloud Build API を有効にするときに作成されます。
  • Compute Engine サービス アカウント。インポートとエクスポートのワークフローに必要なデフォルトまたはカスタムの Compute Engine サービス アカウント。

必要なロールをユーザー アカウントに付与する

イメージをインポートまたはエクスポートするには、ユーザー アカウントに次のロールが必要です。

  • ストレージ管理者のロール(roles/storage.admin
  • 閲覧者のロール(roles/viewer
  • プロジェクト IAM 管理者のロール(roles/resourcemanager.projectIamAdmin
  • Cloud Build 編集者のロール(roles/cloudbuild.builds.editor

Console

  1. プロジェクトまたは組織の [IAM と管理] ページに移動します。

    [IAM と管理] に移動

  2. アカウントを見つけて、[ 編集] をクリックします。

  3. [ロールを選択] リストで、次のロールを選択します。

    • Cloud Storage > ストレージ管理者
    • プロジェクト > 閲覧者
    • Resource Manager > プロジェクト IAM 管理者
    • Cloud Build > Cloud Build 編集者
  4. 変更を保存します。

gcloud

次の手順では、gcloud projects add-iam-policy-binding コマンドを使用して、プロジェクト レベルで必要なロールを付与します。

  1. roles/storage.admin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/storage.admin'
    

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

    • PROJECT_ID: プロジェクトの Google Cloud プロジェクト ID
    • MEMBER: インポートとエクスポート コマンドを実行するアカウント(例: user:export-user@gmail.com
  2. roles/viewer ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. roles/resourcemanager.projectIamAdmin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. roles/cloudbuild.builds.editor ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/cloudbuild.builds.editor'
    

REST

  1. リソースの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy メソッドを使用します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID は、プロジェクト ID に置き換えます(例: my-project-1)。

  2. アカウントに必要なロールを付与するには、テキスト エディタでポリシーを編集します。

    たとえば、必要なロールをアカウント user:export-user@gmail.com に付与するには、次のバインディングをポリシーに追加します。

    {
       {
         "role":"roles/storage.admin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/viewer",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/resourcemanager.projectIamAdmin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/cloudbuild.builds.editor",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
    }
    
  3. 更新されたポリシーを書き込むには、setIamPolicy メソッドを使用します。

    たとえば、ポリシーをプロジェクト レベルで設定するには、project.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

必要なロールを Cloud Build サービス アカウントに付与する

Google Cloud コンソールまたは gcloud CLI を使用して初めてイメージをインポートまたはエクスポートするときに、ツールが Cloud Build API を有効にし、次の必要なロールを Cloud Build サービス アカウントに付与しようとします。

  • サービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
  • サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser
  • Compute 管理者のロール(roles/compute.admin

    Compute 管理者のロールが付与されないようにするには、次の Compute Engine IAM 権限でカスタムロールを作成して、Cloud Build サービス アカウントに付与します。

  • Compute ネットワーク ユーザーのロール(roles/compute.networkUser

    このロールは、共有 VPC を使用するイメージをインポートまたはエクスポートする場合にのみ必要です。

    共有 VPC プロジェクトで、イメージのインポートまたはエクスポートを行うプロジェクトにある Cloud Build サービス アカウントに Compute ネットワーク ユーザーのロールを付与します。

ただし、これらのロールを手動で付与して、必要な権限を有効にすることもできます。

Console

  1. Cloud Build API を有効にしたら、プロジェクトまたは組織の [IAM と管理] ページに移動します。

    [IAM と管理] に移動

  2. Cloud Build サービス アカウントを見つけて、[ 編集] をクリックします。

  3. 必要なロールが表示されていない場合は、次の手順を行います。

    1. [ 別のロールを追加] をクリックします。
    2. [ロールを選択] リストで、必要なロールを選択します。

      • サービス アカウント > サービス アカウント トークン作成者
      • サービス アカウント > サービス アカウント ユーザー
      • Compute Engine > Compute 管理者

        また、カスタムロールを選択することもできます。前述のカスタムロールに必要な権限をご覧ください。

    3. [保存] をクリックして変更を保存します。

  4. 省略可: 共有 VPC を使用するイメージをインポートまたはエクスポートする場合は、共有 VPC プロジェクトで Compute ネットワーク ユーザーのロールを選択します。

    1. コンソールの上部にあるプロジェクト セレクタで、共有 VPC ホスト プロジェクトを選択します。
    2. [IAM と管理] ページで、[アクセス権を付与] をクリックします。
    3. [新しいプリンシパル] フィールドに、Cloud Build サービス アカウントのメールアドレスを入力します。
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      PROJECT_NUMBER は、イメージをインポートまたはエクスポートする一意のプロジェクト番号に置き換えます。
    4. [ロールを選択] リストで、[Compute Engine] > [Compute ネットワーク ユーザー] ロールを選択します。
    5. [保存] をクリックして変更を保存します。

gcloud

次の手順では、gcloud projects add-iam-policy-binding コマンドを使用して、プロジェクト レベルで必要なロールを付与します。

  1. Cloud Build サービス アカウントに roles/compute.admin ロールを付与します。roles/compute.admin ロールが付与されないようにするには、必要な権限を持つカスタムロールを作成して、Cloud Build サービス アカウントに付与します。前述のカスタムロールに必要な権限をご覧ください。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.admin'
    

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

  2. roles/iam.serviceAccountUser ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. roles/iam.serviceAccountTokenCreator ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. 省略可: 共有 VPC を使用するイメージをエクスポートまたはインポートする場合は、roles/compute.networkUser ロールを付与します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

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

    • HOST_PROJECT_ID: 共有 VPC が配置されているホスト プロジェクトの ID
    • PROJECT_NUMBER: イメージをインポートまたはエクスポートする一意のプロジェクト番号

REST

  1. リソースの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy メソッドを使用します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID は、プロジェクト ID に置き換えます(例: my-project-1)。

  2. アカウントに必要なロールを付与するには、テキスト エディタでポリシーを編集します。

    たとえば、必要なロールを serviceAccount:12345@cloudbuild.gserviceaccount.com に付与するには、次のバインディングをポリシーに追加します。

    {
       {
         "role":"roles/compute.admin",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/iam.serviceAccountUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
      {
         "roles":"roles/iam.serviceAccountTokenCreator",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    

    roles/compute.admin ロールが付与されないようにするには、必要な権限を持つカスタムロールを作成して、Cloud Build サービス アカウントに付与します。前述のカスタムロールに必要な権限をご覧ください。

  3. 省略可: 共有 VPC を使用するイメージをエクスポートまたはインポートする場合は、共有 VPC プロジェクトで roles/compute.networkUser ロールを付与します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
    

    HOST_PROJECT_ID は、共有 VPC プロジェクトの ID に置き換えます。

    次の IAM バインディングを Cloud Build サービス アカウントに追加します。

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. 更新されたポリシーを書き込むには、setIamPolicy メソッドを使用します。

    たとえば、ポリシーをプロジェクト レベルで設定するには、project.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

リソースのアクセス管理の詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

必要なロールを Compute Engine サービス アカウントに付与する

Google Cloud コンソールまたは gcloud CLI を使用して初めてイメージをインポートまたはエクスポートするときに、ツールがデフォルトの Compute Engine サービス アカウントに、必要なロールを付与しようとします。デフォルトでは、このアカウントにプロジェクトに対する IAM 編集者のロール(roles/editor)が設定されていますが、このプロセスを行うには権限が不足しています。Compute Engine サービス アカウントには次のロールが必要です。

  • Compute ストレージ管理者のロール(roles/compute.storageAdmin): VM イメージのエクスポートとインポートで必要です。
  • ストレージ オブジェクト閲覧者のロール(roles/storage.objectViewer): VM イメージのインポートに必要です。
  • ストレージ オブジェクト管理者のロール(roles/storage.objectAdmin): VM イメージのエクスポートに必要です。

ただし、Compute Engine サービス アカウントのデフォルトのロールや権限を変更した場合は、サービス アカウントに必要なロールが引き続き適用されていることを確認してください。

Console

  1. プロジェクトまたは組織の [IAM と管理] ページに移動します。

    [IAM と管理] に移動

  2. Compute Engine サービス アカウントを見つけて、[ 編集] をクリックします。

  3. [ロールを選択] リストで、次のロールを選択します。

    • Compute Engine > Compute ストレージ管理者
    • Cloud Storage > ストレージ オブジェクト閲覧者
    • Cloud Storage > ストレージ オブジェクト管理者
  4. 変更を保存します。

gcloud

次の手順では、gcloud projects add-iam-policy-binding コマンドを使用して、プロジェクト レベルで必要なロールを付与します。

  1. roles/compute.storageAdmin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. イメージをインポートする場合は、roles/storage.objectViewer ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. イメージをエクスポートする場合は、roles/storage.objectAdmin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

REST

  1. リソースの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy メソッドを使用します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID は、プロジェクト ID に置き換えます(例: my-project-1)。

  2. アカウントに必要なロールを付与するには、テキスト エディタでポリシーを編集します。

    たとえば、イメージのインポートで必要なロールを serviceAccount:12345-compute@developer.gserviceaccount.com に付与するには、次のバインディングをポリシーに追加します。

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. 更新されたポリシーを書き込むには、setIamPolicy メソッドを使用します。

    たとえば、ポリシーをプロジェクト レベルで設定するには、project.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

デフォルトの Compute Engine サービス アカウントを使用しない場合は、gcloud のインポート コマンドとエクスポート コマンドで --compute-service-account フラグを使用して、ユーザー管理のサービス アカウントを指定できます。カスタム Compute Engine のサービス アカウントの使用に関する詳細については、次のリソースをご覧ください。

次のステップ