Skip to content

Commit bcc8b53

Browse files
authored
Merge pull request #1320 from cvvz/release-1.23-1318
[release-1.23] fix: workload identity did not work
2 parents f640c62 + 49f7ff9 commit bcc8b53

File tree

2 files changed

+51
-11
lines changed

2 files changed

+51
-11
lines changed

pkg/blob/azure.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,18 @@ func GetCloudProvider(ctx context.Context, kubeClient kubernetes.Interface, node
103103
} else {
104104
config.UserAgent = userAgent
105105
config.CloudProviderBackoff = true
106-
if err = az.InitializeCloudFromConfig(context.TODO(), config, fromSecret, false); err != nil {
106+
// these environment variables are injected by workload identity webhook
107+
if tenantID := os.Getenv("AZURE_TENANT_ID"); tenantID != "" {
108+
config.TenantID = tenantID
109+
}
110+
if clientID := os.Getenv("AZURE_CLIENT_ID"); clientID != "" {
111+
config.AADClientID = clientID
112+
}
113+
if federatedTokenFile := os.Getenv("AZURE_FEDERATED_TOKEN_FILE"); federatedTokenFile != "" {
114+
config.AADFederatedTokenFile = federatedTokenFile
115+
config.UseFederatedWorkloadIdentityExtension = true
116+
}
117+
if err = az.InitializeCloudFromConfig(ctx, config, fromSecret, false); err != nil {
107118
klog.Warningf("InitializeCloudFromConfig failed with error: %v", err)
108119
}
109120
}

pkg/blob/azure_test.go

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,19 @@ users:
8080
}()
8181

8282
tests := []struct {
83-
desc string
84-
createFakeCredFile bool
85-
createFakeKubeConfig bool
86-
kubeconfig string
87-
nodeID string
88-
userAgent string
89-
allowEmptyCloudConfig bool
90-
expectedErr error
83+
desc string
84+
createFakeCredFile bool
85+
createFakeKubeConfig bool
86+
setFederatedWorkloadIdentityEnv bool
87+
kubeconfig string
88+
nodeID string
89+
userAgent string
90+
allowEmptyCloudConfig bool
91+
expectedErr error
92+
aadFederatedTokenFile string
93+
useFederatedWorkloadIdentityExtension bool
94+
aadClientID string
95+
tenantID string
9196
}{
9297
{
9398
desc: "out of cluster, no kubeconfig, no credential file",
@@ -134,6 +139,20 @@ users:
134139
allowEmptyCloudConfig: true,
135140
expectedErr: nil,
136141
},
142+
{
143+
desc: "[success] get azure client with workload identity",
144+
createFakeKubeConfig: true,
145+
createFakeCredFile: true,
146+
setFederatedWorkloadIdentityEnv: true,
147+
kubeconfig: fakeKubeConfig,
148+
nodeID: "",
149+
userAgent: "useragent",
150+
useFederatedWorkloadIdentityExtension: true,
151+
aadFederatedTokenFile: "fake-token-file",
152+
aadClientID: "fake-client-id",
153+
tenantID: "fake-tenant-id",
154+
expectedErr: nil,
155+
},
137156
}
138157

139158
for _, test := range tests {
@@ -142,7 +161,7 @@ users:
142161
t.Error(err)
143162
}
144163
defer func() {
145-
if err := os.Remove(fakeKubeConfig); err != nil {
164+
if err := os.Remove(fakeKubeConfig); err != nil && !os.IsNotExist(err) {
146165
t.Error(err)
147166
}
148167
}()
@@ -156,7 +175,7 @@ users:
156175
t.Error(err)
157176
}
158177
defer func() {
159-
if err := os.Remove(fakeCredFile); err != nil {
178+
if err := os.Remove(fakeCredFile); err != nil && !os.IsNotExist(err) {
160179
t.Error(err)
161180
}
162181
}()
@@ -176,6 +195,12 @@ users:
176195
}
177196
continue
178197
}
198+
if test.setFederatedWorkloadIdentityEnv {
199+
t.Setenv("AZURE_TENANT_ID", test.tenantID)
200+
t.Setenv("AZURE_CLIENT_ID", test.aadClientID)
201+
t.Setenv("AZURE_FEDERATED_TOKEN_FILE", test.aadFederatedTokenFile)
202+
}
203+
179204
cloud, err := GetCloudProvider(context.Background(), kubeClient, test.nodeID, "", "", test.userAgent, test.allowEmptyCloudConfig)
180205
if !reflect.DeepEqual(err, test.expectedErr) && test.expectedErr != nil && !strings.Contains(err.Error(), test.expectedErr.Error()) {
181206
t.Errorf("desc: %s,\n input: %q, GetCloudProvider err: %v, expectedErr: %v", test.desc, test.kubeconfig, err, test.expectedErr)
@@ -185,6 +210,10 @@ users:
185210
} else {
186211
assert.Equal(t, cloud.Environment.StorageEndpointSuffix, storage.DefaultBaseURL)
187212
assert.Equal(t, cloud.UserAgent, test.userAgent)
213+
assert.Equal(t, cloud.AADFederatedTokenFile, test.aadFederatedTokenFile)
214+
assert.Equal(t, cloud.UseFederatedWorkloadIdentityExtension, test.useFederatedWorkloadIdentityExtension)
215+
assert.Equal(t, cloud.AADClientID, test.aadClientID)
216+
assert.Equal(t, cloud.TenantID, test.tenantID)
188217
}
189218
}
190219
}

0 commit comments

Comments
 (0)