Identitätsconnector erstellen

Standardmäßig erkennt Google Cloud Search nur Google-Identitäten, die in Google Cloud Directory (Nutzer und Gruppen) Identitätsconnectors werden verwendet, um können Sie die Identitäten Ihres Unternehmens mit den von Google Cloud Search verwendeten Google-Identitäten synchronisieren.

Google bietet die folgenden Optionen zum Entwickeln von Identitätsconnectors:

  • Das Identity Connector SDK. Diese Option ist für Entwickler gedacht, die in der Programmiersprache Java. Das Identity Connector SDK ist ein Wrapper um die REST API, um schnell Connectors zu erstellen. So erstellen Sie ein mit dem SDK verwenden, finden Sie unter Erstellen Sie mit dem Identity Connector SDK einen Identitätsconnector.

  • Low-Level-REST API und API-Bibliotheken Diese Optionen sind für Entwickler gedacht, die möglicherweise nicht in Java programmieren oder deren Codebasis REST API oder eine Bibliothek. Informationen zum Erstellen eines Identitätsconnectors mit der REST API finden Sie unter bis Directory API: Nutzerkonten für Informationen zur Zuordnung von Nutzenden und Cloud Identity-Dokumentation für zum Zuordnen von Gruppen.

Mit dem Identity Connector SDK einen Identitätsconnector erstellen

Ein typischer Identitätsconnector führt die folgenden Aufgaben aus:

  1. Konfigurieren Sie den Connector.
  2. Alle Nutzer aus dem Identitätssystem Ihres Unternehmens abrufen und an folgende Adresse senden: Google für die Synchronisierung mit Google-Identitäten
  3. Alle Gruppen aus dem Identitätssystem Ihres Unternehmens abrufen und an folgende Adresse senden: Google für die Synchronisierung mit Google-Identitäten

Abhängigkeiten einrichten

Sie müssen bestimmte Abhängigkeiten in Ihre Build-Datei aufnehmen, um das SDK verwenden zu können. Klicken Sie auf auf einem Tab, um die Abhängigkeiten für Ihre Build-Umgebung anzuzeigen:

Maven

<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-identity-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>

Gradle

 compile group: 'com.google.enterprise.cloudsearch',
         name: 'google-cloudsearch-identity-connector-sdk',
         version: 'v1-0.0.3'

Connector-Konfiguration erstellen

Jeder Connector verfügt über eine Konfigurationsdatei mit den Parametern, die vom Connector, z. B. die ID für Ihr Repository. Parameter sind definiert als Schlüssel/Wert-Paare, z. B. api.sourceId=1234567890abcdef

Das Google Cloud Search SDK enthält verschiedene von Google bereitgestellte Parameter, die von allen Connectors verwendet werden. Du musst Folgendes deklarieren Von Google bereitgestellte Parameter in Ihrer Konfigurationsdatei:

  • Für einen Inhaltsconnector müssen Sie Folgendes deklarieren: api.sourceId und api.serviceAccountPrivateKeyFile, da diese Parameter den Standort identifizieren. Ihres Repositorys und des privaten Schlüssels, die für den Zugriff auf das Repository erforderlich sind.
  • Für einen Identitätsconnector müssen Sie api.identitySourceId so deklarieren: gibt den Speicherort der externen Identitätsquelle an. Wenn Sie Nutzer synchronisieren, müssen Sie auch api.customerId als eindeutige ID für mit dem Google Workspace-Konto Ihres Unternehmens.

Sofern Sie die Standardwerte anderer von Google bereitgestellter müssen Sie diese nicht in Ihrer Konfigurationsdatei angeben. Weitere Informationen zu den von Google bereitgestellten Konfigurationsparametern zum Generieren bestimmter IDs und Schlüssel erhalten Sie unter Von Google bereitgestellte Konfigurationsparameter

Sie können auch eigene Repository-spezifische Parameter zur Verwendung in Ihrem Konfigurationsdatei.

Konfigurationsdatei an den Connector übergeben

Legen Sie das Systemattribut config fest, um die Konfigurationsdatei an Ihr Connector. Sie können das Attribut beim Start mit dem Argument -D festlegen. an den Connector. Mit dem folgenden Befehl wird z. B. der Connector gestartet. durch die Konfigurationsdatei MyConfig.properties:

java -classpath myconnector.jar;... -Dconfig=MyConfig.properties MyConnector

Wenn dieses Argument fehlt, versucht das SDK, auf eine Standardkonfiguration zuzugreifen Datei mit dem Namen connector-config.properties.

Mithilfe einer Vorlagenklasse einen Identitätsconnector mit vollständiger Synchronisierung erstellen

Das Identity Connector SDK enthält die Vorlagenklasse FullSyncIdentityConnector mit der Sie alle Nutzer und Gruppen aus der Identität synchronisieren können, mit Google-Identitäten. In diesem Abschnitt wird die Verwendung des Vorlage „FullSyncIdentityConnector“, um eine vollständige Synchronisierung von Nutzern und Gruppen aus einer Nicht-Google-Identität durchzuführen zu erstellen.

Dieser Abschnitt bezieht sich auf Code-Snippets aus dem IdentityConnecorSample.java Beispiel. Dieses Beispiel liest Nutzer und Gruppe aus zwei CSV-Dateien und synchronisiert sie mit Google-Identitäten.

Einstiegspunkt des Connectors implementieren

Der Einstiegspunkt für einen Connector ist der main()-Methode. Die Hauptaufgabe dieser Methode besteht darin, eine Instanz des Application und rufen ihre start() um den Connector auszuführen.

Vor dem Anruf application.start(), verwenden Sie die IdentityApplication.Builder -Klasse zum Instanziieren der Vorlage FullSyncIdentityConnector. Für FullSyncIdentityConnector akzeptiert ein Repository -Objekt, dessen Methoden Sie implementieren. Das folgende Code-Snippet zeigt, wie die Methode main() implementiert wird:

IdentityConnectorSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a full
 * sync connector. In the full sync case, the repository is responsible
 * for providing a snapshot of the complete identity mappings and
 * group rosters. This is then reconciled against the current set
 * of mappings and groups in Cloud Directory.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new CsvRepository();
  IdentityConnector connector = new FullSyncIdentityConnector(repository);
  IdentityApplication application = new IdentityApplication.Builder(connector, args).build();
  application.start();
}

Im Hintergrund ruft das SDK die initConfig() nach den Aufrufen der Methode main() des Connectors Application.build Die Methode initConfig() führt die folgenden Aufgaben aus:

  1. Ruft die Methode Configuation.isInitialized() um sicherzustellen, dass der Configuration noch nicht initialisiert wurde.
  2. Initialisiert ein Configuration-Objekt mit dem von Google bereitgestellten Schlüssel/Wert-Paar Paare. Jedes Schlüssel/Wert-Paar wird in einem ConfigValue innerhalb des Configuration-Objekts.

Repository-Oberfläche implementieren

Der einzige Zweck des Repository-Objekts besteht darin, Synchronisierung von Repository-Identitäten mit Google-Identitäten Bei Verwendung eine Vorlage haben, müssen Sie nur bestimmte Methoden innerhalb der Repository-Schnittstelle zum Erstellen eines Identitätsconnectors. Für die FullTraversalConnector verwenden, überschreiben Sie wahrscheinlich die folgenden Methoden:

  • Die init() . Wenn Sie ein Identitäts-Repository einrichten und initialisieren möchten, überschreiben Sie die Methode `init()`.

  • Die listUsers() . Wenn Sie alle Nutzer im Identitäts-Repository mit Google-Nutzern synchronisieren möchten, überschreiben Sie die Methode listUsers().

  • Die listGroups() . So synchronisieren Sie alle Gruppen im Identitäts-Repository mit Google Groups: überschreiben Sie die Methode listGroups().

  • (optional) Das Feld close() . Wenn Sie eine Repository-Bereinigung ausführen müssen, überschreiben Sie den close(). . Diese Methode wird einmal beim Herunterfahren des Connectors aufgerufen.

Benutzerdefinierte Konfigurationsparameter abrufen

Im Rahmen der Konfiguration des Connectors müssen Sie alle benutzerdefinierten Parameter aus dem Configuration -Objekt enthält. Diese Aufgabe wird normalerweise in einem Repository Kurs init() .

Die Configuration-Klasse bietet mehrere Methoden zum Abrufen verschiedener Datentypen aus einer Konfiguration. Bei jeder Methode wird ein ConfigValue -Objekt enthält. Anschließend verwenden Sie die Methode des ConfigValue-Objekts. get() um den tatsächlichen Wert abzurufen. Das folgende Snippet zeigt, wie userMappingCsvPath und groupMappingCsvPath-Wert aus einem Configuration-Objekt:

IdentityConnectorSample.java
/**
 * Initializes the repository once the SDK is initialized.
 *
 * @param context Injected context, contains convenienve methods
 *                for building users & groups
 * @throws IOException if unable to initialize.
 */
@Override
public void init(RepositoryContext context) throws IOException {
  log.info("Initializing repository");
  this.context = context;
  userMappingCsvPath = Configuration.getString(
      "sample.usersFile", "users.csv").get().trim();
  groupMappingCsvPath = Configuration.getString(
      "sample.groupsFile", "groups.csv").get().trim();
}

Um einen Parameter mit mehreren Werten abzurufen und zu parsen, verwenden Sie einen der Typparser der Klasse Configuration zum Parsen der Daten in separate Blöcke. Im folgenden Snippet aus dem Connector für die Anleitung wird die Methode getMultiValue , um eine Liste der GitHub-Repository-Namen abzurufen:

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

Zuordnung für alle Nutzer abrufen

Überschreiben listUsers() um die Zuordnung für alle Nutzer aus Ihrem Identitäts-Repository abzurufen. Die Bei der listUsers()-Methode wird ein Prüfpunkt akzeptiert, der die letzte zu erstellende Identität darstellt synchronisiert. Der Checkpoint kann verwendet werden, um die Synchronisierung fortzusetzen, sollte der Prozess unterbrochen. Führen Sie diese Schritte für jeden Nutzer in Ihrem Repository aus in die Methode listUsers():

  1. Eine Zuordnung abrufen, die aus der Google-Identität und der zugehörigen externen Person besteht Identität.
  2. Fügen Sie das Paar einem Iterator hinzu, der von der Methode listUsers() zurückgegeben wird.

Nutzerzuordnung abrufen

Im folgenden Code-Snippet wird veranschaulicht, wie Identitätszuweisungen abgerufen werden die in einer CSV-Datei gespeichert sind:

IdentityConnectorSample.java
/**
 * Retrieves all user identity mappings for the identity source. For the
 * full sync connector, the repository must provide a complete snapshot
 * of the mappings. This is reconciled against the current mappings
 * in Cloud Directory. All identity mappings returned here are
 * set in Cloud Directory. Any previously mapped users that are omitted
 * are unmapped.
 *
 * The connector does not create new users. All users are assumed to
 * exist in Cloud Directory.
 *
 * @param checkpoint Saved state if paging over large result sets. Not used
 *                   for this sample.
 * @return Iterator of user identity mappings
 * @throws IOException if unable to read user identity mappings
 */
@Override
public CheckpointCloseableIterable<IdentityUser> listUsers(byte[] checkpoint)
    throws IOException {
  List<IdentityUser> users = new ArrayList<>();
  try (Reader in = new FileReader(userMappingCsvPath)) {
    // Read user mappings from CSV file
    CSVParser parser = CSVFormat.RFC4180
        .withIgnoreSurroundingSpaces()
        .withIgnoreEmptyLines()
        .withCommentMarker('#')
        .parse(in);
    for (CSVRecord record : parser.getRecords()) {
      // Each record is in form: "primary_email", "external_id"
      String primaryEmailAddress = record.get(0);
      String externalId = record.get(1);
      if (primaryEmailAddress.isEmpty() || externalId.isEmpty()) {
        // Skip any malformed mappings
        continue;
      }
      log.info(() -> String.format("Adding user %s/%s",
          primaryEmailAddress, externalId));

      // Add the identity mapping
      IdentityUser user = context.buildIdentityUser(
          primaryEmailAddress, externalId);
      users.add(user);
    }
  }
  // ...
}

Nutzerzuordnung in einen Iterator packen

Die listUsers() gibt ein Iterator zurück, insbesondere ein CheckpointCloseableIterable von IdentityUser Objekte. Sie können die CheckpointClosableIterableImpl.Builder -Klasse, um einen Iterator zu erstellen und zurückzugeben. Das folgende Code-Snippet zeigt, Um jede Zuordnung in eine Liste zu bündeln, erstellen Sie den Iterator daraus. Liste:

IdentityConnectorSample.java
CheckpointCloseableIterable<IdentityUser> iterator =
  new CheckpointCloseableIterableImpl.Builder<IdentityUser>(users)
      .setHasMore(false)
      .setCheckpoint((byte[])null)
      .build();

Gruppe abrufen

Überschreiben listGroups() , um alle Gruppen und deren Mitglieder aus Ihrer Identität abzurufen zu erstellen. Die Methode listGroups() akzeptiert einen Prüfpunkt, der den letzten Identität zu synchronisieren. Mit dem Prüfpunkt kann die Synchronisierung fortgesetzt werden, falls das dass der Prozess unterbrochen wird. Führen Sie diese Schritte für jeden Nutzer in Ihrem Repository aus. Schritte in der listGroups()-Methode:

  1. Gruppe und ihre Mitglieder abrufen
  2. Fügen Sie alle Gruppen und Mitglieder in einen Iterator ein, der vom listGroups()-Methode.

Gruppenidentität abrufen

Im folgenden Code-Snippet sehen Sie, wie die Gruppen und Mitglieder die in einer CSV-Datei gespeichert sind:

IdentityConnectorSample.java
/**
 * Retrieves all group rosters for the identity source. For the
 * full sync connector, the repository must provide a complete snapshot
 * of the rosters. This is reconciled against the current rosters
 * in Cloud Directory. All groups and members  returned here are
 * set in Cloud Directory. Any previously created groups or members
 * that are omitted are removed.
 *
 * @param checkpoint Saved state if paging over large result sets. Not used
 *                   for this sample.
 * @return Iterator of group rosters
 * @throws IOException if unable to read groups
 */    @Override
public CheckpointCloseableIterable<IdentityGroup> listGroups(byte[] checkpoint)
    throws IOException {
  List<IdentityGroup> groups = new ArrayList<>();
  try (Reader in = new FileReader(groupMappingCsvPath)) {
    // Read group rosters from CSV
    CSVParser parser = CSVFormat.RFC4180
        .withIgnoreSurroundingSpaces()
        .withIgnoreEmptyLines()
        .withCommentMarker('#')
        .parse(in);
    for (CSVRecord record : parser.getRecords()) {
      // Each record is in form: "group_id", "member"[, ..., "memberN"]
      String groupName = record.get(0);
      log.info(() -> String.format("Adding group %s", groupName));
      // Parse the remaining columns as group memberships
      Supplier<Set<Membership>> members = new MembershipsSupplier(record);
      IdentityGroup group = context.buildIdentityGroup(groupName, members);
      groups.add(group);
    }
  }
  // ...

}

Gruppe und Mitglieder in einen Iterator packen

Die listGroups() gibt ein Iterator zurück, insbesondere ein CheckpointCloseableIterable von IdentityGroup Objekte. Sie können die CheckpointClosableIterableImpl.Builder -Klasse zum Erstellen und Zurückgeben eines Iterators. Das folgende Code-Snippet zeigt, um jede Gruppe und alle Mitglieder in einer Liste zu bündeln und den Iterator daraus zu erstellen. Liste:

IdentityConnectorSample.java
CheckpointCloseableIterable<IdentityGroup> iterator =
   new CheckpointCloseableIterableImpl.Builder<IdentityGroup>(groups)
      .setHasMore(false)
      .setCheckpoint((byte[])null)
      .build();

Nächste Schritte

Als Nächstes könnten Sie Folgendes tun: