プロバイダの構成
必要な認証およびオプションの環境変数を使用してOCI Terraformプロバイダを構成します。
特定のリソースを作成するためのTerraform構成ファイルの例は、Terraform Oracle Cloud Infrastructure Provider Examplesを参照してください。
認証
Oracle Cloud Infrastructure (OCI)サービスおよびサポートされているリソースと対話するには、OCIアカウントの認証資格証明を使用してOCI Terraformプロバイダを構成します。
OCI Terraformプロバイダは、4つの認証方法をサポートしています:
APIキー認証
デフォルトでは、TerraformプロバイダはAPIキー認証を使用しますが、これを明示的に指定するには、プロバイダ定義でauth
属性を"APIKey"に設定します。APIキー認証を使用してOCIをコールするには、次の資格証明を指定する必要があります:
tenancy_ocid
- テナンシのOCID。値を取得するには、テナンシのOCIDとユーザーのOCIDを取得する場所を参照してください。user_ocid
- APIをコールするユーザーのOCID。値を取得するには、テナンシのOCIDとユーザーのOCIDを取得する場所を参照してください。private_key
- 秘密キー・ファイルの内容。private_key_path
が定義されていない場合は必須で、両方が定義されている場合はprivate_key_path
よりも優先されます。キーの作成および構成方法の詳細は、API署名キーの生成方法および公開キーのアップロード方法を参照してください。private_key_path
- コンピュータに格納されている秘密キーのパス(ファイル名を含む)。private_key
が定義されていない場合は必須です。キーの作成および構成方法の詳細は、API署名キーの生成方法および公開キーのアップロード方法を参照してください。private_key_password
- (オプション)キーに使用されるパスフレーズ(キーが暗号化されている場合)。fingerprint
- 使用されているキー・ペアのフィンガープリント。値を取得するには、キーのフィンガープリントの取得方法を参照してください。region
- OCIリージョン。リージョンおよび可用性ドメインを参照してください。config_file_profile
- プロファイル名(OCI構成ファイルのカスタム・プロファイルを使用して認証資格証明を指定する場合)。詳細は、SDKおよびCLIの構成ファイルの使用を参照してください。
たとえば、これらの値を環境変数として、またはTerraform構成変数内に指定します。
インスタンス・プリンシパル認可
インスタンス・プリンシパル認可を使用すると、プロバイダは、プロバイダ定義のtenancy_ocid
、user_ocid
、private_key_path
およびfingerprint
属性を必要とすることなく、OCIコンピュート・インスタンスからAPIコールを行うことができます。
インスタンス・プリンシパル認可は、Oracle Cloud Infrastructureで実行中のインスタンスにのみ適用されます。
OCI Terraformプロバイダのインスタンス・プリンシパル認可を有効にするには、次の例に示すように、プロバイダ定義でauth
属性にInstancePrincipalを設定します:
variable "region" {}
provider "oci" {
auth = "InstancePrincipal"
region = var.region
}
詳細は、インスタンスからのサービスのコールを参照してください。
リソース・プリンシパル認可
インスタンス・プリンシパル認可などのリソース・プリンシパル認可では、プロバイダ定義内で資格証明を指定せずに、プロバイダがAPIコールを実行できます。リソース・プリンシパル認可を使用すると、実行中のファンクションなどのリソースが他のOracle Cloud Infrastructureリソースにアクセスできます。詳細は、実行しているファンクションからの他のOracle Cloud Infrastructureリソースへのアクセスを参照してください。
OCI Terraformプロバイダのリソース・プリンシパル認可を有効にするには:
- 実行中のファンクションで他のOCIリソースを管理するために必要な動的グループおよびポリシーを作成します。「ファンクションの実行からの他のOracle Cloud Infrastructureリソースへのアクセス」のコンソールの使用の手順に従い、ポリシーで他のリソースの管理が許可されていることを確認します。
-
次の環境変数を設定します:
-
OCI_RESOURCE_PRINCIPAL_VERSION
: 値2.2
が含まれます。値が
1
の場合、リージョンのオーバーライドはサポートされていません。 -
OCI_RESOURCE_PRINCIPAL_RPST
:rpst
ファイルのRAWコンテンツ、またはrpst
ファイルへの絶対パスを含みます(ファイル名を含む)。 -
OCI_RESOURCE_PRINCIPAL_PRIVATE_PEM
:private.pem
ファイルへの絶対パスを含みます(ファイル名を含む)。 -
OCI_RESOURCE_PRINCIPAL_REGION
: プロバイダがデプロイされるリージョン識別子を含みます(たとえば、us-phoenix-1
)。
-
-
プロバイダ定義で
auth
属性を"ResourcePrincipal"に設定します。ノート
プロバイダ・ブロック内の
region
の値は、環境変数OCI_RESOURCE_PRINCIPAL_REGION
で設定されたリージョン値をオーバーライドします。Terraform Providerバージョン5.0.0で導入されたこの変更は、下位互換性がありません。OCI_RESOURCE_PRINCIPAL_VERSION
環境変数の値が1
の場合、リージョンのオーバーライドはサポートされていません。例:
provider "oci" { auth = "ResourcePrincipal" region = var.region }
セキュリティ・トークン認証
セキュリティ・トークン認証によって、CLIでのトークンベースの認証で生成されたトークンを使用してTerraformを実行できます。セキュリティ・トークン認証を有効にするには、次のようにプロバイダ定義を更新します:
auth
属性をSecurityToken
に設定します。config_file_profile
の値を指定します。region
を設定します。
例:
# Configure the Oracle Cloud Infrastructure provider to use Security Token authentication
provider "oci" {
auth = "SecurityToken"
config_file_profile = "PROFILE"
region = var.region
}
OKEワークロード・アイデンティティ認証
Kubernetesでは、ワークロードはKubernetesクラスタで実行されているアプリケーションです。ワークロードには、1つのポッド内で1つのアプリケーション・コンポーネントを実行することも、1つのポッドのセット内で複数のアプリケーション・コンポーネントを実行することもできます。ワークロード内のすべてのポッドは同じネームスペースで実行されます。
Oracle Cloud Infrastructureでは、Kubernetes Engine (OKEとも呼ばれる)によって管理されるKubernetesクラスタで実行されるワークロードは、それ自体がリソースと見なされます。ワークロード・リソースは、Kubernetesクラスタ、ネームスペースおよびサービス・アカウントの一意の組合せによって識別されます。この一意の組合せは、ワークロード・アイデンティティと呼ばれます。
OKEワークロード・アイデンティティ認証では、Kubernetes Engineによって管理されるKubernetesクラスタで実行されているワークロードが、他のOracle Cloud Infrastructureリソースにアクセスできます。詳細は、「ワークロードのOCIリソースへのアクセス権の付与」を参照してください。
OCI TerraformプロバイダのOKEワークロード・アイデンティティ認証を有効にするには、次の例に示すように、プロバイダ定義でauth
属性にOKEWorkloadIdentityを設定します:
variable "region" {}
provider "oci" {
auth = "OKEWorkloadIdentity"
region = var.region
}
環境変数
プロバイダの構成には、次の環境変数を使用できます。
-
OCI_DEFAULT_CERTS_PATH
(証明書パス)ノート
一度に1つの証明書パス変数のみを使用してください。 -
OCI_SDK_APPEND_USER_AGENT
(カスタム・ユーザー・エージェント) -
realm_specific_service_endpoint_template_enabled
(ストレージ・バケットに安全にアクセスするための専用エンドポイント) -
TF_APPEND_USER_AGENT
(カスタム・ユーザー・エージェント) -
TF_VAR_compartment_ocid
(コンパートメントOCID認証値) -
TF_VAR_fingerprint
(キー・フィンガープリント認証値) -
TF_VAR_private_key_path
(秘密キー・パス認証値) -
TF_VAR_region
(リージョン値)例:
us-ashburn-1
-
TF_VAR_tenancy_ocid
(テナンシOCID認証値) -
TF_VAR_user_ocid
(ユーザーOCID認証値) -
USER_AGENT_PROVIDER_NAME
(カスタム・ユーザー・エージェント)
環境変数のエクスポートおよびソーシング
環境変数として必要な認証値をエクスポートするか、Terraformコマンドの実行時に様々なbashプロファイルでそれらをソース指定できます。
主に単一のコンパートメントで動作する場合は、環境変数としてコンパートメントOCIDをエクスポートすることを検討してください。テナンシOCIDは、ルート・コンパートメントのOCIDでもあり、任意のコンパートメントOCIDが必要な場合に使用できます。
- UNIXおよびLinuxのエクスポートの例
- 次のUNIXおよびLinuxの
bash_profile
の例は、Terraform構成が単一のコンパートメントまたはユーザーに制限されている場合に適用されます。
- Windowsエクスポートの例
カスタム・ユーザー・エージェントの使用
カスタム・ユーザー・エージェントを使用するには、次のいずれかの環境変数をエクスポートします。この優先順位に従って、一度に考慮される環境変数は1つだけです。
USER_AGENT_PROVIDER_NAME
OCI_SDK_APPEND_USER_AGENT
TF_APPEND_USER_AGENT
オブジェクト・ストレージ・サービスの専用エンドポイントの指定
OCI Terraformプロバイダを使用して、専用エンドポイントでオブジェクト・ストレージのストレージ・バケットにセキュアにアクセスします。プロバイダを構成する場合は、環境変数、プロバイダ・ブロック内のパラメータ、またはその両方を使用します。両方を使用する場合、プロバイダ・ブロック・パラメータが優先されます。
環境変数はOCI_REALM_SPECIFIC_SERVICE_ENDPOINT_TEMPLATE_ENABLED
です。デフォルトはfalse
です。専用エンドポイントを使用するには、値をtrue
に設定します。
プロバイダ・ブロック・パラメータはrealm_specific_service_endpoint_template_enabled
です。デフォルトはfalse
です。専用エンドポイントを使用するには、値をtrue
に設定します。
専用エンドポイントのみの使用
-
provider
ブロックで、realm_specific_service_endpoint_template_enabled
をtrue
に設定します。provider "oci" { realm_specific_service_endpoint_template_enabled = true }
デフォルト・エンドポイントと専用エンドポイントの両方の使用
Terraform別名メタ引数を使用して、デフォルトのサービス・エンドポイントとレルム固有のエンドポイントの両方にアクセスします。リソース作成でプロバイダ・パラメータを指定して、デフォルト・エンドポイントをレルム固有のエンドポイントでオーバーライドします。
-
エンドポイントごとに
provider
ブロックを定義します。provider "oci" { realm_specific_service_endpoint_template_enabled = true } provider "oci" { #By default realm_specific_service_endpoint_template_enabled = false }
-
専用エンドポイント用の
provider
ブロックでTerraformalias
メタ引数を使用します。たとえば、
alias = "custom_endpoint"
を追加します。provider "oci" { alias = "custom_endpoint" realm_specific_service_endpoint_template_enabled = true } provider "oci" { #By default realm_specific_service_endpoint_template_enabled = false }
-
専用エンドポイントを使用する各
resource
ブロックで、alias
値でprovider
を参照します。たとえば、
provider = "custom_endpoint"
を追加します。次の例は、2つのプロバイダ・ブロックと2つのリソース・ブロックを示しています。この例では、
bucket1
はデフォルト・エンドポイントを使用し、bucket2
は専用エンドポイントを使用します。provider "oci" { alias = "custom_endpoint" realm_specific_service_endpoint_template_enabled = true } provider "oci" { #By default realm_specific_service_endpoint_template_enabled = false } resource "oci_objectstorage_bucket" "bucket1" { compartment_id = var.compartment_ocid1 namespace = var.namspace1 name = var.name1 access_type = var.access_type1 } resource "oci_objectstorage_bucket" "bucket2" { provider = "oci.custom_endpoint" compartment_id = var.compartment_ocid2 namespace = var.namspace2 name = var.name2 access_type = var.access_type2 }
SDKおよびCLIの構成ファイルの使用
SDKおよびCLIが使用する同じ~/.oci/config
ファイルで、必要なプロバイダ値を定義できます。この構成の設定の詳細は、SDKおよびCLIの構成ファイルを参照してください。
SDKおよびCLIの構成ファイルのパラメータ名は、多少異なります。
Terraform構成ファイルのプロバイダ・ブロックは、APIキー認証に必要なすべての値が環境変数として指定されているか、
~/.oci/config
ファイルに設定されている場合、完全に削除できます。次のコマンドを使用して、デフォルト以外のOCI構成プロファイルを環境値として設定できます:
export TF_VAR_config_file_profile=<config_file_profile_name>
プロバイダ・ブロックにOCI構成プロファイルを設定することもできます。例:
provider "oci" {
tenancy_ocid = var.tenancy_ocid
config_file_profile= var.config_file_profile
}
優先順位
パラメータが複数の場所に設定されている場合、優先順位は次のとおりです:
- 環境変数
- OCI構成ファイルのデフォルト以外のプロファイル(指定されている場合)
- OCI構成ファイルのDEFAULTプロファイル