Azure 역할 할당 만들기

이 페이지에서는 Azure용 GKE가 Azure API에 액세스할 수 있도록 권한을 부여하는 방법을 보여줍니다. Azure용 GKE 클러스터를 새로 설정하거나 기존 클러스터의 권한을 업데이트할 때 이 단계를 실행해야 합니다. 이러한 권한은 Azure용 GKE가 가상 머신, 네트워킹 구성요소, 스토리지와 같은 Azure 리소스를 사용자 대신 관리하는 데 필요합니다.

서비스 주 구성원 및 구독 ID 가져오기

Azure용 GKE에 권한을 부여하려면 Azure 서비스 주 구성원 및 구독 ID를 가져와야 합니다. Azure 서비스 주 구성원 및 구독 ID는 Azure용 GKE용으로 만든 Azure AD 애플리케이션과 연결됩니다. 자세한 내용은 Azure Active Directory 애플리케이션 만들기를 참조하세요.

서비스 주 구성원은 Azure에 인증하고 Azure 리소스에 액세스하는 데 사용되는 Azure Active Directory(AD)의 ID입니다. Azure 구독은 Azure 제품 및 서비스에 대한 승인된 액세스 권한을 제공하는 논리적 컨테이너입니다. 구독 ID는 Azure 구독과 연결된 고유 식별자입니다.

서비스 주 구성원 및 구독 ID를 빠르게 참조할 수 있도록 셸 변수에 저장할 수 있습니다. 다음 명령어를 실행하여 이러한 셸 변수를 만듭니다.

APPLICATION_ID=$(az ad app list --all \
    --query "[?displayName=='APPLICATION_NAME'].appId" \
    --output tsv)
SERVICE_PRINCIPAL_ID=$(az ad sp list --all  --output tsv \
      --query "[?appId=='$APPLICATION_ID'].id")
SUBSCRIPTION_ID=$(az account show --query "id" --output tsv)

APPLICATION_NAME을 Azure AD 애플리케이션 이름으로 바꿉니다.

커스텀 역할 3개 만들기

Azure용 GKE에 Azure 리소스를 관리할 권한을 부여하려면 세 가지 커스텀 역할을 만들고 서비스 주 구성원에게 할당해야 합니다. 다음 안내에서는 최소 권한만 추가됩니다. 필요한 경우 더 많은 권한을 추가할 수 있습니다.

다음 유형의 액세스에 대한 커스텀 역할을 만들어야 합니다.

  • 구독 수준 액세스: 전체 Azure 구독에 적용되는 권한으로, 해당 구독 내의 모든 Azure 리소스를 관리할 수 있습니다.
  • 클러스터 리소스 그룹 수준 액세스: Azure용 GKE 클러스터가 포함된 특정 리소스 그룹 내에서 Azure 리소스를 관리하는 것과 관련된 권한입니다.
  • 가상 네트워크 리소스 그룹 수준 액세스: Azure 가상 네트워크 리소스가 포함된 리소스 그룹 내에서 Azure 리소스를 관리하는 것과 관련된 권한입니다.

구독 수준 액세스를 위한 역할 만들기

  1. GKEOnAzureAPISubscriptionScopedRole.json 파일을 만듭니다.

  2. 편집기에서 GKEOnAzureAPISubscriptionScopedRole.json을 열고 다음 권한을 추가합니다.

    {
    "Name": "GKE on-Azure API Subscription Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in subscription scope.",
    "Actions": [
      "Microsoft.Authorization/roleAssignments/read",
      "Microsoft.Authorization/roleAssignments/write",
      "Microsoft.Authorization/roleAssignments/delete",
      "Microsoft.Authorization/roleDefinitions/read"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. 새 커스텀 역할을 만듭니다.

    az role definition create --role-definition "GKEOnAzureAPISubscriptionScopedRole.json"
    
  4. 다음 명령어를 사용하여 서비스 주 구성원에 역할을 할당합니다.

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}
    

클러스터 리소스 그룹 수준 액세스를 위한 역할 만들기

  1. GKEOnAzureClusterResourceGroupScopedRole.json 파일을 만듭니다.

  2. 편집기에서 GKEOnAzureClusterResourceGroupScopedRole.json을 열고 다음 권한을 추가합니다.

    {
    "Name": "GKE on-Azure API Cluster Resource Group Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in cluster resource group scope.",
    "Actions": [
        "Microsoft.Resources/subscriptions/resourcegroups/read",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleDefinitions/delete",
        "Microsoft.ManagedIdentity/userAssignedIdentities/write",
        "Microsoft.ManagedIdentity/userAssignedIdentities/read",
        "Microsoft.ManagedIdentity/userAssignedIdentities/delete",
        "Microsoft.Network/applicationSecurityGroups/write",
        "Microsoft.Network/applicationSecurityGroups/read",
        "Microsoft.Network/applicationSecurityGroups/delete",
        "Microsoft.Network/applicationSecurityGroups/joinIpConfiguration/action",
        "Microsoft.Authorization/roleAssignments/write",
        "Microsoft.Authorization/roleAssignments/read",
        "Microsoft.Authorization/roleAssignments/delete",
        "Microsoft.Network/loadBalancers/write",
        "Microsoft.Network/loadBalancers/read",
        "Microsoft.Network/loadBalancers/delete",
        "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
        "Microsoft.Network/networkSecurityGroups/write",
        "Microsoft.Network/networkSecurityGroups/read",
        "Microsoft.Network/networkSecurityGroups/delete",
        "Microsoft.Network/networkSecurityGroups/join/action",
        "Microsoft.KeyVault/vaults/write",
        "Microsoft.KeyVault/vaults/read",
        "Microsoft.KeyVault/vaults/delete",
        "Microsoft.Compute/disks/read",
        "Microsoft.Compute/disks/write",
        "Microsoft.Compute/disks/delete",
        "Microsoft.Network/networkInterfaces/read",
        "Microsoft.Network/networkInterfaces/write",
        "Microsoft.Network/networkInterfaces/delete",
        "Microsoft.Network/networkInterfaces/join/action",
        "Microsoft.Compute/virtualMachines/read",
        "Microsoft.Compute/virtualMachines/write",
        "Microsoft.Compute/virtualMachines/delete",
        "Microsoft.Compute/virtualMachineScaleSets/write",
        "Microsoft.Compute/virtualMachineScaleSets/read",
        "Microsoft.Compute/virtualMachineScaleSets/delete",
        "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action",
        "Microsoft.Compute/virtualMachines/retrieveBootDiagnosticsData/action",
        "Microsoft.Insights/Metrics/Read"
    ],
    "NotActions": [],
    "DataActions": [
        "Microsoft.KeyVault/vaults/keys/create/action",
        "Microsoft.KeyVault/vaults/keys/delete",
        "Microsoft.KeyVault/vaults/keys/read",
        "Microsoft.KeyVault/vaults/keys/encrypt/action"
    ],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
     }
     ```
    
  3. 새 커스텀 역할을 만듭니다.

    az role definition create --role-definition "GKEOnAzureClusterResourceGroupScopedRole.json"
    
  4. 다음 명령어를 사용하여 서비스 주 구성원에 역할을 할당합니다.

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Cluster Resource Group Scoped Role" --scope /subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${CLUSTER_RESOURCE_GROUP_ID}
    

가상 네트워크 리소스 그룹 수준 액세스를 위한 역할 만들기

  1. GKEOnAzureAPIVNetResourceGroupScopedRole.json 파일을 만듭니다.

  2. 편집기에서 GKEOnAzureAPIVNetResourceGroupScopedRole.json을 열고 다음 권한을 추가합니다.

    {
    "Name": "GKE on-Azure API VNet Resource Group Scoped Role",
    "IsCustom": true,
    "Description": "Allow GKE on-Azure service manage resources in virtual network resource group scope.",
    "Actions": [
        "Microsoft.Network/virtualNetworks/read",
        "Microsoft.Network/virtualNetworks/subnets/read",
        "Microsoft.Network/virtualNetworks/subnets/join/action",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleDefinitions/delete"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. 새 커스텀 역할을 만듭니다.

    az role definition create --role-definition "GKEOnAzureAPIVNetResourceGroupScopedRole.json"
    
  4. 다음 명령어를 사용하여 서비스 주 구성원에 역할을 할당합니다.

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "GKE on-Azure API Subscription Scoped Role" --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_ID"
    

다음 단계