Services von einer Instanz aufrufen
In diesem Thema wird beschrieben, wie Sie Instanzen autorisieren können, Services in Oracle Cloud Infrastructure aufzurufen.
Einführung
In dieser Prozedur wird beschrieben, wie Sie eine Instanz autorisieren können, API-Aufrufe in Oracle Cloud Infrastructure-Services auszuführen. Wenn die erforderlichen Ressourcen und Policys eingerichtet wurden, kann eine auf einer Instanz ausgeführte Anwendung öffentliche Oracle Cloud Infrastructure-Services aufrufen. Sie müssen hierzu keine Benutzerzugangsdaten oder Konfigurationsdateien konfigurieren.
Konzepte
- DYNAMIC GROUP
- Mit dynamischen Gruppen können Sie Oracle Cloud Infrastructure-Instanzen als Principal-Akteure gruppieren, ähnlich wie Benutzergruppen. Sie können dann Policys erstellen, mit denen Instanzen in diesen Gruppen API-Aufrufe für Oracle Cloud Infrastructure-Services ausführen können. Die Mitgliedschaft in der Gruppe wird durch eine Gruppe von definierten Kriterien bestimmt, die als Übereinstimmungsregeln bezeichnet werden.
- MATCHING RULE
- Wenn Sie eine dynamische Gruppe einrichten, definieren Sie auch die Regeln für die Mitgliedschaft in der Gruppe. Ressourcen, die den Regelkriterien entsprechen, sind Mitglieder der dynamischen Gruppe. Übereinstimmungsregeln haben eine bestimmte Syntax, die Sie befolgen müssen. Informationen hierzu finden Sie unter Übereinstimmungsregeln zum Definieren dynamischer Gruppen schreiben.
- INSTANCE PRINCIPALS
- Das IAM-Servicefeature, mit dem Instanzen als autorisierte Akteure (oder Principals) Aktionen für Serviceressourcen ausführen können. Jede Compute-Instanz hat eine eigene Identität und authentifiziert die Zertifikate, die ihr hinzugefügt werden. Diese Zertifikate werden automatisch erstellt, Instanzen zugewiesen und rotiert, sodass Sie keine Zugangsdaten an die Hosts verteilen und sie rotieren müssen.
Sicherheitsaspekte
Jeder Benutzer, der Zugriff auf die Instanz hat (die mit SSH auf die Instanz zugreifen kann), erbt automatisch die Berechtigungen, die der Instanz erteilt wurden. Bevor Sie einer Instanz über dieses Verfahren Berechtigungen erteilen, stellen Sie sicher, dass Sie wissen, welche Benutzer darauf zugreifen können. Diese Benutzer müssen mit den Berechtigungen autorisiert werden, die Sie der Instanz erteilen.
Alle Principals der Compute-Instanz erhalten die Berechtigung compartment_inspect
. Sie können diese Berechtigung nicht entziehen. Mit dieser Berechtigung kann die Instanz die Compartments im Mandanten auflisten und die folgenden Informationen abrufen:
- Compartment-Namen
- Compartment-Beschreibungen
- Auf Compartments angewendete Freiformtags
- Auf Compartments angewendete automatische Tagstandardwerte Diese Tags, wie CreatedBy und CreatedOn, befinden sich im Oracle-Tag-Namespace und werden automatisch von Oracle hinzugefügt.
Prozessüberblick
In den folgenden Schritten wird der Prozessfluss für die Einrichtung und Verwendung von Instanzen als Principals zusammengefasst. Die nachfolgenden Abschnitte enthalten weitere Details.
-
Erstellen Sie eine Dynamische Gruppe. In der Definition zur dynamischen Gruppe geben Sie anhand der Übereinstimmungsregeln an, für welche Instanzen Sie das Ausführen von API-Aufrufen für Services zulassen möchten.
-
Erstellen Sie eine Policy, die der dynamischen Gruppe Berechtigungen für den Zugriff auf Services in Ihrem Mandanten (oder Compartment) erteilt.
-
Ein Entwickler in Ihrer Organisation konfiguriert die Anwendung, die mit dem Oracle Cloud Infrastructure-SDK erstellt wurde, zur Authentifizierung mit dem Provider der Instanz-Principals. Der Entwickler stellt die Anwendung und das SDK für alle Instanzen bereit, die zur dynamischen Gruppe gehören.
-
Das bereitgestellte SDK ruft Oracle Cloud Infrastructure-APIs gemäß der Policy-Berechtigungen auf (ohne API-Zugangsdaten konfigurieren zu müssen).
-
Für jeden API-Aufruf von einer Instanz protokolliert der Audit-Service das Ereignis und erfasst die OCID der Instanz als
principalId
-Wert im Ereignislog. Weitere Informationen finden Sie unter Inhalt eines Auditlogereignisses.
Schritte zum Zulassen von Serviceaufrufen für Instanzen
Führen Sie die folgenden Aufgaben aus, um einer Instanz das Aufrufen von Services zu ermöglichen:
Dynamische Gruppe und Übereinstimmungsregeln erstellen
Dynamische Gruppe und Übereinstimmungsregeln erstellen
Siehe Dynamische Gruppen verwalten.
Policys für dynamische Gruppen schreiben
Nachdem Sie eine dynamische Gruppe erstellt haben, müssen Sie Policys erstellen, die den dynamischen Gruppen den Zugriff auf Oracle Cloud Infrastructure-Services erlauben.
In einer Policy für dynamische Gruppen wird die Syntax verwendet, die unter Funktionsweise von Policys beschrieben wird. Lesen Sie dieses Thema, um sich mit grundlegenden Policy-Features vertraut zu machen.
Die Syntax, mit der Sie einer dynamischen Gruppe den Zugriff auf Ressourcen in einem Compartment erlauben, lautet:
Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in compartment <compartment_name>
Die Syntax, mit der Sie einer dynamischen Gruppe den Zugriff auf einen Mandanten erlauben, lautet:
Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in tenancy
Hier einige Beispiel-Policys:
So erlauben Sie einer dynamischen Gruppe ("FrontEnd") die Verwendung eines Load Balancers in einem bestimmten Compartment ("ProjectA"):
Allow dynamic-group FrontEnd to use load-balancers in compartment ProjectA
So erlauben Sie einer dynamischen Gruppe, Instanzen in einem bestimmten Compartment zu starten:
Allow dynamic-group FrontEnd to manage instance-family in compartment ProjectA
Allow dynamic-group FrontEnd to use volume-family in compartment ProjectA
Allow dynamic-group FrontEnd to use virtual-network-family in compartment ProjectA
Weitere Beispiel-Policys finden Sie unter Allgemeine Policys.
SDK, CLI oder Terraform konfigurieren
Informationen zu SDKs finden Sie unter Software Development Kits und Befehlszeilenschnittstelle (CLI).
Für das SDK für Java:
Erstellen Sie in Ihrem SDK für Java ein InstancePrincipalsAuthenticationDetailsProvider
-Objekt. Beispiel:
public static void main(String[] args) throws Exception {
InstancePrincipalsAuthenticationDetailsProvider provider =
InstancePrincipalsAuthenticationDetailsProvider.builder().build();
IdentityClient identityClient = new IdentityClient(provider);
...
Für das SDK für Python:
Erstellen Sie im SDK für Python ein oci.auth.signers.InstancePrincipalsSecurityTokenSigner
-Objekt. Beispiel:
# By default this will hit the auth service in the region returned by http://169.254.169.254/opc/v1/instance/region on the instance.
signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
identity_client = oci.identity.IdentityClient(config={}, signer=signer)
...
Um das Token ohne Wartezeit zu aktualisieren, verwenden Sie den folgenden Befehl:
signer.refresh_security_token()
Autorisierung des Instanz-Principals für die CLI aktivieren
Um die Autorisierung des Instanz-Principals über die CLI zu aktivieren, können Sie die Autorisierungsoption (--auth
) für einen Befehl festlegen. Beispiel:
oci os ns get --auth instance_principal
Alternativ können Sie die folgende Umgebungsvariable festlegen:
OCI_CLI_AUTH=instance_principal
Wenn beide Werte festgelegt sind, hat der für --auth
festgelegte Wert Vorrang vor der Umgebungsvariable.
Informationen zur Verwendung der CLI finden Sie unter Mit der Befehlszeilenschnittstelle arbeiten.
Autorisierung des Instanz-Principals für Terraform aktivieren
Um die Principal-Autorisierung für Instanzen in Terraform zu aktivieren, können Sie das Attribut auth
in der Providerdefinition auf "InstancePrincipal" setzen, wie im folgenden Beispiel dargestellt:
variable "region" {}
provider "oci" {
auth = "InstancePrincipal"
region = "${var.region}"
}
Wenn Sie die Principal-Autorisierung der Instanz verwenden, müssen Sie die Attribute tenancy_ocid
, user_ocid
, fingerprint
und private_key_path
nicht aufnehmen.
Häufig gestellte Fragen
Verwenden Sie diesen curl-Befehl: curl http://169.254.169.254/opc/v1/identity/cert.pem
Das Zertifikat wird täglich mehrmals rotiert.
- Versuchen Sie, den Befehl erneut auszuführen. Manchmal erfolgen die Zertifikatsrotation und die Anforderung gleichzeitig.
- Das Zertifikat ist möglicherweise abgelaufen. Überprüfen Sie, ob das Zertifikat gültig ist.
Nein. Sie können die Häufigkeit, mit der das Zertifikat rotiert wird, nicht ändern. Sie können allerdings die Policy für die dynamische Gruppe ändern. Wenn Sie der Meinung sind, dass eine Instanz kompromittiert wurde, können Sie entweder die Policy für die dynamische Gruppe ändern, um Berechtigungen für alle Mitglieder der Gruppe zu entziehen, oder Sie können die Instanz aus der dynamischen Gruppe entfernen. Siehe Kann ich eine Instanz aus einer dynamischen Gruppe entfernen?
Der Tokenablauf ist unabhängig vom Zeitraum des Zertifikatablaufs. Außerdem ist dies von der Anwendung abhängig, mit der Sie interagieren. Beispiel: Wenn Object Storage keinen mehrteiligen PUT-Vorgang hat, spielt es keine Rolle, wie lange der Vorgang ausgeführt wird.
Ja. Stellen Sie sicher, dass nur Benutzer, denen der von Ihnen gewährte Zugriff auf die dynamische Gruppe erteilt werden soll, Zugriff auf die Instanz haben.
Ja. Sie können sie entfernen, indem Sie die Übereinstimmungsregel ändern, um sie auszuschließen. Ein Beispiel finden Sie unten.
Ja. Beispiel: Angenommen, Sie möchten zwei bestimmte Instanzen in einem Compartment aus der dynamischen Gruppe ausschließen. Schreiben Sie eine Übereinstimmungsregel wie folgt:
All {instance.compartment.id = '<compartment_ocid>',
instance.id != '<instance1_to_exclude_ocid>', instance.id != '<instance2_to_exclude_ocid>'}
Die oben genannte Regel schließt alle Instanzen im Compartment mit Ausnahme derjenigen mit den angegebenen OCIDs ein.