プロバイダの構成

必要な認証およびオプションの環境変数を使用して、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をコールするには、次の資格証明を指定する必要があります:

たとえば、これらの値を環境変数として、またはTerraform構成変数内に指定します。

インスタンス・プリンシパル認可

インスタンス・プリンシパル認可を使用すると、プロバイダは、プロバイダ定義のtenancy_ociduser_ocidprivate_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プロバイダのリソース・プリンシパル認可を有効にするには:

  1. 実行中のファンクションで他のOCIリソースを管理するために必要な動的グループおよびポリシーを作成します。「ファンクションの実行からの他のOracle Cloud Infrastructureリソースへのアクセス」コンソールの使用の手順に従い、ポリシーで他のリソースの管理が許可されていることを確認します。
  2. 次の環境変数を設定します:

    • 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)。

  3. プロバイダ定義で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
}
重要

このトークンは1時間後に期限切れになります。リソースのプロビジョニングに1時間以上かかる場合は、この認証方法を使用しないでください。詳細は、トークンのリフレッシュを参照してください。

OKEワークロード・アイデンティティ認証

Kubernetesでは、ワークロードはKubernetesクラスタで実行されているアプリケーションです。ワークロードには、1つのポッド内で1つのアプリケーション・コンポーネントを実行することも、1つのポッドのセット内で複数のアプリケーション・コンポーネントを実行することもできます。ワークロード内のすべてのポッドは同じネームスペースで実行されます。

Oracle Cloud Infrastructureでは、Container Engine for Kubernetes (OKEとも呼ばれる)によって管理されるKubernetesクラスタで実行されているワークロードは、それ自体がリソースと見なされます。ワークロード・リソースは、Kubernetesクラスタ、ネームスペースおよびサービス・アカウントの一意の組合せによって識別されます。この一意の組合せは、ワークロード・アイデンティティと呼ばれます。

OKEワークロード・アイデンティティ認証では、Container Engine for Kubernetesによって管理される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が必要な場合に使用できます。

ヒント

Terraform構成ファイルのプロバイダ・ブロックは、APIキー認証に必要なすべての値が環境変数として指定されているか、*.tfvarsファイルに設定されている場合、削除できます。
UNIXおよびLinuxのエクスポートの例
次のUNIXおよびLinuxのbash_profileの例は、Terraform構成が単一のコンパートメントまたはユーザーに制限されている場合に適用されます。
export OCI_DEFAULT_CERTS_PATH=<certificates_path>
export TF_VAR_tenancy_ocid=<tenancy_OCID>
export TF_VAR_compartment_ocid=<compartment_OCID>
export TF_VAR_user_ocid=<user_OCID>
export TF_VAR_fingerprint=<key_fingerprint>
export TF_VAR_private_key_path=<private_key_path>
export TF_VAR_region=<region>
export USER_AGENT_PROVIDER_NAME=<custom_user_agent>
export OCI_SDK_APPEND_USER_AGENT=<custom_user_agent>
export TF_APPEND_USER_AGENT=<custom_user_agent>
これらの値を設定したら、新しい端末を開くか、プロファイル変更をソースします。
$ source ~/.bash_profile
より複雑な環境では、複数の環境変数のセットを保持することを検討してください。
Windowsエクスポートの例
ノート

キーのPEMフォーマットを確認してください。詳細は、API署名キーの生成方法を参照してください。
次のWindowsの例は、Terraform構成が単一のコンパートメントまたはユーザーに制限されている場合に適用されます。
setx OCI_DEFAULT_CERTS_PATH=<certificates_path>
setx TF_VAR_tenancy_ocid <tenancy_OCID>
setx TF_VAR_compartment_ocid <compartment_OCID>
setx TF_VAR_user_ocid <user_OCID>
setx TF_VAR_fingerprint <key_fingerprint>
setx TF_VAR_private_key_path <private_key_path>
setx TF_VAR_region=<region>
setx USER_AGENT_PROVIDER_NAME=<custom_user_agent>
setx OCI_SDK_APPEND_USER_AGENT=<custom_user_agent>
setx TF_APPEND_USER_AGENT=<custom_user_agent>
これらの値を設定したら、端末を終了して再度開きます。(変数は、現在のセッションには設定されません。)

カスタム・ユーザー・エージェントの使用

カスタム・ユーザー・エージェントを使用するには、次のいずれかの環境変数をエクスポートします。この優先順位に従って、一度に考慮される環境変数は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_enabledtrueに設定します。

    provider "oci" {
      realm_specific_service_endpoint_template_enabled = true
    }

デフォルト・エンドポイントと専用エンドポイントの両方の使用

Terraform別名メタ引数を使用して、デフォルトのサービス・エンドポイントとレルム固有のエンドポイントの両方にアクセスします。リソース作成でプロバイダ・パラメータを指定して、デフォルト・エンドポイントをレルム固有のエンドポイントでオーバーライドします。

  1. エンドポイントごとにproviderブロックを定義します。

    provider "oci" {
      realm_specific_service_endpoint_template_enabled = true
    }
    
    provider "oci" {
        #By default realm_specific_service_endpoint_template_enabled = false
    }
  2. 専用エンドポイント用のproviderブロックでTerraform aliasメタ引数を使用します。

    たとえば、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
    }
  3. 専用エンドポイントを使用する各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
}

優先順位

パラメータが複数の場所に設定されている場合、優先順位は次のとおりです:

  1. 環境変数
  2. OCI構成ファイルのデフォルト以外のプロファイル(指定されている場合)
  3. OCI構成ファイルのDEFAULTプロファイル