Skip to content

Commit fe94302

Browse files
committed
fix upstream e2e, get object id from client id
1 parent 6546736 commit fe94302

File tree

18 files changed

+10183
-17
lines changed

18 files changed

+10183
-17
lines changed

test/e2e/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@ export set AZURE_CLIENT_SECRET=
1616
# If the the test is not for the public Azure, e.g. Azure China Cloud, then you need to set AZURE_CLOUD_NAME and AZURE_LOCATION.
1717
# For Azure Stack Clound, you need to set AZURE_ENVIRONMENT_FILEPATH for your cloud environment.
1818
# If you have an existing resource group created for the test, then you need to set variable AZURE_RESOURCE_GROUP.
19-
# If you are going to test reading storage account key(or sastoken) from Azure Key Vault, then you need to set variable AZURE_OBJECT_ID as the objectId of agentpool Managed Identity
2019
export set AZURE_CLOUD_NAME=
2120
export set AZURE_LOCATION=
2221
export set AZURE_ENVIRONMENT_FILEPATH=
2322
export set AZURE_RESOURCE_GROUP=
24-
export set AZURE_OBJECT_ID=
2523
```
2624

2725
### Run test

test/e2e/testsuites/pre_provisioned_keyvault_tester.go

Lines changed: 69 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ import (
2727
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
2828
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault"
2929
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
30+
"github.com/Azure/azure-sdk-for-go/services/graphrbac/1.6/graphrbac"
31+
"github.com/Azure/go-autorest/autorest"
32+
"github.com/Azure/go-autorest/autorest/adal"
33+
"github.com/Azure/go-autorest/autorest/azure"
3034
"github.com/onsi/ginkgo"
3135
v1 "k8s.io/api/core/v1"
3236
clientset "k8s.io/client-go/kubernetes"
@@ -42,7 +46,9 @@ var (
4246
location string
4347
vaultName string
4448
TenantID string
45-
// ObjectID string
49+
cloud string
50+
clientID string
51+
clientSecret string
4652
)
4753

4854
// PreProvisionedKeyVaultTest will provision required PV(s), PVC(s) and Pod(s)
@@ -62,8 +68,9 @@ func (t *PreProvisionedKeyVaultTest) Run(client clientset.Interface, namespace *
6268
resourceGroupName = e2eCred.ResourceGroup
6369
location = e2eCred.Location
6470
TenantID = e2eCred.TenantID
65-
// ObjectID = os.Getenv("AZURE_OBJECT_ID")
66-
// framework.ExpectNotEqual(len(ObjectID), 0, "env AZURE_OBJECT_ID must be set")
71+
cloud = e2eCred.Cloud
72+
clientID = e2eCred.AADClientID
73+
clientSecret = e2eCred.AADClientSecret
6774
vaultName = "blob-csi-keyvault-test4"
6875

6976
for _, pod := range t.Pods {
@@ -149,6 +156,12 @@ func createVault(ctx context.Context, cred azcore.TokenCredential) (*armkeyvault
149156
return nil, err
150157
}
151158

159+
objectID, err := getServicePrincipalObjectID(ctx, clientID)
160+
if err != nil {
161+
return nil, err
162+
}
163+
ginkgo.By("object ID: " + objectID)
164+
152165
pollerResp, err := vaultsClient.BeginCreateOrUpdate(
153166
ctx,
154167
resourceGroupName,
@@ -162,22 +175,12 @@ func createVault(ctx context.Context, cred azcore.TokenCredential) (*armkeyvault
162175
},
163176
TenantID: to.Ptr(TenantID),
164177
AccessPolicies: []*armkeyvault.AccessPolicyEntry{
165-
// {
166-
// TenantID: to.Ptr(TenantID),
167-
// ObjectID: to.Ptr(ObjectID),
168-
// Permissions: &armkeyvault.Permissions{
169-
// Secrets: []*armkeyvault.SecretPermissions{
170-
// to.Ptr(armkeyvault.SecretPermissionsGet),
171-
// to.Ptr(armkeyvault.SecretPermissionsList),
172-
// },
173-
// },
174-
// },
175178
{
176179
TenantID: to.Ptr(TenantID),
177-
ObjectID: to.Ptr("e3440dd1-b7f3-4275-82bd-65482ba5b26a"),
180+
ObjectID: to.Ptr(objectID),
178181
Permissions: &armkeyvault.Permissions{
179182
Secrets: []*armkeyvault.SecretPermissions{
180-
to.Ptr(armkeyvault.SecretPermissionsAll),
183+
to.Ptr(armkeyvault.SecretPermissionsGet),
181184
},
182185
},
183186
},
@@ -264,3 +267,54 @@ func createSecret(ctx context.Context, cred azcore.TokenCredential, secretName,
264267

265268
return &secretResp.Secret, nil
266269
}
270+
271+
func getServicePrincipalObjectID(ctx context.Context, clientID string) (string, error) {
272+
spClient, err := getServicePrincipalsClient()
273+
if err != nil {
274+
return "", err
275+
}
276+
277+
page, err := spClient.List(ctx, fmt.Sprintf("servicePrincipalNames/any(c:c eq '%s')", clientID))
278+
if err != nil {
279+
return "", err
280+
}
281+
servicePrincipals := page.Values()
282+
if len(servicePrincipals) == 0 {
283+
return "", fmt.Errorf("didn't find any service principals for client ID %s", clientID)
284+
}
285+
return *servicePrincipals[0].ObjectID, nil
286+
}
287+
288+
func getServicePrincipalsClient() (*graphrbac.ServicePrincipalsClient, error) {
289+
spClient := graphrbac.NewServicePrincipalsClient(TenantID)
290+
291+
env, err := azure.EnvironmentFromName(cloud)
292+
if err != nil {
293+
return nil, err
294+
}
295+
296+
oauthConfig, err := getOAuthConfig(env, subscriptionID, TenantID)
297+
if err != nil {
298+
return nil, err
299+
}
300+
301+
armSpt, err := adal.NewServicePrincipalToken(*oauthConfig, clientID, clientSecret, env.ServiceManagementEndpoint)
302+
if err != nil {
303+
return nil, err
304+
}
305+
306+
authorizer := autorest.NewBearerAuthorizer(armSpt)
307+
308+
spClient.Authorizer = authorizer
309+
310+
return &spClient, nil
311+
}
312+
313+
func getOAuthConfig(env azure.Environment, subscriptionID, tenantID string) (*adal.OAuthConfig, error) {
314+
oauthConfig, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, tenantID)
315+
if err != nil {
316+
return nil, err
317+
}
318+
319+
return oauthConfig, nil
320+
}

vendor/github.com/Azure/azure-sdk-for-go/services/graphrbac/1.6/graphrbac/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)