Provider konfigurieren

Konfigurieren Sie den OCI-Terraform-Provider mit der erforderlichen Authentifizierung und optionalen Umgebungsvariablen.

Hinweis

Beispiele für Terraform-Konfigurationsdateien zum Erstellen bestimmter Ressourcen finden Sie unter Beispiele für den Terraform-Oracle Cloud Infrastructure-Provider.

Authentifizierung

Um mit den Oracle Cloud Infrastructure-(OCI-)Services und unterstützten Ressourcen zu interagieren, konfigurieren Sie den OCI-Terraform-Provider mit Authentifizierungszugangsdaten für einen OCI-Account.

Der OCI-Terraform-Provider unterstützt vier Authentifizierungsmethoden:

API-Schlüsselauthentifizierung

Standardmäßig verwendet der Terraform-Provider die API-Schlüsselauthentifizierung. Sie können diese jedoch auch explizit festlegen, indem Sie das Attribut auth in der Providerdefinition mit "APIKey" belegen. Aufrufe an OCI mit API-Schlüsselauthentifizierung erfordern, dass Sie die folgenden Zugangsdaten angeben:

Geben Sie beispielsweise diese Werte in Umgebungsvariablen oder in Terraform-Konfigurationsvariablen an.

Instanz-Principal-Autorisierung

Bei der Instanz-Principal-Autorisierung kann der Provider API-Aufrufe aus einer OCI Compute-Instanz ohne die Attribute tenancy_ocid, user_ocid, private_key_path und fingerprint in der Providerdefinition ausführen.

Hinweis

Die Instanz-Principal-Autorisierung kann nur für Instanzen angewendet werden, die in Oracle Cloud Infrastructure ausgeführt werden.

Um die Instanz-Principal-Autorisierung für OCI-Terraform-Provider zu aktivieren, setzen Sie das Attribut auth in der Providerdefinition auf "InstancePrincipal", wie im folgenden Beispiel dargestellt:

variable "region" {}

provider "oci" {
   auth = "InstancePrincipal"
   region = var.region
}

Weitere Informationen finden Sie unter Services aus einer Instanz aufrufen.

Resource-Principal-Autorisierung

Mit der Resource-Hauptautorisierung, wie z.B. der Instanz-Hauptautorisierung, kann der Provider API-Aufrufe ausführen, ohne Zugangsdaten in der Providerdefinition angeben zu müssen. Mit der Autorisierung des Resource Principals können Ressourcen wie eine aktive Funktion auf andere Oracle Cloud Infrastructure-Ressourcen zugreifen. Weitere Informationen finden Sie unter Auf andere Oracle Cloud Infrastructure-Ressourcen aus aktiven Funktionen zugreifen zugreifen.

So aktivieren Sie die Resource-Principal-Autorisierung für OCI-Terraform-Provider:

  1. Erstellen Sie die dynamische Gruppe und die Policys, die für die aktive Funktion zur Verwaltung anderer OCI-Ressourcen erforderlich sind. Befolgen Sie die Anweisungen unter "Konsole verwenden" unter Auf andere Oracle Cloud Infrastructure-Ressourcen aus aktiven Funktionen zugreifen, und stellen Sie sicher, dass die Policy die Verwaltung anderer Ressourcen zulässt.
  2. Legen Sie die folgenden Umgebungsvariablen fest:

    • OCI_RESOURCE_PRINCIPAL_VERSION mit dem Wert 2.2

      Wenn der Wert 1 lautet, wird das Überschreiben der Region nicht unterstützt.

    • OCI_RESOURCE_PRINCIPAL_RPST mit dem Rohinhalt der Datei rpst oder dem absoluten Pfad zur Datei rpst, einschließlich Dateiname.

    • OCI_RESOURCE_PRINCIPAL_PRIVATE_PEM mit dem absoluten Pfad zur Datei private.pem (einschließlich Dateiname).

    • OCI_RESOURCE_PRINCIPAL_REGION mit der Regions-ID, in der der Provider bereitgestellt wird (Beispiel: us-phoenix-1)

  3. Setzen Sie das Attribut auth in der Providerdefinition auf "ResourcePrincipal".

    Hinweis

    Der Wert für region im Providerblock setzt den von der Umgebungsvariablen OCI_RESOURCE_PRINCIPAL_REGION festgelegten Regionswert außer Kraft. Diese in Terraform-Providerversion 5.0.0 eingeführte Änderung ist nicht abwärtskompatibel.

    Wenn der Wert der Umgebungsvariablen OCI_RESOURCE_PRINCIPAL_VERSION 1 lautet, wird das Überschreiben der Region nicht unterstützt.

    Beispiel:

    provider "oci" {
       auth = "ResourcePrincipal"
       region = var.region
    }

Sicherheitstokenauthentifizierung

Mit der Sicherheitstokenauthentifizierung können Sie Terraform mit einem Token ausführen, das mit der tokenbasierten Authentifizierung für die CLI generiert wurde. Um die Sicherheitstokenauthentifizierung zu aktivieren, aktualisieren Sie die Providerdefinition wie folgt:

  • Belegen Sie das Attribut auth mit SecurityToken.
  • Geben Sie einen Wert für config_file_profile an.
  • Belegen Sie region.

Beispiel:

# Configure the Oracle Cloud Infrastructure provider to use Security Token authentication
provider "oci" {
  auth = "SecurityToken"
  config_file_profile = "PROFILE"
  region = var.region
}
Wichtig

Dieses Token läuft nach einer Stunde ab. Verwenden Sie diese Authentifizierungsmethode nicht, wenn das Provisioning von Ressourcen länger als eine Stunde dauert. Weitere Informationen finden Sie unter Token aktualisieren.

OKE Workload-Identitätsauthentifizierung

In Kubernetes ist eine Workload eine Anwendung, die auf einem Kubernetes-Cluster ausgeführt wird. Eine Workload kann eine Anwendungskomponente sein, die in einem einzelnen Pod ausgeführt wird, oder mehrere Anwendungskomponenten, die in einer Gruppe von Pods ausgeführt werden, die zusammenarbeiten. Alle Pods in der Workload werden im selben Namespace ausgeführt.

In Oracle Cloud Infrastructure wird eine Workload, die auf einem von der Kubernetes Engine verwalteten Kubernetes-Cluster (auch als OKE bezeichnet) ausgeführt wird, als eigene Ressource betrachtet. Eine Workload-Ressource wird durch die eindeutige Kombination aus Kubernetes-Cluster, Namespace und Serviceaccount identifiziert. Diese eindeutige Kombination wird als Workload-Identität bezeichnet.

Mit der OKE Workload-Identitätsauthentifizierung können Workloads, die auf Kubernetes-Clustern ausgeführt werden, die von der Kubernetes-Engine verwaltet werden, auf andere Oracle Cloud Infrastructure-Ressourcen zugreifen. Weitere Informationen finden Sie unter Workloads Zugriff auf OCI-Ressourcen erteilen.

Um die OKE-Workload-Identitätsauthentifizierung für OCI-Terraform-Provider zu aktivieren, setzen Sie das Attribut auth in der Providerdefinition auf "OKEWorkloadIdentity", wie im folgenden Beispiel dargestellt:

variable "region" {}
provider "oci" {
   auth = "OKEWorkloadIdentity"
   region = var.region
}

Umgebungsvariablen

Die folgenden Umgebungsvariablen sind für die Konfiguration des Providers verfügbar.

  • OCI_DEFAULT_CERTS_PATH (Zertifikatspfad)

    Hinweis

    Verwenden Sie jeweils nur eine Zertifikatspfadvariable.
  • OCI_SDK_APPEND_USER_AGENT (Benutzerdefinierter User Agent)

  • realm_specific_service_endpoint_template_enabled (dedizierter Endpunkt für sicheren Zugriff auf Speicher-Buckets)

  • TF_APPEND_USER_AGENT (Benutzerdefinierter User Agent)

  • TF_VAR_compartment_ocid (Wert für Compartment-OCID-Authentifizierung)

  • TF_VAR_fingerprint (Authentifizierungswert für Fingerabdruck des Schlüssels)

  • TF_VAR_private_key_path (Authentifizierungswert für Private-Key-Pfad)

  • TF_VAR_region (Regionswert)

    Beispiel: us-ashburn-1

  • TF_VAR_tenancy_ocid (Authentifizierungswert für Mandanten-OCID)

  • TF_VAR_user_ocid (Benutzer-OCID-Authentifizierungswert)

  • USER_AGENT_PROVIDER_NAME (Benutzerdefinierter User Agent)

Umgebungsvariablen exportieren und Sourcing

Sie können die erforderlichen Authentifizierungswerte entweder als Umgebungsvariablen exportieren oder bei der Ausführung von Terraform-Befehlen in verschiedenen bash-Profilen abrufen.

Wenn Sie in erster Linie in einem einzelnen Compartment arbeiten, sollten Sie die Compartment-OCID als Umgebungsvariable exportieren. Die Mandanten-OCID ist auch die OCID des Root Compartments und kann verwendet werden, wenn eine Compartment-OCID erforderlich ist.

Tipp

Sie können Providerblöcke in Terraform-Konfigurationsdateien entfernen, wenn alle erforderlichen Werte für die API-Schlüsselauthentifizierung als Umgebungsvariablen angegeben oder in einer *.tfvars-Datei festgelegt sind.
UNIX- und Linux-Exportbeispiel
Das folgende UNIX- und Linux-Beispiel bash_profile gilt, wenn die Terraform-Konfiguration auf ein einzelnes Compartment oder einen einzelnen Benutzer beschränkt ist.
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>
Nachdem Sie diese Werte festgelegt haben, öffnen Sie ein neues Terminal oder eine neue Quelle für die Profiländerungen:
$ source ~/.bash_profile
Bei komplexeren Umgebungen sollten Sie mehrere Gruppen von Umgebungsvariablen verwalten.
Windows-Exportbeispiel
Hinweis

Stellen Sie das PEM-Format für Schlüssel sicher. Weitere Informationen finden Sie unter So generieren Sie einen API-Signaturschlüssel.
Das folgende Windows-Beispiel gilt, wenn die Terraform-Konfiguration auf ein einzelnes Compartment oder einen einzelnen Benutzer beschränkt ist.
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>
Beenden Sie das Terminal, nachdem Sie diese Werte festgelegt haben, und öffnen Sie es erneut. (Die Variablen sind nicht für die aktuelle Session festgelegt.)

Benutzerdefinierte Benutzer-Agents verwenden

Um einen benutzerdefinierten Benutzer-Agent zu verwenden, exportieren Sie eine der folgenden Umgebungsvariablen. Es wird jeweils nur eine Umgebungsvariable in der folgenden Prioritätsreihenfolge berücksichtigt:

  • USER_AGENT_PROVIDER_NAME
  • OCI_SDK_APPEND_USER_AGENT
  • TF_APPEND_USER_AGENT

Dedizierten Endpunkt für Object Storage Service angeben

Greifen Sie mit dem OCI-Terraform-Provider sicher auf Speicher-Buckets in Object Storage mit dedizierten Endpunkten zu. Verwenden Sie bei der Konfiguration des Providers eine Umgebungsvariable, einen Parameter im Providerblock oder beides. Wenn Sie beide verwenden, hat der Providerblockparameter Vorrang.

Die Umgebungsvariable ist OCI_REALM_SPECIFIC_SERVICE_ENDPOINT_TEMPLATE_ENABLED. Der Standardwert lautet false. Setzen Sie den Wert auf true, um einen dedizierten Endpunkt zu verwenden.

Der Providerblockparameter lautet realm_specific_service_endpoint_template_enabled. Der Standardwert lautet false. Setzen Sie den Wert auf true, um einen dedizierten Endpunkt zu verwenden.

Nur dedizierten Endpunkt verwenden

  • Setzen Sie im Block provider den Wert realm_specific_service_endpoint_template_enabled auf true.

    provider "oci" {
      realm_specific_service_endpoint_template_enabled = true
    }

Standard- und dedizierte Endpunkte verwenden

Verwenden Sie das Terraform-Alias-Metaargument, um sowohl auf Standardserviceendpunkte als auch auf Realm-spezifische Endpunkte zuzugreifen. Setzen Sie Standardendpunkte mit realm-spezifischen Endpunkten außer Kraft, indem Sie den Providerparameter bei der Ressourcenerstellung angeben.

  1. Definieren Sie einen provider-Block für jeden Endpunkt.

    provider "oci" {
      realm_specific_service_endpoint_template_enabled = true
    }
    
    provider "oci" {
        #By default realm_specific_service_endpoint_template_enabled = false
    }
  2. Verwenden Sie das Terraform-Metadatenargument alias im Block provider, der für einen dedizierten Endpunkt bestimmt ist.

    Beispiel: Fügen Sie alias = "custom_endpoint" hinzu.

    provider "oci" {
      alias = "custom_endpoint"
      realm_specific_service_endpoint_template_enabled = true
    }
    
    provider "oci" {
        #By default realm_specific_service_endpoint_template_enabled = false
    }
  3. Referenzieren Sie in jedem resource-Block, den Sie einen dedizierten Endpunkt verwenden möchten, die provider mit dem Wert alias.

    Beispiel: Fügen Sie provider = "custom_endpoint" hinzu.

    Das folgende Beispiel zeigt zwei Providerblöcke und zwei Ressourcenblöcke. In diesem Beispiel verwendet bucket1 den Standardendpunkt, während bucket2 den dedizierten Endpunkt verwendet.

    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- und CLI-Konfigurationsdatei verwenden

Sie können die erforderlichen Providerwerte in derselben ~/.oci/config-Datei definieren, die von den SDKs und der CLI verwendet wird. Details zum Einrichten dieser Konfiguration finden Sie unter SDK- und CLI-Konfigurationsdatei.

Wichtig

Parameternamen in der SDK- und CLI-Konfigurationsdatei unterscheiden sich leicht.
Tipp

Providerblöcke in Terraform-Konfigurationsdateien können vollständig entfernt werden, wenn alle erforderlichen Werte für die API-Schlüsselauthentifizierung als Umgebungsvariablen angegeben oder in der ~/.oci/config-Datei festgelegt sind.

Mit dem folgenden Befehl können Sie ein nicht standardmäßiges OCI-Konfigurationsprofil als Umgebungswert festlegen:

export TF_VAR_config_file_profile=<config_file_profile_name>

Sie können das OCI-Konfigurationsprofil auch in einem Providerblock festlegen. Beispiel:

provider "oci" {
  tenancy_ocid = var.tenancy_ocid
  config_file_profile= var.config_file_profile
}

Prioritätsfolge

Wenn die Parameter an mehreren Orten festgelegt werden, lautet die Prioritätsreihenfolge wie folgt:

  1. Die Umgebungsvariable
  2. Das nicht standardmäßige Profil in der OCI-Konfigurationsdatei, sofern angegeben
  3. Das DEFAULT-Profil in der OCI-Konfigurationsdatei