Red Hat 서브스크립션 관리에서 API 사용
서브스크립션 관리 API 승인, 관리 및 문제 해결
초록
1. Red Hat 서브스크립션 관리에서 API 사용 링크 복사링크가 클립보드에 복사되었습니다!
서브스크립션 서비스에서 API를 사용하면 다음과 같은 방법으로 Red Hat 서브스크립션 사용을 보다 효과적으로 추적하고 자동화할 수 있습니다.
- 각 제품에 사용하는 툴 제어
- 시스템 및 서브스크립션 인벤토리 관리 개선
- 시스템을 보다 효율적으로 업데이트 및 보호
- Red Hat 제품에 대한 공식 지원을 계속 받으십시오.
Red Hat 서브스크립션 관리 API는 권한 부여에 OAuth 2.0을 사용합니다. 토큰을 확보하고 API에 액세스하려면 다음과 같은 정보가 필요합니다.
- Red Hat Subscription Manager API 토큰 페이지에서 생성된 오프라인 토큰
- 클라이언트 ID = rhsm-api
- 토큰 URL = https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
2. 인증에 토큰 사용 링크 복사링크가 클립보드에 복사되었습니다!
오프라인 및 새로 고침 토큰은 시크릿을 사용하여 계정을 설정한 후 Red Hat Subscription Management에서 Red Hat Single Sign On(SSO) 계정을 인증하는 데 사용됩니다.
보안 모범 사례와 일치하는 암호 관리를 사용하십시오. 암호 또는 인증 정보를 일반 텍스트로 저장하는 것은 절대 안전하지 않습니다. 암호에 사용하는 것과 동일한 보안 조치로 오프라인 토큰을 무단 사용으로부터 보호합니다.
2.1. 새 오프라인 토큰 생성 링크 복사링크가 클립보드에 복사되었습니다!
오프라인 토큰은 30일마다 한 번 이상 사용되므로 만료되지 않으며 Red Hat Subscription Manager API에 대한 액세스 토큰을 생성하는 데 사용됩니다. 새 새로 고침 토큰을 생성하지 않고도 암호를 사용하여 계정을 계속 인증할 수 있습니다.
프로세스
- Red Hat Subscription Manager API 토큰 페이지를 참조하십시오.
- 토큰 생성 버튼을 클릭합니다.
2.2. 새 새로 고침 토큰 생성 링크 복사링크가 클립보드에 복사되었습니다!
오프라인 토큰을 생성한 후 해당 토큰을 사용하여 5분 동안 유효한 액세스 토큰이 포함된 새 새로 고침 토큰을 생성할 수 있습니다. 액세스 토큰은 헤더에서 Red Hat Subscription Manager API에 대한 고객 포털 사용자 계정을 인증하는 데 사용됩니다.
프로세스
오프라인 토큰 값을 설정합니다. 이 예제에서는 일반 텍스트로 설정하고 명확성을 위해 토큰 값을 줄입니다.
offline_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiA'
# offline_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiA'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 JSON 값을 쉽게 필터링하는 함수를 생성합니다.
function jsonValue() { KEY=$1 num=$2 awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p }# function jsonValue() { KEY=$1 num=$2 awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여
access_token을 추출합니다.curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token
# curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예상되는 출력은 다음과 유사합니다. 여기서
access_token은 계정에 권한을 부여하는 데 사용되는 토큰입니다.{"access_token":"oiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJyaHNtLWFwaSIsImF1dGhfdGltZSI6MTU2NzQwODU5Nywic2Vzc2lvbl9zdGF0ZSI6ImYwZGJiOGQ0LTRlNGUtNDY1NC04NDRjLTZmMzcwNGM4NDQyMiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e30sImFjY291bnRfaWQiOiIxOTc5NzEwIiwibmFtZSI6Iktlbm55IFRvcmRldXJzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoicmhuLXN1cHBvcnQta3RvcmRldXIiLCJnaXZlbl9uYW1lIjoiS2VubnkiLCJmYW1pbHlfbmFtZSI6IlRvcmRldXJzIiwiZW1haWwiOiJrdG9yZGV1ckByZWRoYXQuY29tIn0.JfStOgLvgFUAlMb7aVfm-dWxd4wN5oqk377Q6oyDe55pM4zDiZ0f1yJfHsWL8RHeb3r0tj8DY_UAyAFkxAnjyWjq52d7h2EfJUPOs1p1P8Yeu5hDwOrA34Es2maN-ZbJCc4sOb7stGhxSCU15CfvPFIRR5tgSQ17-Mx-x4ZnK_fwpOK6DqQpNzZ0Krz3U1a-NH86XJ8dT8lC3o03YrdlcZx_-wv6-PehqNQa2Hb9vt1csX8QlL3PEyBVNPZXaaTHvyFYx0orGyjKA83Qq-LihbWBXzNjf_rIEfsPJYi-uQHIT_zjaOPYo2rXi7VTPJC2qRSxF2yaRGlihZHxkDzMOTITnaDeMhbx1zvRr-R9eXocEUzsU9j-Yx7h3WYCFjb8zdfXTBHV8SCaMdH1u9Eesa5gmHOoki8882RR85i1fjpBayFTS36y4S-yDebUYiukXOnw8mMMKy04NhVpFGfWtJ8--Jy4Ypndqqk_OS_PiWBsFFN6lMv5S6DZWVpjjE-CENHKn9ceA4MlerBBXLY02Xz9h0biiQUZrd-NLy11j4os124Mai1mmlNOLz993hw0gl-vKKno_bYOV8dEEmKtSLlSPVdW5X_0vBU0BtQuSEVctz_8zsRKHpT-YlDdmP0VDuzJjWM0YsGz2W0_tMuLG7NYS_Ia3vWAVuK--Uv5cAQ","expires_in":900,"refresh_expires_in":0,"refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItNGVsY19WZE5fV3NPVVlmMkc0UXhyOEdjd0l4X0t0WFVDaXRhdExLbEx3In0.eyJqdGkiOiJhODZlZDczZS00MmE1LTQzYjUtYjJkYS1iMWM5NzU3OWUyZWMiLCJleHAiOjAsIm5iZiI6MCwiaWF0IjoxNTY3NDEwMDIxLCJpc3MiOiJodHRwczovL3Nzby5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JlZGhhdC1leHRlcm5hbCIsImF1ZCI6InJoc20tYXBpIiwic3ViIjoiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoicmhzbS1hcGkiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJmMGRiYjhkNC00ZTRlLTQ2NTQtODQ0Yy02ZjM3MDRjODQ0MjIiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e319.S_pmAWzQUc04f0uGHN9rRYd4sH1t4IPnEwCcOH1aBL9Qo4_EbXPWCrtnf84f1pfuKJTQwUS-DldY6eloyVEsGgnqkygBKh270bu_bNXCNAuLJigEMsYx_2VzdnwWLptWS2_FUaNwe7Tai8qXwd8F0ge0Zjoi3P15S_8z4Tp79uD-qKcvwz6NlPKCOZwEbwZqOkJDZ8JKTIK8O0jfqdtHMfaWwlXMXdvx3B70tTOtHjQGAsxZA2dPPvqVGuyMOMmC3bMaISReUbtDwsCV-eAZplDfDZthr4k4JbmG9Iwq1aATaF3aCwfpebcmoIZGHE4_RLZrXCZKapXVVvRxcOrJytxIZrbDHq6ozX7j-j1SE3kuexcSLvlodmfTlxwPX9g7aqJu2ZLno54NxQSgYO8lQqSvScFgLtbX5f_FUS0Iw6yRWWJy2o2fnvfGk83rt5UYTtIb8Xd1GXcpHf8Yl10nVy21BetSQY__VpahF_eZghBNxS689GJnwUqAwlu01pOlb26mmHaydHc3hqUsudZydRbaFfI7nR6gQP8lCtp6b0z5hgVHLG4ZJ7i4MmEL6C5G4xHUaUs6RZgJUSsc2DzLW0b7rSQj41JuvTmSgD8bMrnVokmkAbfvxjKGc7E8n2GyImO7JiKb3RA7_o0xOTRYDIa_Ns-lnigJkUlQZUzt7JI","token_type":"bearer","not-before-policy":0,"session_state":"f0dbb8d4-4e4e-4654-844c-6f3704c84422","scope":"offline_access"}%{"access_token":"oiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJyaHNtLWFwaSIsImF1dGhfdGltZSI6MTU2NzQwODU5Nywic2Vzc2lvbl9zdGF0ZSI6ImYwZGJiOGQ0LTRlNGUtNDY1NC04NDRjLTZmMzcwNGM4NDQyMiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e30sImFjY291bnRfaWQiOiIxOTc5NzEwIiwibmFtZSI6Iktlbm55IFRvcmRldXJzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoicmhuLXN1cHBvcnQta3RvcmRldXIiLCJnaXZlbl9uYW1lIjoiS2VubnkiLCJmYW1pbHlfbmFtZSI6IlRvcmRldXJzIiwiZW1haWwiOiJrdG9yZGV1ckByZWRoYXQuY29tIn0.JfStOgLvgFUAlMb7aVfm-dWxd4wN5oqk377Q6oyDe55pM4zDiZ0f1yJfHsWL8RHeb3r0tj8DY_UAyAFkxAnjyWjq52d7h2EfJUPOs1p1P8Yeu5hDwOrA34Es2maN-ZbJCc4sOb7stGhxSCU15CfvPFIRR5tgSQ17-Mx-x4ZnK_fwpOK6DqQpNzZ0Krz3U1a-NH86XJ8dT8lC3o03YrdlcZx_-wv6-PehqNQa2Hb9vt1csX8QlL3PEyBVNPZXaaTHvyFYx0orGyjKA83Qq-LihbWBXzNjf_rIEfsPJYi-uQHIT_zjaOPYo2rXi7VTPJC2qRSxF2yaRGlihZHxkDzMOTITnaDeMhbx1zvRr-R9eXocEUzsU9j-Yx7h3WYCFjb8zdfXTBHV8SCaMdH1u9Eesa5gmHOoki8882RR85i1fjpBayFTS36y4S-yDebUYiukXOnw8mMMKy04NhVpFGfWtJ8--Jy4Ypndqqk_OS_PiWBsFFN6lMv5S6DZWVpjjE-CENHKn9ceA4MlerBBXLY02Xz9h0biiQUZrd-NLy11j4os124Mai1mmlNOLz993hw0gl-vKKno_bYOV8dEEmKtSLlSPVdW5X_0vBU0BtQuSEVctz_8zsRKHpT-YlDdmP0VDuzJjWM0YsGz2W0_tMuLG7NYS_Ia3vWAVuK--Uv5cAQ","expires_in":900,"refresh_expires_in":0,"refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItNGVsY19WZE5fV3NPVVlmMkc0UXhyOEdjd0l4X0t0WFVDaXRhdExLbEx3In0.eyJqdGkiOiJhODZlZDczZS00MmE1LTQzYjUtYjJkYS1iMWM5NzU3OWUyZWMiLCJleHAiOjAsIm5iZiI6MCwiaWF0IjoxNTY3NDEwMDIxLCJpc3MiOiJodHRwczovL3Nzby5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JlZGhhdC1leHRlcm5hbCIsImF1ZCI6InJoc20tYXBpIiwic3ViIjoiZjo1MjhkNzZmZi1mNzA4LTQzZWQtOGNkNS1mZTE2ZjRmZTBjZTY6cmhuLXN1cHBvcnQta3RvcmRldXIiLCJ0eXAiOiJPZmZsaW5lIiwiYXpwIjoicmhzbS1hcGkiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJmMGRiYjhkNC00ZTRlLTQ2NTQtODQ0Yy02ZjM3MDRjODQ0MjIiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicG9ydGFsX21hbmFnZV9zdWJzY3JpcHRpb25zIiwib2ZmbGluZV9hY2Nlc3MiLCJjYW5kbGVwaW5fc3lzdGVtX2FjY2Vzc192aWV3X2VkaXRfYWxsIiwiYWRtaW46b3JnOmFsbCIsInBvcnRhbF9tYW5hZ2VfY2FzZXMiLCJwb3J0YWxfc3lzdGVtX21hbmFnZW1lbnQiLCJwb3J0YWxfZG93bmxvYWQiXX0sInJlc291cmNlX2FjY2VzcyI6e319.S_pmAWzQUc04f0uGHN9rRYd4sH1t4IPnEwCcOH1aBL9Qo4_EbXPWCrtnf84f1pfuKJTQwUS-DldY6eloyVEsGgnqkygBKh270bu_bNXCNAuLJigEMsYx_2VzdnwWLptWS2_FUaNwe7Tai8qXwd8F0ge0Zjoi3P15S_8z4Tp79uD-qKcvwz6NlPKCOZwEbwZqOkJDZ8JKTIK8O0jfqdtHMfaWwlXMXdvx3B70tTOtHjQGAsxZA2dPPvqVGuyMOMmC3bMaISReUbtDwsCV-eAZplDfDZthr4k4JbmG9Iwq1aATaF3aCwfpebcmoIZGHE4_RLZrXCZKapXVVvRxcOrJytxIZrbDHq6ozX7j-j1SE3kuexcSLvlodmfTlxwPX9g7aqJu2ZLno54NxQSgYO8lQqSvScFgLtbX5f_FUS0Iw6yRWWJy2o2fnvfGk83rt5UYTtIb8Xd1GXcpHf8Yl10nVy21BetSQY__VpahF_eZghBNxS689GJnwUqAwlu01pOlb26mmHaydHc3hqUsudZydRbaFfI7nR6gQP8lCtp6b0z5hgVHLG4ZJ7i4MmEL6C5G4xHUaUs6RZgJUSsc2DzLW0b7rSQj41JuvTmSgD8bMrnVokmkAbfvxjKGc7E8n2GyImO7JiKb3RA7_o0xOTRYDIa_Ns-lnigJkUlQZUzt7JI","token_type":"bearer","not-before-policy":0,"session_state":"f0dbb8d4-4e4e-4654-844c-6f3704c84422","scope":"offline_access"}%Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여
access_token을 API 호출을 수행하는 데 사용할 수 있는 권한 부여 토큰으로 설정합니다.token=`curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token | jsonValue access_token`
# token=`curl https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=$offline_token | jsonValue access_token`Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3. 사용 가능한 서브스크립션 관리 API에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat은 Red Hat 서브스크립션 관리 API의 사양을 설명하는 Swagger 파일을 제공합니다. Swagger 사양에는 사용 가능한 API 끝점, 입력 매개변수, 예상 출력 및 가능한 오류 응답이 포함되어 있습니다. swagger 파일은 Postman 또는 RESTlet과 같은 REST 클라이언트로 가져와 API 호출 라이브러리를 자동으로 빌드할 수 있습니다.
4. API 오류 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
| 코드 | 설명 | 해결 |
|---|---|---|
| 400 | BadRequest 오류 | API 호출을 올바르게 입력했는지 확인한 후 다시 시도하십시오. |
| 401 | 승인되지 않음 | 새 권한 부여 토큰을 생성합니다. |
| 403 | 사용 금지됨 | 새 권한 부여 토큰을 생성합니다. |
| 404 | 찾을 수 없음 | 리소스를 찾을 수 없거나 존재하지 않습니다. |
| 429 | 너무 많은 요청 | 요청 빈도 감소 |
| 500 | 내부 서버 오류 | 문제는 Red Hat의 끝에 있습니다. 잠시 기다렸다가 요청을 다시 시도합니다. |
4.1. 오류 403 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
오류 403은 "승인되지 않음" 오류입니다. 즉, Red Hat Subscription Manager API에 사용 중인 인증이 실패했습니다. 시도할 수 있는 방법은 두 가지가 있습니다.
프로세스
Red Hat Subscription Manager 게이트웨이를 통해 인증하려면 API 호출을 입력하기 전에 권한 부여 헤더에 "bearer" 텍스트가 포함되어 있는지 확인합니다.
curl -H "Authorization: Bearer <token>" <api_url>
curl -H "Authorization: Bearer <token>" <api_url>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 헤더가 올바르면 새 토큰을 생성합니다. 토큰을 5분 동안 갱신합니다.
4.2. 문제 해결 오류 429 링크 복사링크가 클립보드에 복사되었습니다!
오류 429는 "제한" 오류이며, 이는 계정이 초당 허용된 요청 수를 초과했음을 의미합니다. 이 제한은 단일 Red Hat 계정의 모든 사용자에게 적용됩니다.
프로세스
* X-RateLimit-Limit: 허용되는 총 requests/sec: X-RateLimit-Remaining: 나머지 requests/sec 수(이는 음수 정수임) * X-RateLimit-Delay: X-RateLimit-Delay: 요청자가 다시 시도하기 전에 대기해야 하는 시간(초)을 포함하는 응답의 헤더를 추출합니다.
요청 속도를 X-RateLimit-Limit 값으로 조정하고 X-RateLimit-Delay 시간이 경과하면 다시 시작합니다.