Beheren van geheimen in AEM as a Cloud Service
Het beheren van geheimen, zoals API sleutels en wachtwoorden, is essentieel voor het handhaven van toepassingsveiligheid. Adobe Experience Manager (AEM) as a Cloud Service biedt robuuste gereedschappen om geheimen veilig af te handelen.
In deze zelfstudie leert u de beste praktijken voor het beheren van geheimen binnen AEM. Wij zullen de hulpmiddelen en de technieken behandelen die door AEM worden verstrekt om uw gevoelige informatie te beschermen, ervoor zorgen dat uw toepassing veilig en vertrouwelijk blijft.
Deze zelfstudie gaat uit van een praktische kennis van AEM Java-ontwikkeling, OSGi-services, Sling Models en Adobe Cloud Manager.
Secretenmanager OSGi-service
In AEM as a Cloud Service biedt het beheren van geheimen via OSGi-services een schaalbare en veilige aanpak. De diensten OSGi kunnen worden gevormd om gevoelige informatie, zoals API sleutels en wachtwoorden te behandelen, die door configuraties OSGi wordt bepaald, en die via Cloud Manager wordt geplaatst.
OSGi service implementation
Wij zullen door de ontwikkeling van de douaneOSGi dienst lopen die geheimen van configuraties OSGiblootstelt.
De implementatie leest geheimen van de configuratie OSGi via de @Activate
methode en stelt hen door de getSecret(String secretName)
methode bloot. U kunt ook discrete methoden maken, zoals getApiKey()
voor elk geheim, maar voor deze aanpak is meer onderhoud vereist omdat geheimen worden toegevoegd of verwijderd.
package com.example.core.util.impl;
import com.example.core.util.SecretsManager;
import org.osgi.service.component.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.resource.ValueMapDecorator;
import java.util.Map;
@Component(
service = { SecretsManager.class }
)
public class SecretsManagerImpl implements SecretsManager {
private static final Logger log = LoggerFactory.getLogger(SecretsManagerImpl.class);
private ValueMap secrets;
@Override
public String getSecret(String secretName) {
return secrets.get(secretName, String.class);
}
@Activate
@Modified
protected void activate(Map<String, Object> properties) {
secrets = new ValueMapDecorator(properties);
}
}
Als dienst OSGi, is het best om het via een interface van Java te registreren en te verbruiken. Hieronder is een eenvoudige interface die consumenten toestaat om geheimen door OSGi bezitsnaam te krijgen.
package com.example.core.util;
import org.osgi.annotation.versioning.ConsumerType;
@ConsumerType
public interface SecretsManager {
String getSecret(String secretName);
}
Toewijzing van geheimen aan configuratie OSGi
Om geheime waarden in de dienst bloot te stellen OSGi, hen in kaart brengen aan configuraties OSGi gebruikend OSGi geheime configuratiewaarden. Definieer de eigenschapnaam OSGi als sleutel om de geheime waarde van de SecretsManager.getSecret()
methode terug te winnen.
Bepaal de geheimen in het OSGi configuratiedossier /apps/example/osgiconfig/config/com.example.core.util.impl.SecretsManagerImpl.cfg.json
in uw AEM Maven project. Elke eigenschap vertegenwoordigt een geheim dat in AEM wordt weergegeven, met de waarde ingesteld via Cloud Manager. De sleutel is de OSGi bezitsnaam, die wordt gebruikt om de geheime waarde van de SecretsManager
dienst terug te winnen.
{
"api.key": "$[secret:api_key]",
"service.password": "$[secret:service_password]"
}
Alternatief aan het gebruiken van de gedeelde geheime dienst OSGi, kunt u geheimen in de configuratie OSGi van de specifieke diensten direct omvatten die hen gebruiken. Deze benadering is nuttig wanneer de geheimen slechts door één enkele dienst OSGi nodig zijn en niet over de veelvoudige diensten worden gedeeld. In dit geval, worden de geheime waarden bepaald in het OSGi configuratiedossier voor de specifieke dienst en in de code van Java van de dienst via de @Activate
methode betreden.
Verbruiksgeheimen
De geheimen kunnen van de dienst worden verbruikt OSGi op diverse manieren, zoals van een het Verschilderen Model of een andere dienst OSGi. Hieronder staan voorbeelden van hoe u geheimen van beide kunt consumeren.
Van verkoopmodel
Sling Models verstrekken vaak bedrijfslogica voor AEM plaatscomponenten. De service SecretsManager
OSGi kan worden gebruikt via de @OsgiService
-annotatie en worden gebruikt in het Sling-model om de geheime waarde op te halen.
import com.example.core.util.SecretsManager;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingHttpServletRequest;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.OsgiService;
@Model(
adaptables = {SlingHttpServletRequest.class, Resource.class},
adapters = {ExampleDatabaseModel.class}
)
public class ExampleDatabaseModelImpl implements ExampleDatabaseModel {
@OsgiService
SecretsManager secretsManager;
@Override
public String doWork() {
final String secret = secretsManager.getSecret("api.key");
// Do work with secret
}
}
Van OSGi-service
De diensten OSGi stellen vaak herbruikbare bedrijfslogica binnen AEM bloot, die door het Verschilderen Modellen, AEM de diensten zoals Werkstromen, of andere douaneOSGi diensten worden gebruikt. De service SecretsManager
OSGi kan via de @Reference
-annotatie worden gebruikt en binnen de OSGi-service worden gebruikt om de geheime waarde op te halen.
import com.example.core.util.SecretsManager;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@Component
public class ExampleSecretConsumerImpl implements ExampleSecretConsumer {
@Reference
SecretsManager secretsManager;
public void doWork() {
final String secret = secretsManager.getSecret("service.password");
// Do work with the secret
}
}
Bezig met instellen van geheimen in Cloud Manager
Met de dienst OSGi en configuratie op zijn plaats, is de definitieve stap de geheime waarden in Cloud Manager te plaatsen.
De waarden voor geheimen kunnen via Cloud Manager APIof, meer algemeen, via Cloud Manager UIworden geplaatst. Een geheime variabele toepassen via de gebruikersinterface van Cloud Manager:
-
Login aan Adobe Cloud Manager.
-
Selecteer het AEM Programma en het Milieu waarvoor u het geheim wilt plaatsen.
-
In de mening van de Details van het Milieu, selecteer het 1} lusje van de Configuratie {.
-
Selecteer toevoegen.
-
In het dialoogvenster Omgevingsconfiguratie:
- Ga de geheime veranderlijke naam (b.v.,
api_key
) in die in de configuratie OSGi van verwijzingen wordt voorzien. - Voer de geheime waarde in.
- Selecteer op welke AEM dienst het geheim van toepassing is.
- Selecteer Geheim als type.
- Ga de geheime veranderlijke naam (b.v.,
-
Selecteer toevoegen om het geheim voort te zetten.
-
Voeg zoveel geheimen toe als nodig zijn. Wanneer volledig, uitgezocht sparen om de veranderingen onmiddellijk op het AEM milieu toe te passen.
Het gebruiken van configuraties van Cloud Manager voor geheimen verstrekt het voordeel om verschillende waarden voor verschillende milieu's of de diensten toe te passen en geheimen te roteren zonder de AEM toepassing opnieuw op te stellen.