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

Mit einem Google-Serviceaccount können Sie von einer Autonomous Database-Instanz aus auf Google Cloud Platform-(GCP-)Ressourcen zugreifen.

Mit einem Google-Serviceaccount auf Google Cloud-Ressourcen zugreifen

Wenn Sie die kontobasierte Google-Serviceauthentifizierung 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 ein spezielles GCP-Konto, das von einer Anwendung verwendet wird. Sie können einen Google-Serviceaccount verwenden, um autorisierte GCP-REST-API-Aufrufe von einer Anwendung auszuführen (nachdem dem Serviceaccount Zugriffsberechtigungen über die IAM-Rollenkonfiguration erteilt wurden). Wenn eine Anwendung Aufrufe mit einer auf dem GCP-Serviceaccount basierenden Authentifizierung durchführt, generiert der anfängliche 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 wieder in Google Cloud Storage schreiben. Sie können dies tun, ohne einen Serviceaccount zu verwenden, 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 in 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 von einer Autonomous Database-Instanz benötigen. Dadurch können Sie eine Policy festlegen, um den Zugriff auf Ressourcen je nach Rolle zu begrenzen. Beispiel: Sie legen eine Policy fest, die für einen Google Cloud-Speicher-Bucket nach Rolle auf schreibgeschützten Zugriff beschränkt ist.
  • Google-Serviceaccountbasierte Zugangsdaten bieten eine bessere Sicherheit, da Sie keine langfristigen Benutzerzugangsdaten im Code bereitstellen müssen, wenn Ihre Anwendung auf GCP-Ressourcen zugreift. Autonomous Database verwaltet die temporären Zugangsdaten für den Google-Serviceaccount und muss die Zugangsdaten der GCP-Ressourcenbenutzer nicht in der Datenbank speichern.

Informationen zu Google-Serviceaccounts finden Sie unter Serviceaccounts.

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 Authentifizierung des Google-Dienstkontos mit DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH.

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

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

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

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

    Wenn der angegebene Benutzer über Berechtigungen zum Aktivieren der Google-Serviceaccountauthentifizierung für andere Benutzer verfügen soll, setzen Sie den params-Parameter 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 mit grant_option auf TRUE gesetzt haben, kann adb_user die Google-Serviceaccountauthentifizierung 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 den GCP-Serviceaccount 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. Notieren Sie sich 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. Neben der Zuweisung 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 zunächst 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 Ihr Konto.
  2. Erstellen Sie Rollen mit den angegebenen Berechtigungen.
    1. Wählen Sie im Navigationsmenü 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 eine 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 + ZULASSUNGEN 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 ADD.
  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, führen Sie den Befehl Objektspeicher - Lese-/Schreibzugriff aus:

    1. Wählen Sie im Navigator die Option Cloud-Speicher aus, und wählen Sie Buckets aus.
    2. Wählen Sie den Bucket aus, den Sie verwenden möchten, und klicken Sie auf PERMISSIONEN.
    3. Klicken Sie auf + PRINCIPAL hinzufügen.
  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 der 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. Auf diese Weise kann Ihre Anwendung, die auf 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 ausführen und den Zugangsdatennamen als GCP$PA angeben, erfolgt die Authentifizierung auf der Seite der Google Cloud-Plattform mit einem Google-Serviceaccount.

Führen Sie die erforderlichen Schritte aus, falls noch nicht geschehen:

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

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

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

    Beispiel: Sie können mit den Zugangsdaten des Google-Serviceaccounts wie folgt 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 eines Google-Serviceaccounts auf Google Cloud Platform-(GCP-)Ressourcen zu deaktivieren, verwenden Sie DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH.

Wenn der Wert für provider GCP lautet und für username ein anderer Benutzer als der ADMIN-Benutzer angegeben ist, entzieht die Prozedur dem angegebenen Benutzer die Berechtigungen. In diesem Fall können der Benutzer ADMIN und andere Benutzer GCP$PA weiterhin 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 provider-Wert GCP und der username ADMIN lautet, deaktiviert die Prozedur den Zugriff auf den Google-Serviceaccount in der Autonomous Database-Instanz. Der Standardwert für username ist ADMIN.

Beispiele:

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

Weitere Informationen finden Sie unter Prozedur DISABLE_PRINCIPAL_AUTH.

Google-Serviceaccount - Hinweise

Hinweise zur Verwendung des Google-Servicekontos.

  • Beschränkung der Google Cloud Platform-(GCP-)Zeichen: DBMS_CLOUD unterstützt keine URI mit einem "_", um auf einen Google Cloud Storage-Bucket-Namen zuzugreifen. 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 mit aktiviertem Google-Serviceaccount klonen, wird die Konfiguration des Google-Serviceaccounts nicht in 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.