PowerFlex : Configuration de l’authentification unique PowerFlex avec Microsoft Azure à l’aide d’OpenID Connect (OIDC)
Résumé: Cet article vous guide tout au long de la configuration de PowerFlex Customer Identity and Access Management (CIAM) pour l’authentification unique avec l’ID Microsoft Azure Entra à l’aide d’OIDC. ...
Instructions
Cet article vous guide tout au long de la configuration de PowerFlex Customer Identity and Access Management (CIAM) pour l’authentification unique avec l’ID Microsoft Azure Entra à l’aide d’OIDC, y compris la configuration du certificat, la configuration de l’IdP et du prestataire de services (SP), l’échange de jetons et la validation de l’accès à l’API. Cette configuration vous permet de tirer parti des fonctionnalités SSO. Cela nécessite des modifications de configuration sur PowerFlex et Microsoft Azure.
Cet article s’adresse aux administrateurs et au personnel de sécurité qui utilisent PowerFlex.
PowerFlex CIAM s’intègre aux fournisseurs d’identité conformes à OIDC, y compris Microsoft Azure Entra ID, pour permettre une authentification centralisée et un accès sécurisé aux API.
Cet article fournit un processus étape par étape pour configurer l’authentification unique PowerFlex avec Microsoft Azure via l’API REST. Voici la liste des étapes générales :
- Initialiser CIAM et configurer PowerFlex en tant que prestataire de services (SP) OIDC
- Enregistrer Microsoft Azure Entra ID en tant que fournisseur d’identité OIDC (IdP)
- Ajouter les certificats d’autorité de certification requis (DigiCert/GlobalSign) au CIAM
- Configurer les revendications, les URI de redirection et les autorisations de l’application Microsoft Azure
- Créer des clients CIAM OAuth2 et des mappages d’échange de jetons
- Obtenez un jeton Microsoft Azure, échangez-le contre un jeton PowerFlex et validez l’accès à l’API REST
Terminologie
Le tableau suivant décrit les termes et concepts importants nécessaires pour mener à bien ce processus :
| Terme | Description |
| Adresse IP de la machine virtuelle de gestion (MVM) | Les adresses IP du MVM hébergeant PowerFlex Manager et les services de gestion. Un nœud SDS (Storage Data Server) MVM Vous pouvez trouver les adresses IP MVM en vous connectant à l’interface utilisateur de PowerFlex Manager. Accédez à System-Components>> MVM. Par exemple, 10.2xx.3xx.184, 10.2xx.3xx.185, 10.2xx.3xx.186 |
| Serveur de données de stockage (SDS) | Nœud du serveur de données de stockage (SDS) qui héberge les MVM. |
| Adresse IP d’entrée | L’adresse IP externe pour rke2-ingress-nginx-controller (équilibreur de charge/point de terminaison d’entrée) |
| Gestion des accès et des identités client (CIAM) | Services de gestion des identités et des accès du client PowerFlex pour OAuth2/OIDC |
| Prestataire de services (SP) | Fournisseur d’identité (IdP)|Le prestataire de services (côté PowerFlex/Keycloak) et le fournisseur d’identité (ID Microsoft Azure Entra) |
Configuration requise
Un script d’automatisation (oidc_azure.tar) est utilisé pour connecter Microsoft Azure Entra ID à PowerFlex.
Le script est au format fichier tar et doit être téléchargé et copié sur votre MVM :
Pour copier le oidc_azure. tar, vous devez disposer d’un accès administratif à la machine virtuelle de gestion PowerFlex.
Voici le fichier : oidc_azure.tar
Vous devez exécuter les commandes de la capture d’écran ci-dessous, car les variables exportées sont réutilisées entre les étapes et les scripts de ce processus.
sudo -i

À quoi sert chaque commande ?
- L’option '
kubectl get svc -A | grep "sso " | awk '{print $4}''command renvoie l’adresse IP du cluster du service SSO dans le cluster Kubernetes. - L’option '
curl -k --location --request POST "https://${SSO_IP}:8080/rest/auth/login" --header 'Accept: application/json' --header 'Content-Type: application/json' --data '{"username": "admin","password": "Scaleio123!" }' | jq -r .access_token' se connecte à PowerFlex à l’aide de l’API REST SSO et récupère un jeton d’accès (JWT) qui est utilisé pour les appels d’API suivants aux services PowerFlex. - Le'
kubectl get svc -A | grep -m1 rke2-ingress-nginx-controller | sort | awk '{print $5}''renvoie l’adresse IP externe du service rke2-ingress-nginx-controller, qui est généralement l’adresse IP de l’équilibreur de charge ou du contrôleur d’entrée utilisé pour le trafic externe.
Lorsque ces commandes sont exécutées, les variables suivantes sont exportées :
export SSO_IP=$(kubectl get svc -A | grep "sso " | awk '{print $4}')
export ASMUI_PASS=$(kubectl get secret pfxm-asmui-creds -o json -n powerflex \ | jq '.data | map_values(@base64d)' \ | jq -r '.["keycloak-password"]')
export PM_TOKEN=$(curl -k --location --request POST "https://${SSO_IP}:8080/rest/auth/login" \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data "{\"username\": \"asmuiuser\",\"password\": \"$ASMUI_PASS\"}" | jq -r .access_token)
export IN_IP=$(kubectl get svc -A | grep -m1 rke2-ingress-nginx-controller | sort | awk '{print $5}')
1. Initialiser CIAM et configurer PowerFlex en tant que prestataire de services (SP) OIDC
Cette étape est le point de départ du processus d’intégration de CIAM à PowerFlex à l’aide d’OpenID Connect (OICD). La configuration CIAM SSO pour PowerFlex est initialisée.
API : POST /rest/v1/sso-ciam/init
Commande :
curl -k -X POST https://$IN_IP/rest/v1/sso-ciam/init --header 'Accept: application/json' --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"
Script: ./init.sh
Sortie: Un entier : l’ID du client CIAM, c’est-à-dire «2"
2. Configurez PowerFlex avec Keycloak en tant que prestataire de services OIDC.
Cette étape permet d’enregistrer et de configurer PowerFlex en tant que prestataire de services OIDC auprès de Keycloak (ou d’un autre fournisseur d’identité), ce qui permet l’authentification SSO sécurisée à l’aide d’OpenID Connect.
Opération API : PUBLIER /rest/v1/oidc-sp-config
Commande :
curl -kL -X POST --url https://$IN_IP/rest/v1/oidc-sp-config --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}" --data '{
"sp_id": "powerflex-$IN_IP",
"redirect_uri": "https://$IN_IP/auth/realms/powerflex/protocol/openid-connect/auth",
"logout_uri": "https://$IN_IP/auth/realms/powerflex/protocol/openid-connect/logout",
"required_claims": ["email"],
"keycloak_settings": {
"config": {
"clientAuthMethod": "client_secret_basic",
"pkceEnabled": "true",
"useJwksUrl": "true",
"validateSignature": "true"
},
"first_broker_login_flow_alias": "first broker login",
"post_broker_login_flow_alias": null,
"link_only": null,
"store_token": true,
"add_read_token_role_on_create": true,
"trust_email": true
},
"days_to_store_state_code_verifier": 1}'
Script: ./add_oidc_sp.sh
Sortie (tronquée) : Nouveau prestataire de services
{"id":"00000000-0000-0000-0000-000000000000","sp_id":"powerflex-10.247.39.179","redirect_uris":["https://10.247.39.179/auth/realms/powerflex/protocol/openid-connect/auth"],"logout_uri":"https://10.247.39.179/auth/realms/powerflex/protocol/openid-connect/logout" ... },
2.1 Répertoriez le fournisseur de services OIDC.
Cette étape récupère la configuration actuelle du prestataire de services OIDC à partir de PowerFlex,
Commande :
curl -kL https://$IN_IP/rest/v1/oidc-sp-config --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}" | jq -r '.results[]'
Script: ./list_oidc_sp.sh
Exemple de sortie (tronqué) : Un prestataire de services créé à l’étape précédente.
{"results":[{"id":"00000000-0000-0000-0000-000000000000","sp_id":"powerflex-10.247.39.179",...}]
3. Ajoutez l’autorité de certification à PowerFlex pour les services CIAM.
Cette étape consiste à informer PowerFlex de l’autorité de certification à laquelle il doit faire confiance lors de la validation d’une communication sécurisée avec le système CIAM. Il existe deux certificats pour les services CIAM :
- DigiCert est une autorité de certification (AC) de confiance. Les services Microsoft Azure (tels que Microsoft Azure AD, les points de terminaison OIDC et les API Microsoft) utilisent des certificats SSL/TLS émis par DigiCert pour sécuriser la communication.
- Les certificats GA2 (GlobalSign ou racine/intermédiaire similaire) font partie de la chaîne de certificats qui valide les points de terminaison d’identité de Microsoft Azure. Ils veillent à ce que :
- URL des métadonnées OIDC (https://login.microsoftonline.com/...)(Lien externe) et les points de terminaison de token sont approuvés.
- Communication HTTPS sécurisée entre PowerFlex et l’IdP Microsoft Azure.
Cette opération garantit que CIAM approuve les points de terminaison Microsoft Azure.
La commande ci-dessous utilise des fichiers avec des certificats codés en PEM, où les nouvelles lignes sont remplacées par « \n ». Fondamentalement, il n’y a qu’une seule ligne dans ce fichier.
Par exemple :
-----BEGIN CERTIFICATE-----
\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-
----END CERTIFICATE-----
API : POST /Api/V1/CIAM/<ciam_id>/x509-certificates
Commande :
CA=`cat $1`
curl -kvvL -X POST https://$IN_IP//Api/V1/CIAM/<return_value_from_init_ciam>/x509-certificates --header "Authorization: Bearer ${PM_TOKEN}" --data-raw "
{
\"type\": \"CA\",
\"service\": \"ALL\",
\"certificate_format\": \"PEM\",
\"certificate\": \"$CA\"
}"
Script: ./add_cert.sh <certificate_pem_file>
Exemple de sortie (tronqué) :
cat digicert_ca.pem
-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQs;wCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4p
...
Fsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----\n
delladmin@lglou184:~/oidc_testing> cat digicert_g2.pem
-----BEGIN CERTIFICATE-----\nMIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\nMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI\n2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx\n1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ\nq2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz\ntCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\nvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP\nBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV\n5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY\n1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4\nNeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG\nFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91\n8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe\npLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\nMrY=\n-----END CERTIFICATE-----\n
--------------------------------------------------------------------------------------------------------------------------
./add_cert.sh digicert_ca.pem
{"id":"b5c3d51a-9161-4515-a741-4a197a348cf9","certificate":"-----BEGIN CERTIFICATE-----...\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----\n","subject":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","common_name":"DigiCert Global Root CA","issuer":"C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA","organization":"DigiCert Inc","organizational_unit":"www.digicert.com","country":"US","valid_from_timestamp":"2006-11-10T00:00:00Z","valid_to_timestamp":"2031-11-10T00:00:00Z","key_usage":"Digital Signature, Cert Sign, CRL Sign","type":"CA","service":"ALL","is_self_signed":true,"is_current":true,"is_valid":true,"cert_fingerprint":"43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:* Connection #0 to host 10.247.39.179 left intact
01:61","version":3,"serial_number":10944719598952040374951832963794454346,"signature_algorithm":"RSA","signature_hash_algorithm":"SHA-1","public_key":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKP\nC3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtx\nRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmF\naG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvU\nX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrT\nC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOv\nJwIDAQAB\n-----END PUBLIC KEY-----\n"}
3.1 Vérifier que les certificats sont ajoutés et répertoriés.
Cette étape vérifie que les certificats sont ajoutés et répertoriés.
Commande :
curl -kL https://$IN_IP/Api/V1/CIAM/2/x509-certificates --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"
Remarque : https ://$IN_IP//Api/V1/CIAM/2/x509-certificate - voici le numéro 2 du init.sh de l’étape 1.
Script: ./list_certs.sh
Exemple de sortie (tronqué) :
{"results":[{"id":"4a4d7f6b-251c-41a6-b304-783ed6d5fbc2","certificate":"-----BEGIN ....-----END PUBLIC KEY-----\n"}]}
4. Enregistrer l’ID Microsoft Azure Entra en tant que service OIDC (IdP)
Cette étape enregistre Microsoft Azure Entra ID en tant que fournisseur d’identité externe pour PowerFlex à l’aide d’OpenID Connect (OIDC), ce qui permet aux utilisateurs de s’authentifier via Microsoft Azure plutôt que de s’appuyer sur les informations d’identification PowerFlex locales.
Variables:
- ID du tenant : L’ID de client identifie le client Microsoft Azure Active Directory auquel appartient le fournisseur d’identité. Vous le trouverez sur la page Présentation de l’écran d’accueil de l’application dans Microsoft Azure.
- KK_ID : L’ID KK identifie l’ID client de l’application Microsoft Azure.
- KK_SECRET : Le code secret KK identifie le code secret client de Microsoft Azure.
API: POST /rest/v1/oidc-services
curl -kvvL --request POST \
--url "https://$IN_IP/rest/v1/oidc-services" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer ${PM_TOKEN}" \
--data "{
\"name\": \"azure\",
\"is_enabled\": true,
\"idp_metadata_url\": \"https://login.microsoftonline.com/<Tenant_id>/v2.0/.well-known/openid-configuration\",
\"claims_mapper\": [
{ \"name\": \"email\", \"value\": \"email\" },
{ \"name\": \"given_name\", \"value\": \"firstName\" },
{ \"name\": \"preferred_username\", \"value\": \"username\" },
{ \"name\": \"family_name\", \"value\": \"lastName\" }
],
\"client_id\": \"$KK_ID\",
\"client_secret\": \"$KK_SECRET\",
\"scopes\": [\"openid\",\"profile\",\"email\",\"offline_access\"],
\"pkce_enabled\": true,
\"code_challenge_method\": \"S256\",
\"idp \"idp_type\": \"AzureEntraID\"KK_ID=b151947c-b514-4997-a369-a9b76f26b050
KK_SECRET=tk_8Q~QYTj1FQYN2chWovu.M5Ph3YnIVzLwRJcoZ
TENANT_ID=945c199a-83a2-4e80-9f8c-5a91be5752dd
curl -kL -X POST --url https://$IN_IP/rest/v1/oidc-services --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}" \
--data \
"{ \"name\": \"azure\", \"is_enabled\": true, \"idp_metadata_url\": \"https://login.microsoftonline.com/${TENANT_ID}/v2.0/.well-known/openid-configuration\",
\"claims_mapper\": [ { \"name\": \"email\", \"value\": \"email\"
},
{
\"name\": \"given_name\",
\"value\": \"firstName\"
},
{
\"name\": \"preferred_username\",
\"value\": \"username\"
},
{
\"name\": \"family_name\",
\"value\": \"lastName\"
}
],
\"client_id\": \"$KK_ID\",
\"client_secret\": \"$KK_SECRET\",
\"scopes\": [
\"openid\",
\"profile\",
\"email\",
\"offline_access\"
],
\"pkce_enabled\": true,
\"code_challenge_method\": \"S256\",
\"idp_type\": \"AzureEntraID\"
}"
Script: ./add_oidc_service.sh
Exemple de sortie (tronqué) :
{
"id": "a230b7b8-8f6c-47db-9327-2e48db8040a9",
"name": "azure",
"is_enabled": true,
"idp_metadata_url": "https://login.microsoftonline.com/945c199a-83a2-4e80-9f8c-5a91be5752dd/v2.0/.well-known/openid-configuration",
"idp_metadata_load_timestamp": "2025-11-14T16:00:40.356569216Z",
"idp_metadata": {
"issuer": "https://login.microsoftonline.com/945c199a-83a2-4e80-9f8c-5a91be5752dd/v2.0",
"...": "additional metadata fields"
},
"code_challenge_method": "S256",
"idp_type": "AzureEntraID",
"is_default": false
}
4.1 Répertorier le service OIDC.
Cette étape répertorie le service OIDC.
Commande :
curl -kL https://$IN_IP/rest/v1/oidc-services --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"
Script : list_oidc_service.sh
Exemple (tronqué) :
./list_oidc_service.sh
{"results":[{"id":"a230b7b8-8f6c-47db-9327-2e48db8040a9","name":"azure","is_enabled":true,"idp_metadata_url":"https://login.microsoftonline.com/945c199a-83a2-4e80-9f8c-5a91be5752dd/v2.0/.well-known/openid-configuration",..."idp_type":"AzureEntraID","is_default":false}]}
5. Configurez l’URL de redirection dans Microsoft Azure.
Cette étape consiste à configurer Microsoft Azure pour envoyer les utilisateurs vers une destination appelée URL de redirection une fois qu’ils se sont connectés.
Dans le portail Microsoft Azure, accédez à Enregistrement → authentification des applications → URI de redirection, puis ajoutez l’URL suivante :
https://< PFMP_IP>/auth/realms/powerflex/broker/<SERVICE_ID_AZURE>/endpoint
Par exemple : https://10.247.39.179/auth/realms/powerflex/broker/a230b7b8-8f6c-47db-9327-2e48db8040a9/endpoint
- <> PFMP_IP est l’adresse IP de PowerFlex Manager (si nécessaire, résolvez le nom d’hôte)
- <> SERVICE_ID_AZURE est l’IdP à partir de l’ID de service de l’étape 4.
6. Configurez les revendications de token dans Microsoft Azure.
a) Ajouter des revendications facultatives (jeton d’ID)
- Dans le portail Microsoft Azure, accédez à Configuration du jeton → Ajouter une demande facultative.
- Sous Token type, sélectionnez ID.
- Sous Claim, cochez la case en regard des attributs suivants :
-
email
-
family_name
-
given_name
-
preferred_username
-
- Cliquez sur Ajouter.
b) Ajouter des demandes de règlement de groupe
- Dans le portail Microsoft Azure, accédez à Configuration du jeton → Ajouter des revendications de groupe.
- Sous Modifier la demande de groupes, cochez la case en regard de Groupes affectés à l’application.
- Sous ID, cochez la case en regard de Group ID.
- Sous Accès, cochez la case en regard de l’ID de groupe.
- Cliquez sur Ajouter.
Vous utiliserez ces ID de groupe ultérieurement pour le mappage des rôles PowerFlex dans l’interface utilisateur de PowerFlex Manager.
7. Configurez les autorisations API dans Microsoft Azure.
Cette étape garantit que PowerFlex dispose de l’accès approprié aux ressources protégées dans Microsoft Azure.
- Dans le portail Microsoft Azure, accédez à Autorisations API →Microsoft Graph.
- Sous Demander des autorisations d’API, sélectionnez
- Sous Request API permissions, sélectionnez User → Read.
- Cliquez sur Mettre à jour les autorisations.
8. (Facultatif) Affectez des utilisateurs/groupes dans Microsoft Azure.
Cette étape permet aux personnes ou équipes appropriées d’accéder à PowerFlex en les affectant à des rôles ou des groupes spécifiques au sein de Microsoft Azure Active Directory.
- Dans le portail Microsoft Azure, accédez à Applications d’entreprise → Utilisateurs et groupes.
- Sous Nom d’affichage, cochez la case en regard de l’utilisateur/groupe et copiez l’ID d’objet.
L’ID d’objet est utilisé pour le mappage de rôles basé sur des revendications dans PowerFlex.
9. (Facultatif) Ajoutez l’utilisateur/le groupe dans l’interface utilisateur PowerFlex
Cette étape consiste à accorder l’accès à PowerFlex en ajoutant l’utilisateur ou le groupe approprié directement dans l’utilisateur PowerFlex Manager, en veillant à ce qu’il puisse se connecter et utiliser le système en fonction des rôles et autorisations qui lui sont attribués.
- Connectez-vous à l’interface utilisateur de PowerFlex Manager.
- Accédez à Paramètres → Gestion des utilisateurs → Ajouter un utilisateur/groupe distant.
- Saisissez les informations suivantes :
- Type : groupe
- Fournisseur : Azure
- Nom du groupe : n’importe quel nom significatif
- Nom de la demande de remboursement : groupes
- Rôle de l’utilisateur : Super utilisateur
- Valeur de la demande : ID d’objet de Microsoft Azure (étape 8)
10. Ajoutez le client au CIAM.
Cette étape ajoute le client au CIAM afin d’enregistrer PowerFlex afin que le CIAM puisse déterminer quelle application demande l’authentification, où envoyer des jetons, les autorisations dont l’application a besoin et les flux d’authentification qu’elle peut utiliser.
API: POST /rest/v1/oauth2-clients
Commande :
curl -kL --request POST \
--url "https://$IN_IP/rest/v1/oauth2-clients" \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer ${PM_TOKEN}" \
--data "{
\"client_name\": \"azure_oidc_client\",
\"redirect_uris\": [\"\"],
\"authorization_code_flow\": false,
\"client_credentials_flow\": false,
\"token_exchange_enabled\": true,
\"offline_access_enabled\": true,
\"client_offline_session_idle\": 1,
\"client_offline_session_max\": 1,
\"client_security_level\": \"TRUSTED\"
Script: ./addclient_ciam.sh
Exemple de résultat :
./addclient_ciam.sh
{"id":"77ce10cb-c40e-4c1e-b922-07014b5b6e7b","client_name":"azure_oidc_client","client_secret":"QXDtyVYO5l3Puj2ZMACz/MK+sTSOqDHy53oRhVkXiBc=","redirect_uris":[""],"authorization_code_flow":false,"client_credentials_flow":false,"signing_algorithm":"RS256","refresh_token_max_reuse":3,"access_token_expiration_duration":360,"token_exchange_enabled":true,"client_security_level":"TRUSTED","offline_access_enabled":true,"client_offline_session_idle":1,"client_offline_session_max":1
10.1 Vérifiez que le client a été ajouté en le listant.
Cette étape permet de vérifier que le client a bien été ajouté en répertoriant tous les clients existants.
Commande :
curl -kL https://$IN_IP/rest/v1/oauth2-clients --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}" | jq -r '.results[]'
Script: ./list_clients_ciam.sh
Exemple :
./list_clients_ciam.sh
{
"id": "77ce10cb-c40e-4c1e-b922-07014b5b6e7b",
"client_name": "azure_oidc_client",
"redirect_uris": [
""
],
"authorization_code_flow": false,
"client_credentials_flow": false,
"signing_algorithm": "RS256",
"refresh_token_max_reuse": 3,
"access_token_expiration_duration": 360,
"token_exchange_enabled": true,
"client_security_level": "TRUSTED",
"offline_access_enabled": true,
"client_offline_session_idle": 1,
"client_offline_session_max": 1,
"num_failed_login_attempts": 0
}
10.2 Modifier le client.
Cette étape met à jour un client de connexion existant dans CIAM. La charge utile doit rester vide ({}). Cette commande ajoute les mappages PowerFlex requis au client Keycloak.
Commande :
curl -k -X PATCH "https://$IN_IP/rest/v1/login-clients/$1" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${PM_TOKEN}" \
--data '{}'
Script: ./update_client.sh <ID_FROM_ADD_CLIENT_CIAM>
Exemple :
./update_client.sh 77ce10cb-c40e-4c1e-b922-07014b5b6e7b
{"id":"1c3dbd45-66bc-44c7-94ce-1aef3a282afc","name":"azure_oidc_client","client_id":"77ce10cb-c40e-4c1e-b922-07014b5b6e7b","is_enabled":true,"client_secret":null,"redirect_uris":[""],"web_origins":[""]}
11. Ajouter l’application au CIAM pour le mappage de l’échange de jetons
Cette étape ajoute l’application au CIAM pour activer l’authentification externe, l’autorisation et les flux d’identités sécurisés.
API: POST /rest/v1/oauth2-token-exchanges
Variables obligatoires :
- LOCAL_CLIENT_ID : ID de addclient_ciam.sh (par exemple, 77ce10cb-c40e-4c1e-b922-07014b5b6e7b)
- EXT_CLIENT_ID : ID Microsoft Entra ID ID d’application (client) (par exemple, 859c0721-cb0c-433c-a437-bd2d2462754f)
- MÉTADONNÉES: URL des métadonnées de l’application Microsoft Azure (par exemple, https://login.microsoftonline.com/< Tenant_id>/v2.0/.well-known/openid-configuration)
- IDP : ID de service OIDC (par exemple, a230b7b8-8f6c-47db-9327-2e48db8040a9)
- RÔLE: Rôle PowerFlex (par exemple, SuperUser)
- PM_TOKEN : Jeton de support d’API
- IN_IP : Hôte/adresse IP cible
Commande :
curl -kL -X POST "https://$IN_IP/rest/v1/oauth2-token-exchanges" \
-H "Content-Type: application/json" \
-H "clientId: $LOCAL_CLIENT_ID" \
-H "Authorization: Bearer ${PM_TOKEN}" \
--data @- <<EOF
{
"ciam_oauth2_client_id": "$LOCAL_CLIENT_ID",
"customer_client_id": "$EXT_CLIENT_ID",
"customer_metadata_url": "$METADATA",
"idp_service_id": "$IDP",
"static_roles": ["$ROLE"]
}
Script: ./add_app.sh
11.1 Répertorier l’ID d’application
Cette étape permet de récupérer l’ID d’application afin de valider l’identifiant client unique requis pour les opérations d’autorisation en aval et d’échange de jetons.
Commande :
curl -kL "https://$IN_IP/rest/v1/oidc-services" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${PM_TOKEN}"
Script:
./list_apps.sh
Exemple :
./list_apps.sh
{ "id": "f803da04-2979-49dc-9408-496f127639b4",
"ciam_oauth2_client_id": "77ce10cb-c40e-4c1e-b922-07014b5b6e7b",
"customer_client_id": "859c0721-cb0c-433c-a437-bd2d2462754f",
"customer_metadata_url": "https://login.microsoftonline.com/945c199a-83a2-4e80-9f8c-5a91be5752dd/v2.0/.well-known/openid-configuration",
"idp_service_id": "a230b7b8-8f6c-47db-9327-2e48db8040a9",
"static_roles": [
"SuperUser" ]
}
12. Mapper les rôles dans Keycloak (PowerFlex Realm)
Cette étape mappe les rôles dans le domaine PowerFlex Keycloak afin d’aligner les attributions de rôles de fournisseur d’identité sur les exigences d’autorisation PowerFlex.
1. Connectez-vous à Keycloak à l’aide du point de terminaison suivant : https://< PFMP_IP>/auth/admin/
Par exemple : https://10.247.39.179/auth/admin/
Pour vous connecter au Keycloak, les informations d’identification peuvent être récupérées comme indiqué ci-dessous
Commande :
kubectl get secret keycloak-admin-credentials -o json -n powerflex | jq '.data | map_values(@base64d)'
Script: ./get_keycloak_creds.sh
Exemple :
./get_keycloak_creds.sh
{
"password": "sZFmHmfhjj",
"username": "keycloak"
}
2. Dans l’instance Keycloak, sélectionnez le PowerFlex.
3. Cliquez sur Utilisateurs, sélectionnez l’ID utilisateur et mettez à jour les attributs pour qu’ils correspondent au rôle utilisé dans CIAM (par exemple, Superutilisateur).
4. Sous Mappage des rôles, vérifiez que le rôle est mis à jour.
13. Obtenez le jeton Microsoft Azure (informations d’identification du mot de passe du propriétaire de la ressource / nom d’utilisateur + mot de passe)
Il existe plusieurs façons d’obtenir un jeton auprès de Microsoft Azure AD. Dans cet exemple d’étape, l’application se connecte à Microsoft Entra ID (Azure AD) en soumettant directement le nom d’utilisateur + mot de passe d’un utilisateur au point de terminaison du jeton afin de recevoir un jeton OAuth 2.0. Il s’agit de l’octroi ROPC (Resource Owner Password Credentials).
Commande :
curl -X POST https://login.microsoftonline.com/$TENANT_ID/oauth2/token -H 'Content-Type: application/x-www-form-urlencoded' -d "grant_type=password&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&username=$USERNAME&password=$encoded_password&resource=$RESOURCE")
Script:./get_azure_token.sh
Conseil : Pour vous assurer que le jeton est valide, accédez au débogueur JWT (JSON Web Token) (lien externe)
14. Échanger le jeton Microsoft Azure contre le jeton PowerFlex (CIAM)
Cette étape échange le jeton Microsoft Azure contre un jeton CIAM PowerFlex afin que les API PowerFlex puissent être appelées.
API: POST /rest/v1/token
Variables:
- CIAM_CLIENT_ID : ID du client à partir de l’étape Ajouter le client au CIAM (étape 10)
- CIAM_CLIENT_SECRET : code secret du client à partir de l’étape Ajouter le client au CIAM (étape 10)
- EXT_TOKEN : jeton de Microsoft Azure
Commande :
curl -kL -X POST https://$IN_IP/rest/v1/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header "ClientId: $CIAM_CLIENT_ID" \
--header "ClientSecret: $CIAM_CLIENT_SECRET" \
--data "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
--data "subject_token=${EXT_TOKEN}" \
--data "subject_token_type=urn:ietf:params:oauth:token-type:jwt"
Scripts : ./token.sh (utilise le EXT_TOKEN définit donc la variable environnementale en conséquence)
Exemple de sortie (tronqué) :
{
"access_token": "ey...A",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 1800,
"refresh_token": "ey...qA"
}
15. Vérifier l’accès à l’API REST PowerFlex
Cette étape confirme que le token fonctionne en appelant un point de terminaison REST PowerFlex. Il utilise le access_token de la sortie du « token.sh », exporté sous forme de variable d’environnement PM_TOKEN.
export PM_TOKEN=eyJhb...eN_A
Commande :
curl -k --location --request GET https://$IN_IP/Api/V1/Credential --header 'Content-Type: application/json' --header "Authorization: Bearer $PM_TOKEN"
{
"totalRecords" : 3,
"credentialList" : [ {
"link" : {
"title" : "root",
"href" : "getCredential/69087b0c-cce7-4be7-b154-e8a3019cc553",
"rel" : "self",
"type" : null
},
"credential" : {
"type" : "OSCredential",
"id" : "69087b0c-cce7-4be7-b154-e8a3019cc553",
....
"link" : null,. "link" : null,. "link" : null, "references" : {
"devices" : 0,
"policies" : 0
}
} ]
}
Informations de référence
Récapitulatif de la séquence API
- Initialiser CIAM pour PowerFlex
(/rest/v1/sso-ciam/init) - Configurer PowerFlex en tant que prestataire de
services OIDC(/rest/v1/oidc-sp-config) - Ajouter des certificats pour les services
CIAM(DigiCert, GlobalSign, etc.) - Enregistrer l’ID Microsoft Azure Entra en tant que service
OIDC(/rest/v1/oidc-services) - Configurer l’ID de service dans l’onglet
Authentification Microsoft Azure(Mappage des points de terminaison du broker) - Définir des demandes de token et de groupe dans Microsoft Azure
(Affirmations facultatives, autorisations de l’API) - Ajout du client OAuth2 dans CIAM
(/rest/v1/oauth2-clients) - Ajout d’une application au CIAM pour l’échange de
jetons(/rest/v1/oauth2-token-exchanges) - Obtenir un jeton Microsoft Azure pour l’échanger contre un jeton
PowerFlex(/rest/v1/token) - Vérifier l’accès aux API REST PowerFlex
Commandes permettant d’effectuer un échange de jetons
Appel des API PowerFlex avec le jeton Microsoft Azure Entra
Commande pour effectuer un échange de jetons :
curl -kL -X POST https://$PFMP_IP/rest/v1/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header "ClientId: $CIAM_CLIENT_ID" \
--header "ClientSecret: $CIAM_CLIENT_SECRET" \
--data "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
--data "subject_token=${AZURE_TOKEN}" \
--data "subject_token_type=urn:ietf:params:oauth:token-type:jwt" | jq '.'
Exemple :
curl -kL -X POST https://10.247.39.179/rest/v1/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header "ClientId: 77ce10cb-c40e-4c1e-b922-07014b5b6e7b" \
--header "ClientSecret: QXDtyVYO5l3Puj2ZMACz/MK+sTSOqDHy53oRhVkXiBc=" \
--data "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
--data "subject_token=${AZURE_TOKEN}" \
--data "subject_token_type=urn:ietf:params:oauth:token-type:jwt" | jq '.'
Appel de l’API de l’appliance PowerFlex Manager avec un jeton échangé
curl -kL 'https://10.247.39.179/api/v1/appliance' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzMkNrM2YwNEI5OG5pRENza19IVmZ3R..._dxDp9QGWdteptby-8aaA'
Appel de l’API en mode bloc PowerFlex avec un jeton échangé
curl -kL GET https://10.247.39.179/api/types/Volume/instances --header 'Content-Type: application/json' --header "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzMkNrM2YwNEI5OG5pRENza19IVmZ3R..._dxDp9QGWdteptby-8aaA "
[
{
"genType": "EC",
"mappedSdcInfo": [
{
"limitIops": null,
"limitBwInMbps": null,
"isDirectBufferMapping": null,
"sdcIp": "",
"sdcId": "15d47a2400010000",
"sdcName": "513fda498aaf35e883da34f6ac46480",
"nqn": "nqn.2014-08.org.nvmexpress:uuid:72f30442-1cf7-0f5b-129c-da4fae6a028b",
"accessMode": "ReadWrite",
"hostType": "NVMeHost"
}
],
"managedBy": "ScaleIO",
"originalExpiryTime": 0,
"retentionLevels": [],
"snplIdOfSourceVolume": null,
"volumeReplicationState": "UnmarkedForReplication",
"replicationJournalVolume": false,
"replicationTimeStamp": 0,
"name": "csivol-21ef5b460c",
"creationTime": 1763382058,
"storagePoolId": "0ebdb61000000000",
"dataLayout": "ErasureCoding",
"vtreeId": "97957f7d00000002",
"sizeInKb": 8388608,
"compressionMethod": "NotApplicable",
"volumeClass": "defaultclass",
"accessModeLimit": "ReadWrite",
"lockedAutoSnapshotMarkedForRemoval": false,
"snplIdOfAutoSnapshot": null,
"pairIds": null,
"useRmcache": false,
"volumeType": "ThinProvisioned",
"consistencyGroupId": null,
"ancestorVolumeId": null,
"notGenuineSnapshot": false,
"secureSnapshotExpTime": 0,
"lockedAutoSnapshot": false,
"autoSnapshotGroupId": null,
"timeStampIsAccurate": false,
"nsid": 3,
"id": "77d698a400000002",
"links": [
{
"rel": "self",
"href": "/api/instances/Volume::77d698a400000002"
},
{
"rel": "/dtapi/rest/v1/metrics/query",
"href": "/dtapi/rest/v1/metrics/query",
"body": {
"resource_type": "volume",
"ids": [
"77d698a400000002"
]
}
},
{
"rel": "/api/parent/relationship/vtreeId",
"href": "/api/instances/VTree::97957f7d00000002"
},
{
"rel": "/api/parent/relationship/storagePoolId",
"href": "/api/instances/StoragePool::0ebdb61000000000"
}
]
},
{
"genType": "EC",
"mappedSdcInfo": null,
"managedBy": "ScaleIO",
"originalExpiryTime": 0,
"retentionLevels": [],
"snplIdOfSourceVolume": null,
"volumeReplicationState": "UnmarkedForReplication",
"replicationJournalVolume": false,
"replicationTimeStamp": 0,
"name": "csivol-4ea9633592",
"creationTime": 1763380456,
"storagePoolId": "0ebdb61000000000",
"dataLayout": "ErasureCoding",
"vtreeId": "9795586d00000000",
"sizeInKb": 8388608,
"compressionMethod": "NotApplicable",
"volumeClass": "defaultclass",
"accessModeLimit": "ReadWrite",
"lockedAutoSnapshotMarkedForRemoval": false,
"snplIdOfAutoSnapshot": null,
"pairIds": null,
"useRmcache": false,
"volumeType": "ThinProvisioned",
"consistencyGroupId": null,
"ancestorVolumeId": null,
"notGenuineSnapshot": false,
"secureSnapshotExpTime": 0,
"lockedAutoSnapshot": false,
"autoSnapshotGroupId": null,
"timeStampIsAccurate": false,
"nsid": 1,
"id": "77d6719400000000",
"links": [
{
"rel": "self",
"href": "/api/instances/Volume::77d6719400000000"
},
{
"rel": "/dtapi/rest/v1/metrics/query",
"href": "/dtapi/rest/v1/metrics/query",
"body": {
"resource_type": "volume",
"ids": [
"77d6719400000000"
]
.
.
.
]
}
]