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 Oracle Cloud Infrastructure-Provider von Terraform.

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

Hinweis

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

Verwenden Sie die Instanz-Principal-Autorisierung, um Anforderungen für die folgenden Attribute in der Providerdefinition zu entfernen:

  • tenancy_ocid
  • user_ocid
  • private_key_path
  • fingerprint

Wenn die Autorisierung des Instanz-Principals aktiviert ist, kann der Provider API-Aufrufe von einer Compute-Instanz ohne diese Attribute ausführen.

Um die 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.

So aktivieren Sie die Resource-Hauptautorisierung 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 die Regionsüberschreibung nicht unterstützt.

    • OCI_RESOURCE_PRINCIPAL_RPST mit dem Raw-Inhalt 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 (mit dem Dateinamen)

    • 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 Änderung, die in Terraform-Providerversion 5.0.0 eingeführt wurde, ist nicht abwärtskompatibel.

    Wenn der Wert der Umgebungsvariablen OCI_RESOURCE_PRINCIPAL_VERSION 1 lautet, wird der Regions-Override nicht unterstützt.

    Beispiel:

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

Sicherheitstokenauthentifizierung

Führen Sie Terraform mit einem Token aus, 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.

Beispiele:

# 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 (Agent für benutzerdefinierte Benutzer)

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

  • TF_APPEND_USER_AGENT (Agent für benutzerdefinierte Benutzer)

  • TF_VAR_compartment_ocid (Compartment-OCID-Authentifizierungswert)

  • TF_VAR_fingerprint (Schlüssel-Fingerprint-Authentifizierungswert)

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

  • TF_VAR_region (Regionswert)

    Beispiel: us-ashburn-1

  • TF_VAR_tenancy_ocid (Mandanten-OCID-Authentifizierungswert)

  • TF_VAR_user_ocid (Benutzer-OCID-Authentifizierungswert)

  • USER_AGENT_PROVIDER_NAME (Agent für benutzerdefinierte Benutzer)

Umgebungsvariablen exportieren und beschaffen

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

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.
Beispiel für UNIX- und Linux-Export
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 beziehen Sie 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 API-Signaturschlüssel generieren.
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>
Nachdem Sie diese Werte festgelegt haben, beenden Sie das Terminal und öffnen 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. Nach dieser Prioritätsreihenfolge wird jeweils nur eine Umgebungsvariable 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 ist false. Setzen Sie den Wert auf true, um einen dedizierten Endpunkt zu verwenden.

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

Nur dedizierte Endpunkte verwenden

  • Setzen Sie im Block provider 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-Metaargument alias im Block provider für einen dedizierten Endpunkt.

    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, 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

Wichtig

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

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.

Tipp

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

Um ein nicht standardmäßiges OCI-Konfigurationsprofil als Umgebungswert festzulegen, verwenden Sie den folgenden Befehl:

export TF_VAR_config_file_profile=<config_file_profile_name>

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

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