PowerFlex: Configurando o logon único do PowerFlex com o Microsoft Azure usando o OpenID Connect (OIDC)

Resumo: Este artigo orienta você na configuração do PowerFlex Customer Identity and Access Management (CIAM) para SSO com o Microsoft Azure Entra ID usando o OIDC.

Este artigo aplica-se a Este artigo não se aplica a Este artigo não está vinculado a nenhum produto específico. Nem todas as versões do produto estão identificadas neste artigo.

Instruções

Este artigo orienta você na configuração do Gerenciamento de acesso e identidade do cliente (CIAM) do PowerFlex para SSO com o Microsoft Azure Entra ID usando OIDC, incluindo configuração de certificado, configuração de IdP e provedor de serviços (SP), troca de tokens e validação de acesso à API. Essa configuração possibilita que você aproveite os recursos de SSO. Ele requer alterações de configuração no PowerFlex e no Microsoft Azure.

Este artigo destina-se a administradores e equipe de segurança que usam o PowerFlex.

O PowerFlex CIAM integra-se a IdPs compatíveis com OIDC, inclusive o Microsoft Azure Entra ID, para permitir a autenticação centralizada e o acesso seguro à API.

Este artigo apresenta um processo passo a passo para configurar o logon único do PowerFlex com o Microsoft Azure por meio da API REST. Esta é a lista de etapas de alto nível:

  1. Inicializar o CIAM e configurar o PowerFlex como um provedor de serviços (SP) OIDC
  2. Registrar o Microsoft Azure Entra ID como um provedor de identidade (IdP) do OIDC
  3. Adicione os certificados CA necessários (DigiCert/GlobalSign) ao CIAM
  4. Configurar declarações de aplicativos do Microsoft Azure, redirecionar URIs e permissões
  5. Criar clients OAuth2 do CIAM e mapeamentos de troca de token
  6. Obtenha um token do Microsoft Azure, troque-o por um token do PowerFlex e valide o acesso à API REST

Terminologia

A tabela a seguir descreve os termos e conceitos importantes necessários para concluir esse processo:

Termo Descrição
Endereço IP da máquina virtual de gerenciamento (MVM) Os endereços IP do MVM que hospedam o PowerFlex Manager e os serviços de gerenciamento. Um nó de servidor de dados de armazenamento (SDS) do MVM Você pode encontrar os endereços IP do MVM fazendo login na interface do usuário do PowerFlex Manager. Vá para System-Components>> MVM.  Por exemplo, 10.2xx.3xx.184, 10.2xx.3xx.185, 10.2xx.3xx.186
SDS (Storage Data Server, servidor de dados de armazenamento) O nó do servidor de dados de armazenamento (SDS) que está hospedando os MVMs.
Endereço IP de entrada O IP externo para rke2-ingress-nginx-controller (balanceador de carga/endpoint de entrada)
Gerenciamento de acesso e identidade do cliente (CIAM) Os serviços de gerenciamento de acesso e identidade do cliente do PowerFlex para OAuth2/OIDC
Provedor de serviços (SP) Provedor de identidade (IdP)|O provedor de serviços (PowerFlex/Keycloak) e o provedor de identidade (Microsoft Azure Entra ID)

 

Pré-requisitos

Há um script de automação (oidc_azure.tar) usado para conectar o Microsoft Azure Entra ID ao PowerFlex.

O script está em um formato de arquivo tar e deve ser baixado e copiado para seu MVM:

Para copiar o oidc_azure. tar, você deve ter acesso administrativo à máquina virtual de gerenciamento do PowerFlex.

Aqui está o arquivo:   oidc_azure.tar

Você deve executar os comandos na captura de tela abaixo, pois as variáveis exportadas são reutilizadas nas etapas e scripts desse processo.

Nota: Se você vir erros de permissão, abra um shell de log-in root executando: sudo -i

 

O que cada comando faz?

  • O 'kubectl get svc -A | grep "sso " | awk '{print $4}''command retorna o endereço IP do cluster do serviço SSO no cluster do Kubernetes.
  • O '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_tokenO comando ' faz login no PowerFlex usando a API REST SSO e recupera um token de acesso (JWT) que é usado para chamadas API subsequentes aos serviços do PowerFlex.
  • O'kubectl get svc -A | grep -m1 rke2-ingress-nginx-controller | sort | awk '{print $5}''command retorna o endereço IP externo do serviço rke2-ingress-nginx-controller, que normalmente é o IP do balanceador de carga ou do controlador de entrada usado para tráfego externo.

 

Quando esses comandos são executados, as seguintes variáveis são exportadas:

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. Inicializar o CIAM e configurar o PowerFlex como um provedor de serviços (SP) OIDC

Esta etapa é o ponto inicial do processo de integração do CIAM ao PowerFlex usando o OpenID Connect (OICD). A configuração do CIAM SSO do PowerFlex é inicializada.

API: POST /rest/v1/sso-ciam/init

Comando: 

 
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

Saída: Um inteiro, o ID do grupo de usuários do CIAM, ou seja, "2"

 

2. Configure o PowerFlex com Keycloak como o provedor de serviços OIDC.

Esta etapa registra e configura o PowerFlex como um provedor de serviços OIDC com Keycloak (ou outro IdP), permitindo a autenticação SSO segura usando o OpenID Connect.

Operação da API: POSTAR /rest/v1/oidc-sp-config

Comando:

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

Resultado (truncado): Novo provedor de serviços

 
{"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 Listar o provedor de serviços OIDC.

Esta etapa recupera a configuração atual do provedor de serviços OIDC do PowerFlex,

Comando:

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

Exemplo de resultado (truncado): Um provedor de serviços criado na etapa anterior.

{"results":[{"id":"00000000-0000-0000-0000-000000000000","sp_id":"powerflex-10.247.39.179",...}]

 

3. Adicione a autoridade de certificação ao PowerFlex para serviços CIAM.

Esta etapa envolve informar o PowerFlex sobre em qual autoridade de certificação ele deve confiar ao validar a comunicação segura com o sistema CIAM. Há dois certificados para serviços CIAM:

  • A DigiCert é uma Autoridade de Certificação (CA) confiável. Os serviços do Microsoft Azure (como Microsoft Azure AD, endpoints OIDC e APIs da Microsoft) usam certificados SSL/TLS emitidos pela DigiCert para proteger a comunicação.
  • Os certificados GA2 (GlobalSign ou raiz/intermediário semelhante) fazem parte da cadeia de certificados que valida os pontos de extremidade de identidade do Microsoft Azure. Eles garantem:
    • A URL de metadados do OIDC (https://login.microsoftonline.com/...)(Link externo) e os endpoints de token são confiáveis.
    • Comunicação HTTPS segura entre o PowerFlex e o IdP do Microsoft Azure.

Essa operação garante que o CIAM confie nos endpoints do Microsoft Azure.

O comando abaixo usa arquivos com certificados codificados por PEM, em que as novas linhas são substituídas por "\n". Basicamente, há apenas uma linha nesse arquivo.

Por exemplo:

 
-----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: Certificados POST /api/v1/CIAM/<ciam_id>/x509

Comando:

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\"
}"
Nota: https://$IN_IP//Api/V1/CIAM/2/x509-certificate — aqui está o número 2 da saída do init.sh na etapa 1.

 

Script: ./add_cert.sh <certificate_pem_file>

Exemplo de resultado (truncado):

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 Verifique se os certificados foram adicionados e listados.

Esta etapa verifica se os certificados estão adicionados e listados.

Comando:

 
curl -kL https://$IN_IP/Api/V1/CIAM/2/x509-certificates --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"

Nota: https://$IN_IP//Api/V1/CIAM/2/x509-certificate — aqui está o número 2 do init.sh na etapa 1.

Script: ./list_certs.sh

Exemplo de resultado (truncado):

{"results":[{"id":"4a4d7f6b-251c-41a6-b304-783ed6d5fbc2","certificate":"-----BEGIN ....-----END PUBLIC KEY-----\n"}]}

 

4. Registrar o ID do Microsoft Azure Entra como o serviço OIDC (IdP)

Esta etapa registra o Microsoft Azure Entra ID como um provedor de identidade externo para o PowerFlex usando o OpenID Connect (OIDC), permitindo que os usuários se autentiquem pelo Microsoft Azure em vez de depender das credenciais locais do PowerFlex.

Variáveis:

  • ID do grupo de usuários: O ID do locatário identifica o locatário do Active Directory do Microsoft Azure ao qual o provedor de identidade pertence. Você pode encontrá-lo na página Visão geral da tela inicial do aplicativo no Microsoft Azure.
  • KK_ID: A ID do KK identifica a ID do client do aplicativo Microsoft Azure.
  • KK_SECRET: O segredo KK identifica o segredo do cliente do 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

Exemplo de resultado (truncado):

{
  "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
}
 Importante:  Você deve salvar o ID de serviço do OIDC da resposta (por exemplo, a230b7b8-...); você precisará dele para o URI de redirecionamento do Microsoft Azure e o mapeamento de troca de tokens CIAM.

 

 

4.1 Listar o serviço OIDC.

Esta etapa lista o serviço OIDC.

Comando:

curl -kL https://$IN_IP/rest/v1/oidc-services --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"

 Roteiro: list_oidc_service.sh 

Exemplo (truncado):

./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. Configure a URL de redirecionamento no Microsoft Azure.

Esta etapa envolve a configuração do Microsoft Azure para enviar usuários a um destino chamado URL de redirecionamento depois que eles entrarem com sucesso.

No Portal do Microsoft Azure, vá para Registro de AplicativoURIs de AutenticaçãoRedirecionamento e adicione a seguinte URL:

https:// PFMP_IP<>/auth/realms/powerflex/broker/<SERVICE_ID_AZURE>/endpoint

Por exemplo: https://10.247.39.179/auth/realms/powerflex/broker/a230b7b8-8f6c-47db-9327-2e48db8040a9/endpoint

  • <> PFMP_IP é o IP do PowerFlex Manager (se necessário, resolva o nome do host)
  • <> SERVICE_ID_AZURE é o IdP do ID de serviço da Etapa 4.

 

6. Configure as declarações de token no Microsoft Azure.

a) Adicione declarações opcionais (ID Token)

  1. No Portal do Microsoft Azure, vá para Configuração de tokenAdicionar declaração opcional.
  2. Em Tipo de token, selecione ID.
  3. Em Declaração, marque a caixa de seleção ao lado dos seguintes atributos:
    • Email

    • family_name

    • given_name

    • preferred_username

  4. Clique em Adicionar.

 

 b) Adicionar reivindicações de grupo

  1. No Portal do Microsoft Azure, vá para Configuração de tokenAdicionar declarações de grupo.           
  2. Em Editar declaração de grupos, marque a caixa de seleção ao lado de Grupos atribuídos ao aplicativo.   
  3. Em ID, marque a caixa de seleção ao lado de Group ID.                                                                   
  4. Em Acesso, marque a caixa de seleção ao lado de ID do grupo.                                                             
  5. Clique em Adicionar.

Você usará esses IDs de grupo posteriormente para o mapeamento de funções do PowerFlex na interface do usuário do PowerFlex Manager.

 

7. Configure permissões de API no Microsoft Azure.

Essa etapa garante que o PowerFlex tenha o acesso correto aos recursos protegidos no Microsoft Azure.

  1. No Portal do Microsoft Azure, vá para Permissões de API Microsoft Graph.
  2. Em Request API permissions, selecione
  3. Em Request API permissions, selecione User Read.
  4. Clique em Update permissions.

 

8. (Opcional) Atribuir usuários/grupos no Microsoft Azure.

Esta etapa concede aos indivíduos ou equipes apropriados acesso ao PowerFlex atribuindo-os a funções ou grupos específicos no Microsoft Azure Active Directory.

  1. No Portal do Microsoft Azure, vá para Aplicativos corporativos → Usuários e grupos.
  2. Em Nome para exibição, marque a caixa de seleção ao lado do usuário/grupo e copie o ID do objeto.

O ID do objeto é usado para o mapeamento de função baseado em declarações no PowerFlex.

 

9. (Opcional) Adicionar o usuário/grupo na interface do usuário do PowerFlex

Essa etapa envolve conceder acesso no PowerFlex adicionando o usuário ou grupo apropriado diretamente no usuário do PowerFlex Manager, garantindo que eles possam fazer log-in e usar o sistema de acordo com suas funções e permissões atribuídas.

  1. Faça log-in na interface do usuário do PowerFlex Manager.
  2. Vá para ConfiguraçõesGerenciamento de usuáriosAdicionar usuário/grupo remoto.
  3. Digite as seguintes informações:
    1. Tipo: grupo
    2. Fornecedor: Azure
    3. Nome do grupo: qualquer nome significativo
    4. Nome da declaração: grupos
    5. Função do usuário: Superusuário
    6. Valor da reivindicação: ID de objeto do Microsoft Azure (etapa 8)

10. Adicione o client ao CIAM.

Esta etapa adiciona o client ao CIAM para registrar o PowerFlex de modo que o CIAM possa determinar qual aplicativo está solicitando autenticação, para onde enviar tokens, quais permissões o aplicativo precisa e quais fluxos de autenticação ele pode usar.

API: Clients POST /rest/v1/oauth2

Comando:

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

Exemplo de resultado:

./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
Nota: Você deve salvar o ID do client CIAM e os client_secret porque eles são necessários para a troca de tokens entre o Microsoft Azure e o PowerFlex.

 

 

10.1 Verifique se o client foi adicionado listando-o.

Esta etapa verifica se o client foi adicionado com sucesso, listando todos os clients existentes.

Comando: 

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

Exemplo:

./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 Modifique o client.

Esta etapa atualiza um client de login existente no CIAM. A payload deve permanecer vazia ({}). Esse comando adiciona os mapeamentos necessários do PowerFlex ao cliente Keycloak.

Comando:

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>

Exemplo:

 
./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. Adicionar o aplicativo ao CIAM para mapeamento de troca de token

Esta etapa adiciona o aplicativo ao CIAM para habilitar a autenticação externa, a autorização e os fluxos de identidade seguros.

API: POST /rest/v1/oauth2-token-exchanges

Variáveis obrigatórias:

  • LOCAL_CLIENT_ID: ID de addclient_ciam.sh (por exemplo, 77ce10cb-c40e-4c1e-b922-07014b5b6e7b)
  • EXT_CLIENT_ID:      ID do aplicativo Microsoft Entra ID (client) (por exemplo, 859c0721-cb0c-433c-a437-bd2d2462754f)
  • METADADOS:            URL de metadados do aplicativo Microsoft Azure (por exemplo, https://login.microsoftonline.com/< Tenant_id>/v2.0/.well-known/openid-configuration)
  • IDP:                        ID do serviço OIDC (por exemplo, a230b7b8-8f6c-47db-9327-2e48db8040a9)
  • PAPEL:                     Função do PowerFlex (por exemplo, superusuário)
  • PM_TOKEN:           Token do portador da API
  • IN_IP:                     Endereço IP/host de destino


Comando:

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 Liste o ID do aplicativo

Esta etapa recupera o ID do aplicativo para validar o identificador exclusivo de client necessário para autorização downstream e operações de troca de tokens.

Comando:

curl -kL "https://$IN_IP/rest/v1/oidc-services" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer ${PM_TOKEN}"

 Script: 

 
./list_apps.sh

Exemplo:

./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"  ]
}
Nota: Anote esse ID.

 

 

12. Mapear funções no Keycloak (realm do PowerFlex)

Esta etapa mapeia funções no realm do PowerFlex Keycloak para alinhar as atribuições de função do provedor de identidade com os requisitos de autorização do PowerFlex.

1. Faça log-in no Keycloak usando o seguinte endpoint: https://< PFMP_IP>/auth/admin/

Por exemplo: https://10.247.39.179/auth/admin/

Para fazer login no Keycloak, as credenciais podem ser recuperadas conforme abaixo 

Comando:

kubectl get secret keycloak-admin-credentials -o json -n powerflex | jq '.data | map_values(@base64d)'

Script: ./get_keycloak_creds.sh

Exemplo: 

./get_keycloak_creds.sh
{
  "password": "sZFmHmfhjj",
  "username": "keycloak"
}

2. Na instância Keycloak, selecione PowerFlex.

3. Clique em Usuários e selecione o ID do usuário e atualize os atributos para corresponder à função usada no CIAM (por exemplo, Superusuário).

4. Em Role mapping, verifique se a função está atualizada.

 

13. Obtenha o token do Microsoft Azure (Senha do proprietário do recurso Credenciais/nome de usuário + senha)

Há várias maneiras de obter um token do Microsoft Azure AD. Neste exemplo de etapa, o aplicativo está fazendo login no Microsoft Entra ID (Azure AD) enviando diretamente o nome de usuário + senha de um usuário ao ponto de extremidade do token para receber um token OAuth 2.0. Essa é a concessão de Credenciais de Senha do Proprietário do Recurso (ROPC).

Comando:

 
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

Dica: Para garantir que o token seja válido, vá para o Depurador JSON Web Token (JWT) (Link externo)

 

14. Troque o token do Microsoft Azure pelo token do PowerFlex (CIAM)

Esta etapa troca o token do Microsoft Azure por um token CIAM do PowerFlex para que as APIs do PowerFlex possam ser chamadas.

API: POST /rest/v1/token

Variáveis:

  • CIAM_CLIENT_ID - ID do client da etapa Adicionar o client ao CIAM (etapa 10)
  • CIAM_CLIENT_SECRET – Segredo do client da etapa Adicionar o client ao CIAM (etapa 10)
  • EXT_TOKEN – Token do Microsoft Azure

Comando:

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 (usa o EXT_TOKEN portanto, defina a variável ambiental adequadamente)

Exemplo de resultado (truncado):

{
  "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. Verificar o acesso à API REST do PowerFlex

Esta etapa confirma que o token funciona chamando um endpoint REST do PowerFlex. Ele usa o access_token da saída do "token.sh", exportado como variável env PM_TOKEN.

exportar PM_TOKEN=eyJhb...eN_A

Comando:

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
    }
  } ]
}

 

Informações de referência

Resumo da sequência de API

  1. Inicializar o CIAM para PowerFlex
    (/rest/v1/sso-ciam/init)
  2. Configurar o PowerFlex como provedor
    de serviços OIDC(/rest/v1/oidc-sp-config)
  3. Adicionar certificados para serviços
    CIAM(DigiCert, GlobalSign etc.)
  4. Registrar o Microsoft Azure Entra ID como serviço
    OIDC(/rest/v1/oidc-serviços)
  5. Configurar a ID de serviço na guia
    Autenticação do Microsoft Azure(Mapeamento de endpoint do agente)
  6. Definir declarações de token e grupo no Microsoft Azure
    (Declarações opcionais, permissões de API)
  7. Adicionar client OAuth2 no CIAM
    (/rest/v1/oauth2-clients)
  8. Adicionar aplicativo ao CIAM para troca de
    token(/rest/v1/oauth2-token-exchanges)
  9. Obtenha o token do Microsoft Azure para trocá-lo pelo token
    do PowerFlex(/rest/v1/token)
  10. Verificar o acesso às APIs REST do PowerFlex

 

 

Comandos para realizar uma troca de token

Chamando APIs do PowerFlex com o token do Microsoft Azure Entra


Comando para realizar uma troca de tokens:

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 '.'

Exemplo:

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 '.'

Chamando a API do equipamento PowerFlex Manager com token trocado

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'

 

Chamando a API de bloco do PowerFlex com token trocado

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"
          ]
    .
.
.
    ]
  }
]

Produtos afetados

PowerFlex rack, ScaleIO
Propriedades do artigo
Número do artigo: 000444444
Tipo de artigo: How To
Último modificado: 14 abr. 2026
Versão:  4
Encontre as respostas de outros usuários da Dell para suas perguntas.
Serviços de suporte
Verifique se o dispositivo está coberto pelos serviços de suporte.