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'
다음 명령을 입력하여 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 }
다음 명령을 입력하여
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
예상되는 출력은 다음과 유사합니다. 여기서
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
을 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`
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>
- 헤더가 올바르면 새 토큰을 생성합니다. 토큰을 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 시간이 경과하면 다시 시작합니다.