Greifen Sie auf ein Speicherbucket mit einem dynamischen geheimen Schlüssel zu
In diesem Lernprogramm erfahren Sie, wie Sie IBM Cloud® Secrets Manager verwenden, um einen IAM-Berechtigungsnachweis zu erstellen und Benutzern zu überlassen, der für den Zugriff auf ein Bucket in Cloud Object Storage verwendet werden kann.
Als Entwickler in einem Unternehmen suchen Sie möglicherweise nach Wegen, um die Sicherheit Ihrer geheimen Anwendungsschlüssel zu verbessern. Bei der Frage der Verwaltung von API-Schlüsseln, möchten Sie Ihre Berechtigungsnachweise dynamisch erstellen, sodass diese nur vorhandenen sind, wenn Sie sie benötigen. Sie möchten einen API-Schlüssel ferner einer anderen Person in Ihrem Team überlassen und sicherstellen, dass diese Überlassung nach der von Ihnen angegebenen Zeitdauer automatisch widerrufen wird.
Mit Secrets Manager können Sie ein dynamisches GeheimnisEin eindeutiger Wert, beispielsweise ein Kennwort oder ein API-Schlüssel, der dynamisch erstellt und per Leasing einer Anwendung zur Verfügung gestellt wird, die Zugriff auf eine geschützte Ressource benötigt. Nachdem ein dynamischer geheimer Schlüssel das Ende des Leasingzeitraums erreicht hat, wird die Zugriffsberechtigung für die geschützte Ressource widerrufen und der geheime Schlüssel wird automatisch gelöscht. erstellen, mit dem Sie auf eine geschützte Ressource zugreifen können, z. B. auf Bereitstellungsprotokolle, die Sie in einem Cloud Object Storage speichern. Beachten Sie zum Beispiel das folgende Szenario.
- Als Benutzer mit Administratorberechtigung möchten Sie einen dynamischen geheimen Schlüssel erstellen, den Ihr Team für den Zugriff auf ein Cloud Object Storage-Bucket in Ihrem Konto verwenden kann. Sie senden eine Anforderung zum Erstellen von IAM-Berechtigungsnachweisen in Secrets Manager.
- Secrets Manager erstellt den geheimen Schlüssel und validiert ihn anhand der definierten IAM-Zugriffsrichtlinien.
- Später möchte ein Anwendungsentwickler auf den Inhalt Ihres Speicherbuckets zugreifen. Der Entwickler sendet eine Anforderung, um den Wert Ihres IAM-Berechtigungsnachweises abzurufen.
- Secrets Manager validiert die Anforderung und generiert einen API-Schlüssel zur einmaligen Verwendung, den der Entwickler für die Authentifizierung bei Cloud Object Storage verwenden kann. Wenn der API-Schlüssel das Ende seiner Überlassungszeit erreicht hat, wird er automatisch widerrufen.
Vorbereitende Schritte
Stellen Sie vor dem ersten Start sicher, dass Sie über Administrator-Plattformzugriff verfügen, damit Sie Services einrichten, Zugriffsgruppen erstellen und die Zugriffsrichtlinien für andere anpassen können. Außerdem müssen die folgenden Voraussetzungen erfüllt sein:
-
Laden Sie die IBM Cloud-CLI herunter und laden und installieren Sie sie.
-
Laden Sie jq herunter und installieren Sie es.
jq
unterstützt Sie beim Ausschneiden und Filtern von JSON-Daten. Sie verwendenjq
in diesem Lernprogramm, um gespeicherte Umgebungsvariablen zu erfassen und zu verwenden.
Umgebung einrichten
Damit Sie mit Secrets Manager und Cloud Object Storage arbeiten können, müssen Sie Instanzen beider Services in Ihrem IBM Cloud-Konto erstellen. Sie müssen ferner Berechtigungen konfigurieren, damit Sie Operationen für beide Services ausführen können.
In diesem Schritt richten Sie eine Zugriffsumgebung ein, indem Sie eine Zugriffsgruppe, eine Service-ID und einen IBM Cloud-API-Schlüssel erstellen. Am Ende des Lernprogramms können Sie beide Instanzen ohne großen Aufwand wieder entfernen, wenn Sie diese nicht mehr benötigen.
Sie können nur eine Secrets Manager-Serviceinstanz in Ihrem IBM Cloud-Konto haben.
Instanzen von Secrets Manager und Cloud Object Storage erstellen
Starten Sie, indem Sie Testinstanzen von Secrets Manager und Cloud Object Storage in Ihrem IBM Cloud-Konto erstellen.
-
Melden Sie sich in der Befehlszeile bei IBM Cloud über die IBM Cloud-CLI an.
ibmcloud login
Wenn die Anmeldung fehlschlägt, führen Sie den Befehl
ibmcloud login --sso
aus, um es erneut zu versuchen. Der Parameter--sso
ist erforderlich, wenn Sie sich mit einer föderierten ID anmelden. Wenn diese Option verwendet wird, rufen Sie den Link auf, der in der Ausgabe der Befehlszeilenschnittstelle aufgelistet ist, um einen einmalig verwendbaren Kenncode zu generieren. -
Wählen Sie das Konto, die Region und die Ressourcengruppe aus, in der Sie eine Secrets Manager-Serviceinstanz erstellen möchten.
In diesem Lernprogramm interagieren Sie mit der Region 'Dallas'. Wenn Sie in einer anderen Region angemeldet sind, achten Sie darauf, Dallas als Zielregion festzulegen, indem Sie den folgenden Befehl ausführen.
ibmcloud target -r us-south -g default
-
Erstellen Sie eine Cloud Object Storage-Instanz
ibmcloud resource service-instance-create test-cos-instance-tutorial cloud-object-storage lite us-south
-
Erstellen Sie eine Secrets Manager-Instanz.
ibmcloud resource service-instance-create test-sm-instance-tutorial secrets-manager lite us-south
Der Bereitstellungsprozess für Secrets Manager dauert 5 bis 15 Minuten.
-
Exportieren Sie Umgebungsvariablen mit den IDs beider Serviceinstanzen.
export COS_INSTANCE_ID=`ibmcloud resource service-instance "test-cos-instance-tutorial" --output json | jq -r ".[].guid"`; echo $COS_INSTANCE_ID
export SM_INSTANCE_ID=`ibmcloud resource service-instance "test-sm-instance-tutorial" --output json | jq -r ".[].guid"`; echo $SM_INSTANCE_ID
-
(Optional) Überprüfen Sie, ob Ihre Services erfolgreich erstellt wurden, indem Sie in Ihrer IBM Cloud -Konsole auf das Menü Symbol
> Ressourcenliste klicken.
Zugriffsberechtigungen konfigurieren
Definieren Sie als Nächstes die Zugriffshierarchie, die Sie für die Ausführung von Operationen für die Secrets Manager- und Cloud Object Storage-Services benötigen.
-
Erstellen Sie eine Testzugriffsgruppe in Ihrem IBM Cloud-Konto.
Durch das Erstellen einer Zugriffsgruppe können Sie den Benutzern und Service-IDs die Berechtigung zum Zugriff auf die erforderlichen Secrets Manager- und Cloud Object Storage-Instanzen erteilen. Führen Sie in der Befehlszeile den folgenden Befehl aus, um eine neue Zugriffsgruppe namens
test-cos-admin-group
zu erstellen:export ACCESS_GROUP_ID=`ibmcloud iam access-group-create test-storage-admin-group -d "An access group for testing Secrets Manager and Cloud Object Storage." --output json | jq -r ".id"`; echo $ACCESS_GROUP_ID
-
Konfigurieren Sie Ihre Kontoberechtigungsnachweise.
Erstellen Sie eine Service-ID und legen Sie sie als Umgebungsvariable fest.
export SERVICE_ID=`ibmcloud iam service-id-create test-service-id-secrets --description "A service ID for testing Secrets Manager." --output json | jq -r ".id"`; echo $SERVICE_ID
Ordnen Sie die Service-ID zu, um andere Service-IDs zu erstellen und zu verwalten.
ibmcloud iam service-policy-create $SERVICE_ID --roles Operator --service-name "IAM Identity Service"
Ordnen Sie die Berechtigungen der Service-ID zu, um Zugriffsgruppen in Ihrem Konto anzuzeigen und zu aktualisieren.
ibmcloud iam access-group-policy-create $SERVICE_ID --roles Editor --service-name "IAM Access Groups"
Fügen Sie die Service-ID Ihrer Zugriffsgruppe hinzu.
ibmcloud iam access-group-service-id-add test-secrets-admin-group $SERVICE_ID
Erstellen Sie einen IBM Cloud-API-Schlüssel für Ihre Service-ID.
export IBM_CLOUD_API_KEY=`ibmcloud iam service-api-key-create test-storage-read-write $SERVICE_ID --description "An API key for testing Secrets Manager and Cloud Object Storage." --output json | jq -r ".apikey"`
Sie verwenden diesen API-Schlüssel später, um die Secrets Manager IAM-Engine für geheime Schlüssel zu aktivieren.
Instanz von Cloud Object Storage vorbereiten
Als nächstes erstellen Sie ein Bucket in Ihrer Instanz von Cloud Object Storage und konfigurieren einen Zugriff.
-
Erstellen Sie ein Testbucket in Ihrer Instanz.
- Rufen Sie in der IBM Cloud-Konsole Ihre Ressourcenliste auf.
- Wählen Sie test-cos-instance-tutorial in der Liste Ihrer Speicherservices aus.
- Klicken Sie in der Benutzerschnittstelle von Cloud Object Storage auf Bucket erstellen.
- Erstellen Sie ein Bucket in der
us-south
-Region. - Kopieren Sie die ID des Buckets.
-
Ordnen Sie Ihrem neuen Cloud Object Storage-Bucket Lese- und Schreibzugriff zu.
- Rufen Sie Verwalten > Zugriff (IAM) > Zugriffsgruppen auf.
- Wählen Sie test-storage-admin-group in der Liste der Gruppen aus.
- Klicken Sie auf die Registerkarte Zugriff.
- Klicken Sie auf Zugriff zuweisen.
- Wählen Sie in der Liste der Dienste Cloud Object Storage aus und klicken Sie auf Weiter.
- Wählen Sie im Abschnitt "Ressourcen" die Option Bestimmte Ressourcen aus.
- Wählen Sie im Feld 'Attributtyp' die Option Serviceinstanz aus.
- Wählen Sie in der Liste der Serviceinstanzen test-cos-instance-tutorial aus und klicken auf Weiter.
- Ordnen Sie die Servicezugriffsrollen Leseberechtigter, Leseberechtigter für Inhalt, Leseberechtigter für Objektund Schreibberechtigter für Objekt zu.
- Überprüfen Sie Ihre Auswahl und klicken Sie auf Hinzufügen.
- Klicken Sie auf Zuweisen.
-
Laden Sie ein Objekt in das Speicherbucket hoch.
Sie können eine beliebige Datei oder einen Ordner aus Ihrem lokalen System ziehen und ablegen. Sie können zum Beispiel eine Datei mit dem Namen "
sample.txt
mit dem folgenden Beispieltext erstellen und hochladen.A quick brown fox jumped over the lazy dog.
Secrets Manager-Instanz vorbereiten
Konfigurieren Sie schließlich Ihre Secrets Manager-Instanz, um mit dynamischen geheimen Schlüsseln arbeiten zu können.
-
Überprüfen Sie in der Befehlszeile, ob Sie auf das CLI-Plug-in von Secrets Manager zugreifen können.
ibmcloud secrets-manager --help
Sie haben das Plug-in nicht? Führen Sie zum Installieren des Secrets Manager-CLI-Plug-ins
ibmcloud plugin install secrets-manager
aus. -
Erstellen Sie eine Gruppe geheimer Schlüssel für Ihre Instanz.
Gruppen geheimer Schlüssel sind eine Möglichkeit, wie Sie organisieren und steuern können, wer in Ihrem Team Zugriff auf bestimmte geheime Schlüssel in Ihrer Instanz hat. Wenn Sie eine Gruppe geheimer Schlüssel über die Befehlszeilenschnittstelle von IBM Cloud erstellen möchten, führen Sie den Befehl
ibmcloud secrets-manager secret-group-create
aus.export SECRET_GROUP_ID=`ibmcloud secrets-manager secret-group-create --name cloud-object-storage-writers --description "Read and write to Cloud Object storage buckets" --service-url https://${instance-id}.${region}.secrets-manager.appdomain.cloud --output json | jq -r '.id'`; echo $SECRET_GROUP_ID
Aktualisieren Sie
instance_id
undregion
auf Ihre Version.Verwenden Sie eine Windows™-Eingabeaufforderung (
cmd.exe
) oder PowerShell? Wenn bei der Übergabe des JSON-Inhalts über die Befehlszeile Fehler auftreten, müssen Sie möglicherweise die Zeichenfolgen an die Anforderungen an Escape-Zeichen für Anführungszeichen ändern, die für Ihr Betriebssystem spezifisch sind. Weitere Informationen finden Sie im Abschnitt zur Verwendung von Anführungszeichen mit Zeichenfolgen in der Befehlszeilenschnittstelle von IBM Cloud. -
Aktivieren Sie die IAM-Engine für geheime Schlüssel für Ihre Instanz.
Bei Engines für geheime Schlüssel handelt es sich um Komponenten in Secrets Manager, die für die Verarbeitung von Operationen für geheime Schlüssel verschiedenen Typs verwendet werden. Diese Engines dienen als Back-Ends für diese geheimen Schlüssel. Wenn Sie die IAM-Engine für geheime Schlüssel aktivieren, können Sie einen API-Schlüssel für eine Service-ID dynamisch erstellen und anschließend Benutzern für eine von Ihnen angegebene Zeitdauer überlassen.
Wenn Sie die IAM-Engine für geheime Schlüssel über die Befehlszeilenschnittstelle von IBM Cloud konfigurieren möchten, führen Sie den Befehl
ibmcloud secrets-manager config-update
aus.Erstellen Sie zunächst eine IAM Service-ID und einen API-Schlüssel mit den erforderlichen Zugriffsrichtlinien. Verwenden Sie den generierten API-Schlüssel im folgenden Befehl.
ibmcloud secrets-manager configuration-create --config-type iam_credentials_configuration --iam-credentials-apikey $IBM_CLOUD_API_KEY
Erfolgreich! Jetzt können Sie einen IAM-Berechtigungsnachweis erstellen, den Sie verwenden können, um Service-IDs und API-Schlüssel dynamisch zu generieren. Fahren Sie mit dem nächsten Schritt fort.
IAM-Berechtigungsnachweis erstellen
IAM-Berechtigungsnachweise sind dynamische geheime Schlüssel, die Sie verwenden können, um bedarfsgerecht auf eine IBM Cloud-Ressource wie beispielsweise ein Cloud Object Storage-Bucket zuzugreifen. Eine Gruppe von IAM-Berechtigungsnachweisen besteht aus einer Service-ID und einem API-Schlüssel, der jedes Mal generiert wird, wenn die geschützte Ressource gelesen wird oder wenn auf Sie zugegriffen wird. Sie können bei der Erstellung Ihres IAM-Berechtigungsnachweises eine Lebensdauer (TTL, Time-to-live) oder eine Zeitdauer für die Überlassung definieren und dadurch die Zeitdauer verkürzen, die der geheime Schlüssel existiert.
Wenn Sie einen IAM-Berechtigungsnachweis über die Befehlszeilenschnittstelle von IBM Cloud erstellen möchten, führen Sie den Befehl ibmcloud secrets-manager secret-create
aus.
export SECRET_ID=`ibmcloud secrets-manager secret-create --secret-name test-iam-credentials --secret-description "Extended description for my secret.",--am-credentials-access_groups $ACCESS_GROUP_ID" --secret_group_id $SECRET_GROUP_ID --iam-credentials-ttl 2h --secret-labels "storage, us-south" --output json --service-url https://${instance-id}.${region}.secrets-manager.appdomain.cloud | jq -r '.id`
Aktualisieren Sie instance_id
und region
auf Ihre Version.
Sie können einen IAM-Berechtigungsnachweis auch über die Secrets Manager-Benutzerschnittstelle erstellen. Weitere Informationen finden Sie im Abschnitt zum Erstellen von IAM-Berechtigungsnachweisen.
API-Schlüssel generieren
Nachdem Sie den IAM-Berechtigungsnachweis erstellt haben, kann ein Benutzer mit weniger Berechtigungen den geheimen Schlüssel abrufen, wenn der Zeitpunkt für den Zugriff auf das Speicherbucket gekommen ist.
Wenn Sie einen IAM-Berechtigungsnachweis über die Befehlszeilenschnittstelle von IBM Cloud abrufen möchten, führen Sie den Befehl ibmcloud secrets-manager secret
aus.
-
Rufen Sie den Inhalt Ihres geheimen IAM-Berechtigungsnachweises ab.
ibmcloud secrets-manager secret --id $SECRET_ID --output json
Das folgende JSON-Snippet zeigt die Beispielantwort.
{ "metadata": { "collection_type": "application/vnd.ibm.secrets-manager.secret+json", "collection_total": 1 }, "resources": [ { "access_groups": [ "AccessGroupId-e7e1a364-c5b9-4027-b4fe-083454499a20" ], "api_key": "pVTL3W7o1uqIWSE8sSh8ebNhRN4-d1D0W9GcPVgwcLUr", "created_by": "iam-ServiceId-222b47ab-b08e-4619-b68f-8014a2c3acb8", "creation_date": "2020-12-15T14:31:42Z", "crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/a5ebf2570dcaedf18d7ed78e216c263a:f1bc94a6-64aa-4c55-b00f-f6cd70e4b2ce:secret:cb7a2502-8ede-47d6-b5b6-1b7af6b6f563", "description": "Extended description for my secret.", "labels": [ "storage", "us-south" ], "last_update_date": "2020-12-15T14:31:42Z", "name": "test-iam-credentials", "secret_group_id": "432b91f1-ff6d-4b47-9f06-82debc236d90", "secret_type": "IAM_CREDENTIALS", "service_id": "ServiceId-0576925a-9651-4f3e-b8c7-ce1332324aa4", "state": 1, "state_description": "Active", "ttl": 900 } ] }
Im Antworthauptteil werden die
api_key
- undservice_id
-Werte für die einmalige Verwendung angezeigt, die für Ihren geheimen Schlüssel generiert werden. Der Wert fürttl
gibt an, wie lange Ihre Berechtigungsnachweise gültig sind (in Sekunden). -
Exportieren Sie eine Umgebungsvariable mit dem neu generierten API-Schlüssel.
Kopieren Sie den Wert
api_key
, den Sie im vorherigen Schritt erstellt haben, und legen Sie ihn als Umgebungsvariable fest.export API_key="<api_key>"
Zugriffstoken mit API-Schlüssel generieren
Indem Sie den API-Schlüssel verwenden, den Sie im vorherigen Schritt abgerufen haben, können Sie ein IAM-Zugriffstoken generieren. Das Token ist nur für die Dauer gültig, die Sie ursprünglich für den IAM-Berechtigungsnachweis definiert haben.
Sie können den API-Schlüssel gegen ein IAM-Zugangs-Token austauschen, indem Sie die IAM Identity Services API aufrufen. Um ein IAM-Token zu generieren, führen Sie den folgenden cURL-Befehl über Ihre Befehlszeile aus.
export IAM_TOKEN=`curl -X POST \
"https://iam.cloud.ibm.com/identity/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
-d "grant_type=urn%3Aibm%3Aparams%3Aoauth%3Agrant-type%3Aapikey&apikey=$API_KEY" | jq -r ".access_token"`; echo $IAM_TOKEN
Erfolgreich! Sie haben nun ein gültiges IAM-Token, das Sie für den Zugriff auf Ihr Cloud Object Storage-Bucket verwenden können. Fahren Sie mit dem nächsten Schritt fort.
Auf ein Speicherbucket zugreifen
Als Benutzer mit geringeren Berechtigungen haben Sie jetzt mithilfe des im vorherigen Schritt erstellten Zugriffstokens Lese- und Schreibberechtigung für Ihr Cloud Object Storage-Bucket. Nach Ablauf der Überlassungsdauer Ihrer IAM-Berechtigungsnachweise wird der zugehörige API-Schlüssel automatisch widerrufen.
Führen Sie in der Befehlszeile die folgende cURL-Anforderung aus, um die Buckets in Ihrer Cloud Object Storage-Instanz aufzuführen.
curl -X GET \
"https://s3.us-south.cloud-object-storage.appdomain.cloud" \
-H "Authorization: Bearer $IAM_TOKEN" \
-H "ibm-service-instance-id: $COS_INSTANCE_ID" \
-H "Accept: application/json"
Das folgende XML-Snippet zeigt eine Beispielantwort.
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>cccbd89c-6eb0-4aed-8ffb-899d39bc022e</ID>
<DisplayName>cccbd89c-6eb0-4aed-8ffb-899d39bc022e</DisplayName>
</Owner>
<Buckets>
<Bucket>
<Name>test-secrets-tutorial</Name>
<CreationDate>2020-12-14T21:40:55.739Z</CreationDate>
</Bucket>
</Buckets>
</ListAllMyBucketsResult>
Führen Sie den folgenden Befehl aus, um den Inhalt Ihres test-secrets-tutorial
-Buckets anzuzeigen:
curl -X GET \
"https://s3.us-south.cloud-object-storage.appdomain.cloud/test-secrets-tutorial" \
-H "Authorization: Bearer $IAM_TOKEN" \
-H "ibm-service-instance-id: $COS_INSTANCE_ID" \
-H "Accept: application/json"
Das folgende XML-Snippet zeigt eine Beispielantwort.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>test-secrets-tutorial</Name>
<Prefix></Prefix>
<Marker></Marker>
<MaxKeys>1000</MaxKeys>
<Delimiter></Delimiter>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>sample.txt</Key>
<LastModified>2020-12-14T21:49:29.502Z</LastModified>
<ETag>"df756a3769fcab0a261880957590c768"</ETag>
<Size>42</Size>
<Owner>
<ID>cccbd89c-6eb0-4aed-8ffb-899d39bc022e</ID>
<DisplayName>cccbd89c-6eb0-4aed-8ffb-899d39bc022e</DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
Um das Objekt im Bucket zu lesen, können Sie den folgenden Befehl ausführen.
curl -X GET \
"https://s3.us-south.cloud-object-storage.appdomain.cloud/test-secrets-tutorial/sample.txt" \
-H "Authorization: Bearer $IAM_TOKEN" \
-H "ibm-service-instance-id: $COS_INSTANCE_ID" \
-H "Accept: application/json"
Ersetzen Sie sample.txt
durch den Namen der Datei, die Sie in Ihr Bucket hochgeladen haben. Die folgende Anzeige zeigt eine Beispielantwort.
A quick brown fox jumps over the lazy dog.
(Optional) Ressourcen bereinigen
Wenn Sie die Ressourcen, die Sie in diesem Lernprogramm erstellt haben, nicht mehr benötigen, können Sie die folgenden Schritte ausführen, um sie aus Ihrem Konto zu entfernen.
-
Löschen Sie Ihre Testinstanz von Cloud Object Storage.
ibmcloud resource service-instance-delete test-cos-instance-tutorial
-
Löschen Sie Ihre Secrets Manager-Testinstanz.
ibmcloud resource service-instance-delete test-sm-instance-tutorial
-
Löschen Sie Ihre Testzugriffsgruppe.
ibmcloud resource access-group-delete $ACCESS_GROUP
-
Löschen Sie Ihre Test-Service-ID.
ibmcloud resource service-id-delete $SERVICE_ID
Nächste Schritte
Gut gemacht! In diesem Lernprogramm haben Sie erfahren, wie Sie Secrets Manager für den Zugriff auf ein Cloud Object Storage-Bucket mit einem dynamischen geheimen Schlüssel einrichten. Nutzen Sie weitere Ressourcen, die Sie beim Einstieg in Secrets Manager unterstützen.
- Weitere Informationen zu den verschiedenen Typen geheimer Schlüssel.
- Entwerfen Sie eine Zugriffsstrategie mit Gruppen geheimer Schlüssel.
- Weitere Informationen zur Secrets Manager-API.