curl
in Verbindung mit OpenSearchcurl ist ein leichtgewichtiges und vielseitiges
Kommandozeilen-Tool zur Interaktion mit Web-APIs. Für OpenSearch ist es
besonders nützlich, da es alle relevanten HTTP-Methoden unterstützt und
zur Verwaltung, Abfrage und Konfiguration des Clusters verwendet werden
kann. Im Folgenden wird der Fokus auf die spezifische Nutzung von
curl in Verbindung mit OpenSearch gelegt, ohne allgemeine
Grundlagen zu wiederholen.
curl
für OpenSearchGET, POST, PUT,
DELETE und HEAD.curl mit OpenSearchDie einfachste Anfrage an OpenSearch:
curl -X GET "http://localhost:9200"
Antwort:
{
"name" : "opensearch-node1",
"cluster_name" : "opensearch-cluster",
"cluster_uuid" : "abcd1234",
"version" : {
"number" : "2.8.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "xyz123",
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
curl -X GET "http://localhost:9200/_cluster/health?pretty"
Die Option ?pretty formatiert die JSON-Ausgabe für
bessere Lesbarkeit.
Wenn das Security-Plugin aktiviert ist, ist eine
Authentifizierung erforderlich. Die Zugangsdaten können über
-u übergeben werden:
curl -u "admin:admin" -X GET "https://localhost:9200/_cat/indices?v" -k
-u: Benutzername und Passwort (Basic
Auth).-k: Ignoriert SSL-Zertifikatsfehler
(für Testzwecke).curl -X PUT "http://localhost:9200/my-index"
curl -X PUT "http://localhost:9200/my-index" -H "Content-Type: application/json" -d '{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}'
curl -X DELETE "http://localhost:9200/my-index"
curl -X POST "http://localhost:9200/my-index/_doc/1" -H "Content-Type: application/json" -d '{
"title": "OpenSearch Tutorial",
"content": "Erstelle und verwalte Dokumente in OpenSearch"
}'
curl -X GET "http://localhost:9200/my-index/_doc/1"
curl -X POST "http://localhost:9200/my-index/_update/1" -H "Content-Type: application/json" -d '{
"doc": {
"content": "Inhalt wurde aktualisiert"
}
}'
curl -X DELETE "http://localhost:9200/my-index/_doc/1"
Suche nach Dokumenten mit bestimmten Kriterien:
curl -X GET "http://localhost:9200/my-index/_search" -H "Content-Type: application/json" -d '{
"query": {
"match": {
"title": "Tutorial"
}
}
}'
curl -v -X GET "http://localhost:9200"
curl -i -X GET "http://localhost:9200"
Häufig benötigte Werte wie URLs oder Zugangsdaten lassen sich bequem
mit Umgebungsvariablen speichern:
export OS_URL="http://localhost:9200" export OS_AUTH="admin:admin" curl -u "$OS_AUTH" -X GET "$OS_URL/_cat/indices?v"
curl kann in Shell-Skripten genutzt werden, um
OpenSearch-Aktionen zu automatisieren:
# Beispiel: Liste aller Indizes abrufen curl -u "$OS_AUTH" -X GET "$OS_URL/_cat/indices?v" > indices.txt
jq
verarbeitenZur besseren Lesbarkeit oder Weiterverarbeitung der JSON-Antwort:
curl -u "$OS_AUTH" -X GET "$OS_URL/_cluster/health" | jq
Für produktive Umgebungen sollte -k vermieden und ein
gültiges Zertifikat genutzt werden:
curl --cert /path/to/cert.pem --key /path/to/key.pem -X GET "https://<host>:9200"
Um die Nutzung von Benutzernamen und Passwörtern (Basic Auth) in Anfragen zu vermeiden und die Sicherheit zu erhöhen, können in OpenSearch API-Keys verwendet werden. Diese werden einmalig generiert und bieten eine flexible Möglichkeit, Anfragen zu authentifizieren.
Ein API-Key wird über die
_plugins/_security/api-Schnittstelle erzeugt:
curl -X POST "$OS_URL/_plugins/_security/api/key" \
-u "admin:admin" \
-H "Content-Type: application/json" \
-d '{
"name": "my-api-key",
"role_descriptors": {
"role1": {
"cluster": ["all"],
"index": [
{
"names": ["*"],
"privileges": ["read", "write"]
}
]
}
},
"expiration": "1d"
}'
Die Antwort enthält den API-Key:
{
"id": "abc123",
"name": "my-api-key",
"expiration": "2025-01-14T10:00:00Z",
"api_key": "XYZ456"
}
Der API-Key wird als Authorization-Header im Format
ApiKey <key> übermittelt:
curl -X GET "$OS_URL/_cat/indices?v" \
-H "Authorization: ApiKey XYZ456"
Durch den Einsatz von API-Keys lässt sich die Verwaltung von Berechtigungen optimieren und gleichzeitig die Sicherheit und Flexibilität erhöhen.
Das Konzept und die Syntax für API-Keys, wie oben beschrieben, basiert auf Elasticsearch und ist in OpenSearch nicht direkt verfügbar, zumindest nicht in der Standardkonfiguration. In OpenSearch erfolgt die Authentifizierung standardmäßig über Basic Auth oder JWT (JSON Web Tokens), und die Unterstützung für API-Keys in vergleichbarer Weise wie in Elasticsearch fehlt.
OpenSearch verwendet primär folgende Authentifizierungsmethoden: 1.
Basic Auth: Benutzername und Passwort (z. B. über das
security-Plugin). 2. JWT: JSON Web Tokens
als Alternative für die Benutzeranmeldung. 3. Certificate-based
Authentication: Authentifizierung mittels Zertifikaten für
erhöhte Sicherheit.
Wenn Sie die Nutzung von Benutzernamen und Passwörtern vermeiden möchten, können Sie stattdessen Tokens verwenden, die das Security-Plugin bereitstellt. Diese werden ähnlich wie API-Keys genutzt, sind jedoch spezifisch für OpenSearch.
Ein Token wird über die
_plugins/_security/api/authtoken-API erstellt:
curl -X POST "$OS_URL/_plugins/_security/api/authtoken" \
-H "Content-Type: application/json" \
-u "admin:admin" \
-d '{
"username": "admin",
"password": "admin"
}'
Antwort:
{
"id": "token_id",
"expiryTime": 1700000000000,
"role": "admin",
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.signature"
}
Das Token wird anschließend in der Anfrage über den
Authorization-Header verwendet:
curl -X GET "$OS_URL/_cat/indices?v" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.signature"