diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/VaultEnvironmentProperties.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/VaultEnvironmentProperties.java index f561beb2..f82b58df 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/VaultEnvironmentProperties.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/VaultEnvironmentProperties.java @@ -525,10 +525,28 @@ public class VaultEnvironmentProperties implements HttpEnvironmentRepositoryProp */ private String role = ""; + /** + * URI to the Azure MSI Identity Service. + */ + private String identityTokenService = ""; + + /** + * URI to the Azure MSI Metadata Service. + */ + private String metadataService = ""; + public String getAzurePath() { return this.azurePath; } + public String getIdentityTokenService() { + return identityTokenService; + } + + public String getMetadataService() { + return metadataService; + } + public String getRole() { return this.role; } @@ -537,6 +555,14 @@ public class VaultEnvironmentProperties implements HttpEnvironmentRepositoryProp this.azurePath = azurePath; } + public void setIdentityTokenService(String identityTokenService) { + this.identityTokenService = identityTokenService; + } + + public void setMetadataService(String metadataService) { + this.metadataService = metadataService; + } + public void setRole(String role) { this.role = role; } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/AzureMsiClientAuthenticationProvider.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/AzureMsiClientAuthenticationProvider.java index 9da54df4..901aaa1f 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/AzureMsiClientAuthenticationProvider.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/vault/authentication/AzureMsiClientAuthenticationProvider.java @@ -16,6 +16,8 @@ package org.springframework.cloud.config.server.environment.vault.authentication; +import java.net.URI; + import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties; import org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.AuthenticationMethod; import org.springframework.cloud.config.server.environment.vault.SpringVaultClientAuthenticationProvider; @@ -44,10 +46,22 @@ public class AzureMsiClientAuthenticationProvider AuthenticationMethod.AZURE_MSI)); AzureMsiAuthenticationOptions options = AzureMsiAuthenticationOptions.builder() - .role(azureMsi.getRole()).build(); + .role(azureMsi.getRole()).path(azureMsi.getAzurePath()) + .instanceMetadataUri(getUri(azureMsi.getMetadataService(), + AzureMsiAuthenticationOptions.DEFAULT_INSTANCE_METADATA_SERVICE_URI)) + .identityTokenServiceUri(getUri(azureMsi.getIdentityTokenService(), + AzureMsiAuthenticationOptions.DEFAULT_IDENTITY_TOKEN_SERVICE_URI)) + .build(); return new AzureMsiAuthentication(options, vaultRestOperations, externalRestOperations); } + private URI getUri(String uriString, URI defaultUri) { + if (uriString == null || uriString.isEmpty()) { + return defaultUri; + } + return URI.create(uriString); + } + } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java index 2774ae58..ad10a94c 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/vault/SpringVaultClientConfigurationTests.java @@ -50,11 +50,13 @@ import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.mock.http.client.MockClientHttpRequest; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.ClassUtils; import org.springframework.vault.authentication.AppRoleAuthentication; import org.springframework.vault.authentication.AwsEc2Authentication; import org.springframework.vault.authentication.AwsIamAuthentication; import org.springframework.vault.authentication.AzureMsiAuthentication; +import org.springframework.vault.authentication.AzureMsiAuthenticationOptions; import org.springframework.vault.authentication.ClientAuthentication; import org.springframework.vault.authentication.ClientCertificateAuthentication; import org.springframework.vault.authentication.CubbyholeAuthentication; @@ -81,6 +83,8 @@ import static org.springframework.cloud.config.server.environment.VaultEnvironme import static org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.AuthenticationMethod.KUBERNETES; import static org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.AuthenticationMethod.PCF; import static org.springframework.cloud.config.server.environment.VaultEnvironmentProperties.AuthenticationMethod.TOKEN; +import static org.springframework.vault.authentication.AzureMsiAuthenticationOptions.DEFAULT_IDENTITY_TOKEN_SERVICE_URI; +import static org.springframework.vault.authentication.AzureMsiAuthenticationOptions.DEFAULT_INSTANCE_METADATA_SERVICE_URI; class SpringVaultClientConfigurationTests { @@ -145,6 +149,14 @@ class SpringVaultClientConfigurationTests { properties.getAzureMsi().setAzurePath("azure-msi"); assertClientAuthenticationOfType(properties, AzureMsiAuthentication.class); + + AzureMsiAuthentication clientAuthentication = (AzureMsiAuthentication) getConfiguration(properties) + .clientAuthentication(); + AzureMsiAuthenticationOptions options = (AzureMsiAuthenticationOptions) ReflectionTestUtils + .getField(clientAuthentication, "options"); + + assertThat(options.getIdentityTokenServiceUri()).isEqualTo(DEFAULT_IDENTITY_TOKEN_SERVICE_URI); + assertThat(options.getInstanceMetadataServiceUri()).isEqualTo(DEFAULT_INSTANCE_METADATA_SERVICE_URI); } @Test