マネージド ID を使用する

Azure AD マネージド ID は、( サービス プリンシパルを使用する代わりに) サブスクリプション内のクラスターを管理するために Azure CycleCloud にアクセス許可を付与するために使用できます。 また、Azure リソース (ストレージ、Key Vault、Azure Container Registries など) へのアクセスを提供するために、CycleCloud VM に割り当てることもできます。

マネージド ID を使用した CycleCloud VM のアクセス許可

CycleCloud では、HPC クラスターを管理するために、Azure Resource Managerへの多くの呼び出しが自動化されます。 この自動化には、CycleCloud に特定のアクセス許可が付与されている必要があります。 このアクセス権は、サービス プリンシパルを構成するか、 CycleCloud VM にマネージド ID を 割り当てることによって、CycleCloud に付与できます。

通常、 システム割り当て マネージド ID またはユーザー割り当てマネージド ID を 使用して、サービス プリンシパルではなく、これらのアクセス許可を付与することをお勧めします。

マネージド ID が割り当てられた Azure VM に Azure CycleCloud がインストールされている場合、[ クラウド プロバイダー アカウントの作成 ] ダイアログの動作が若干異なります。 マネージド ID の新しいチェックボックスが表示され、サブスクリプション ID にホスト VM のサブスクリプションが事前に設定されます。

サブスクリプションマネージド ID の追加

サブスクリプションマネージド ID の追加

[ マネージド ID] チェックボックスをオフにするだけで、標準の資格情報セットを入力することもできます。 その後、標準フィールドがフォームに追加されます。 さらに、別の サブスクリプション ID を使用することは完全に許容されます。指定された値は便宜上です。

CycleCloud のカスタム ロールとマネージド ID を作成する

(十分なアクセス権を持つ) 最も簡単なオプションは、サブスクリプションの共同作成者ロールを System-Assigned マネージド ID として CycleCloud VM に割り当てることです。 ただし、共同作成者ロールの特権レベルは、CycleCloud が必要とするよりも高くなります。 カスタム ロールを作成して VM に割り当てることができます。

ほとんどの CycleCloud 機能に対する十分なポリシーを以下に示します。

{
    "assignableScopes": [
      "/"
    ],
    "description": "CycleCloud Orchestrator Role",
    "permissions": [
      {
        "actions": [
          "Microsoft.Commerce/RateCard/read",
          "Microsoft.Compute/*/read",
          "Microsoft.Compute/availabilitySets/*",
          "Microsoft.Compute/disks/*",
          "Microsoft.Compute/images/read",
          "Microsoft.Compute/locations/usages/read",
          "Microsoft.Compute/register/action",
          "Microsoft.Compute/skus/read",
          "Microsoft.Compute/virtualMachines/*",
          "Microsoft.Compute/virtualMachineScaleSets/*",
          "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/*",
          "Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action",
          "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read",
          "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write",
          "Microsoft.Network/*/read",
          "Microsoft.Network/locations/*/read",
          "Microsoft.Network/networkInterfaces/read",
          "Microsoft.Network/networkInterfaces/write",
          "Microsoft.Network/networkInterfaces/delete",
          "Microsoft.Network/networkInterfaces/join/action",
          "Microsoft.Network/networkSecurityGroups/read",
          "Microsoft.Network/networkSecurityGroups/write",
          "Microsoft.Network/networkSecurityGroups/delete",
          "Microsoft.Network/networkSecurityGroups/join/action",
          "Microsoft.Network/publicIPAddresses/read",
          "Microsoft.Network/publicIPAddresses/write",
          "Microsoft.Network/publicIPAddresses/delete",
          "Microsoft.Network/publicIPAddresses/join/action",
          "Microsoft.Network/register/action",
          "Microsoft.Network/virtualNetworks/read",
          "Microsoft.Network/virtualNetworks/subnets/read",
          "Microsoft.Network/virtualNetworks/subnets/join/action",
          "Microsoft.Resources/deployments/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Resources/subscriptions/resourceGroups/resources/read",
          "Microsoft.Resources/subscriptions/operationresults/read",
          "Microsoft.Storage/*/read",
          "Microsoft.Storage/checknameavailability/read",
          "Microsoft.Storage/register/action",
          "Microsoft.Storage/storageAccounts/read",
          "Microsoft.Storage/storageAccounts/listKeys/action",
          "Microsoft.Storage/storageAccounts/write"
        ],
        "dataActions": [],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "Name": "CycleCloud",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
}

重要

カスタム ロールを使用するには、Azure AD Premium P1 ライセンスが必要です。 要件に適したライセンスについては、「Free、Basic、Premium エディションの一般提供機能の比較」を参照してください。

オプションのアクセス許可

CycleCloud がクラスター内に作成する VM にマネージド ID を割り当てできるようにするには、次を追加します "actions"

          "Microsoft.Authorization/*/read",
          "Microsoft.Authorization/roleAssignments/*",
          "Microsoft.Authorization/roleDefinitions/*",

CycleCloud がクラスターごとにリソース グループを作成および管理できるようにするには (ポリシーで許可されている場合は推奨)、次を追加します "actions"

          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Resources/subscriptions/resourceGroups/write",
          "Microsoft.Resources/subscriptions/resourceGroups/delete",

ロールの作成

ロールは、 Azure CLI を使用してロール定義から作成できます。 このロールを使用して、Azure テナント内にロール定義を作成します。 テナントにロールが存在したら、適切なスコープを持つ ID にロールを割り当てます。

Azure CLI を使用する基本的なフローを次に示します。

# Create a custom role definition
az role definition create --role-definition role.json
# Create user identity
az identity create --name <name>
# Assign the custom role to the identity with proper scope
az role assignment create --role <CycleCloudRole> --assignee-object-id <identity-id> --scope <subscription>

これで、カスタム ロールが割り当てられ、ID にスコープが設定され、VM で使用できるようになります。

マネージド ID を使用したクラスター VM へのロールの割り当て

クラスター ノードでは、Azure リソースへのアクセスを要求するのが一般的です。 たとえば、多くのクラスターでは、ワークロードを実行するために Azure Storage、Key Vault、または Azure Container Registries へのアクセスが必要です。 クラスター構成を使用してノードにシークレット/資格情報を渡すのではなく、 ユーザー割り当てマネージド ID を 使用して必要なアクセス資格情報を渡すことを強くお勧めします。

User-Assigned マネージド ID は、ノード プロパティを使用して Azure.Identities クラスター VM で構成できます。 プロパティの Azure.Identities 値は、マネージド ID リソース ID 文字列のコンマ区切りのリストです。

[cluster sample]
...
    [[node defaults]]
    ...
    Azure.Identities = $ManagedServiceIdentity
...

[parameters Required Settings]
...
  [[parameter ManagedServiceIdentity]]
  ParameterType = Azure.ManagedIdentity
  Label = MSI Identity
  Description = The resource ID of the Managed Service Identity to apply to the nodes
...