주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체합니다.
OCI 함수 및 OCI SDK를 사용하여 OCI 서비스를 호출하려면 OCI API Gateway에서 OAuth2 인증을 사용으로 설정하십시오.
소개
OCI(Oracle Cloud Infrastructure) REST 서비스를 사용하려면 애플리케이션이 필요한 경우가 많습니다. 여러 가지 방법으로 구성 요소 간의 보안을 보장하여 애플리케이션이 백엔드 서비스에 안전하게 인증되도록 할 수 있습니다.
이 작업은 네트워크를 보호하고 기존 서비스에 액세스할 수 있는 여러 가지 방법이 있으므로 Oracle Cloud 내에서 기본입니다. 단지 몇 가지 설정과 당신은 완료됩니다. 그러나 응용 프로그램이 추가 보안 및 연결 요구 사항을 제공할 수 있는 경우도 있습니다. 이 자료의 사용 사례는 하이브리드 또는 멀티 클라우드 시나리오(Oracle Cloud에 연결된 온프레미스 또는 다른 클라우드에 연결된 Oracle Cloud)에서 매우 일반적인 요구를 충족합니다.
다음 시나리오를 제시해 보겠습니다.
-
Fast-Connect/VPN을 통해 Oracle Cloud에 연결된 온프레미스 네트워크의 애플리케이션.
-
애플리케이션은 OCI Data Science 서비스를 사용해야 합니다.
-
OCI 서비스에는 애플리케이션 소비자의 가능성을 충족하는 인증 메커니즘이 없습니다.
-
응용 프로그램이 서비스에 안전하게 액세스하려면 OAuth2를 사용하여 인증해야 합니다.
따라서 이 자습서에서는 다음 해답을 제공합니다.
-
OAuth2를 통해 인증되도록 Oracle Identity Cloud Service 클라우드의 고유 ID 제공자를 구성합니다.
-
획득한 토큰을 통해 인증되도록 OCI API Gateway를 Oracle Identity Cloud Service와 통합하도록 구성합니다.
-
리소스 주체 사용을 허용하는 OCI 서비스를 호출하기 위해 OCI 함수를 코딩합니다(이 예에서는 Data Science Model 배치 서비스를 사용함).
-
그룹 및 정책을 생성하여 클라우드 리소스에 대한 액세스를 제한합니다.
-
클라이언트 ID 및 보안 ID를 전달하고 인증 토큰을 얻을 수 있는 ID 제공자를 제공합니다.
-
획득한 토큰을 통해 인증하고 데이터 과학 서비스의 결과를 제공하는 기능적 OCI API 게이트웨이 REST 서비스를 제공합니다.
참고: OAuthOCIService-fn.zip에서 OCI 함수를 다운로드할 수 있습니다.
목표
-
외부 애플리케이션이 OAuth2 인증을 사용하여 REST 서비스를 소비하도록 허용합니다.
-
OCI에서 OAuth2 인증 서비스를 제공합니다.
-
OCI API Gateway 및 OCI Functions를 구성하여 토큰을 통해 OCI 서비스를 실행합니다.
필요 조건
-
OCI API 게이트웨이 인스턴스가 생성되어 인터넷에 노출되었습니다. Oracle Cloud에서 첫번째 API 게이트웨이 생성을 참조하십시오.
-
OCI API 게이트웨이, OCI 함수 및 OCI PaaS 리소스 간의 네트워크 접속입니다.
-
VCN/서브넷
-
보안 목록
-
NAT 게이트웨이/인터넷 게이트웨이
-
공용/전용 네트워크
-
-
다음에 대한 지식:
-
OCI Functions
-
OCI 서비스 호출을 코딩하는 OCI REST API
-
작업 1: Oracle Identity Cloud Service로 OAuth2 구성
-
OCI API 게이트웨이 매개변수 가져오기: OAuth2 방식 구성을 시작합니다. Oracle Cloud에서 Oracle Identity Cloud Service를 ID 제공자로 구성하여 OCI API Gateway 인스턴스를 ID 제공자에 통합해야 합니다.
OCI API Gateway 인스턴스로 이동하여 호스트 이름을 복사합니다. 이 정보는 다음 단계에서 Oracle Identity Cloud Service 리소스 서버 구성에 사용됩니다.
-
리소스 애플리케이션 생성: 애플리케이션에 대한 OAuth2 권한 부여자를 생성해야 합니다. Oracle Cloud에서 Oracle Identity Cloud Service를 사용하여 이를 수행할 수 있습니다.
-
OCI 콘솔에서 ID 및 보안으로 이동하고 통합을 선택합니다.
-
OracleIdentityCloudSevice을 누릅니다.
-
Oracle Identity Cloud Service 인스턴스에 대한 링크를 누릅니다.
-
두 개의 애플리케이션을 생성합니다. 애플리케이션 및 서비스를 누릅니다.
-
애플리케이션에서 추가를 누릅니다.
-
기밀 애플리케이션을 선택하여 리소스 서버 구성을 시작합니다.
-
첫번째 애플리케이션을 구성합니다. 리소스 서버 응용 프로그램에 이름을 입력하고 다음을 누릅니다.
-
Skip for later를 누릅니다. 리소스만 구성하면 됩니다.
-
1단계에서 얻은 OCI API Gateway 호스트 이름을 입력합니다.
-
범위 추가를 누르고 범위 정보를 입력합니다.
-
범위 정보를 검토하고 다음을 두 번 누르고 완료를 누릅니다.
-
활성화를 눌러 애플리케이션을 활성화합니다.
-
-
클라이언트 애플리케이션 생성.
-
애플리케이션에서 추가를 누릅니다.
-
기밀 애플리케이션을 선택하여 리소스 서버 구성을 시작합니다.
-
애플리케이션의 이름을 입력하고 다음을 누릅니다.
-
지금 애플리케이션 구성을 선택하여 클라이언트 애플리케이션에 대한 구성을 사용으로 설정합니다. 클라이언트 인증서, JWT 검증 및 대리를 선택합니다.
-
화면 아래로 스크롤하여 범위 추가를 누릅니다.
-
이전에 생성된 리소스 응용 프로그램을 찾아(이 작업의 경우
oauth_resource_server
) 추가를 누릅니다. -
응용 프로그램에 추가된 범위를 확인할 수 있습니다. 다음을 누릅니다.
주: 범위 값을 유지하려면 토큰을 요청하는 데 사용해야 합니다.
-
리소스 및 웹 계층 정책 창을 건너뜁니다. 권한 부여에서 권한 부여를 권한 부여로 적용을 선택하고 완료를 누릅니다.
-
Client ID 및 Client Secret 정보를 유지합니다. 토큰을 얻으려면 필요합니다.
-
활성화를 눌러 애플리케이션을 활성화하면 OAuth2 권한 부여자가 테스트할 준비가 됩니다.
-
-
토큰 가져오기: 이제 OAuth2 권한 부여자를 테스트하여 토큰을 가져올 수 있습니다.
-
권한 부여자의 URL을 작성합니다. 브라우저에서 Oracle Identity Cloud Service URL을 가져와서 이 기능을 사용할 수 있습니다. Oracle Identity Cloud Service URL에서
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
와 같은 항목을 볼 수 있습니다. -
루트 끝점인
oraclecloud.com
까지 URL 링크가 필요합니다. 예:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
oAuth 인증 경로를 추가해야 합니다. 이 URL은
POST
REST 요청으로 실행됩니다. 예:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
. 토큰을 요청하려면 일부 매개변수를 입력해야 합니다. -
기본 인증, 클라이언트 ID 및 클라이언트 암호로 인증서를 입력합니다.
-
본문 콘텐츠에 grant_type 및 범위 값을 입력합니다. 범위는 Oracle Identity Cloud Service 구성에 캡처되었습니다.
-
전송을 누르고
POST
요청을 실행한 후 토큰을 확인합니다.
-
-
JSON 웹 키(JWK) 생성: 브라우저에서 루트 Oracle Identity Cloud Service 끝점을 입력하고
/admin/v1/SigningCert/JWK
를 추가하여 JWK를 가져옵니다.https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/admin/v1/SigningCert/JWK
아래와 같이 JWK 문자열이 수신됩니다.
이 JWK 문자열을 사용해야 합니다.
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"key_ops":["sig","encrypt"],"alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
주:
-
이 JWK는 수정되었습니다.
-
오류 메시지가 표시되면 Oracle Identity Cloud Service에서 액세스 권한을 제공해야 합니다.
JWK 문자열의 중요한 변경: JWK 문자열은 일부 변경 작업을 수행할 때까지 OCI API 게이트웨이에서 유용하지 않습니다.
-
"key_ops":["x","y","z"]로 세그먼트를 찾아 "use" : "sig"로 바꿉니다. 아래와 같이 표시됩니다(두 문자열 비교).
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
-
처음부터
{"keys":[
문자열을 제거하고 끝에서]}
문자열을 제거합니다. 마지막 문자열은 아래와 같이 표시됩니다. 이제 사용할 수 있습니다.{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}
-
작업 2: OCI SDK API를 호출하도록 OCI 함수 구성
-
OCI Functions 및 API Gateway 이해: API Gateway를 통해 서비스를 노출하는 것이 가장 좋습니다. API 게이트웨이에서 백엔드 서비스로의 인증서를 우회하여 많은 인증을 수행할 수 있지만 백엔드 인증이 클라이언트 애플리케이션에 적합한 방법이 아닌 경우 API 게이트웨이 레벨에서 일부 구성을 수행할 수 있습니다.
이 단계에서는 OCI API 게이트웨이가 OCI 함수를 통한 데이터 과학 모델 배포 예측과 같은 OAuth2 인증 및 OCI 서비스 요청을 통합하는 데 어떻게 도움이 되는지 이해해 보겠습니다.
OCI 함수는 본문 요청을 수신하고 OCI 서비스로 전달하기 위해 작업을 수행할 수 있습니다. OCI 서비스의 일부 서비스는 OAuth2 메소드로 인증할 수 없으므로 OCI Functions를 사용하여 인증할 수 있습니다.
이 예에서 모델 배치 예측 서비스는 OCI IAM의 OCI 전용 키로 인증할 수 있습니다. 리소스 주체를 통해 이 작업을 수행할 수 있습니다.
OCI 함수 생성 및 배포 방법을 모르는 경우 OCI 함수 빠른 시작을 참조하십시오.
-
코드 이해: 이 코드는 OCI API 게이트웨이와 함께 사용할 수 있도록 준비됩니다. API 배치에서는 API 게이트웨이에서 모델 배치 끝점을 구성하고 HEADER 매개변수로 전달됩니다. 따라서 필요한 각 API Gateway 배치의 여러 모델 배치에 이 함수를 사용할 수 있습니다.
-
Python의
oracle.ads
라이브러리를 사용하여 Resource Principal이 모델 배치 인스턴스에 대한 이 함수 액세스 권한을 부여합니다(작업 4 참조).ads.set_auth('resource_principal')
-
본문 내용은 이 행을 통해 캡처할 수 있습니다.
body = json.loads(data.getvalue())
-
OCI API 게이트웨이에 model_deployment라는 HEADER가 구성됩니다. 이 HEADER에는 API 게이트웨이 요청에 전달된 모델 배치 예측에 대한 URL이 포함되어 있습니다.
endpoint = ctx.Headers()["model_deployment"]
-
REST API POST 요청을 실행하고 Data Science 끝점의 모델 배치 결과를 반환합니다.
return requests.post(endpoint, json=body, auth=ads.common.auth.default_signer()['signer']).json()
-
이 함수에서 로드해야 할
requirements.txt
라이브러리입니다.requirements.txt --------------------- fdk>=0.1.54 requests oracle-ads
OCI 함수를 배포하고 OCI API 게이트웨이에서 구성해 보겠습니다.
-
작업 3: API 게이트웨이 배치 인증 구성
참고: OCI 함수를 개발하고 OCI API Gateway에서 호출하는 방법에 대한 자세한 내용은 API Gateway를 사용하여 OCI 함수 호출을 참조하십시오.
-
OAuth 2.0 / OpenID Connect를 선택하고 다음 구성을 입력합니다. 이것은 HEADER를 통해 인증하는 기본 방법입니다.
Token Location: Header JWT token header name: Authorization Authentication scheme: Bearer
-
이전에 생성된 JSON 웹 키 문자열을 입력하고 정적 키를 선택한 후 다음 정보를 입력합니다.
Key ID: SIGNING_KEY Key format: JSON web key JSON web key: <Your JWK string created previously>
-
이전에 획득한 OCI API 게이트웨이 호스트 이름을 사용하여
https://identity.oraclecloud.com/
및 대상자로 발행자를 입력합니다.마지막 작업에서 생성된 OCI 함수를 구성합니다.
-
HEADER
model_deployment
매개변수를 구성하고 경로 요청 정책 표시를 누릅니다. -
헤더 변환에서 추가를 누릅니다.
-
데이터 과학 모델 배치 예측 URL이 있어야 합니다. 여기에서 확인할 수 있습니다. 데이터 과학 메뉴로 이동하여 데이터 과학 인스턴스와 모델 배치를 선택하고 모델 호출을 누릅니다.
주: 모델 배치 OCID를 여기에 저장하십시오. 나중에 정책을 구성해야 합니다.
Data Science 모델 배치 예측 URL입니다.
-
헤더 이름을 model_deployment로 입력하고 값을 데이터 과학 모델 배치 예측 URL로 입력합니다.
주: API Gateway 배치를 저장한 후에는 API 배치 끝점을 기억하십시오.
작업 4: OCI 그룹 및 정책 구성
OCI 함수에서 OCI 리소스에 액세스 권한을 부여할 동적 그룹을 생성합니다. 이 자습서에서는 Data Science 모델 배치를 사용합니다. 리소스 주체를 사용하는 방법에 대한 자세한 내용은 Resource Principal을 참조하십시오.
-
모델 배치 인스턴스의 OCID를 가져옵니다. 동적 그룹 문자열에 OCID를 입력합니다.
ALL {resource.type = 'fnfunc', resource.id = 'ocid1.datasciencemodeldeployment.oc1.sa-saopaulo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
주:
resource.id
은 모델 배치 콘솔 화면에서 이전에 가져온 OCID입니다. -
동적 그룹을 허용할 정책을 생성합니다. 자세한 내용은 모델 배포 정책을 참조하십시오.
allow dynamic-group hoshikawa_datascience to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in tenancy allow dynamic-group hoshikawa_datascience to manage data-science-model-deployments in tenancy
작업 5: API 테스트
이제 OCI Data Science에서 모델 배포 서비스에 대한 애플리케이션의 OAuth2 요청을 시뮬레이션해 보겠습니다.
-
클라이언트 ID 및 클라이언트 암호를 Oracle Identity Cloud Service 제공자에게 전달하는 토큰을 얻습니다.
-
OCI API 게이트웨이 배치 끝점을 입력하고
POST
REST 요청을 선택합니다. access_token 값을 복사하고 OCI API Gateway 배포에 전달합니다. 토큰의 기간은 1시간입니다.그리고 여기 결과가 있습니다!
관련 링크
확인
- 작성자 - Cristiano Hoshikawa(Oracle LAD A-Team 솔루션 엔지니어)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Enable OAuth2 Authentication in OCI API Gateway to Call OCI Services using OCI Functions and OCI SDK
F90853-01
December 2023
Copyright © 2023, Oracle and/or its affiliates.