From d8abe2829bde7ba778ba95ba1f38cf90aac4cd8f Mon Sep 17 00:00:00 2001 From: hellices Date: Tue, 15 Sep 2026 08:45:16 +0900 Subject: [PATCH 1/3] =?UTF-8?q?docs:=20EA=C2=B7=EA=B5=AC=EB=8F=85=C2=B7RI?= =?UTF-8?q?=20=EA=B4=80=EA=B3=84=EC=99=80=20=EC=97=AD=ED=95=A0=20=EB=B6=80?= =?UTF-8?q?=EC=97=AC=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EA 청구 구조와 구독·예약 역할의 부여자를 간결하게 설명하고 Microsoft Learn 원본 계층도에 출처와 라이선스를 표시합니다. 새 문서가 추가되어도 게시 테스트가 고정 문서 수에 의존하지 않도록 실제 카탈로그와 원본 경로를 비교합니다. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs-taxonomy.yml | 2 + .../images/ea-hierarchies.png | Bin 0 -> 51525 bytes .../index.md | 146 ++++++++++++++++++ tests/docs/test_faceted_discovery.py | 10 +- tests/docs/test_topics.py | 12 +- 5 files changed, 163 insertions(+), 7 deletions(-) create mode 100644 docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/images/ea-hierarchies.png create mode 100644 docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md diff --git a/docs-taxonomy.yml b/docs-taxonomy.yml index 0f3ce8e7..bbcb23f9 100644 --- a/docs-taxonomy.yml +++ b/docs-taxonomy.yml @@ -34,6 +34,7 @@ services: azure-automation: Azure Automation azure-container-apps: Azure Container Apps azure-cosmos-db: Azure Cosmos DB + azure-cost-management-and-billing: Cost Management + Billing azure-database-for-mysql: Azure Database for MySQL azure-functions: Azure Functions azure-hdinsight: Azure HDInsight @@ -48,6 +49,7 @@ services: technologies: azure-cli: Azure CLI + azure-rbac: Azure RBAC bicep: Bicep cosmos-db: Azure Cosmos DB docker: Docker diff --git a/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/images/ea-hierarchies.png b/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/images/ea-hierarchies.png new file mode 100644 index 0000000000000000000000000000000000000000..29568949c9a39c75fb84721f6c99659c5d76d3d1 GIT binary patch literal 51525 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 None: ROOT / "docs", load_taxonomy(ROOT / "docs-taxonomy.yml") ) - assert len(catalog.documents) == 66 - assert len(catalog.topics) == 41 + source_paths = { + PurePosixPath(path.relative_to(ROOT / "docs").as_posix()) + for path in (ROOT / "docs" / "services").rglob("index.md") + if "samples" not in path.relative_to(ROOT / "docs" / "services").parts + } + assert len(catalog.documents) == len(source_paths) + assert {document.relative_path for document in catalog.documents} == source_paths + assert set(catalog.topics) == { + (path.parts[1], path.parts[2]) for path in source_paths + } assert not any( (ROOT / "docs" / name).exists() for name in ("cases", "guides", "labs", "research") From 7a0b5ded80c73811864329df49f0a7fed6408029 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 15 Sep 2026 01:14:41 +0000 Subject: [PATCH 2/3] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81=20(=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=C2=B7=EC=B6=9C=EC=B2=98=20=EC=A0=9C?= =?UTF-8?q?=EB=AA=A9=C2=B7=EA=B6=8C=ED=95=9C=20=EC=84=A4=EB=AA=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: hellices <5661904+hellices@users.noreply.github.com> --- .../index.md | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md b/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md index 9b3db2d1..aea358f5 100644 --- a/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md +++ b/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md @@ -6,10 +6,10 @@ services: [azure-cost-management-and-billing, microsoft-entra-id] technologies: [azure-rbac] tags: [operate, secure, identity] status: current -verification_status: verified +verification_status: needs-review sources_checked_at: 2026-09-14 official_sources: - - title: Manage Azure Enterprise Agreement roles + - title: Understand admin roles for Enterprise Agreements in Azure url: https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/understand-ea-roles - title: Understand and work with scopes url: https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/understand-work-scopes @@ -21,7 +21,7 @@ official_sources: url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/prepare-buy-reservation - title: Save costs with Azure Reserved VM Instances url: https://learn.microsoft.com/en-us/azure/virtual-machines/prepay-reserved-vm-instances - - title: Permissions to view and manage Azure reservations + - title: View reservations in the Azure portal and PowerShell url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/view-reservations - title: Manage Reservations for Azure resources url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reserved-vm-instance @@ -31,7 +31,7 @@ official_sources: url: https://learn.microsoft.com/en-us/azure/role-based-access-control/rbac-and-directory-admin-roles - title: Grant RBAC access to Azure reservations by using PowerShell url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reservations-rbac-powershell -last_verified: 2026-09-14 +last_verified: null review_cycle_days: 30 applies_to: [Azure Enterprise Agreement, Azure portal, Azure Reserved VM Instances] --- @@ -53,7 +53,7 @@ applies_to: [Azure Enterprise Agreement, Azure portal, Azure Reserved VM Instanc - **Enterprise / Enrollment**: EA 청구 계정입니다. Portal에서는 **Billing account**로 표시합니다. - **Department**: 부서별로 계정을 묶는 선택 사항입니다. -- **Account / Enrollment account**: 계정마다 **Account Owner 한 명**이 있으며, 그 아래에 구독을 만듭니다. +- **Account / Enrollment account**: 계정마다 **하나 이상의 Account Owner**가 있으며, 그 아래에 구독을 만듭니다. - **Subscription**: VM·Storage 같은 Azure 리소스를 사용하는 구독입니다. 즉, **EA 청구 계정 → 부서(선택) → 계정 → 구독**의 관계입니다. @@ -64,7 +64,7 @@ applies_to: [Azure Enterprise Agreement, Azure portal, Azure Reserved VM Instanc | 역할 | 하는 일 | 누가 부여하는가 | |---|---|---| | **Enterprise Administrator — EA 관리자** | EA 계정·관리자를 관리하고, 활성 계정 아래에 구독 생성 | 기존 EA 관리자. 최초 관리자는 EA 개설 시 설정 | -| **Department Administrator — 부서 관리자** | 자기 부서의 계정과 Account Owner 관리. 이 역할만으로 구독을 생성하지는 못함 | EA 관리자 또는 해당 부서의 기존 부서 관리자 | +| **Department Administrator — 부서 관리자** | 자기 부서의 계정과 Account Owner 관리. 이 역할만으로 구독을 생성하지는 못함 | 기존 EA 관리자 | | **Account Owner — 계정 소유자** | 자기 계정 아래에 구독 생성 | EA 관리자 또는 해당 부서의 부서 관리자 | | **Owner — 구독 소유자** | 해당 구독의 리소스 운영과 역할 부여 | 구독 생성 시 지정. 이후에는 기존 구독 Owner 또는 해당 구독의 권한 관리자 | @@ -110,8 +110,8 @@ Azure portal의 **Reservations**는 이러한 Azure 예약을 구매·조회· 구매·변경 시에는 다음 조건도 구분합니다. - **구매 역할과 EA 구매 정책은 별도**입니다. 일반 구매자의 **Reserved Instances** 정책은 EA 관리자가 설정합니다. - EA 관리자도 구매하려면 적격 구독의 built-in Owner 또는 Reservation Purchaser가 필요합니다. - 관리자 역할 조합에 따른 정책 예외는 [EA 역할 표의 각주 6][ea-roles]을 따릅니다. ([구매 조건][buy-reservation]) + 이 정책이 활성화되어 있으면 EA 관리자도 구매하려면 적격 구독의 built-in Owner 또는 Reservation Purchaser가 필요합니다. + **정책이 비활성화된 경우에는 EA 관리자만 구매할 수 있습니다.** ([구매 조건][buy-reservation]) - **Shared에서 특정 구독으로 할인 범위를 바꿀 때는 대상 구독의 Owner도 필요**합니다. 위 표의 일반 설정 변경을 교환·환불·갱신의 모든 조건으로 확대하지 않습니다. ([예약 변경 조건][manage-reservation]) @@ -126,9 +126,9 @@ Azure portal의 **Reservations**는 이러한 Azure 예약을 구매·조회· 공식 Portal 절차에서는 **Global Administrator가 User Access Administrator로 접근 권한을 승격한 뒤** **Reservations → Role assignment**에서 이 역할을 부여합니다. EA 관리자는 **EA 계약 범위**, 이 예약 역할은 **테넌트 범위**를 대상으로 한다는 차이가 있습니다. -([테넌트 예약 역할과 부여 절차][tenant-reservation-roles], [EA 청구 범위][billing-scopes]) +([테넌트 예약 역할과 부여 절차][reservation-access], [EA 청구 범위][billing-scopes]) -**정리하면, RI 구매 권한은 구독 Owner에게, 구매한 RI의 관리 권한은 예약 주문 Owner 또는 EA 관리자에게 요청합니다.** +**정리하면, RI 구매 권한은 구독 Owner 또는 Reservation Purchaser에게, 구매한 RI의 관리 권한은 예약 주문 Owner 또는 EA 관리자에게 요청합니다.** 테넌트 전체 예약 관리자를 지정하는 경우에만 위의 테넌트 권한 부여 경로를 따로 확인하면 됩니다. [ea-roles]: https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/understand-ea-roles @@ -141,6 +141,5 @@ EA 관리자는 **EA 계약 범위**, 이 예약 역할은 **테넌트 범위** [manage-reservation]: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reserved-vm-instance [assign-role]: https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal [azure-roles]: https://learn.microsoft.com/en-us/azure/role-based-access-control/rbac-and-directory-admin-roles -[tenant-reservation-roles]: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reservations-rbac-powershell [ea-image]: https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/media/understand-ea-roles/ea-hierarchies.png [docs-license]: https://github.com/MicrosoftDocs/azure-docs/blob/main/LICENSE From 1444b17b49a630baf249dc6bc6d2737f9158e2ae Mon Sep 17 00:00:00 2001 From: "my-reviewer-agent[bot]" <306977956+my-reviewer-agent[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 11:02:54 +0900 Subject: [PATCH 3/3] docs: correct EA reservation permissions against Microsoft Learn --- .../index.md | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md b/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md index aea358f5..e9f7a8f8 100644 --- a/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md +++ b/docs/services/azure-cost-management-and-billing/ea-subscription-reservation-permissions/index.md @@ -7,9 +7,9 @@ technologies: [azure-rbac] tags: [operate, secure, identity] status: current verification_status: needs-review -sources_checked_at: 2026-09-14 +sources_checked_at: 2026-09-15 official_sources: - - title: Understand admin roles for Enterprise Agreements in Azure + - title: Manage Azure Enterprise Agreement roles url: https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/understand-ea-roles - title: Understand and work with scopes url: https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/understand-work-scopes @@ -21,7 +21,7 @@ official_sources: url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/prepare-buy-reservation - title: Save costs with Azure Reserved VM Instances url: https://learn.microsoft.com/en-us/azure/virtual-machines/prepay-reserved-vm-instances - - title: View reservations in the Azure portal and PowerShell + - title: Permissions to view and manage Azure reservations url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/view-reservations - title: Manage Reservations for Azure resources url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reserved-vm-instance @@ -31,6 +31,8 @@ official_sources: url: https://learn.microsoft.com/en-us/azure/role-based-access-control/rbac-and-directory-admin-roles - title: Grant RBAC access to Azure reservations by using PowerShell url: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reservations-rbac-powershell + - title: Azure built-in roles for Management and governance + url: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/management-and-governance last_verified: null review_cycle_days: 30 applies_to: [Azure Enterprise Agreement, Azure portal, Azure Reserved VM Instances] @@ -53,7 +55,7 @@ applies_to: [Azure Enterprise Agreement, Azure portal, Azure Reserved VM Instanc - **Enterprise / Enrollment**: EA 청구 계정입니다. Portal에서는 **Billing account**로 표시합니다. - **Department**: 부서별로 계정을 묶는 선택 사항입니다. -- **Account / Enrollment account**: 계정마다 **하나 이상의 Account Owner**가 있으며, 그 아래에 구독을 만듭니다. +- **Account / Enrollment account**: 계정마다 **Account Owner 한 명**이 있으며, 그 아래에 구독을 만듭니다. 하나의 EA Enrollment에는 여러 계정을 둘 수 있지만, 한 계정에 여러 Account Owner를 지정하지는 못합니다. - **Subscription**: VM·Storage 같은 Azure 리소스를 사용하는 구독입니다. 즉, **EA 청구 계정 → 부서(선택) → 계정 → 구독**의 관계입니다. @@ -64,7 +66,7 @@ applies_to: [Azure Enterprise Agreement, Azure portal, Azure Reserved VM Instanc | 역할 | 하는 일 | 누가 부여하는가 | |---|---|---| | **Enterprise Administrator — EA 관리자** | EA 계정·관리자를 관리하고, 활성 계정 아래에 구독 생성 | 기존 EA 관리자. 최초 관리자는 EA 개설 시 설정 | -| **Department Administrator — 부서 관리자** | 자기 부서의 계정과 Account Owner 관리. 이 역할만으로 구독을 생성하지는 못함 | 기존 EA 관리자 | +| **Department Administrator — 부서 관리자** | 자기 부서의 계정과 Account Owner 관리. 이 역할만으로 구독을 생성하지는 못함 | EA 관리자 또는 해당 부서의 기존 부서 관리자. 읽기 전용 역할은 부여 불가 | | **Account Owner — 계정 소유자** | 자기 계정 아래에 구독 생성 | EA 관리자 또는 해당 부서의 부서 관리자 | | **Owner — 구독 소유자** | 해당 구독의 리소스 운영과 역할 부여 | 구독 생성 시 지정. 이후에는 기존 구독 Owner 또는 해당 구독의 권한 관리자 | @@ -100,6 +102,11 @@ Azure portal의 **Reservations**는 이러한 Azure 예약을 구매·조회· `Contributor`는 일반 설정을 변경하는 역할이고, 다른 사람에게 역할을 주는 역할은 아닙니다. ([예약의 조회·관리·위임][reservation-access], [Azure 역할의 차이][azure-roles], [역할 할당 조건][assign-role]) +**Reservation Purchaser는 구매자가 받는 역할이지, 다른 사람에게 구독 역할을 부여하는 역할이 아닙니다.** +이 역할의 역할 할당 관련 권한은 `Microsoft.Authorization/roleAssignments/read`이며, +역할 부여에 필요한 `Microsoft.Authorization/roleAssignments/write`는 포함하지 않습니다. +([Reservation Purchaser 역할 정의][reservation-purchaser-role], [역할 할당 조건][assign-role]) + **예약 주문의 Owner를 모르겠다면 EA 관리자에게 요청하면 됩니다.** 쓰기 가능한 EA 관리자는 해당 EA의 예약을 관리할 수 있고, **Cost Management + Billing → EA 청구 계정 → Products + services → Reservations + Hybrid Benefit**에서 @@ -109,26 +116,43 @@ Azure portal의 **Reservations**는 이러한 Azure 예약을 구매·조회· 구매·변경 시에는 다음 조건도 구분합니다. -- **구매 역할과 EA 구매 정책은 별도**입니다. 일반 구매자의 **Reserved Instances** 정책은 EA 관리자가 설정합니다. - 이 정책이 활성화되어 있으면 EA 관리자도 구매하려면 적격 구독의 built-in Owner 또는 Reservation Purchaser가 필요합니다. - **정책이 비활성화된 경우에는 EA 관리자만 구매할 수 있습니다.** ([구매 조건][buy-reservation]) +- **일반 구매자의 구독 역할**: 적격 구독의 built-in **Owner** 또는 **Reservation Purchaser**가 필요합니다. + 같은 권한을 흉내 낸 custom role은 구매에 사용할 수 없습니다. ([구매 조건][buy-reservation]) +- **EA 구매 정책**: EA 관리자는 **Reserved Instances** 정책을 비활성화하여 구매자를 EA 관리자로 제한할 수 있습니다. + 따라서 일반 구매자는 구독 역할뿐 아니라 이 정책의 허용 여부도 확인해야 합니다. ([구매 조건][buy-reservation]) +- **중앙 구매팀의 EA 관리자**: 구매 가이드는 EA 관리자에게도 적어도 하나의 EA 구독에 + **Owner** 또는 **Reservation Purchaser** 권한이 필요하다고 명시합니다. + 정책을 비활성화하면 이 구독 역할 요건까지 면제된다고 설명하지 않습니다. ([구매 조건][buy-reservation]) - **Shared에서 특정 구독으로 할인 범위를 바꿀 때는 대상 구독의 Owner도 필요**합니다. 위 표의 일반 설정 변경을 교환·환불·갱신의 모든 조건으로 확대하지 않습니다. ([예약 변경 조건][manage-reservation]) +!!! note "EA 관리자 구매 조건의 확인 범위" + + [EA 역할표의 각주 6][ea-roles]은 EA 관리자의 청구 계정 범위 구매와 구매 정책 flag의 예외를 설명합니다. + 반면 [예약 구매 가이드][buy-reservation]는 중앙 구매팀의 EA 관리자에게 구독 역할 요건을 명시합니다. + **구매 정책 예외와 구독 RBAC 요건 면제를 같은 의미로 해석하지 않습니다.** + 위 안내는 구매 가이드의 준비 요건을 따르며, EA 역할만으로 구매하는 모든 경로의 조건을 확정하지 않습니다. + 구독 역할 없이 구매하려는 경우에는 적용할 경로의 요건을 Microsoft에 확인해야 합니다. + 이 조건 차이가 남아 있으므로 문서의 전체 검증 상태는 `needs-review`로 유지합니다. + ## 3. 테넌트 전체의 Reservations 담당자를 따로 두려면 한 예약 주문이 아니라 **해당 Microsoft Entra 테넌트의 모든 예약**을 담당하게 하려면 테넌트의 예약 범위에 다음 역할을 부여합니다. - **Reservations Administrator**: 예약 관리와 예약 역할 위임 +- **Reservations Contributor**: 예약 관리. 다른 사람에게 예약 역할을 위임할 수 없음 - **Reservations Reader**: 예약 조회 +이 역할은 특정 예약에 한정할 수도 있지만, 여기서는 **테넌트의 모든 예약**을 대상으로 부여합니다. +예약 주문 범위의 일반 `Contributor`와 테넌트 예약 관리용 `Reservations Contributor`를 구분합니다. + 공식 Portal 절차에서는 **Global Administrator가 User Access Administrator로 접근 권한을 승격한 뒤** **Reservations → Role assignment**에서 이 역할을 부여합니다. EA 관리자는 **EA 계약 범위**, 이 예약 역할은 **테넌트 범위**를 대상으로 한다는 차이가 있습니다. -([테넌트 예약 역할과 부여 절차][reservation-access], [EA 청구 범위][billing-scopes]) +([테넌트 예약 역할][reservation-access], [Portal과 PowerShell의 테넌트 역할 부여 절차][tenant-reservation-roles], [EA 청구 범위][billing-scopes]) -**정리하면, RI 구매 권한은 구독 Owner 또는 Reservation Purchaser에게, 구매한 RI의 관리 권한은 예약 주문 Owner 또는 EA 관리자에게 요청합니다.** +**정리하면, RI 구매를 위한 Reservation Purchaser(또는 Owner) 역할은 해당 구독 Owner 또는 구독의 권한 관리자에게 요청합니다. 구매한 RI의 관리 권한은 예약 주문 Owner 또는 EA 관리자에게 요청합니다.** 테넌트 전체 예약 관리자를 지정하는 경우에만 위의 테넌트 권한 부여 경로를 따로 확인하면 됩니다. [ea-roles]: https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/understand-ea-roles @@ -141,5 +165,7 @@ EA 관리자는 **EA 계약 범위**, 이 예약 역할은 **테넌트 범위** [manage-reservation]: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reserved-vm-instance [assign-role]: https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal [azure-roles]: https://learn.microsoft.com/en-us/azure/role-based-access-control/rbac-and-directory-admin-roles +[tenant-reservation-roles]: https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/manage-reservations-rbac-powershell +[reservation-purchaser-role]: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/management-and-governance#reservation-purchaser [ea-image]: https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/media/understand-ea-roles/ea-hierarchies.png [docs-license]: https://github.com/MicrosoftDocs/azure-docs/blob/main/LICENSE