PowerFlex:OpenID Connect(OIDC)を使用したMicrosoft AzureでのPowerFlexシングル サインオンのセットアップ
概要: この記事では、OIDCを使用してMicrosoft Azure Entra IDでSSOを行うために、PowerFlexのCustomer Identity and Access Management (CIAM)を構成する手順について説明します。
手順
この記事では、証明書のセットアップ、IdPとサービス プロバイダー(SP)の構成、トークンの交換、APIアクセスの検証など、OIDCを使用したMicrosoft Azure Entra IDによるSSO用にPowerFlexのCustomer Identity and Access Management (CIAM)を構成する手順について説明します。この構成により、SSO機能を活用できるようになります。PowerFlexとMicrosoft Azureの両方で構成を変更する必要があります。
この記事は、PowerFlexを使用する管理者およびセキュリティ担当者を対象としています。
PowerFlex CIAMは、Microsoft Azure Entra IDなどのOIDC準拠IdPと統合して、一元化された認証と安全なAPIアクセスを可能にします。
この記事では、REST APIを使用してMicrosoft AzureでPowerFlexシングル サインオンを設定する手順について説明します。以下は、大まかな手順のリストです。
- CIAMを初期化し、PowerFlexをOIDCサービス プロバイダー(SP)として構成する
- Microsoft Azure Entra IDをOIDC IDプロバイダー(IdP)として登録する
- 必要なCA証明書(DigiCert/GlobalSign)をCIAMに追加します
- Microsoft Azure アプリケーション要求、リダイレクト URI、アクセス許可を構成する
- CIAM OAuth2クライアントとトークン交換マッピングの作成
- Microsoft Azureトークンを取得し、PowerFlexトークンと交換して、REST APIアクセスを検証する
用語
次の表では、このプロセスを完了するために必要な重要な用語と概念について説明します。
| 条件 | 説明 |
| 管理仮想マシン(MVM)のIPアドレス | PowerFlex Managerと管理サービスをホストしているMVM IPアドレス。1つのMVMストレージ データ サーバー(SDS)ノード PowerFlex Managerユーザー インターフェイスにログインすると、MVM IPアドレスを確認できます。System->Components>MVMに移動します。 例:10.2xx.3xx.184、10.2xx.3xx.185、10.2xx.3xx.186 |
| ストレージ データ サーバー(SDS) | MVMをホスティングしているストレージ データ サーバー(SDS)ノード。 |
| イングレスIPアドレス | rke2-ingress-nginx-controllerの外部IP(ロードバランサー/イングレスエンドポイント) |
| お客様のIDおよびアクセス管理(CIAM) | OAuth2/OIDC向けのPowerFlexお客様IDおよびアクセス マネジメント サービス |
| サービス プロバイダー(SP) | IDプロバイダー(IdP)|サービス プロバイダー(PowerFlex/Keycloak側)とIDプロバイダー(Microsoft Azure Entra ID) |
必要条件
Microsoft Azure Entra IDとPowerFlexを接続するために使用される自動化スクリプト(oidc_azure.tar)があります。
スクリプトは tar ファイル形式であり、ダウンロードして MVM にコピーする必要があります。
oidc_azureをコピーします。tarファイルを作成するには、PowerFlex管理仮想マシンへの管理アクセス権が必要です。
ファイルは次のとおりです。 oidc_azure.tar
エクスポートされた変数は、このプロセスのステップとスクリプトで再利用されるため、以下のスクリーン キャプチャのコマンドを実行する必要があります。
sudo -i

各コマンドは何を行いますか?
- '
kubectl get svc -A | grep "sso " | awk '{print $4}''コマンドは、Kubernetesクラスター内のSSOサービスのクラスターIPアドレスを返します。 - '
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'コマンドは、SSO REST APIを使用してPowerFlexにログインし、PowerFlexサービスへの後続のAPIコールに使用されるアクセス トークン(JWT)を取得します。 - ザ・'
kubectl get svc -A | grep -m1 rke2-ingress-nginx-controller | sort | awk '{print $5}''コマンドは、rke2-ingress-nginx-controllerサービスの外部IPアドレス(通常は外部トラフィックに使用されるロードバランサーまたはイングレスコントローラー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)として構成する
このステップは、OpenID Connect(OICD)を使用してCIAMをPowerFlexと統合するプロセスの開始点です。PowerFlexのSSO CIAM構成が初期化されます。
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テナントID、例: "2"
2.Keycloakを使用してPowerFlexをOIDCサービス プロバイダーとして構成します。
このステップでは、Keycloak(または別のIdP)を使用してPowerFlexをOIDCサービス プロバイダーとして登録および構成し、OpenID Connectを使用した安全なSSO認証を有効にします。
API操作: POST /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サービス プロバイダーを一覧表示します。
この手順では、PowerFlexから現在のOIDCサービス プロバイダー構成を取得します。
コマンド:
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.CIAMサービスの認証局をPowerFlexに追加します。
このステップでは、CIAMシステムとの安全な通信を検証する際に、どの認証局を信頼する必要があるかをPowerFlexに通知します。CIAMサービスには、次の2つの証明書があります。
- デジサートは、信頼できる認証局(CA)です。Microsoft Azureサービス(Microsoft Azure AD、OIDCエンドポイント、Microsoft APIなど)は、デジサートが発行したSSL/TLS証明書を使用して通信を保護します。
- GA2(GlobalSignまたは類似のルート/中間)証明書は、Microsoft AzureのIDエンドポイントを検証する証明書チェーンの一部です。これにより、次のことが保証されます。
- OIDCメタデータURL(https://login.microsoftonline.com/...)(外部リンク)とトークン エンドポイントは信頼済みです。
- PowerFlexとMicrosoft Azure IdP間のセキュアなHTTPS通信。
この操作により、CIAMがMicrosoft Azureエンドポイントを信頼するようになります。
次のコマンドでは、PEMエンコード証明書を含むファイルを使用します。ここで、改行は「\n」に置き換えられます。基本的に、このようなファイルには1行しかありません。
例:
-----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
コマンド:
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 - 手順1の init.sh の番号2です 。
スクリプト: ./list_certs.sh
出力例(切り捨て):
{"results":[{"id":"4a4d7f6b-251c-41a6-b304-783ed6d5fbc2","certificate":"-----BEGIN ....-----END PUBLIC KEY-----\n"}]}
4.Microsoft Azure Entra IDをOIDCサービス(IdP)として登録する
この手順では、OpenID Connect (OIDC)を使用してMicrosoft Azure Entra IDをPowerFlexの外部IDプロバイダーとして登録します。これにより、ユーザーはローカルのPowerFlex認証情報に依存することなく、Microsoft Azureを介して認証できます。
変数:
- テナントID: テナントIDは、IDプロバイダーが属するMicrosoft Azure Active Directoryテナントを識別します。これは、Microsoft Azureのアプリケーションのホーム画面の[概要]ページにあります。
- KK_ID: KK IDは、Microsoft AzureアプリケーションのクライアントIDを識別します。
- KK_SECRET: KKシークレットは、Microsoft Azureのクライアント シークレットを識別します。
Api:/rest/v1/oidc-servicesをPOSTします
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.Microsoft AzureでリダイレクトURLを設定します。
この手順では、ユーザーが正常にサインインした後、リダイレクト URL と呼ばれる宛先にユーザーを送信するように Microsoft Azure を設定します。
Microsoft Azure ポータルで、アプリの登録→認証→リダイレクト URI に移動し、次の 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> PowerFlex Manager IPです(必要に応じてホスト名を解決します)
- <SERVICE_ID_AZURE> は、ステップ4のサービスIDのIdPです。
6.Microsoft Azureでトークン要求を構成します。
a) 省略可能な要求 (ID トークン) を追加する
- Microsoft Azure Portal で、 [トークン構成] → [省略可能な要求の追加] に移動します。
- [トークンの種類] で [ID] を選択します。
- [請求]で、次の属性の横にあるチェックボックスをオンにします。
-
電子メール
-
family_name
-
given_name
-
preferred_username
-
- [Add](追加)をクリックします。
b) グループ要求を追加する
- Microsoft Azure ポータルで、 [トークン構成] → [グループ要求の追加] に移動します。
- [グループ要求の編集] で、 [アプリケーションに割り当てられたグループ] の横にあるチェック ボックスをオンにします。
- IDで、 グループIDの横のチェックボックスを選択します。
- アクセスで、グループIDの横のチェックボックスを選択します。
- [Add](追加)をクリックします。
これらのグループIDは、後でPowerFlex Managerユーザー インターフェイスでPowerFlexロール マッピングに使用します。
7.Microsoft AzureでAPI権限を構成します。
この手順により、PowerFlexがMicrosoft Azureの保護されたリソースに正しくアクセスできるようになります。
- Microsoft Azure ポータルで、API のアクセス許可 →Microsoft Graph] に移動します。
- [API アクセス許可の要求] で、 [
- [Request API permissions (API アクセス許可の要求)] で [User → Read] を選択します。
- [アクセス許可の更新] をクリックします。
8.(オプション)Microsoft Azureでユーザー/グループを割り当てます。
このステップでは、適切な個人またはチームに、Microsoft Azure Active Directory内の特定のロールまたはグループを割り当てることによって、PowerFlexへのアクセス権を付与します。
- Microsoft Azure Portalで、[エンタープライズ アプリケーション]→[ユーザーとグループ]の順に移動します。
- [表示名] で、ユーザー/グループの横にあるチェックボックスをオンにして、オブジェクト ID をコピーします。
オブジェクトIDは、PowerFlexでクレームベースのロール マッピングに使用されます。
9.(オプション)PowerFlexユーザー インターフェイスでユーザー/グループを追加する
このステップでは、適切なユーザーまたはグループをPowerFlex Managerユーザーに直接追加してPowerFlex内のアクセス権を付与し、割り当てられたロールと権限に従ってシステムにログインして使用できるようにします。
- PowerFlex Managerユーザー インターフェイスにログインします。
- [Settings]→[User Management]→[Add Remote User/Group]に移動します。
- 次の情報を入力します。
- タイプ:グループ
- プロバイダ: Azure
- グループ名:意味のある名前
- Claim Name:groups
- ユーザー ロール: スーパー ユーザー
- 請求金額: Microsoft AzureからのオブジェクトID(手順8)
10.クライアントをCIAMに追加します。
この手順では、クライアントをCIAMに追加してPowerFlexを登録します。これにより、CIAMは、認証を要求しているアプリケーション、トークンの送信先、アプリケーションに必要な権限、および使用できる認証フローを判断できます。
Api:/rest/v1/oauth2-clientsをPOSTします
コマンド:
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
Example:
./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>
Example:
./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に追加して、外部認証、承認、およびセキュアIDフローを有効にします。
Api:POST /rest/v1/oauth2-token-exchanges
必須変数:
- LOCAL_CLIENT_ID: addclient_ciam.shからのID(例:77ce10cb-c40e-4c1e-b922-07014b5b6e7b)
- EXT_CLIENT_ID: Microsoft Entra IDアプリケーション(クライアント)ID(例:859c0721-cb0c-433c-a437-bd2d2462754f)
- メタデータ: Microsoft Azureアプリケーション メタデータURL(例:https://login.microsoftonline.com/<Tenant_id>/v2.0/.well-known/openid-configuration)
- Idp: OIDCサービスID(例: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 アプリケーションIDの一覧表示
この手順では、アプリケーション ID を取得して、ダウンストリームの承認操作とトークン交換操作に必要な一意のクライアント識別子を検証します。
コマンド:
curl -kL "https://$IN_IP/rest/v1/oidc-services" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${PM_TOKEN}"
スクリプト:
./list_apps.sh
Example:
./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レルム内のロールをマッピングして、IDプロバイダーのロールの割り当てを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
Example:
./get_keycloak_creds.sh
{
"password": "sZFmHmfhjj",
"username": "keycloak"
}
2.Keycloakインスタンスで、PowerFlexを選択します。
3.ユーザーをクリックしてユーザーIDを選択し、CIAMで使用されるロール(スーパーユーザーなど)と一致するように属性を更新します。
4.Role mappingで、ロールが更新されていることを確認します。
13.Microsoft Azureトークンの取得(リソース所有者パスワード認証情報/ユーザー名+パスワード)
Microsoft Azure AD からトークンを取得する方法は複数あります。この手順の例では、アプリケーションは、OAuth 2.0 トークンを受け取るために、ユーザーのユーザー名 + パスワードをトークン エンドポイントに直接送信することで、Microsoft Entra ID (Azure AD) にログインしています。これは、Resource Owner Password Credentials (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 Web トークン (JWT) デバッガー (外部リンク) に移動します
14.Microsoft AzureトークンをPowerFlexトークン(CIAM)に交換する
この手順では、Microsoft AzureトークンをPowerFlex CIAMトークンと交換して、PowerFlex APIを呼び出せるようにします。
Api:/rest/v1/tokenをPOSTします
変数:
- CIAM_CLIENT_ID - CIAMへのクライアントの追加手順(手順10)のクライアントID
- 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"
Scripts:./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.PowerFlex REST APIへのアクセスの確認
このステップでは、PowerFlex RESTエンドポイントを呼び出すことによってトークンが機能することを確認します。env変数PM_TOKENとしてエクスポートされた「token.sh」の出力からのaccess_tokenを使用します。
エクスポート 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 for PowerFlexを初期化します
(/rest/v1/sso-ciam/init)。 - PowerFlexをOIDCサービス プロバイダーとして構成します
(/rest/v1/oidc-sp-config) - CIAMサービスの証明書を追加します
(DigiCert、GlobalSignなど) - Microsoft Azure Entra IDをOIDCサービスとして登録します
(/rest/v1/oidc-services)。 - [Microsoft Azure Authentication]タブでサービスIDを構成します
(ブローカー エンドポイント マッピング) - Microsoft Azureでトークンとグループ要求を設定します
(省略可能な要求、API アクセス許可) - CIAMにOAuth2クライアントを追加します
(/rest/v1/oauth2-clients)。 - トークン交換のためにCIAMにアプリケーションを追加します
(/rest/v1/oauth2-token-exchanges) - Microsoft Azureトークンを取得して、PowerFlexトークンと交換します
(/rest/v1/token) - PowerFlex REST APIへのアクセスの確認
トークン交換を実行するコマンド
Microsoft Azure Entraトークンを使用したPowerFlex APIの呼び出し
トークン交換を実行するコマンド:
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 '.'
Example:
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 '.'
交換されたトークンを使用したPowerFlex ManagerアプライアンスAPIの呼び出し
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'
交換されたトークンを使用したPowerFlexブロックAPIの呼び出し
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"
]
.
.
.
]
}
]