Provider konfigurieren
Konfigurieren Sie den OCI-Terraform-Provider mit der erforderlichen Authentifizierung und optionalen Umgebungsvariablen.
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:
tenancy_ocid
: OCID des Mandanten. Informationen zum Abrufen des Wertes finden Sie unter Hier erhalten Sie die OCID des Mandanten und des Benutzers.user_ocid
: OCID des Benutzers, der die API aufruft. Informationen zum Abrufen des Wertes finden Sie unter Hier erhalten Sie die OCID des Mandanten und des Benutzers.private_key
: Der Inhalt der Private-Key-Datei. Erforderlich, wennprivate_key_path
nicht definiert ist. Hat Vorrang vorprivate_key_path
, wenn beide definiert sind. Weitere Informationen zum Erstellen und Konfigurieren von Schlüsseln finden Sie unter So generieren Sie einen API-Signierungsschlüssel und So laden Sie den Public Key hoch.private_key_path
: Der Pfad (einschließlich Dateiname) des auf dem Rechner gespeicherten Private Keys. Erforderlich, wennprivate_key
nicht definiert ist. Weitere Informationen zum Erstellen und Konfigurieren von Schlüsseln finden Sie unter So generieren Sie einen API-Signierungsschlüssel und So laden Sie den Public Key hoch.private_key_password
(optional): Passphrase, die für den Schlüssel verwendet wird, wenn er verschlüsselt ist.fingerprint
: Fingerprint für das verwendete Schlüsselpaar. Informationen zum Abrufen des Wertes finden Sie unter So rufen Sie den Fingerprint des Schlüssels ab.region
: Eine OCI-Region. Siehe Regionen und Availability-Domains.config_file_profile
: Der Profilname, wenn Sie ein benutzerdefiniertes Profil in der OCI-Konfigurationsdatei verwenden möchten, um die Authentifizierungszugangsdaten anzugeben. Weitere Informationen finden Sie unter SDK- und CLI-Konfigurationsdatei verwenden.
Geben Sie beispielsweise diese Werte in Umgebungsvariablen oder in Terraform-Konfigurationsvariablen an.
Instanz-Principal-Autorisierung
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:
- 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.
-
Legen Sie die folgenden Umgebungsvariablen fest:
-
OCI_RESOURCE_PRINCIPAL_VERSION
mit dem Wert2.2
Wenn der Wert
1
lautet, wird die Regionsüberschreibung nicht unterstützt. -
OCI_RESOURCE_PRINCIPAL_RPST
mit dem Raw-Inhalt der Dateirpst
oder dem absoluten Pfad zur Dateirpst
, einschließlich Dateiname. -
OCI_RESOURCE_PRINCIPAL_PRIVATE_PEM
mit dem absoluten Pfad zur Dateiprivate.pem
(mit dem Dateinamen) -
OCI_RESOURCE_PRINCIPAL_REGION
mit der Regions-ID, in der der Provider bereitgestellt wird (Beispiel:us-phoenix-1
)
-
-
Setzen Sie das Attribut
auth
in der Providerdefinition auf "ResourcePrincipal".Hinweis
Der Wert für
region
im Providerblock setzt den von der UmgebungsvariablenOCI_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
mitSecurityToken
. - 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
}
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.
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.
- Windows-Exportbeispiel
-
Hinweis
Stellen Sie das PEM-Format für Schlüssel sicher. Weitere Informationen finden Sie unter API-Signaturschlüssel generieren.
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
auftrue
.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.
-
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 }
-
Verwenden Sie das Terraform-Metaargument
alias
im Blockprovider
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 }
-
Referenzieren Sie in jedem
resource
-Block, den Sie einen dedizierten Endpunkt verwenden möchten,provider
mit dem Wertalias
.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ährendbucket2
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
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.
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:
- Die Umgebungsvariable
- Das nicht standardmäßige Profil in der OCI-Konfigurationsdatei, sofern angegeben
- Das DEFAULT-Profil in der OCI-Konfigurationsdatei