info@yenlo.com
deu
Menu
API Management 2 min

Implementierung des AWS Parameter Store in WSO2 API Manager

MicrosoftTeams image 6
Sahil Malhotra
asw safe storage

Anforderung AWS Vault als zentrales Repository für die Speicherung von Anmeldeinformationen

Der AWS Systems Manager Parameter Store ist ein sicherer, skalierbarer und hierarchischer Speicher, der zum Speichern von Passwörtern und anderen Konfigurationsparametern verwendet werden kann. Einer unserer Kunden entschied sich für den AWS Parameter Store als zentrales Parameter-Repository in unserer Anwendung. WSO2 Carbon wird ebenfalls mit einer sicheren Vault ausgeliefert, aber der Kunde wünschte sich AWS Vault als zentrales Repository für die Speicherung von Anmeldeinformationen.

Lösung

WSO2 bietet keine direkte Möglichkeit zum Aufrufen des AWS Parameter Store. Als Lösung zum Abrufen von Parametern wird also eine API über den WSO2 API Manager bereitgestellt, der den Namen des Konfigurationsparameters übernimmt und dann den als Servlet implementierten Backend-Service aufruft. Die Servlet-Codelogik greift auf den AWS Parameter Store zu und gibt den Wert des Konfigurationsparameters an die aufrufende Stelle zurück.

Der Servlet-Code nutzt AWS SDK für Java, um die Parameter aus dem Parameter Store abzurufen und zu entschlüsseln. Das Servlet wird als .war-Datei bereitgestellt und im Gateway-Knoten des WSO2 API Manager gehostet. Die Zugriffsvorgänge auf den Parameter Store sind mit OAuth2-Autorisierung geschützt

AWS Systems Manager Parameter Store

Implementierungsschritte

  1. Bei der Implementierung der Lösung wurde AWS java SDK verwendet. Es wurde ein Servlet erstellt, das die AWS-APIs aufgerufen hat und als war-Datei im Gateway-Knoten des WSO2 API Manager bereitgestellt wurde. Ein weiteres Servlet wurde als REST API mit dem WSO2 API Manager bereitgestellt und durch standardmäßiges OAUTH2 geschützt. 
  • Die Abhängigkeit von AWS Java SDK wird in pom.xml des ssm-java-client-servlet
<dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>ssm</artifactId>
      <version>2.15.26</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
  • Der Servlet-Code liest den Anfrageparameter und leitet ihn an SsmManager weiter 
@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String param = request.getParameter("param");
		logger.info("Get param name: " + param);

		String fullParamPath = buildPath(param);
		logger.info("Full parameter path: " + fullParamPath);

		SsmManager manager = new SsmManager();
		String value = manager.get(fullParamPath);

		String json = buildJson(param, value, fullParamPath);

		response.setContentType("application/json;charset=UTF-8");
		response.getWriter().println(json);
	}
  • Der SsmManager ruft die AWS-API auf und nutzt dabei AWS Java SDK
try (SsmClient client = provider.getClient()) {			
			GetParameterRequest getParameterRequest = GetParameterRequest
					.builder()
					.name(parameter)
					.withDecryption(Boolean.TRUE)
					.build();

			GetParameterResponse response = client.getParameter(getParameterRequest);
			return response.parameter().value();
		} catch (ParameterNotFoundException e) {			
			return defaultValue;
		}

Bereitstellungsschritte

  1. Das Servlet und ein anderer unterstützender Code, der mit dem AWS Parameter Store kommuniziert, wird als .war-Datei (ssm-api-1.0.war) verpackt und im API Manager an folgendem Ort bereitgestellt  
  • APIM_HOME/repository/deployments/server/webapps 
  1. Darüber hinaus muss die API-Definition über Herausgeberportale erstellt und bereitgestellt werden
API definition
  1. Clients, die eine Verbindung mit dem Parameter Store herstellen möchten, rufen die API mithilfe des einfachen Oauth2 und dem Namen des Parameters auf. Bei Erfolg wird das Parameter-Name-Wert-Paar im JSON-Format zurückgegeben.
Parameter Name Value

deu
Schließen
Was ist auf unserer Speisekarte