@@ -24,15 +24,21 @@ import (
24
24
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
25
25
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
26
26
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
27
+
28
+ "sigs.k8s.io/cloud-provider-azure/pkg/azclient/armauth"
27
29
)
28
30
29
31
type AuthProvider struct {
30
- FederatedIdentityCredential azcore.TokenCredential
31
- ManagedIdentityCredential azcore.TokenCredential
32
- ClientSecretCredential azcore.TokenCredential
32
+ FederatedIdentityCredential azcore.TokenCredential
33
+
34
+ ManagedIdentityCredential azcore.TokenCredential
35
+ ClientSecretCredential azcore.TokenCredential
36
+ ClientCertificateCredential azcore.TokenCredential
37
+
38
+ NetworkTokenCredential azcore.TokenCredential
33
39
NetworkClientSecretCredential azcore.TokenCredential
34
- MultiTenantCredential azcore. TokenCredential
35
- ClientCertificateCredential azcore.TokenCredential
40
+
41
+ MultiTenantCredential azcore.TokenCredential
36
42
}
37
43
38
44
func NewAuthProvider (armConfig * ARMClientConfig , config * AzureAuthConfig , clientOptionsMutFn ... func (option * policy.ClientOptions )) (* AuthProvider , error ) {
@@ -76,6 +82,20 @@ func NewAuthProvider(armConfig *ARMClientConfig, config *AzureAuthConfig, client
76
82
}
77
83
}
78
84
85
+ var (
86
+ networkTokenCredential azcore.TokenCredential
87
+ )
88
+ if config .UseManagedIdentityExtension && config .AuxiliaryTokenProvider != nil && IsMultiTenant (armConfig ) {
89
+ networkTokenCredential , err = armauth .NewKeyVaultCredential (
90
+ managedIdentityCredential ,
91
+ config .AuxiliaryTokenProvider .KeyVaultURL ,
92
+ config .AuxiliaryTokenProvider .SecretName ,
93
+ )
94
+ if err != nil {
95
+ return nil , fmt .Errorf ("create KeyVaultCredential for auxiliary token provider: %w" , err )
96
+ }
97
+ }
98
+
79
99
// ClientSecretCredential is used for client secret
80
100
var clientSecretCredential azcore.TokenCredential
81
101
var networkClientSecretCredential azcore.TokenCredential
@@ -88,7 +108,7 @@ func NewAuthProvider(armConfig *ARMClientConfig, config *AzureAuthConfig, client
88
108
if err != nil {
89
109
return nil , err
90
110
}
91
- if len (armConfig . NetworkResourceTenantID ) > 0 && ! strings . EqualFold ( armConfig . NetworkResourceTenantID , armConfig . GetTenantID () ) {
111
+ if IsMultiTenant (armConfig ) {
92
112
credOptions := & azidentity.ClientSecretCredentialOptions {
93
113
ClientOptions : * clientOption ,
94
114
}
@@ -128,7 +148,7 @@ func NewAuthProvider(armConfig *ARMClientConfig, config *AzureAuthConfig, client
128
148
if err != nil {
129
149
return nil , err
130
150
}
131
- if len (armConfig . NetworkResourceTenantID ) > 0 && ! strings . EqualFold ( armConfig . NetworkResourceTenantID , armConfig . GetTenantID () ) {
151
+ if IsMultiTenant (armConfig ) {
132
152
networkClientSecretCredential , err = azidentity .NewClientCertificateCredential (armConfig .NetworkResourceTenantID , config .GetAADClientID (), certificate , privateKey , credOptions )
133
153
if err != nil {
134
154
return nil , err
@@ -150,6 +170,7 @@ func NewAuthProvider(armConfig *ARMClientConfig, config *AzureAuthConfig, client
150
170
ClientSecretCredential : clientSecretCredential ,
151
171
ClientCertificateCredential : clientCertificateCredential ,
152
172
NetworkClientSecretCredential : networkClientSecretCredential ,
173
+ NetworkTokenCredential : networkTokenCredential ,
153
174
MultiTenantCredential : multiTenantCredential ,
154
175
}, nil
155
176
}
@@ -173,6 +194,9 @@ func (factory *AuthProvider) GetNetworkAzIdentity() azcore.TokenCredential {
173
194
if factory .NetworkClientSecretCredential != nil {
174
195
return factory .NetworkClientSecretCredential
175
196
}
197
+ if factory .NetworkTokenCredential != nil {
198
+ return factory .NetworkTokenCredential
199
+ }
176
200
return nil
177
201
}
178
202
0 commit comments