OPA 번들을 사용하여 API 권한 부여 정책 배포
ID 공급자가 OAuth2.0 토큰을 발급하고 ID 문제를 해결하는 동안 API 권한 부여를 처리하는 명확한 중앙 방법이 없었습니다. 이것은 일반적으로 애플리케이션 코드와 함께 번들로 제공될 수 있습니다.
권한 부여의 경우 OPA는 선언문에 권한 부여 논리를 작성할 수 있는 오픈 소스 CNCF 졸업 프로젝트입니다.
오늘의 목표는 OPA 번들 기능을 탐색하는 것입니다. 우리는 할 수 있습니다
중앙 정책 포털은 아래 그림과 같이 정책을 구성할 수 있습니다. 개별 번들은 환경 수준에서 생성되며 환경에서 호스팅하는 프로젝트의 모든 정책을 포함합니다.
우리 조직에는 비슷한 환경 분포가 있었습니다.
모든 API는 다양한 API 게이트웨이로 전면에 배치되었습니다. 우리가 원하는 것은 모든 호출이 API 게이트웨이에 의해 가로채서 인증 엔진으로 전달되어야 한다는 것입니다. 인증 엔진이 false를 반환하면 HTTP 상태 403으로 요청이 거부되어야 합니다. 아래 다이어그램은 이를 나타냅니다.
아래 표는 다양한 API 게이트웨이로 이를 달성할 수 있는 방법에 대한 세부 정보를 제공합니다.
API 게이트웨이
세부
AWS API 게이트웨이
-
Traefik
Using Forward Auth Middleware
NGINX
Module ngx_http_auth_request_module
우리의 경우 OPA를 golang API 프로젝트에 사이드카로 배포했습니다. API는 API Gateway에서 요청을 받은 다음 OPA를 호출합니다. 수신된 응답을 구문 분석하고 Allow가 false로 설정된 경우 API는 API Gateway에 403을 반환합니다.
아래는 API 프로젝트 및 OPA 배포를 위한 yaml입니다. 구성은 wsl2 데스크탑에서 가져온 것입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: authorization
namespace: default
labels:
app: authorization
spec:
replicas: 1
selector:
matchLabels:
app: authorization
template:
metadata:
labels:
app: authorization
spec:
containers:
- name: auth-policy-manager
image: naseemmohammed/policyengine:0.1.7
imagePullPolicy: IfNotPresent
env:
- name: ENV_AUTH_SERVER
value: ":8080"
- name: ENV_PPSA
value: "localhost"
- name: ENV_OPA_PORT
value: "8181"
ports:
- containerPort: 8080
- name: opa
image: openpolicyagent/opa:0.41.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8181
env:
# location to subscribe for new policy bundles
- name: AWS_REGION
value: us-east-2
- name: AWS_ACCESS_KEY_ID
value: AKIA52XXXUIISSCC-FAKE
- name: AWS_SECRET_ACCESS_KEY
value: E/VLCUZJ2G-NOTEXISTING-aUhmsMcI33yS8O
args:
- "run"
- "--ignore=.*" # exclude hidden dirs created by Kubernetes
- "--server"
- "--set=decision_logs.console=true"
- "--config-file"
- "/config/config.yaml"
volumeMounts:
- readOnly: true
mountPath: /config
name: config-volume
livenessProbe:
httpGet:
scheme: HTTP # assumes OPA listens on localhost:8181
port: 8181
initialDelaySeconds: 5 # tune these periods for your environemnt
periodSeconds: 5000 # in prod reduce to 5
readinessProbe:
httpGet:
path: /health?bundle=true # Include bundle activation in readiness
scheme: HTTP
port: 8181
initialDelaySeconds: 5
periodSeconds: 5
volumes:
- name: config-volume
hostPath:
# directory location on host
path: /run/desktop/mnt/host/c/Users/nmohammed/Downloads/cluster-files
# this field is optional
type: Directory
imagePullSecrets:
- name: topsecret
이제 아래의 OPA 구성 파일
services:
s3:
url: https://zohoohio.s3.us-east-2.amazonaws.com
credentials:
s3_signing:
environment_credentials: {}
bundles:
authz:
service: s3
resource: Zoho-onprem/bundle.tar.gz
persist: false
polling:
min_delay_seconds: 100
max_delay_seconds: 200
Reference
이 문제에 관하여(OPA 번들을 사용하여 API 권한 부여 정책 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mnaseem/distributing-api-authorization-policies-using-opa-bundles-1i4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)