# Admin API - 배포/등록 가이드 ## 1. Bicep으로 배포하는 경우 ```bash az deployment group create \ --resource-group {리소스그룹명} \ --template-file api.bicep \ --parameters apimServiceName={APIM서비스명} ``` `fragments/`, `policies/` 폴더가 `api.bicep`과 같은 상대 경로에 있어야 `loadTextContent()`가 정상 동작합니다. 사전 조건 (이 Bicep이 처리하지 않는 부분): - APIM에 `iac-structure-dev-gisonm` User-assigned Managed Identity가 이미 연결되어 있어야 함 - 해당 Managed Identity에 `Microsoft.ApiManagement/service/subscriptions/read` 등 필요한 RBAC 역할이 이미 할당되어 있어야 함 ## 2. Azure Portal에서 수동으로 등록하는 경우 ### 2-1. Policy Fragment 2개 등록 1. APIM 인스턴스 → 왼쪽 메뉴 **API → Policy fragments** 2. **+ 추가** → 이름 `normalize-subscription` 입력 3. `fragments/normalize-subscription.xml` 파일 내용을 그대로 복사해서 붙여넣기 → 생성 4. 같은 방식으로 이름 `project-view`, `fragments/project-view.xml` 내용으로 하나 더 생성 ### 2-2. Admin API 생성 1. **API → + API 추가 → 빈 API(Blank API)** 2. 표시 이름: `Admin API`, API URL 접미사: `admin` 3. 웹 서비스 URL은 임시로 `https://management.azure.com` 입력 (policy에서 override되므로 상관없음) ### 2-3. API 레벨(All operations) 정책 등록 1. 생성한 `Admin API` **이름 자체**를 클릭 (특정 오퍼레이션이 아님) → 정책() 편집 2. `policies/all-operations.xml` 내용을 복사해서 붙여넣기 3. 아래 두 플레이스홀더를 실제 값으로 치환 (이 파일 한 곳에서만 관리): - `{{MI_CLIENT_ID}}` → **관리 ID** 서비스 → `iac-structure-dev-gisonm` 검색 → 개요에서 **클라이언트 ID(Client ID)** 복사해서 치환 - `{{ARM_BASE_PATH}}` → 아래 형식으로 치환 ``` /subscriptions/{실제 구독ID}/resourceGroups/{실제 리소스그룹명}/providers/Microsoft.ApiManagement/service/{실제 APIM 서비스명} ``` 4. 저장 ### 2-4. List Subscriptions 오퍼레이션 생성 1. `Admin API` → **+ 작업 추가** 2. Display name: `List Subscriptions`, HTTP 동사: `GET`, URL: `/subscriptions` 3. 저장 후 이 오퍼레이션의 정책() 편집 4. `policies/list-subscriptions.xml` 내용을 그대로(치환 없이) 붙여넣기 — `armBasePath`는 이미 API 레벨(2-3단계)에서 계산해둔 값을 참조만 하므로 여기서 손댈 게 없습니다 5. 저장 앞으로 오퍼레이션을 추가할 때도 이 방식 그대로, `context.Variables["armBasePath"]`만 참조하면 되고 구독ID/리소스그룹/서비스명은 API 레벨 한 곳에서만 계속 관리하면 됩니다. ### 2-5. Product 분리 (보안 격리) 1. **Products → + 추가**로 `Admin` 전용 Product 생성, **구독 필요** + **승인 필요** 활성화 2. 이 Product에 `Admin API`만 연결 3. 필요시 API/오퍼레이션 정책에 `` 또는 `` 추가로 접근 추가 제한 ## 3. 테스트 ```bash curl -i -G "https://{apim이름}.azure-api.net/admin/subscriptions" \ -H "Ocp-Apim-Subscription-Key: {Admin Product 구독키}" \ --data-urlencode "view=summary" ``` `view` 파라미터 생략 시 전체 필드(`full`), `view=summary` 지정 시 `name`, `state`, `scope`만 담긴 축약 응답을 받습니다.