본문 바로가기
WIKI 기술 지식 베이스

시작하기

원문 보기 위키 갱신

Backstage 통합자는 정책(policy)을 작성해 권한을 제어해요. 일반적으로 정책은 사용자와 (선택적) 리소스에 대한 특정 액션을 인가하는 요청을 받아 해당 권한을 인가할지 여부를 결정해 반환하는 비동기 함수예요. 통합자는 처음부터 자체 정책을 구현하거나, 다른 사람이 작성한 재사용 가능한 정책을 채택할 수 있어요.

출처: 문서

본문

Backstage 통합자는 정책을 작성해 권한을 제어해요. 일반적으로 정책은 사용자와 (선택적) 리소스에 대한 특정 액션을 인가하는 요청을 받아 해당 권한을 인가할지 여부를 결정해 반환하는 비동기 함수예요. 통합자는 처음부터 자체 정책을 구현하거나, 다른 사람이 작성한 재사용 가능한 정책을 채택할 수 있어요.

사전 준비

권한 프레임워크는 몇 가지 다른 Backstage 시스템에 의존하며, 정책 작성에 들어가기 전에 이것들을 설정해야 해요.

최신 버전의 Backstage로 업그레이드

Backstage 버전이 최신 권한 관련 기능을 모두 갖추도록 최신 버전으로 업그레이드하는 것이 중요해요. Backstage upgrade helper는 업그레이드 중 필요한 모든 변경을 했는지 확인하는 데 도움이 되는 훌륭한 도구예요!

로그인 시 그룹 구성원을 채우는 신원 리졸버 제공

참고: 기존 Backstage 인스턴스로 작업하고 있다면 이미 어떤 형태의 신원 리졸버가 설정되어 있을 가능성이 높아요.

Backstage의 다른 많은 부분과 마찬가지로 권한 프레임워크는 그룹 구성원 정보에 의존해요. 이는 구성에 각 사용자를 나열할 필요 없이 그룹을 사용해 정책 작성을 단순화해요. 그룹 구성원은 조건부 권한에도 유용한데, 예를 들어 엔티티를 소유한 그룹의 구성원일 때 엔티티에 작용하는 권한을 부여하도록 할 수 있어요.

IdentityResolver 문서는 로그인 시 그룹 구성원을 해석하는 과정을 설명해요.

사용자 지정 권한 정책 만들기

yarn new를 사용해 새 모듈을 스캐폴딩하고 프레임워크가 올바르게 설정되었는지 검증해 사용자 지정 권한 정책을 만들 거예요.

  • Backstage에는 기본 제공 allow-all 정책이 함께 제공돼요. 우리는 그것을 제거해 사용자 지정 정책이 적용되도록 하려 해요. 백엔드에서 다음 줄을 제거하세요.

packages/backend/src/index.ts

// permission pluginbackend.add(import('@backstage/plugin-permission-backend'));backend.add(  import('@backstage/plugin-permission-backend-module-allow-all-policy'),);
  • Backstage 루트 디렉터리에서 새 권한 정책 모듈을 스캐폴딩하세요. 프롬프트가 나타나면 모듈 ID로 custom을 입력하세요.

Backstage 루트 디렉터리에서

yarn new --select permission-policy-module

스캐폴딩된 모듈에는 src/policy/에 정책 클래스가 있으며, 기본적으로 모든 요청을 허용해요.

import { UserInfoService } from '@backstage/backend-plugin-api';import {  AuthorizeResult,  PolicyDecision,} from '@backstage/plugin-permission-common';import {  PermissionPolicy,  PolicyQuery,  PolicyQueryUser,} from '@backstage/plugin-permission-node';export class CustomPolicy implements PermissionPolicy {  constructor(private readonly userInfo: UserInfoService) {}  async handle(    _request: PolicyQuery,    _user?: PolicyQueryUser,  ): Promise<PolicyDecision> {    return { result: AuthorizeResult.ALLOW };  }}
  • 템플릿은 자동으로 백엔드에 새 모듈을 등록해요. packages/backend/src/index.ts에 이제 다음과 같은 줄이 포함되어 있는지 확인하세요.

packages/backend/src/index.ts

// permission pluginbackend.add(import('@backstage/plugin-permission-backend'));backend.add(  import('@internal/backstage-plugin-permission-backend-module-custom'),);

이제 사용자 지정 권한 정책이 마련됐어요. 이는 다음 섹션에서 권한 프레임워크가 작동하는지 테스트하는 데 도움이 될 거예요.

권한 시스템 활성화 및 테스트

이제 권한 프레임워크가 작동하는지 테스트해 보겠어요. 사용자 지정 권한 정책을 그대로 사용한 다음, 이를 수정해 접근을 거부해 볼 거예요.

  • app-config.yaml에서 permission.enabled 속성을 true로 설정하세요.

app-config.yaml

permission:  enabled: true
  • 이제 yarn start를 실행하세요. Backstage가 브라우저에서 로드될 거예요.
  • 카탈로그에 엔티티가 있는 것을 볼 수 있어야 해요.
  • 정책 클래스에서 return { result: AuthorizeResult.ALLOW };를 return { result: AuthorizeResult.DENY };로 변경하세요.
  • yarn start를 다시 실행하세요. Backstage가 브라우저에서 로드될 거예요.
  • 이번에는 카탈로그에 엔티티가 보이지 않아야 해요. 보인다면 어딘가에서 문제가 생긴 것이므로 위 단계들을 검토해야 해요.
  • 4단계에서 한 변경을 되돌려 줄이 return { result: AuthorizeResult.ALLOW };로 읽히게 하세요.

축하해요! 이제 프레임워크가 완전히 구성되었으니, 자체 정책을 작성해 조직에 가장 잘 맞는 권한 정책을 만들 수 있어요!

더 알아보기 (Learn more)