Expand my Community achievements bar.

Submissions are now open for the 2026 Adobe Experience Maker Awards.
SOLVED

How to get secret environment variable in AEM Cloud

Avatar

Level 2

Hi all,

 

We added some secret environment variables in AEM Cloud. And we configured them in our OSGI configurations like below.

{
   "api-key":"$[secret:SECRET_VAR_NAME]"
}

My question is how can we get this secret value in a service? Do we need to treat this value "$[secret:SERVER_API_KEY]" as a placeholder and resolve it by ourselves? 

 

Thanks,

Mengsha

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Level 9

Here is sample code

package com.example.core.config;

import org.osgi.service.metatype.annotations.ObjectClassDefinition;
import org.osgi.service.metatype.annotations.AttributeDefinition;

@ObjectClassDefinition(name = "Secret Config", description = "Configuration for accessing a secret")
public @interface SecretConfig {

@AttributeDefinition(name = "API Secret Key", description = "Secret Key for external API")
String api_secret();
}

Reference it in your service implementation
package com.example.core.services.impl;

import com.example.core.config.SecretConfig;
import com.example.core.services.SecretService;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.metatype.annotations.Designate;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@component(
service = SecretService.class,
configurationPolicy = ConfigurationPolicy.REQUIRE
)
@Designate(ocd = SecretConfig.class)
public class SecretServiceImpl implements SecretService {

private static final Logger log = LoggerFactory.getLogger(SecretServiceImpl.class);

private String apiSecret;

@activate
@MODIFIED
protected void activate(SecretConfig config) {
this.apiSecret = config.api_secret();
log.info("Secret configuration loaded.");
}

@Override
public String getSecret() {
return apiSecret;
}
}

View solution in original post

4 Replies

Avatar

Community Advisor

@MengshaJiang : Secret and environment variables are automatically resolved to your osgi configuration. No customization is required for this once you have created them in cloud manager and created osgi config for it.
Your osgi service or component will resolve it for you.

https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/developing/advance...

 

thanks.

 

 

Avatar

Level 2

In AEM Cloud, you configure secrets via the Cloud Manager These secrets become available to your application at runtime, usually as environment variables.

 

String secretValue = System.getenv("SECRET_ENV_VAR_NAME");

Avatar

Correct answer by
Level 9

Here is sample code

package com.example.core.config;

import org.osgi.service.metatype.annotations.ObjectClassDefinition;
import org.osgi.service.metatype.annotations.AttributeDefinition;

@ObjectClassDefinition(name = "Secret Config", description = "Configuration for accessing a secret")
public @interface SecretConfig {

@AttributeDefinition(name = "API Secret Key", description = "Secret Key for external API")
String api_secret();
}

Reference it in your service implementation
package com.example.core.services.impl;

import com.example.core.config.SecretConfig;
import com.example.core.services.SecretService;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.metatype.annotations.Designate;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@component(
service = SecretService.class,
configurationPolicy = ConfigurationPolicy.REQUIRE
)
@Designate(ocd = SecretConfig.class)
public class SecretServiceImpl implements SecretService {

private static final Logger log = LoggerFactory.getLogger(SecretServiceImpl.class);

private String apiSecret;

@activate
@MODIFIED
protected void activate(SecretConfig config) {
this.apiSecret = config.api_secret();
log.info("Secret configuration loaded.");
}

@Override
public String getSecret() {
return apiSecret;
}
}

Avatar

Level 2

Hi  Hemant_arora,

 

It worked! Thank you for your reply!

 

Regards,

Mengsha