このドキュメントでは、Compute Engine でイメージをインポートおよびエクスポートするための前提条件について説明します。
Cloud Storage からイメージをインポートまたはエクスポートすることで、他のクラウド環境またはオンプレミス環境から仮想マシン(VM)インスタンス、仮想ディスク ファイル、マシンイメージを共有できます。次のチェックリストは、イメージをインポートまたはエクスポートする際の前提条件をまとめたものです。
- Cloud Storage バケットへのアクセスを設定する
- 必要なロールをユーザー アカウントに付与する
- 必要なロールを Cloud Build サービス アカウントに付与する
- 必要なロールを Compute Engine サービス アカウントに付与する
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
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
)
コンソール
プロジェクトまたは組織の [IAM と管理] ページに移動します。
アカウントを見つけて、[
編集] をクリックします。[ロールを選択] リストで、次のロールを選択します。
- Cloud Storage > ストレージ管理者
- プロジェクト > 閲覧者
- Resource Manager > プロジェクト IAM 管理者
- Cloud Build > Cloud Build 編集者
変更を保存します。
gcloud
次の手順では、gcloud projects add-iam-policy-binding
コマンドを使用して、プロジェクト レベルで必要なロールを付与します。
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
)
roles/viewer
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
roles/resourcemanager.projectIamAdmin
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/resourcemanager.projectIamAdmin'
roles/cloudbuild.builds.editor
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/cloudbuild.builds.editor'
REST
リソースの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
PROJECT_ID
は、プロジェクト ID に置き換えます(例:my-project-1
)。アカウントに必要なロールを付与するには、テキスト エディタでポリシーを編集します。
たとえば、必要なロールをアカウント
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" ] } }
更新されたポリシーを書き込むには、
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 ネットワーク ユーザーのロールを付与します。
ただし、これらのロールを手動で付与して、必要な権限を有効にすることもできます。
コンソール
Cloud Build API を有効にしたら、プロジェクトまたは組織の [IAM と管理] ページに移動します。
Cloud Build サービス アカウントを見つけて、[
編集] をクリックします。必要なロールが表示されていない場合は、次の手順を行います。
- [ 別のロールを追加] をクリックします。
[ロールを選択] リストで、必要なロールを選択します。
- サービス アカウント > サービス アカウント トークン作成者
- サービス アカウント > サービス アカウント ユーザー
Compute Engine > Compute 管理者
また、カスタムロールを選択することもできます。前述のカスタムロールに必要な権限をご覧ください。
[保存] をクリックして変更を保存します。
省略可: 共有 VPC を使用するイメージをインポートまたはエクスポートする場合は、共有 VPC プロジェクトで Compute ネットワーク ユーザーのロールを選択します。
- コンソールの上部にあるプロジェクト セレクタで、共有 VPC ホスト プロジェクトを選択します。
- [IAM と管理] ページで、 [アクセス権を付与] をクリックします。
- [新しいプリンシパル] フィールドに、Cloud Build サービス アカウントのメールアドレスを入力します。
PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
PROJECT_NUMBER
は、イメージをインポートまたはエクスポートする一意のプロジェクト番号に置き換えます。 - [ロールを選択] リストで、[Compute Engine] > [Compute ネットワーク ユーザー] ロールを選択します。
- [保存] をクリックして変更を保存します。
gcloud
次の手順では、gcloud projects add-iam-policy-binding
コマンドを使用して、プロジェクト レベルで必要なロールを付与します。
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'
次のように置き換えます。
PROJECT_ID
: プロジェクトの Google Cloud プロジェクト IDPROJECT_NUMBER
: プロジェクトの Google Cloud プロジェクト番号
roles/iam.serviceAccountUser
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/iam.serviceAccountUser'
roles/iam.serviceAccountTokenCreator
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/iam.serviceAccountTokenCreator'
省略可: 共有 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 が配置されているホスト プロジェクトの IDPROJECT_NUMBER
: イメージをインポートまたはエクスポートする一意のプロジェクト番号
REST
リソースの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
PROJECT_ID
は、プロジェクト ID に置き換えます(例:my-project-1
)。アカウントに必要なロールを付与するには、テキスト エディタでポリシーを編集します。
たとえば、必要なロールを
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 サービス アカウントに付与します。前述のカスタムロールに必要な権限をご覧ください。省略可: 共有 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" ] } }
更新されたポリシーを書き込むには、
setIamPolicy
メソッドを使用します。たとえば、ポリシーをプロジェクト レベルで設定するには、
project.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
リソースのアクセス管理の詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
必要なロールを Compute Engine サービス アカウントに付与する
Google Cloud コンソールまたは gcloud CLI を使用して初めてイメージをインポートまたはエクスポートするときに、ツールがデフォルトの Compute Engine サービス アカウントに、必要なロールを付与しようとします。
組織のポリシーの構成によっては、デフォルトのサービス アカウントにプロジェクトの編集者のロールが自動的に付与される場合があります。iam.automaticIamGrantsForDefaultServiceAccounts
組織ポリシー制約を適用して、自動的なロール付与を無効にすることを強くおすすめします。2024 年 5 月 3 日以降に組織を作成した場合、この制約はデフォルトで適用されます。
自動ロール付与を無効にする場合、デフォルトのサービス アカウントに付与するロールを決定し、これらのロールを付与する必要があります。
デフォルトのサービス アカウントにすでに編集者ロールが設定されている場合は、編集者ロールを権限の低いロールに置き換えることをおすすめします。サービス アカウントのロールを安全に変更するには、Policy Simulator を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。
Compute Engine サービス アカウントには次のロールが必要です。
- Compute ストレージ管理者のロール(
roles/compute.storageAdmin
): VM イメージのエクスポートとインポートに必要です。 - ストレージ オブジェクト閲覧者のロール(
roles/storage.objectViewer
): VM イメージのインポートに必要です。 - ストレージ オブジェクト管理者のロール(
roles/storage.objectAdmin
): VM イメージのエクスポートに必要です。
コンソール
プロジェクトまたは組織の [IAM と管理] ページに移動します。
Compute Engine サービス アカウントを見つけて、[
編集] をクリックします。[ロールを選択] リストで、次のロールを選択します。
- Compute Engine > Compute ストレージ管理者
- Cloud Storage > ストレージ オブジェクト閲覧者
- Cloud Storage > ストレージ オブジェクト管理者
変更を保存します。
gcloud
次の手順では、gcloud projects add-iam-policy-binding
コマンドを使用して、プロジェクト レベルで必要なロールを付与します。
roles/compute.storageAdmin
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/compute.storageAdmin'
イメージをインポートする場合は、
roles/storage.objectViewer
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/storage.objectViewer'
イメージをエクスポートする場合は、
roles/storage.objectAdmin
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/storage.objectAdmin'
REST
リソースの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
PROJECT_ID
は、プロジェクト ID に置き換えます(例:my-project-1
)。アカウントに必要なロールを付与するには、テキスト エディタでポリシーを編集します。
たとえば、イメージのインポートで必要なロールを
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" ] } }
更新されたポリシーを書き込むには、
setIamPolicy
メソッドを使用します。たとえば、ポリシーをプロジェクト レベルで設定するには、
project.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
デフォルトの Compute Engine サービス アカウントを使用しない場合は、gcloud
のインポート コマンドとエクスポート コマンドで --compute-service-account
フラグを使用して、ユーザー管理のサービス アカウントを指定できます。カスタム Compute Engine のサービス アカウントの使用に関する詳細については、次のリソースをご覧ください。
- カスタム サービス アカウントを使用して仮想ディスクをインポートする
- カスタム サービス アカウントを使用して仮想アプライアンスをインポートする
- カスタム サービス アカウントを使用して仮想アプライアンスからマシンイメージをインポートする
- カスタム サービス アカウントを使用してカスタム イメージをエクスポートする
次のステップ
- カスタム イメージを Cloud Storage にエクスポートする。
- プロジェクト間でイメージを共有する。
- インポート方法を選択する。
- 仮想ディスクのインポート
- 仮想アプライアンスのインポート
- 仮想アプライアンスからのマシンイメージのインポート