次の方法で共有


ユーザー割り当てマネージド ID の作成、割り当て、使用

このハウツー ガイドでは、次の方法について学習します。

  • Azure Operator Service Manager (AOSM) で使用するユーザー割り当てマネージド ID (UAMI) を作成する
  • 必要なリソースにアクセスするための UAMI アクセス許可を割り当てます。
  • ネットワーク機能 (NF) またはサイト ネットワーク サービス (SNS) の操作を実行する場合は、UAMI を使用します。

Warnung

UAMI は、想定される SNS 操作が 4 時間以上実行される可能性がある場合に必要です。 実行時間の長い SNS 操作中に UAMI を使用しない場合、コンポーネント操作が完了する前に、SNS から誤った失敗状態が報告されることがあります。

[前提条件]

  • カスタム ロールを作成するには、カスタム ロールを作成する必要があります。 この記事では、カスタム ロールに "Custom Role - AOSM Service Operator access to Publisher" という名前を付けたものとします。

  • マネージド ID に必要なアクセス許可と、SNS で使用するネットワーク関数定義バージョン (NFDV) を理解するには、ネットワーク サービス デザイナーと協力する必要があります。

  • 選択したパブリッシャーのネットワーク関数定義バージョン リソースに対して、"所有者" または "ユーザー アクセス管理者" ロールが必要です。 また、"所有者" ロールまたは "ユーザー アクセス管理者" ロールが割り当てられているリソース グループも必要です。

UAMI を作成する

まず、UAMI を作成します。 詳細については、 SNS のユーザー割り当てマネージド ID の作成 を参照してください。

カスタム ロールを作成して UAMI に割り当てる

次に、カスタム ロールを作成します。 まず、最適なスコープベースのアプローチを検討してから、新しい UAMI にロールを作成して割り当てます。

UAMI カスタム ロールのスコープに関する考慮事項

カスタム ロールには、ユーザー リソースにアクセスするための十分なアクセス許可が割り当てられている必要があります。 カスタム ロールは、NFDV などの個々の子リソースにスコープを設定して、最も細かい制御を行うことができます。 または、カスタム ロールは、すべての子リソースに対して等しいアクセス権を付与する発行元リソース グループなどの親リソースのスコープにすることができます。 個別または親を介して適切な操作を行うには、以下のすべてのリソースをカスタム ロールに割り当てる必要があります。

  • すべてのネットワーク関数定義グループ (NFDG) とバージョン。
  • すべてのネットワーク関数定義 (NFD) とバージョン。
  • すべてのネットワーク サービス デザイン グループ (NSD) とバージョン。
  • すべての構成グループ スキーマ (CGS) とバージョン。
  • すべてのカスタムの場所。

選択したスコープに適切なアクセス許可を許可する

UAMI では、必要な SNS 操作を実行するために、次の個別のアクセス許可が必要です。

  • NFD の場合;
    • Microsoft.HybridNetwork/publishers/networkFunctionDefinitionGroups/networkFunctionDefinitionVersions/use/action
    • Microsoft.HybridNetwork/Publishers/NetworkFunctionDefinitionGroups/NetworkFunctionDefinitionVersions/read
  • NSD の場合;
    • Microsoft.HybridNetwork/publishers/networkServiceDesignGroups/networkServiceDesignVersions/use/action
    • Microsoft.HybridNetwork/publishers/networkServiceDesignGroups/networkServiceDesignVersions/read
  • CGS の場合;
    • Microsoft.HybridNetwork/Publishers/ConfigurationGroupSchemas/read
  • カスタムの場所の場合;
    • Microsoft.ExtendedLocation/customLocations/deploy/action
    • Microsoft.ExtendedLocation/customLocations/read
  • さらに、UAMI 自体にアクセスする必要があります。
    • Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

親リソース スコープのアプローチを使用する場合は、必要なアクセス許可が親リソースに適用されます。

これらのパブリッシャー リソースへの書き込みまたは削除アクセスを提供しないでください。

ポータルを使用してカスタム ロールを割り当てる

  1. Azure portal にアクセスし、選択したリソース スコープを開きます。たとえば、パブリッシャー リソース グループやネットワーク関数定義のバージョンなどです。

  2. この項目のサイド メニューで、[ アクセス制御 (IAM)] を選択します。

  3. [ロールの割り当ての追加] を選択します。

    パブリッシャー リソース グループのアクセス制御ページを示すスクリーンショット。

  4. [ジョブ関数ロール] の一覧でカスタム ロールを見つけて、[次へ] に進みます。

    ロールの割り当ての追加画面を示すスクリーンショット。

  5. [ マネージド ID] を選択し、[ + メンバーの選択 ] を選択し、新しいマネージド ID を見つけて選択します。 「を選択し、を選択してください。」

    ロールの割り当ての追加とマネージド ID の選択を示すスクリーンショット。

  6. 「Review and assign」を選択します。

ロールの割り当てを繰り返す

選択したスコープアプローチを使用して、残りのリソースに対してロールの割り当てプロセスを繰り返します。

ポータルを使用してマネージド ID オペレーター ロールを割り当てる

  1. Azure portal に移動し、マネージド ID を検索します。

  2. マネージド ID の一覧から 自分の ID を選択します

  3. サイド メニューで、[アクセス制御 (IAM)] を選択します。

  4. [ ロールの割り当ての追加] を選択し、 マネージド ID オペレーター ロールを 選択します。 マネージド ID オペレーター ロールの割り当て追加を示すスクリーンショット。

  5. マネージド ID オペレーター ロールを選択します。

    マネージド ID オペレーター ロールを示すスクリーンショット。

  6. [ マネージド ID] を選択します

  7. [ + メンバーの選択] を選択 し、ユーザー割り当てマネージド ID に移動し、割り当てを続行します。

    [マネージド ID] が選択された [ロールの割り当ての追加] 画面を示すスクリーンショット。

この記事で説明されているすべてのタスクを完了すると、サイト ネットワーク サービス (SNS) に、指定した Azure 環境内で効果的に機能するために必要なアクセス許可が付与されます。

bicep を使用して UAMI にアクセス許可を作成して割り当てる

アクセス許可を作成して割り当てるために必要な操作も、bicep スクリプトを使用してサポートされます。 この方法は、ワークフロー パイプライン内でこれらの操作を自動化する必要がある場合に適している場合があります。 次の例では、最小限のロールが割り当てられた UAMI を確立するために必要な bicep 操作を示します。 スコープのアプローチに基づいて、必要に応じてロールの割り当てを展開します。

// ----------- MIO Role Definition -----------
// This role is used to assign the Managed Identity Operator role to the User Assigned Managed Identity (UAMI).
@description('This is the built-in MIO role. See https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#managed-identity-operator')
resource MIORoleDefinition 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' existing = {
  scope: managedIdentity
  name: 'f1a07417-d97a-45cb-824c-7a7467783830'
}

// This role is used to assign the Contributor role to the User Assigned Managed Identity (UAMI) at the resource group level.
resource ContributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' existing = {
  scope: subscription()
  name: 'b24988ac-6180-42a0-ab88-20f7382dd24c'
}

// Assign the Managed Identity Operator role to the User Assigned Managed Identity (UAMI) at the scope of the managed identity.
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(resourceGroup().id, principalId, MIORoleDefinition.id)
  scope: managedIdentity
  properties: {
    roleDefinitionId: MIORoleDefinition.id
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}
// Get reference to the target resource group
resource targetRg 'Microsoft.Resources/resourceGroups@2022-09-01' existing = {
  name: 'publisherResourceGroupName' // Replace with the actual resource group name
  scope: subscription('subscriptionId')
}

// Assign the Contributor role to the User Assigned Managed Identity (UAMI) at the scope of the publisher resource group.
resource roleAssignmentContributor 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(resourceGroup().id, principalId, ContributorRoleDefinition.id)
  scope: targetRg
  properties: {
    roleDefinitionId: ContributorRoleDefinition.id
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

NF および SNS 操作で UAMI を使用する

NF テンプレートに関する考慮事項

NF テンプレートは、identityObj パラメーターを含むように更新する必要があります。 次の JSON 例は、このパラメーターを一般的な NF セットアップで使用する方法を示しています。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nameValue": {
      "type": "string",
      "defaultValue": "[concat('anf-', substring(uniqueString(deployment().name), 0, 6))]"
    },
    "locationValue": {
      "type": "string",
      "defaultValue": "eastus2euap"
    },
    "nfviTypeValue": {
      "type": "string",
      "defaultValue": "AzureArcKubernetes"
    },
    "nfviIdValue": {
      "type": "string"
    },
    "config": {
      "type": "object",
      "defaultValue": {}
    },
    "nfdvId": {
      "type": "string"
    },
    "identityObj": {
      "type": "object",
      "defaultValue": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionId>/resourceGroups/<rgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<uaminame>": {}
        }
      }
    }
  },
  "variables": {
    "deploymentValuesValue": "[string(createObject('role1releasenamespace', parameters('config').role1releasenamespace, 'role1releasename',parameters('config').role1releasename, 'role2releasenamespace', parameters('config').role2releasenamespace, 'role2releasename',parameters('config').role2releasename,'role3releasenamespace', parameters('config').role3releasenamespace, 'role3releasename',parameters('config').role3releasename))]",
    "nfName": "[concat(parameters('nameValue'), '-CNF')]"
  },
  "resources": [
    {
      "type": "Microsoft.HybridNetwork/networkFunctions",
      "apiVersion": "2024-04-15",
      "name": "[variables('nfName')]",
      "___location": "[parameters('locationValue')]",
      "identity": "[parameters('identityObj')]",
      "properties": {
        "networkFunctionDefinitionVersionResourceReference": {
          "id": "[parameters('nfdvId')]",
          "idType": "Open"
        },
        "nfviType": "[parameters('nfviTypeValue')]",
        "nfviId": "[parameters('nfviIdValue')]",
        "allowSoftwareUpdate": true,
        "configurationType": "Secret",
        "secretDeploymentValues": "[string(variables('deploymentValuesValue'))]"
      }
    }
  ]
}

SNS テンプレートに関する考慮事項

ID リソース・パラメーターを含めるために、SNS テンプレートを更新する必要があります。 次の bicep の例は、汎用の SNS セットアップでこのパラメーターを使用する方法を示しています。

resource azCoreSnsUAMI 'Microsoft.HybridNetwork/sitenetworkservices@2023-09-01' = {
  name: snsNameUAMI
  ___location: ___location
  sku: {
    name: 'Standard'
  }
  identity:  {
    type: 'UserAssigned'
    userAssignedIdentities: {
     '${managedIdentity.id}': {} 
    }
  }
  properties: {
    siteReference: {
      id: azCoreSite.id
    }
    networkServiceDesignVersionResourceReference: {
        id: nsdv.id
        idType: 'Open'
    }
    desiredStateConfigurationGroupValueReferences: {
      Test_Configuration: {
        id: azCoreCgv.id
      }
      Secret_Configuration:{
        id:azCoreCgvSecret.id
      }
    }
  }
}