PowerFlex. Настройка единого входа PowerFlex с помощью Microsoft Azure с помощью OpenID Connect (OIDC)
Сводка: В этой статье рассказывается о настройке PowerFlex Customer Identity and Access Management (CIAM) для единого входа с Microsoft Azure Entra ID с помощью OIDC.
Инструкции
В этой статье рассказывается о настройке PowerFlex Customer Identity and Access Management (CIAM) для единого входа с идентификатором Microsoft Azure Entra с использованием OIDC, включая настройку сертификатов, настройку поставщика удостоверений и поставщика услуг (SP), обмен маркерами и проверку доступа к API. Такая конфигурация позволяет использовать преимущества единого входа. Для этого требуются изменения конфигурации как в PowerFlex, так и в Microsoft Azure.
Данная статья предназначена для администраторов и сотрудников службы безопасности, использующих PowerFlex.
PowerFlex CIAM интегрируется с поставщиками удостоверений, соответствующими требованиям OIDC, включая идентификатор Microsoft Azure Entra ID, чтобы обеспечить централизованную аутентификацию и безопасный доступ к API.
В этой статье приводятся пошаговые инструкции по настройке единого входа PowerFlex в Microsoft Azure с помощью REST API. Ниже приведен список высокоуровневых шагов.
- Инициализация CIAM и настройка PowerFlex в качестве поставщика услуг OIDC (SP)
- Регистрация идентификатора Microsoft Azure Entra в качестве поставщика удостоверений (IdP) OIDC
- Добавление необходимых сертификатов CA (DigiCert/GlobalSign) в CIAM
- Настройка утверждений приложений Microsoft Azure, URI перенаправления и разрешений
- Создание сопоставлений CIAM OAuth2 и обмена маркерами
- Получите токен Microsoft Azure, обменяйте его на токен PowerFlex и подтвердите доступ к API REST
Терминология
В следующей таблице описаны важные термины и понятия, необходимые для выполнения этого процесса.
| Термин | Описание |
| IP-адрес виртуальной машины управления (MVM) | IP-адреса MVM, на которых размещаются PowerFlex Manager и службы управления. Один узел сервера данных хранения (SDS) MVM IP-адреса MVM можно найти в пользовательском интерфейсе PowerFlex Manager. Перейдите в раздел Система-Компоненты>> MVM. Например, 10.2xx.3xx.184, 10.2xx.3xx.185, 10.2xx.3xx.186 |
| Сервер хранения данных (SDS) | Узел сервера хранения данных (SDS), на котором размещаются MVM. |
| IP-адрес входящего трафика | Внешний IP-адрес для контроллера rke2-ingress-nginx (подсистема балансировки нагрузки/конечная точка входящего трафика). |
| Управление идентификацией и доступом клиентов (CIAM) | Службы управления идентификацией и доступом заказчиков PowerFlex для OAuth2/OIDC |
| Поставщик услуг (SP) | Поставщик удостоверений (IdP) |Поставщик услуг (на стороне PowerFlex/Keycloak) и поставщик удостоверений (идентификатор Microsoft Azure Entra ID) |
Предварительные условия
Для подключения идентификатора Microsoft Azure Entra к PowerFlex используется скрипт автоматизации (oidc_azure.tar).
Сценарий имеет формат tar-файла, и его необходимо скачать и скопировать в MVM:
Чтобы скопировать oidc_azure. tar, у вас должен быть административный доступ к виртуальной машине управления PowerFlex.
Вот файл: oidc_azure.tar
Необходимо выполнить команды, показанные на снимке экрана ниже, так как экспортируемые переменные повторно используются в шагах и сценариях этого процесса.
sudo -i

Что делает каждая команда?
- Метод '
kubectl get svc -A | grep "sso " | awk '{print $4}''возвращает IP-адрес кластера сервиса единого входа в кластере Kubernetes. - Метод '
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' выполняет вход в систему PowerFlex с помощью единого API-интерфейса REST и извлекает маркер доступа (JWT), который используется для последующих вызовов API сервисов PowerFlex. - В'
kubectl get svc -A | grep -m1 rke2-ingress-nginx-controller | sort | awk '{print $5}''возвращает внешний IP-адрес службы rke2-ingress-nginx-controller, который обычно является IP-адресом балансировщика нагрузки или контроллера входящего трафика, используемым для внешнего трафика.
При выполнении этих команд экспортируются следующие переменные:
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. Инициализация CIAM и настройка PowerFlex в качестве поставщика услуг OIDC (SP)
Этот шаг является отправной точкой в процессе интеграции CIAM с PowerFlex с помощью OpenID Connect (OICD). Конфигурация SSO CIAM для PowerFlex инициализирована.
API: POST /rest/v1/sso-ciam/init
Команда.
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}"
Сценарий: ./init.sh
Выход: Целое число, идентификатор пользователя CIAM, т. е. "2"
2. Настройте PowerFlex с Keycloak в качестве поставщика услуг OIDC.
На этом шаге выполняется регистрация и настройка PowerFlex в качестве поставщика услуг OIDC с Keyclaak (или другим поставщиком удостоверений), что обеспечивает безопасную аутентификацию единого входа с помощью OpenID Connect.
Работа API: ПОМЕСТИТЬ /rest/v1/oidc-sp-config
Команда.
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}'
Сценарий: ./add_oidc_sp.sh
Выходные данные (усеченные): Новый поставщик услуг
{"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 Укажите поставщика услуг OIDC.
На этом шаге извлекается текущая конфигурация поставщика услуг OIDC из PowerFlex.
Команда.
curl -kL https://$IN_IP/rest/v1/oidc-sp-config --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}" | jq -r '.results[]'
Сценарий: ./list_oidc_sp.sh
Вывод выборки (усеченный): Поставщик услуг, созданный на предыдущем шаге.
{"results":[{"id":"00000000-0000-0000-0000-000000000000","sp_id":"powerflex-10.247.39.179",...}]
3. Добавьте источник сертификатов в PowerFlex для сервисов CIAM.
На этом этапе система PowerFlex информирована о том, какому центру сертификации следует доверять при проверке безопасного обмена данными с системой CIAM. Существует два сертификата на услуги ЦИАМ:
- DigiCert — это доверенный источник сертификатов (CA). Службы Microsoft Azure (например, Microsoft Azure AD, конечные точки OIDC и Microsoft API) используют сертификаты SSL/TLS, выданные DigiCert, для безопасного обмена данными.
- Сертификаты GA2 (GlobalSign или аналогичные корневые/промежуточные сертификаты) являются частью цепочки сертификатов, которая проверяет конечные точки удостоверения Microsoft Azure. Они обеспечивают:
- URL-адрес метаданных OIDC (https://login.microsoftonline.com/...)(внешняя ссылка) и конечные точки маркера являются доверенными.
- Безопасный обмен данными по протоколу HTTPS между PowerFlex и поставщиком удостоверений Microsoft Azure.
Эта операция гарантирует, что CIAM доверяет конечным точкам Microsoft Azure.
Приведенная ниже команда использует файлы с сертификатами в формате PEM, где новые строки заменяются на «\n». По сути, в таком файле всего одна строка.
Пример.
-----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-сертификаты
Команда.
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\"
}"
Сценарий: ./add_cert.sh <certificate_pem_file>
Вывод выборки (усеченный):
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 Убедитесь, что сертификаты добавлены и перечислены.
На этом шаге проверяется, что сертификаты добавлены и перечислены.
Команда.
curl -kL https://$IN_IP/Api/V1/CIAM/2/x509-certificates --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"
Примечание: https://$IN_IP//Api/V1/CIAM/2/x509-certificate - вот цифра 2 из init.sh на шаге 1.
Сценарий: ./list_certs.sh
Вывод выборки (усеченный):
{"results":[{"id":"4a4d7f6b-251c-41a6-b304-783ed6d5fbc2","certificate":"-----BEGIN ....-----END PUBLIC KEY-----\n"}]}
4. Регистрация идентификатора Microsoft Azure Entra в качестве службы OIDC (IdP)
На этом этапе идентификатор Microsoft Azure Entra регистрируется в качестве внешнего поставщика удостоверений для PowerFlex с помощью OpenID Connect (OIDC), что позволяет пользователям аутентифицироваться с помощью Microsoft Azure, а не полагаться на локальные учетные данные PowerFlex.
Переменные:
- Идентификатор пользователя: Идентификатор клиента определяет клиент Microsoft Azure Active Directory, к которому принадлежит поставщик удостоверений. Его можно найти на странице «Обзор» на главном экране приложения в Microsoft Azure.
- KK_ID: Идентификатор KK определяет идентификатор клиента приложения Microsoft Azure.
- KK_SECRET: Секрет KK определяет секрет клиента 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\"
}"
Сценарий: ./add_oidc_service.sh
Вывод выборки (усеченный):
{
"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 Вывод списка сервиса OIDC.
На этом шаге отображается список сервисов OIDC.
Команда.
curl -kL https://$IN_IP/rest/v1/oidc-services --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}"
Сценарий: list_oidc_service.sh
Пример (усеченный):
./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. Настройте URL-адрес перенаправления в Microsoft Azure.
Этот шаг включает в себя настройку Microsoft Azure для отправки пользователей в место назначения, называемое URL-адресом перенаправления, после успешного входа в систему.
На портале Microsoft Azure перейдите в раздел URIs → регистрации приложений→перенаправления и добавьте следующий URL-адрес:
https://< PFMP_IP>/auth/realms/powerflex/broker/<SERVICE_ID_AZURE>/endpoint
Например: https://10.247.39.179/auth/realms/powerflex/broker/a230b7b8-8f6c-47db-9327-2e48db8040a9/endpoint
- <> PFMP_IP — IP-адрес PowerFlex Manager (при необходимости укажите имя хоста)
- <> SERVICE_ID_AZURE — это поставщик удостоверений из идентификатора службы из шага 4.
6. Настройте утверждения маркеров в Microsoft Azure.
а) Добавление дополнительных утверждений (маркер идентификатора)
- На портале Microsoft Azure перейдите в раздел Конфигурация токена → добавьте опциональное утверждение.
- В поле Тип токена выберите ID.
- В разделе Заявка установите флажки рядом со следующими атрибутами:
-
Отправить по электронной почте
-
family_name
-
given_name
-
preferred_username
-
- Нажмите Добавить.
б) Добавление групповых заявок
- На портале Microsoft Azure перейдите в раздел Конфигурация маркера → Добавить утверждения группы.
- В разделе Изменить утверждение групп установите флажок рядом с пунктом Группы, назначенные приложению.
- В разделе ID установите флажок рядом с Group ID.
- В разделе Доступ установите флажок рядом с пунктом Group ID.
- Нажмите Добавить.
Позже эти идентификаторы групп будут использоваться для сопоставления ролей PowerFlex в пользовательском интерфейсе PowerFlex Manager.
7. Настройка разрешений API в Microsoft Azure.
Это действие гарантирует PowerFlex правильный доступ к защищенным ресурсам в Microsoft Azure.
- На портале Microsoft Azure перейдите в раздел Разрешения API →Microsoft Graph.
- В разделе Запрос разрешений API выберите
- В разделе Запросы разрешений API выберите Пользователь → Чтение.
- Нажмите Update permissions.
8. (Дополнительный) Назначение пользователей и групп в Microsoft Azure.
На этом этапе соответствующим пользователям или группам предоставляется доступ к PowerFlex путем назначения им определенных ролей или групп в Microsoft Azure Active Directory.
- На портале Microsoft Azure перейдите в раздел Корпоративные приложения → Пользователи и группы.
- В разделе Отображаемое имя установите флажок рядом с пользователем/группой и скопируйте идентификатор объекта.
Идентификатор объекта используется для сопоставления ролей на основе заявок в PowerFlex.
9. (Дополнительный) Добавление пользователя/группы в пользовательский интерфейс PowerFlex
На этом этапе необходимо предоставить доступ в PowerFlex путем добавления соответствующего пользователя или группы непосредственно в список пользователей PowerFlex Manager, чтобы они могли войти в систему и использовать ее в соответствии с назначенными ролями и разрешениями.
- Войдите в пользовательский интерфейс PowerFlex Manager.
- Перейдите в раздел Настройки → Управление пользователями → Добавить удаленного пользователя/группу.
- Введите следующую информацию:
- Тип: группа
- Поставщика: Azure
- Имя группы: любое осмысленное имя
- Имя заявки: groups
- Роль пользователя: Администратор системы
- Стоимость заявки: Идентификатор объекта из Microsoft Azure (шаг 8)
10. Добавьте клиента в ЦИАМ.
На этом шаге клиент добавляется в CIAM для регистрации PowerFlex, чтобы CIAM мог определить, какое приложение запрашивает аутентификацию, куда отправлять маркеры, какие разрешения необходимы приложению и какие потоки проверки подлинности оно может использовать.
API: POST /rest/v1/oauth2-clients
Команда.
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\"
Сценарий: ./addclient_ciam.sh
Пример выходных данных:
./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 Убедитесь, что клиент добавлен, перечислив его.
Этот шаг позволяет убедиться, что клиент успешно добавлен, путем вывода списка всех существующих клиентов.
Команда.
curl -kL https://$IN_IP/rest/v1/oauth2-clients --header 'Content-Type: application/json' --header "Authorization: Bearer ${PM_TOKEN}" | jq -r '.results[]'
Сценарий: ./list_clients_ciam.sh
Пример:
./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 Изменение клиента.
Этот шаг обновляет существующий клиент входа в CIAM. Полезные данные должны оставаться пустыми ({}). Эта команда добавляет необходимые для PowerFlex сопоставления в клиент Keycloak.
Команда.
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 '{}'
Сценарий: ./update_client.sh <ID_FROM_ADD_CLIENT_CIAM>
Пример:
./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. Добавление приложения в CIAM для сопоставления обмена маркерами
На этом шаге приложение добавляется в CIAM для обеспечения внешней аутентификации, авторизации и безопасных потоков идентификации.
API: POST /rest/v1/oauth2-token-exchanges
Обязательные переменные:
- LOCAL_CLIENT_ID: Идентификатор из addclient_ciam.sh (например, 77ce10cb-c40e-4c1e-b922-07014b5b6e7b)
- EXT_CLIENT_ID: Идентификатор приложения Microsoft Entra ID (клиента) (например, 859c0721-cb0c-433c-a437-bd2d2462754f)
- МЕТАДАННЫХ: URL-адрес метаданных приложения Microsoft Azure (например, https://login.microsoftonline.com/< Tenant_id>/v2.0/.well-known/openid-configuration)
- IDP: Идентификатор сервиса OIDC (например, a230b7b8-8f6c-47db-9327-2e48db8040a9)
- РОЛЬ: Роль PowerFlex (например, суперпользователь)
- PM_TOKEN: Токен носителя API
- IN_IP: Хост/IP-адрес целевого объекта
Команда.
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"]
}
Сценарий: ./add_app.sh
11.1 Вывод идентификатора приложения
На этом шаге извлекается идентификатор приложения для проверки уникального идентификатора клиента, необходимого для последующей авторизации и операций обмена маркерами.
Команда.
curl -kL "https://$IN_IP/rest/v1/oidc-services" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${PM_TOKEN}"
Сценарий:
./list_apps.sh
Пример:
./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. Сопоставление ролей в Keycloak (область PowerFlex)
На этом шаге сопоставляется роли в области PowerFlex Keycloak для согласования назначений ролей поставщика идентификационных данных с требованиями авторизации PowerFlex.
1. Войдите в Keycloak с помощью следующей конечной точки: https://< PFMP_IP>/auth/admin/
Например: https://10.247.39.179/auth/admin/
Чтобы войти в Keycloak, учетные данные можно получить, как показано ниже
Команда.
kubectl get secret keycloak-admin-credentials -o json -n powerflex | jq '.data | map_values(@base64d)'
Сценарий: ./get_keycloak_creds.sh
Пример:
./get_keycloak_creds.sh
{
"password": "sZFmHmfhjj",
"username": "keycloak"
}
2. В экземпляре Keyclak выберите PowerFlex.
3. Нажмите Пользователи, выберите идентификатор пользователя и обновите атрибуты в соответствии с ролью, используемой в CIAM (например, SuperUser).
4. В разделе Сопоставление ролей убедитесь, что роль обновлена.
13. Получите токен Microsoft Azure (пароль владельца ресурса, учетные данные / имя пользователя + пароль)
Существует несколько способов получения токена из Microsoft Azure AD. В примере этого шага приложение выполняет вход в идентификатор Microsoft Entra (Azure AD), напрямую отправляя имя пользователя + пароль в конечную точку маркера для получения маркера OAuth 2.0. Это предоставление пароля владельца ресурса (ROPC).
Команда.
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")
Сценарий:./get_azure_token.sh
Совет. Чтобы убедиться, что маркер действителен, перейдите в отладчик веб-маркеров JSON (JWT) (внешняя ссылка)
14. Обмен маркера Microsoft Azure на токен PowerFlex (CIAM)
На этом этапе маркер Microsoft Azure заменяется маркером PowerFlex CIAM, что позволяет вызвать API-интерфейсы PowerFlex.
API: POST /rest/v1/token
Переменные:
- CIAM_CLIENT_ID — идентификатор клиента из шага «Добавление клиента в CIAM» (шаг 10)
- CIAM_CLIENT_SECRET - Секрет клиента из Добавление клиента в CIAM, шаг (шаг 10)
- EXT_TOKEN — токен из Microsoft Azure
Команда.
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"
Сценарии: ./token.sh (использует EXT_TOKEN поэтому задает переменную среды соответствующим образом)
Пример выходных данных (усеченный):
{
"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. Проверка доступа к API-интерфейсу REST PowerFlex
Этот шаг подтверждает, что токен работает, путем вызова конечной точки REST PowerFlex. Он использует access_token из выходных данных "token.sh", экспортируемых как переменная env PM_TOKEN.
export PM_TOKEN=eyJhb...eN_A
Команда.
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
}
} ]
}
Справочная информация
Сводка по последовательности API
- Инициализация CIAM для PowerFlex
(/rest/v1/sso-ciam/init) - Настройка PowerFlex в качестве поставщика
услуг OIDC(/rest/v1/oidc-sp-config) - Добавление сертификатов для услуг
ЦИАМ(DigiCert, GlobalSign и т. п.) - Регистрация идентификатора Microsoft Azure Entra в качестве службы
OIDC(/rest/v1/oidc-services) - Настройка идентификатора службы на вкладке «Аутентификация Microsoft Azure»
(сопоставление конечной точки брокера) - Задание маркеров и утверждений групп в Microsoft Azure
(необязательные утверждения, разрешения API) - Добавление клиента OAuth2 в CIAM
(/rest/v1/oauth2-clients) - Добавление приложения в ЦИАМ для обмена
токенами(/rest/v1/oauth2-token-exchanges) - Получение токена Microsoft Azure для обмена на токен
PowerFlex(/rest/v1/токен) - Проверка доступа к API-интерфейсам REST PowerFlex
Команды для выполнения обмена токенами
Вызов API-интерфейсов PowerFlex с помощью токена Microsoft Azure Entra
Команда для выполнения обмена токенами:
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 '.'
Пример:
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 '.'
Вызов API-интерфейса устройства PowerFlex Manager с обменом маркерами
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'
Вызов API-интерфейса блочной системы PowerFlex с обменом маркерами
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"
]
.
.
.
]
}
]