주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI API Gateway를 사용하여 OCI Streaming과 기타 권한 부여 방법 통합
소개
OCI(Oracle Cloud Infrastructure) REST 서비스를 사용하려면 애플리케이션이 필요한 경우가 많습니다. 여러 가지 방법으로 구성요소 간 보안을 보장하여 애플리케이션이 백엔드 서비스에 대해 안전하게 인증될 수 있도록 합니다.
네트워크를 보호하고 기존 서비스에 액세스할 수 있는 여러 가지 방법이 있으므로 대부분의 경우 이 작업은 Oracle Cloud의 기본 작업입니다. 몇 가지 설정만 하면 완료됩니다. 그러나 응용 프로그램이 추가 보안 및 연결 요구 사항을 제공할 수 있는 경우가 있습니다. 이 사용지침서의 사용 사례는 하이브리드 또는 멀티클라우드 시나리오(Oracle Cloud에 연결된 온프레미스 또는 다른 클라우드에 연결된 Oracle Cloud)에서 매우 일반적인 요구 사항을 충족합니다.
다음 시나리오를 살펴보겠습니다.
-
Fast-Connect/VPN을 통해 Oracle Cloud에 연결된 온프레미스 네트워크의 애플리케이션입니다.
-
애플리케이션은 OCI Streaming 서비스를 사용해야 합니다.
-
OCI 서비스에는 애플리케이션 소비자의 가능성을 충족하는 인증 메커니즘이 없습니다.
-
애플리케이션을 인증하려면 OAuth2를 사용하여 서비스에 안전하게 액세스할 수 있어야 합니다.
따라서 튜토리얼에서는 다음과 같은 해결 방법을 제공합니다.
-
OAuth2을 통해 인증되도록 Oracle Identity Cloud Service 클라우드의 고유 ID 제공자를 구성합니다.
-
획득한 토큰을 통해 인증되도록 Oracle Identity Cloud Service와 통합되도록 OCI API 게이트웨이를 구성합니다.
-
OCI Streaming에 대한 인증을 생성하는 함수를 코딩합니다(
draft-cavage-http-signatures-08
메소드). -
그룹 및 정책을 생성하여 클라우드 리소스에 대한 액세스를 제한합니다.
-
클라이언트 ID 및 암호 ID를 전달하고 인증 토큰을 얻을 수 있는 ID 제공자를 전달합니다.
-
획득한 토큰을 통해 인증하고 소비자가 OCI 스트리밍 서비스를 사용할 수 있도록 해주는 기능적 API 게이트웨이 REST 서비스를 제공합니다.
참고: OCI Functions 코드는 OAuthOCIService-fn.zip에서 다운로드할 수 있습니다.
목표
-
외부 애플리케이션이 OAuth2 인증으로 OCI REST 서비스를 소비하도록 허용합니다.
-
OCI에서 OAuth2 인증 서비스를 제공합니다.
-
OCI API Gateway 및 OCI Functions를 구성하여 토큰을 통해 OCI 서비스를 실행합니다.
필요 조건
-
생성되어 인터넷에 노출되는 OCI API 게이트웨이 인스턴스입니다. 자세한 내용은 Oracle Cloud에서 첫 번째 API 게이트웨이 생성을 참조하십시오.
-
OCI API Gateway, OCI Functions 및 OCI PaaS 리소스 간의 네트워크 연결성.
-
VCN/서브넷
-
보안 목록
-
NAT 게이트웨이/인터넷 게이트웨이
-
공용/전용 네트워크
-
-
OCI 서비스에 대한 호출을 코딩하는 OCI 함수 및 OCI REST API에 대한 지식
작업 1: Oracle Identity Cloud Service로 OAuth2 구성
-
OCI API Gateway 매개변수 가져오기: OAuth2 메커니즘을 구성해 보겠습니다. Oracle Cloud의 Oracle Identity Cloud Service를 ID 제공자로 구성하여 OCI API 게이트웨이 인스턴스를 ID 제공자로 통합해야 합니다.
-
OCI API 게이트웨이 인스턴스로 이동하여 호스트 이름을 복사합니다. 이 정보는 다음 단계에서 Oracle Identity Cloud Service 리소스 서버 구성에 사용됩니다.
-
-
리소스 애플리케이션 생성: 애플리케이션에 대한 OAuth2 권한 부여자를 생성해야 합니다. Oracle Cloud의 Oracle Identity Cloud Service로 이 작업을 수행할 수 있습니다.
-
OCI 콘솔에서 Identity & Security로 이동하여 Federation을 선택합니다.
-
OracleIdentityCloudSevice을 누릅니다.
-
Oracle Identity Cloud Service 인스턴스에 대한 Oracle Identity Cloud Service 콘솔 링크를 누릅니다.
-
우리는 두 가지 응용 프로그램을 만들 것입니다. 애플리케이션 및 서비스를 누릅니다.
-
애플리케이션에서 추가를 누릅니다.
-
리소스 서버 구성을 시작하려면 기밀 애플리케이션을 선택합니다.
-
첫번째 응용 프로그램을 구성합니다. 리소스 서버 응용 프로그램에 이름을 입력하고 다음을 누릅니다.
-
Skip for later를 누릅니다. 리소스만 구성해야 합니다.
-
단계 1에서 가져온 API 게이트웨이 호스트 이름을 입력합니다.
-
범위 추가를 누르고 범위 정보를 입력합니다.
-
범위 정보를 검토하고 다음을 두 번 누르고 완료를 누릅니다.
-
활성화를 눌러 애플리케이션을 활성화합니다.
-
-
클라이언트 애플리케이션을 생성합니다.
-
애플리케이션에서 추가를 누릅니다.
-
리소스 서버 구성을 시작하려면 기밀 애플리케이션을 선택합니다.
-
애플리케이션의 이름을 입력하고 다음을 누릅니다.
-
지금 애플리케이션을 클라이언트로 구성을 선택하여 클라이언트 애플리케이션에 대한 구성을 사용으로 설정합니다. 클라이언트 인증서, JWT 검증 및 대신을 선택합니다.
주: 함수 코드에서 OAuth2를 검증하려면 Introspect 플래그를 설정해야 합니다. 그러면
/oauth2/v1/introspect
Oracle Identity Cloud Service REST API 서비스가 사용으로 설정됩니다. -
아래로 스크롤하여 범위 추가를 누릅니다.
-
(
oauth_resource_server
) 이전에 생성한 리소스 애플리케이션을 찾아 추가를 누릅니다. -
응용 프로그램에 추가된 범위를 확인할 수 있습니다. 다음을 누릅니다.
주: 범위 값은 토큰을 요청하는 데 사용해야 합니다.
-
리소스 및 웹 계층 정책 창을 건너뜁니다. 권한 부여에서 권한 부여로 권한 부여 적용을 선택하고 완료를 누릅니다.
-
클라이언트 ID 및 클라이언트 암호 정보를 기록해 둡니다. 토큰을 얻으려면 이 작업이 필요합니다.
-
활성화를 눌러 애플리케이션을 활성화하고 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
. 토큰을 요청하려면 몇 가지 매개변수를 입력해야 합니다. -
자격 증명을 Basic Authentication, Client ID 및 Client Secret으로 입력합니다.
-
본문 콘텐츠에 grant_type 및 범위 값을 입력합니다. 범위는 Oracle Identity Cloud Service 구성에서 캡처되었습니다.
-
전송을 누르고
POST
요청을 실행한 다음 토큰을 확인합니다.
-
작업 2: OCI SDK API를 호출하도록 OCI 함수 구성
-
OCI Functions 및 OCI API Gateway 이해: OCI API Gateway를 통해 서비스를 노출하는 것이 모범 사례입니다. 인증은 OCI API Gateway에서 백엔드 서비스로 인증서를 우회하여 수행할 수 있지만, 백엔드 인증이 클라이언트 애플리케이션에 적합한 방법이 아닌 경우 OCI API 게이트웨이 레벨에서 일부 구성을 수행할 수 있습니다.
이 단계에서는 OCI API Gateway가 OAuth2 인증 및 OCI Functions를 통한 OCI Streaming과 같은 모든 OCI 서비스에 대한 요청을 통합하는 데 어떻게 도움이 되는지 이해하겠습니다.
OCI Functions는 사용자 자격 증명 또는 개인 키를 소비자 애플리케이션에 전달하지 않고도 올바른 인증/권한 부여를 생성하고 OCI 서비스로 전달하기 위한 작업을 수행할 수 있습니다. OCI 서비스의 일부 서비스는 OAuth2 메소드를 사용하여 인증할 수 없으므로 OCI Functions를 사용하여 인증할 수 있습니다. OCI 함수를 생성하고 배포하려면 OCI 함수 빠른 시작을 참조하십시오.
이 예에서 OCI Streaming 서비스는 draft-cavage-http-signatures-08 메소드를 통해 OCI IAM의 OCI 개인 키로 인증할 수 있으며 소비자는 OAuth2을 통해 인증할 수 있습니다.
-
코드 이해: 이 코드는 OCI API Gateway와 함께 사용됩니다. API 배치 시 OCI API Gateway에서 OCI Streaming 엔드포인트를 구성하고 HEADER 권한 부여 매개변수로 전달됩니다. 따라서 필요한 각 OCI API Gateway 배치의 여러 서비스에 이 함수를 사용할 수 있습니다.
-
Python의 이 함수는 인증을 위한 형식의 날짜 및 시간을 만듭니다. 이 날짜와 시간은 한 번 생성되어 두 지점에서 사용되어야 합니다. OCI Streaming 요청의 헤더 Date 및 Signature 암호화 HEADER.
-
서명 암호화 기능입니다. 어셈블리는 OCI IAM 사용자의 프라이빗 키를 SHA-256과 함께 사용한 후 base64에서 사용하는 것으로 구성됩니다.
-
서명 암호화는 전체 권한 부여 헤더에서 사용됩니다.
-
Oracle Identity Cloud Service OAUTH2 토큰 검증 코드입니다. Oracle Identity Cloud Service 애플리케이션 매개변수를 사용하여
config.json
파일을 구성해야 합니다. -
함수의 시작 부분이며 이 API 배치를 위해 생성된 OCI IAM 보안 및 OCI 스트리밍 변수(
streaming_host
및oci_region
)에서 일부 정보를 초기화합니다. -
이것은이 기능의 주요 부분이며 두 부분이 있습니다.
첫번째 부분에서는 API 게이트웨이 요청에 전달된 토큰을 가져옵니다. 그런 다음 auth_idcs() 함수를 호출하여 Oracle Identity Cloud Service에서 토큰을 검증합니다. draft-cavage-http-signatures-08 문자열을 생성하기 전에 Oracle Identity Cloud Service 토큰을 검증합니다. 유효한 토큰이 아닌 경우 응답에 401 unauthorized 오류가 표시됩니다.
두번째 부분에서는 두 개의 값을 생성합니다. 날짜 형식의 날짜(d)는 서명(a) 생성에 사용됩니다. rdata는 OCI API Gateway가 OCI Streaming에서 인증하는 데 사용할 권한 부여 및 날짜 값을 사용하여 함수에 대한 응답을 구성합니다.
-
여기서는 OCI Observability에서 로그를 생성할 수 있으며 이 단계는 선택 사항입니다. 로그에 대한 Oracle Cloud 식별자(OCID)를 입력합니다. 이전에 사용자정의 로그를 생성해야 합니다.
참고: OCI Observability에서 사용자정의 로그를 생성하려면 OCI API Gateway, Functions 및 Observability를 사용하여 JSON Content 검증 및 API 헤더 및 본문 모니터링을 참조하십시오.
-
마지막 단계이며 유효한 인증이 있는 상태로 돌아갑니다.
이 함수(fn)에 로드해야 하는
requirements.txt
라이브러리입니다.requirements.txt --------------------- fdk>=0.1.54 requests oci cryptography six PyJWT py3_lru_cache simplejson
config.json
파일입니다.OCI 구성 파일입니다. OCI CLI 설치에서 이 파일을 복사할 수 있지만
key_file
섹션을 수정하고 OCI CLI 설치 경로를 제거해야 합니다. Python 코드에서draft-cavage-http-signatures-08
암호화 문자열을 생성하는 데 사용됩니다.함수를 배치하기 전에 두 개의 변수를 생성하고 OCI Streaming OCID 및 OCI region 값으로 채웁니다.
fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a fn config app <function-app> oci_region us-ashburn-1
함수를 배포하고 OCI API Gateway에서 구성해 봅시다.
-
작업 3: API 게이트웨이 배치 구성
참고: 함수를 개발하고 OCI API Gateway에서 호출합니다. OCI Functions: Validate an API Key with API Gateway를 참조하십시오.
-
OCI API 게이트웨이 서비스를 구성합니다. 이 예에서는 OCI Streaming 서비스를 구성합니다. 기본 정보에서 경로 접두어를
/20180418/streams/
와 스트리밍 인스턴스의 OCID로 입력합니다.예:
/20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
Authentication(인증)에서 Single Authentication(단일 인증) 및 Authorizer Function(권한 부여자 기능)을 선택합니다. 컴파트먼트를 선택하고 Oracle Function을
get-authorization
으로 선택합니다. -
요청 HEADERs 매개변수를 구성합니다.
Header Parameter 1 Context table=request.headers Header name=Date Argument name=Date Header Parameter 2 Context table=request.headers Header name=token Argument name=token
-
Oracle Identity Cloud Service 매개변수에 대한 HEADER를 구성하려면 경로 요청 정책 표시를 눌러야 합니다.
-
HEADER 변환에서 편집을 누르고 두 매개변수에 각각 헤더 이름을
Authorization
,Date
및 값을${request.auth[authorization]}
및${request.auth[date]}
으로 각각 헤더 이름을Overwrite
으로 입력합니다.${request.auth[authorization]}
및${request.auth[date]}
는 함수 Python 코드에서 반환된 값이며 백엔드 서비스에 대한 HEADER로 전달됩니다.
작업 4: OCI 그룹 및 정책 구성
OCI Streaming에 대한 정책을 구성하려면 OCI Streaming Policies를 참조하고 공통 정책을 사용할 수 있습니다. 공통 정책을 참조하십시오.
작업 5: API 테스트
OCI Streaming의 모델 배포 서비스에 대한 애플리케이션 OAuth2 요청을 시뮬레이션해 보겠습니다.
-
토큰을 가져와서 클라이언트 ID 및 클라이언트 암호를 Oracle Identity Cloud Service 제공자에게 전달합니다.
Verb: POST URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token BODY (x-www-form-urlencoded): scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope grant_type: client_credentials HEADER Authorization: clientID:clientSecret\* - convert your clientID:clientSecret to a base64 value
-
OCI API Gateway에 대한 요청을 테스트합니다. API 게이트웨이 배치 끝점을 입력하고 REST 요청에 대한 POST를 선택합니다. 요청의 본문에 여섯 명의 헤더를 선언해야 합니다.
Content-Type: application/json access-control-allow-origin: * access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS access-control-allow-credentials: true Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT token: put your <access_token> here* * Remember that your token have 1 hour duration.
결과는 다음과 같습니다.
로그에서 사용자정의 코드 권한 부여 논리에 대한 페이로드를 볼 수 있습니다.
관련 링크
확인
- 작성자 - Cristiano Hoshikawa(Oracle LAD A-Team 솔루션 엔지니어)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
F91393-02
November 2024