このドキュメントでは、Terraform の使用時に Google Cloud の認証を行う方法について説明します。
Terraform を使用する場合は、アプリケーションのデフォルト認証情報(ADC)を使用して Google Cloud の認証を行うことをおすすめします。ADC は、アプリケーション環境に基づいて認証情報を自動的に検索するために認証ライブラリが使用するストラテジです。ADC を使用すると、Google Cloud サービスと API に対する認証方法を変更せずに、Terraform を開発環境または本番環境で実行できます。ADC が認証情報を探す場所と順序については、アプリケーションのデフォルト認証情報の仕組みをご覧ください。
ローカル開発環境で Terraform を使用する場合の認証
開発用ワークステーションなどのローカル開発環境で Terraform を使用している場合は、ユーザー アカウントまたはサービス アカウントに関連付けられた認証情報を使用して認証できます。
Google アカウントを使用して認証を行う
Google アカウントで ADC を構成するには、Google Cloud CLI を使用します。
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
ログイン画面が表示されます。ログインすると、ADC で使用されるローカル認証情報ファイルに認証情報が保存されます。
外部アカウントを使用して認証する
外部 ID プロバイダで管理されているユーザー アカウントの ADC を構成するには:
次のコマンドを実行して ADC を構成します。
gcloud auth application-default login
ログイン画面が表示されます。ログインすると、ADC で使用されるローカル認証情報ファイルに認証情報が保存されます。
サービス アカウントの権限借用を使用して認証する
サービス アカウントの権限を借用して、ローカルの ADC ファイルを設定できます。Terraform は、これらの認証情報を自動的に使用します。
権限を借用するサービス アカウントに対するサービス アカウント トークン作成者(
roles/iam.serviceAccountTokenCreator
)の IAM ロールが必要です。詳細については、必要なロールをご覧ください。サービス アカウントの権限借用を使用してローカル ADC ファイルを作成するには、次のコマンドを実行します。
gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL
ユーザーが共有プライマリ認証ソースと環境ごとの変数サービス アカウントを使用できるようにするには、Terraform 構成ファイルで impersonate_service_account
フィールドを設定します。
provider "google" {
impersonate_service_account = "SERVICE_ACCT_EMAIL"
}
Google Cloud で Terraform を実行する場合の認証
Cloud Shell などの Google Cloud クラウドベース開発環境で Terraform を実行する場合、このツールはログイン時に指定した認証情報を使用します。
Compute Engine、App Engine、Cloud Run functions などの Google Cloud サービスで Terraform を使用する場合は、ユーザー管理のサービス アカウントをリソースに接続できます。一般に、サービス アカウントのリソースを指定できるのは、そのサービスのリソースがアプリケーション コードを実行またはインクルードできる場合です。サービス アカウントをリソースに関連付けると、リソースで実行中のコードでそのサービス アカウントを ID として使用できます。
Google Cloud で実行される本番環境コードの認証情報を ADC に提供するには、ユーザー管理のサービス アカウントに関連付けることをおすすめします。
サービス アカウントに付与する必要があるロールの決定については、事前定義ロールの選択をご覧ください。
サービス アカウントを接続できるリソースと、サービス アカウントをリソースに接続する方法については、サービス アカウントの接続に関する IAM ドキュメントをご覧ください。
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
To provide access to your project and your resources, grant a role to the service account:
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
- To grant another role to the service account, run the command as you did in the previous step.
-
Grant the required role to the principal that will attach the service account to other resources.
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountUSER_EMAIL
: the email address for a Google Account
オンプレミスまたは別のクラウド プロバイダで Terraform を実行する場合の認証
Google Cloud の外部でアプリケーションを実行している場合は、Google Cloud サービスを利用するために Google Cloud で認識される認証情報を提供する必要があります。
Workload Identity 連携を使用して認証する
外部 IdP の認証情報を使用して Google Cloud で認証する場合は、Workload Identity 連携を使用します。認証情報の構成ファイルを作成し、それを参照するように GOOGLE_APPLICATION_CREDENTIALS
環境変数を設定できます。これは、サービス アカウント キーを作成するよりも安全です。ADC の Workload Identity 連携の設定手順については、他のクラウドとの Workload Identity 連携をご覧ください。
サービス アカウント キーを使用して認証する
ローカル開発環境、オンプレミス、または別のクラウド プロバイダで Terraform を実行する場合は、サービス アカウントを作成し、アプリケーションに必要な IAM ロールを付与して、サービス アカウントのキーを作成できます。
サービス アカウント キーを作成して ADC で使用できるようにするには:
サービス アカウント キーの作成の手順に沿って、アプリケーションに必要なロールとサービス アカウント キーを使用して、サービス アカウントを作成します。
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again.
Cloud Storage バックエンドに対する認証
Terraform では、Terraform 状態ファイルを保存するバックエンドとして Cloud Storage を構成できます。Cloud Storage バックエンドを認証するには、このページで説明するいずれかの方法を使用します。Cloud Storage バックエンドの認証に関連する構成変数については、Cloud Storage の Terraform バックエンドをご覧ください。
次のステップ
- Google Cloud 向け Terraform のクイックスタートを確認する。
- 基本的な Terraform コマンドについて学習する。