Mit einem Google-Serviceaccount auf Google Cloud Platform-Ressourcen zugreifen

Sie können einen Google-Serviceaccount verwenden, um von einer Autonomous Database-Instanz auf Google Cloud Platform-(GCP-)Ressourcen zuzugreifen.

Mit einem Google-Serviceaccount auf Google Cloud-Ressourcen zugreifen

Wenn Sie die Google-Serviceaccountbasierte Authentifizierung mit Autonomous Database verwenden, kann eine Anwendung sicher auf Google Cloud Platform-(GCP-)Ressourcen zugreifen, ohne Zugangsdaten basierend auf langfristigen IAM-Zugriffsschlüsseln für die GCP-Ressourcen zu erstellen und zu speichern.

Ein Google-Dienstkonto ist eine spezielle Art von GCP-Konto, das von einer Anwendung verwendet wird. Mit einem Google-Serviceaccount können Sie autorisierte GCP-REST-API-Aufrufe aus einer Anwendung ausführen (nachdem dem Serviceaccount über die IAM-Rollenkonfiguration Zugriffsberechtigungen erteilt wurden). Wenn eine Anwendung Aufrufe mit der kontobasierten Authentifizierung des GCP-Service durchführt, generiert der erste Aufruf ein temporäres Zugriffstoken über OAuth2.0. Das OAuth2.0-Zugriffstoken ist eine Stunde lang gültig. Nachfolgende Anforderungen innerhalb einer Stunde verwenden das OAuth2.0-Zugriffstoken, um autorisierte GCP-REST-API-Aufrufe auszuführen.

Beispiel: Sie möchten Daten aus Google Cloud Storage in Ihre Autonomous Database laden, einen Vorgang für die Daten ausführen und die geänderten Daten dann in Google Cloud Storage zurückschreiben. Sie können dies ohne einen Serviceaccount tun, wenn Sie über GCP-Benutzerzugangsdaten für den Zugriff auf Google Cloud Storage verfügen. Die Verwendung eines rollenbasierten Google-Serviceaccounts für den Zugriff auf GCP-Ressourcen aus Autonomous Database bietet jedoch die folgenden Vorteile:

  • Sie können rollenbasierten Zugriff mit verschiedenen Policys für verschiedene Benutzer oder Schemas erstellen, die Zugriff auf GCP-Ressourcen aus einer Autonomous Database-Instanz benötigen. Auf diese Weise können Sie eine Policy festlegen, um den Zugriff auf Ressourcen nach Rolle zu begrenzen. Beispiel: Sie legen eine Policy fest, die auf schreibgeschützten Zugriff, nach Rolle, auf einen Google Cloud Storage-Bucket beschränkt ist.
  • Die kontobasierten Zugangsdaten des Google-Service bieten eine bessere Sicherheit, da Sie keine langfristigen Benutzerzugangsdaten im Code angeben müssen, wenn Ihre Anwendung auf GCP-Ressourcen zugreift. Autonomous Database verwaltet die temporären Zugangsdaten für den Google-Serviceaccount und muss keine GCP-Ressourcenbenutzerzugangsdaten in der Datenbank speichern.

Informationen zu Google-Servicekonten finden Sie unter Servicekonten.

Google-Serviceaccount aktivieren und GCP-Serviceaccountnamen suchen

Bevor Sie eine Google Cloud Platform-(GCP-)Ressource mit einem Google-Serviceaccount verwenden, müssen Sie den GCP-Zugriff für Ihre Autonomous Database-Instanz aktivieren.

  1. Aktivieren Sie die Google-Serviceaccountauthentifizierung mit DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH.

    Beispiel: So aktivieren Sie die Google-Serviceaccountauthentifizierung für den ADMIN-Benutzer:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP' );
    END;
    /

    Aktivieren Sie die Google-Serviceaccountauthentifizierung für einen Benutzer, der nicht ADMIN ist, adb_user wie folgt:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user');
    END;
    /

    Wenn der angegebene Benutzer Berechtigungen zum Aktivieren der Google-Serviceaccountauthentifizierung für andere Benutzer haben soll, setzen Sie den Parameter params grant_option auf TRUE.

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user',
            params   => JSON_OBJECT('grant_option' value TRUE));
    END;
    /

    Nachdem Sie DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH ausgeführt haben und grant_option auf TRUE gesetzt ist, kann adb_user die Authentifizierung des Google-Serviceaccounts für einen anderen Benutzer aktivieren. Beispiel: Wenn Sie eine Verbindung als adb_user herstellen, können Sie den folgenden Befehl ausführen, um den Zugriff auf GCP-Serviceaccounts für adb_user2 zu aktivieren:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user2');
    END;
    /
  2. Wenn DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH ausgeführt wird, wird ein Google-Dienstkonto erstellt. Fragen Sie CLOUD_INTEGRATIONS ab, um die Serviceaccountdetails für Ihre Autonomous Database-Instanz abzurufen.
    SELECT * FROM CLOUD_INTEGRATIONS WHERE param_name = 'gcp_service_account';
    
    PARAM_NAME           PARAM_VALUE
    ---------------------------------------------------------------------------
    gcp_service_account  GCP-SA-22222-32222@gcp-example.iam.gserviceaccount.com
  3. Beachten Sie den Parameterwert gcp_service_account, da Sie diesen Wert angeben müssen, wenn Sie GCP-Ressourcen konfigurieren.

Weitere Informationen finden Sie unter Prozedur ENABLE_PRINCIPAL_AUTH.

Dem Google-Serviceaccount Rollen zuweisen und Zugriff auf GCP-Ressourcen bereitstellen

Um Google Cloud Platform-(GCP-)Ressourcen aus einer Autonomous Database-Instanz zu verwenden, müssen Sie oder ein Google Cloud-Administrator dem Google-Serviceaccount, auf den Ihre Anwendung zugreift, Rollen und Berechtigungen zuweisen. Zusätzlich zum Zuweisen von Rollen für den Google-Serviceaccount müssen für alle GCP-Ressourcen, die Sie einen Google Cloud-Administrator verwenden möchten, Google IAM-Principals hinzugefügt werden.

Aktivieren Sie als Voraussetzung zuerst den Google-Serviceaccount in Ihrer Autonomous Database-Instanz. Weitere Informationen finden Sie unter Google-Serviceaccount aktivieren und GCP-Serviceaccountnamen suchen.

  1. Öffnen Sie die Google Cloud-Konsole für Ihren Account.
  2. Erstellen Sie Rollen mit den angegebenen Berechtigungen.
    1. Wählen Sie im Navigationsmenü die Option IAM und Admin aus.
    2. Wählen Sie im IAM- und Admin-Navigator die Option Rollen aus.
    3. Klicken Sie auf der Seite "Rollen" auf "Weitere Aktionen", und wählen Sie + ROLE ERSTELLEN aus.

    Beispiel: Sie können die Rolle Objektspeicher lesen und schreiben erstellen, um die Verwendung eines Objektspeicher-Buckets zu steuern.

    Beschreibung von gcp_iam_roles_create.png folgt
    Beschreibung der Abbildung gcp_iam_roles_create.png
  3. Klicken Sie auf der Seite "Rolle erstellen" auf + PERMISSIONEN HINZUFÜGEN.
    1. Wählen Sie Filter aus, um die Liste der Berechtigungen einzuschränken.

      Beispiel: Geben Sie den Filter Berechtigung: Storage.Objects ein, um nur die Objektspeicherberechtigungen anzuzeigen.

      Beschreibung von gcp_iam_roles_add_permissions.png folgt
      Beschreibung der Abbildung gcp_iam_roles_add_permissions.png
    2. Klicken Sie im Dialogfeld "Berechtigungen hinzufügen" auf Hinzufügen.
  4. Klicken Sie auf der Seite "Rolle erstellen" auf Erstellen.
  5. Fügen Sie Rollen und Principals für die Ressource hinzu, auf die Sie zugreifen möchten.

    Beispiel: Wenn Sie mit der gerade erstellten Rolle auf Google Cloud Storage zugreifen möchten, Object Store Read Write:

    1. Wählen Sie im Navigator Cloud Storage aus, und wählen Sie Buckets aus.
    2. Wählen Sie den Bucket aus, den Sie verwenden möchten, und klicken Sie auf PERMISSIONS.
    3. Klicken Sie auf + ADD PRINCIPAL.
  6. Fügen Sie im Dialogfeld "Zugriff auf "bucketname" erteilen" Rollen und Principals für die ausgewählte Ressource hinzu.
    1. Fügen Sie unter Principals hinzufügen den Wert des Parameters gcp_service_account aus Ihrer Autonomous Database-Instanz hinzu.
    2. Geben Sie im Dialogfeld "Zugriff auf "bucketname" erteilen" unter Rollen zuweisen Rollen ein, und klicken Sie auf SAVE.

Nachdem Sie diese Schritte ausgeführt haben, werden die Rollen und Principals zugewiesen. Dadurch kann Ihre Anwendung, die in der Autonomous Database-Instanz ausgeführt wird, mit einem Google-Serviceaccount auf die GCP-Ressource zugreifen.

Google-Serviceaccount mit DBMS_CLOUD verwenden

Wenn Sie DBMS_CLOUD-Aufrufe für den Zugriff auf Google Cloud Platform-(GCP-)Ressourcen tätigen und den Zugangsdatennamen als GCP$PA angeben, erfolgt die Authentifizierung auf der Google Cloud Platform-Seite mit einem Google-Serviceaccount.

Führen Sie die erforderlichen Schritte aus, wenn dies noch nicht geschehen ist:

So verwenden Sie eine DBMS_CLOUD-Prozedur oder -Funktion mit der Google-Serviceaccountauthentifizierung:

  1. Verwenden Sie GCP$PA als Zugangsdatennamen.
  2. Erstellen Sie die URI für den Zugriff auf die GCP-Ressource im virtuellen gehosteten Stil:

    https://BUCKET_NAME.storage.googleapis.com/OBJECT_NAME

    Beispiel: Sie können wie folgt mit den Zugangsdaten des Google-Serviceaccounts auf Google Cloud Storage zugreifen:

    SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('GCP$PA', 'https://treetypes.storage.googleapis.com/' );
    
    OBJECT_NAME BYTES CHECKSUM                         CREATED LAST_MODIFIED
    ----------- ----- -------------------------------- ------- ------------------------
    trees.txt      58 682075a8c38f5686c32c25c6fb67dcbe         2022-10-05T20:03:55.253Z 
    

In den folgenden Themen finden Sie weitere Informationen:

Google-Serviceaccount deaktivieren

Um den Zugriff des Google-Servicekontos auf Google Cloud Platform-(GCP-)Ressourcen zu deaktivieren, verwenden Sie DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH.

Wenn der Wert für provider GCP ist und username ein anderer Benutzer als der Benutzer ADMIN ist, entzieht die Prozedur dem angegebenen Benutzer die Berechtigungen. In diesem Fall können der Benutzer ADMIN und andere Benutzer weiterhin GCP$PA verwenden.

Beispiel: So entziehen Sie Berechtigungen für adb_user:

BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
        provider => 'GCP',
        username => 'adb_user');
END;
/

Wenn der Wert für provider GCP lautet und username ADMIN ist, deaktiviert die Prozedur den Zugriff auf den Google-Serviceaccount in der Autonomous Database-Instanz. Der Standardwert für username ist ADMIN.

Beispiel:

BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
        provider => 'GCP' );
END;
/

Weitere Informationen finden Sie unter Prozedur DISABLE_PRINCIPAL_AUTH.

Google-Serviceaccount - Hinweise

Hinweise zur Nutzung des Google-Dienstkontos.

  • Zeichenbeschränkung für Google Cloud Platform (GCP): DBMS_CLOUD unterstützt keine URI mit einem "_" für den Zugriff auf einen Google Cloud Storage-Bucket-Namen. Wenn Ihr Google Cloud Storage-Bucket-Name ein "_" enthält, wird möglicherweise der folgende Fehler angezeigt:

    SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('GCP$PA', 'https://app_bucket.storage.googleapis.com/');
    
    ORA-20006: Unsupported object store URI - https://app_bucket.storage.googleapis.com/
    ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 1306
  • Autonomous Database-Instanz mit einem Google-Serviceaccount klonen: Wenn Sie eine Instanz klonen, für die ein Google-Serviceaccount aktiviert ist, wird die Google-Serviceaccountkonfiguration nicht auf den Klon übertragen. Führen Sie die Schritte aus, um das Google-Dienstkonto auf dem Klon zu aktivieren, wenn Sie das Google-Dienstkonto auf einer geklonten Instanz aktivieren möchten.