יצירת הקצאות של תפקידים ב-Azure

בדף הזה מוסבר איך נותנים הרשאות ל-GKE ב-Azure כדי שהוא יוכל לגשת לממשקי Azure API. צריך לבצע את השלבים האלה כשמגדירים אשכול GKE חדש ב-Azure או כשמעדכנים הרשאות של אשכול קיים. ההרשאות האלה נחוצות כדי ש-GKE on Azure יוכל לנהל בשמכם משאבי Azure, כמו מכונות וירטואליות, רכיבי רשת ואחסון.

קבלת מזהי מנהל שירות ומינוי

כדי להעניק הרשאות ל-GKE ב-Azure, צריך לקבל את מנהל השירות ואת מזהה המינוי שלכם ב-Azure. חשבון השירות ומזהה המינוי ב-Azure משויכים לאפליקציית Azure AD שיצרתם עבור GKE ב-Azure. מידע נוסף מופיע במאמר בנושא יצירת אפליקציה ב-Azure Active Directory.

חשבון ראשי לשירות הוא זהות ב-Azure Active Directory ‏ (AD) שמשמשת לאימות ב-Azure ולגישה למשאבים שלו. מינוי ל-Azure הוא קונטיינר לוגי שמאפשר לכם גישה מורשית למוצרים ולשירותים של Azure. מזהה מינוי הוא מזהה ייחודי שמשויך למינוי שלכם ל-Azure.

כדי לשמור את מזהה חשבון השירות ומזהה המינוי שלכם לעיון מהיר, אתם יכולים לאחסן אותם במשתני מעטפת. כדי ליצור את משתני המעטפת האלה, מריצים את הפקודה הבאה:

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.

יצירת שלושה תפקידים בהתאמה אישית

כדי להעניק ל-GKE ב-Azure את ההרשאות לניהול משאבי Azure, צריך ליצור שלושה תפקידים בהתאמה אישית ולהקצות אותם לישות המורשית. בהוראות הבאות מוספות רק ההרשאות המינימליות. אם צריך, אפשר להוסיף עוד הרשאות.

צריך ליצור תפקידים בהתאמה אישית לסוגי הגישה הבאים:

  • גישה ברמת המינוי: הרשאות שחלות על כל המינוי ב-Azure, ומאפשרות ניהול של כל המשאבים ב-Azure במינוי הזה.
  • גישה ברמת קבוצת משאבים של אשכול: הרשאות ספציפיות לניהול משאבי Azure בקבוצת משאבים מסוימת שמכילה את אשכולות GKE on 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"
    

המאמרים הבאים