Citrix DaaS™

Connexion aux instances gérées Amazon WorkSpaces Core

Créer et gérer des connexions et des ressources décrit les assistants qui créent une connexion. Les informations suivantes couvrent les détails spécifiques aux instances gérées Amazon WorkSpaces Core.

Conditions préalables

Définir les autorisations IAM

Avant de créer une connexion d’hôte, une politique d’autorisations IAM doit être correctement définie pour un utilisateur ou un rôle IAM qui donne à Citrix les autorisations appropriées pour provisionner et gérer les ressources de votre compte AWS en votre nom. Utilisez les informations de cette section pour définir les autorisations IAM pour Citrix DaaS sur les instances gérées Amazon WorkSpaces Core. Le service IAM d’Amazon permet aux comptes d’avoir plusieurs utilisateurs, qui peuvent être organisés en groupes. Ces utilisateurs peuvent posséder différentes autorisations pour contrôler leur capacité à effectuer des opérations associées au compte. Pour plus d’informations sur les autorisations IAM, consultez la référence de politique JSON IAM.

Remarque :

Étant donné que Citrix provisionne et gère les ressources et l’automatisation dans votre compte AWS en votre nom, la configuration des politiques d’autorisations IAM basées sur des balises spécifiques ou des conventions de nommage de ressources n’est pas prise en charge.

Pour appliquer une politique d’autorisations IAM à un nouveau groupe d’utilisateurs :

  1. Connectez-vous à la console de gestion AWS et sélectionnez le service IAM dans la liste déroulante.
  2. Sélectionnez Créer un nouveau groupe d’utilisateurs.
  3. Saisissez un nom pour le nouveau groupe d’utilisateurs et sélectionnez Continuer.
  4. Sur la page Autorisations, choisissez Politique personnalisée.
  5. Saisissez un nom pour la politique d’autorisations.
  6. Dans la section Document de politique, saisissez les autorisations pertinentes.

Après avoir saisi les informations de politique, sélectionnez Continuer pour terminer l’application de la politique d’autorisations IAM au groupe d’utilisateurs. Les utilisateurs du groupe se voient accorder des autorisations pour effectuer uniquement les actions requises par Citrix DaaS.

Important :

Utilisez le texte de politique fourni dans l’exemple de cet article pour lister les actions qu’un Citrix DaaS utilise pour effectuer des actions au sein d’un compte AWS sans restreindre ces actions à des ressources spécifiques. Citrix vous recommande d’utiliser l’exemple à des fins de test. Pour les environnements de production, vous pouvez choisir d’ajouter d’autres restrictions sur les ressources.

Ajouter des autorisations IAM

Ajoutez les autorisations dans la section IAM de la console de gestion AWS :

  1. Dans le panneau Résumé, sélectionnez l’onglet Autorisations.
    1. Sélectionnez Ajouter des autorisations.
    1. Dans l’écran Ajouter des autorisations à, accordez les autorisations.
  1. Dans la section JSON, incluez les autorisations AWS requises pour votre environnement.

Créer un rôle lié à un service

Pour chacun de vos comptes AWS à partir desquels Citrix appellera les API Core V2, créez un rôle lié à un service (SLR).

Les étapes pour créer le rôle :

  • Ouvrez une interface de ligne de commande (CLI) dans la console de gestion AWS.
  • Exécutez la commande suivante dans la CLI :

    
     aws iam create-service-linked-role --aws-service-name workspaces-instances.amazonaws.com
    
     <!--NeedCopy-->
    

Vous pouvez également configurer le rôle lié à un service à l’aide de la console de gestion Amazon WorkSpaces Core. Consultez Création d’un rôle lié à un service (console).

Créer une connexion

Vous pouvez créer une connexion aux instances gérées Amazon WorkSpaces Core à l’aide de :

Remarque :

Vérifiez les restrictions de votre serveur proxy ou de votre pare-feu et assurez-vous que les adresses suivantes sont joignables : https://*.amazonaws.com et https://*.api.aws. Assurez-vous également que toutes les adresses mentionnées dans Connectivité du service Citrix Gateway sont joignables.

Si celles-ci ne sont pas joignables, cela pourrait entraîner un échec lors de la création ou de la mise à jour de la connexion d’hôte.

Créer une connexion à l’aide de Studio

  1. Accédez à la page Hébergement > Ajouter une connexion et des ressources.
  2. Sur la page Connexion, suivez ces étapes pour configurer la connexion :

    1. Sélectionnez Créer une nouvelle connexion.
    2. Dans Zone, sélectionnez l’emplacement de ressources que vous avez configuré pour votre environnement AWS.
    3. Sélectionnez Amazon WorkSpaces Core comme type de connexion.
    4. Sélectionnez Utiliser la clé d’accès de l’utilisateur IAM ou Utiliser le rôle IAM.

      Pour la clé d’accès de l’utilisateur IAM, fournissez votre clé API et votre clé secrète pour l’utilisateur IAM qui dispose de la politique d’autorisations IAM appropriée pour que Citrix gère les ressources de votre compte AWS.

      Pour le rôle IAM, assurez-vous d’avoir attribué un rôle IAM à l’instance Citrix Cloud Connector avec la politique d’autorisations IAM appropriée pour que Citrix gère les ressources de votre compte AWS. Consultez le guide d’authentification basé sur les rôles pour plus d’informations.

    5. Pour acheminer les requêtes API vers AWS via les Citrix Cloud Connectors, cochez la case Utiliser le proxy système sur les Citrix Cloud Connectors. Cela garantit que la connectivité AWS fonctionne correctement lorsque les Cloud Connectors n’ont pas d’accès direct à Internet.
    6. Saisissez un nom de connexion et cliquez sur Suivant.
  3. Sur la page Emplacement de la machine virtuelle, spécifiez l’emplacement où les machines virtuelles doivent être provisionnées. Sélectionnez la région cloud, le VPC et la zone de disponibilité (ou zone locale) pour la création de nouvelles machines virtuelles.
  4. Sur la page Réseau :

    1. Saisissez un nom pour les ressources que vous avez sélectionnées précédemment dans la zone de disponibilité (ou zone locale).
    2. Sélectionnez un ou plusieurs sous-réseaux dans le VPC que vous avez configuré dans le menu précédent.
  5. Cliquez sur les pages restantes jusqu’à la page Résumé.
  6. Cliquez sur Terminer pour créer la connexion d’hôte aux instances gérées Amazon WorkSpaces Core.

Considérations importantes

Lorsque vous créez une connexion à l’aide de Studio :

  • Définissez les autorisations IAM appropriées pour que Citrix puisse gérer vos ressources AWS.
  • Si vous utilisez une clé d’accès utilisateur IAM pour que Citrix gère vos ressources AWS, vous devez fournir les valeurs de clé API et de clé secrète. Vous pouvez exporter le fichier de clés contenant ces valeurs depuis AWS, puis les importer. Vous devez également fournir la région, la zone de disponibilité, le nom du VPC, les adresses de sous-réseau, le nom de domaine, les noms des groupes de sécurité et les informations d’identification.
  • Si vous utilisez un rôle IAM pour que Citrix gère vos ressources AWS, vous devez vous assurer d’attribuer un rôle avec les autorisations IAM appropriées à tous vos Cloud Connector(s). Consultez le guide d’authentification basé sur les rôles pour plus d’informations.
  • Le fichier d’informations d’identification du compte AWS racine (récupéré depuis la console AWS) n’est pas formaté de la même manière que les fichiers d’informations d’identification téléchargés pour les utilisateurs AWS standard. Par conséquent, Citrix DaaS ne peut pas utiliser ce fichier pour renseigner les champs de clé API et de clé secrète. Assurez-vous d’utiliser des fichiers d’informations d’identification AWS Identity Access Management (IAM).
  • La zone peut être une zone de disponibilité ou une zone locale.

Créer une connexion à l’aide de PowerShell

  1. Ouvrez une fenêtre PowerShell.
  2. Exécutez asnp citrix* pour charger les modules PowerShell spécifiques à Citrix.
  3. Exécutez les commandes suivantes. Voici un exemple :

    
    $connectionName = "demo-hostingconnection"
    $cloudRegion = "us-east-1"
    $apiKey = "aaaaaaaaaaaaaaaaaaaa"
    $apiSecret = “bbbbb”
    $secureKey = ConvertTo-SecureString -String $apiSecret
    $zoneUid = "00000000-0000-0000-0000-000000000000"
    $connectionPath = "XDHyp:\Connections\" + $connectionName
    
    $connection = New-Item -Path $connectionPath -ConnectionType "AmazonWorkSpacesCoreMachineManagerFactory" -HypervisorAddress " "https://workspaces-instances.$($cloudRegion).api.aws"" -Persist -Scope @() -UserName $apiKey -SecurePassword $secureKey -ZoneUid $zoneUid
    
    New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid
    
    $hostingUnitName = "demo-hostingunit"
    $availabilityzone = "us-east-1a"
    $vpcName = "Default VPC"
    $jobGroup = [Guid]::NewGuid()
    $hostingUnitPath = "XDHyp:\HostingUnits\" + $HostingUnitName
    $rootPath = $connectionPath + "\" + $vpcName + ".virtualprivatecloud\"
    $availabilityZonePath = @($rootPath + $availabilityzone + ".availabilityzone")
    $networkPaths = (Get-ChildItem $availabilityZonePath[0] | Where ObjectType -eq "Network") | Select-Object -ExpandProperty FullPath # will select all the networks in the availability zone
    
    New-Item -Path $hostingUnitPath -AvailabilityZonePath $availabilityZonePath -HypervisorConnectionName $connectionName -JobGroup $jobGroup -PersonalvDiskStoragePath @() -RootPath $rootPath -NetworkPath $networkPaths
    
    <!--NeedCopy-->
    

Remarque :

Pour créer une connexion à l’aide de l’authentification basée sur les rôles, spécifiez apiKey et apiSecret comme role_based_auth.

Limitation

  • Si vous modifiez le nom d’un AWS Virtual Private Cloud (VPC) dans la console AWS, l’unité d’hébergement existante dans Citrix Cloud™ est interrompue. Lorsque l’unité d’hébergement est interrompue, vous ne pouvez pas créer de catalogues ni ajouter de machines aux catalogues existants. Pour résoudre le problème, rétablissez le nom du VPC AWS à son nom d’origine.

Créer un environnement sécurisé pour le trafic géré par AWS

Si vous avez un proxy configuré sur les Cloud Connector, vous devez créer la connexion d’hôte pour utiliser le proxy afin que les appels d’API effectués par MCS soient correctement acheminés via le proxy. MCS permet au trafic réseau (appels d’API de Citrix Cloud vers l’hyperviseur AWS) d’être acheminé via les Cloud Connector de votre environnement.

-  La connexion d’hôte peut lire la valeur du proxy système WinHTTP configurée lors de l’installation du Cloud Connector. Vous pouvez configurer le proxy à l’aide de [Studio](#create-a-connection-using-studio) ou en définissant la propriété personnalisée `UseSystemProxyForHypervisorTrafficOnConnectors` sur `True` lors de la création ou de la mise à jour d’une connexion d’hôte à l’aide de PowerShell.

Remarque :

Si votre environnement utilise un proxy, assurez-vous que l’inspection SSL est désactivée ou que la connexion SSL reste inchangée pour https://workspaces-instances.*.api.aws/.

Créer une connexion d’hôte configurée avec le proxy

-  1.  Ouvrez une fenêtre PowerShell.
-  1.  Exécutez `asnp citrix*` pour charger les modules PowerShell spécifiques à Citrix.
  1. Exécutez les commandes PowerShell pour configurer le proxy. Par exemple :

    
    $connectionName = "demo-hostingconnection"
    $cloudRegion = "us-east-1"
    $apiKey = "aaaaaaaaaaaaaaaaaaaa"
    $zoneUid = "00000000-0000-0000-0000-000000000000"
    
    $securePassword = Read-Host 'Please enter your secret key' -AsSecureString
    $connectionPath = "XDHyp:\Connections\" + $connectionName
    
    $customProperties = @"
    <CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
    <Property xsi:type="StringProperty" Name="UseSystemProxyForHypervisorTrafficOnConnectors" Value="True" />
    </CustomProperties>
    "@
    
    <!--NeedCopy-->
    
  2. Créez une connexion d’hébergement. Par exemple :

    
    $connection = New-Item -Path $connectionPath `
    -ConnectionType "Custom" -PluginId "AmazonWorkSpacesCoreMachineManagerFactory" `
    -HypervisorAddress "<https://workspaces-instances.$($cloudRegion).api.aws>" `
    -CustomProperties> $customProperties `
    -Persist -Scope @()`
    -UserName $apiKey -SecurePassword $securePassword `
    -ZoneUid $zoneUid
    
    New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid
    
    <!--NeedCopy-->
    

Pour activer le proxy pour une connexion d’hôte existante, consultez Activer le proxy sur une connexion existante.

Provisionnement inter-comptes

Il existe des cas d’utilisation où les Cloud Connector souhaitent être placés dans un compte AWS distinct (compte de services partagés ou compte de composants de site) avec des rôles IAM ayant un accès inter-comptes (rôle IAM inter-comptes) et des catalogues de machines provisionnés par MCS dans un compte AWS secondaire distinct (comptes de charges de travail), sans avoir besoin de Cloud Connector supplémentaires dans les comptes distincts. Pour prendre en charge de tels scénarios, cette fonctionnalité utilise le peering de VPC et l’accès inter-comptes à l’aide de rôles IAM pour rendre le provisionnement entre différents comptes AWS possible pour les entreprises gérant plusieurs comptes AWS.

Avec le peering de VPC, votre Cloud Connector et les machines virtuelles provisionnées dans différentes régions ou comptes peuvent communiquer entre eux.

Avec l’accès inter-comptes à l’aide de rôles IAM, vous autorisez le compte principal (compte Cloud Connector) à assumer un rôle IAM pour accéder aux ressources AWS du compte secondaire (machines virtuelles du catalogue de machines).

-  Pour permettre au Cloud Connector d’accéder aux ressources du compte secondaire, créez une connexion d’hôte après avoir assumé le rôle IAM du compte secondaire.

Prérequis

Configurez les éléments suivants avant de créer une connexion d’hôte pour le provisionnement inter-comptes :

Configurer le peering de VPC

-  Supposons que le VPC A se trouve dans le compte principal (Compte A) et qu’il contient les Cloud Connector et Active Directory. Le VPC B se trouve dans le compte secondaire (Compte B) où vous souhaitez provisionner les machines virtuelles.

-  Pour configurer une connexion de peering de VPC entre le Compte A et le Compte B, procédez comme suit :
  1. Créez une connexion de peering de VPC. Voir :

  2. Accédez à votre VPC A et à la table de routage associée au sous-réseau public.
  3. Cliquez sur Modifier les routes > Ajouter une route. Ajoutez le bloc CIDR du VPC B dans la colonne Destination et ajoutez le peering de VPC que vous avez créé dans la colonne Cible.
  4. Répétez les étapes 2 et 3, mais avec les sous-réseaux privés pour le VPC A et le VPC B (ajoutez le bloc CIDR du VPC A). Consultez Mettre à jour vos tables de routage pour une connexion de peering de VPC.
  5. Accédez au groupe de sécurité privé associé au VPC A.
  6. Sélectionnez Actions, puis Modifier les règles de trafic entrant.
  7. Sélectionnez Ajouter une règle. Pour le type, sélectionnez Tout le trafic, puis dans la colonne Source, ajoutez :

    • S’il s’agit d’une région différente, ajoutez le bloc CIDR du VPC B.
    • S’il s’agit d’un compte différent mais de la même région, ajoutez l’ID de compte et l’ID de groupe de sécurité privé du VPC B séparés par une barre oblique (Exemple : 123456789012/sg-1a2b3c4d).
  8. Répétez les étapes 5 à 7, mais avec le groupe de sécurité privé pour le VPC B (mais ajoutez le bloc CIDR du VPC A ou l’ID de compte du VPC A et l’ID de groupe de sécurité privé de la même région, mais d’un compte différent). Consultez Mettre à jour vos groupes de sécurité pour référencer les groupes de sécurité homologues.

Remarque :

La création d’une connexion de peering de VPC est gratuite. Cependant, bien que le peering de VPC au sein d’une zone de disponibilité soit gratuit, des frais s’appliquent lorsque le transfert de données via une connexion de peering de VPC s’effectue sur plusieurs zones de disponibilité et régions. Consultez Tarification d’une connexion de peering de VPC.

Déléguer l’accès inter-comptes à l’aide de rôles IAM

Après avoir configuré le peering de VPC entre les comptes, vous déléguez l’accès inter-comptes à l’aide de rôles IAM.

Avec l’accès inter-comptes à l’aide de rôles IAM, vous autorisez le compte principal (compte Cloud Connector) à assumer un rôle IAM pour accéder aux ressources AWS dans le compte secondaire (machines virtuelles du catalogue de machines).

  • Pour accéder aux ressources inter-comptes, procédez comme suit :

Rappel :

Il est supposé que le VPC A se trouve dans le compte principal (Compte A) et qu’il contient le Cloud Connector et Active Directory. Le VPC B se trouve dans le compte secondaire (Compte B) où vous souhaitez provisionner les machines virtuelles.

  1. Configurez le peering de VPC entre les comptes en suivant les étapes mentionnées précédemment.
  1. Ajoutez la politique d’approbation au rôle « arn:aws:iam::5678:role/citrix-role » afin qu’il puisse être accédé par le rôle du Compte A « arn:aws:iam::1234:role/primary-account-citrix-role » conformément à Accès aux ressources inter-comptes dans IAM.
  2. Créez le rôle et la politique IAM dans le Compte A avec le nom mentionné précédemment « primary-account-citrix role », qui peut assumer le rôle IAM et transmettre le rôle IAM du Compte B (arn:aws:iam::5678:role/citrix-role).
  3. Attribuez le rôle « arn:aws:iam::1234:role/primary-account-citrix-role » à tous les Cloud Connectors du Compte A.

Les Cloud Connectors peuvent désormais assumer le rôle du Compte B (« arn:aws:iam::5678:role/citrix-role »).

Créer une connexion d’hôte pour le provisionnement inter-comptes

  • Créez une connexion d’hôte dans le compte secondaire (Compte B) où vous souhaitez provisionner les machines virtuelles. Cela permet aux Cloud Connectors du Compte A d’accéder aux ressources du Compte B après avoir assumé le rôle du Compte B.

Utilisez les commandes PowerShell pour créer la connexion d’hôte et ajoutez les deux propriétés personnalisées suivantes :

-  `CrossAccountRoleArn` : Si vous ne fournissez pas la propriété `CrossAccountRoleArn`, la connexion d’hôte normale est créée. Dans ce cas, `MaximumAssumeRoleDurationInSeconds` est ignoré même s’il est fourni.
-  `MaximumAssumeRoleDurationInSeconds` : `DurationInSeconds` doit être compris entre 900 et 3600 secondes. La valeur par défaut est 900 secondes. Si vous fournissez une valeur supérieure à 3600, `DurationInSeconds` est défini sur 3600.

Exemple :


$connectionName = "cross-account-conn"
$cloudRegion = "us-east-1"
$apiKey = "role_based_auth"
$secretKey = "role_based_auth"
$zoneUid = "xxxxxx"
$secureKey = (ConvertTo-SecureString -String $secretKey -AsPlainText -Force)
$connectionPath = "XDHyp:\Connections\" + $connectionName
$customProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <Property xsi:type="StringProperty" Name="CrossAccountRoleArn" Value="arn:aws:iam::5678:role/citrix-role" /><Property xsi:type="StringProperty" Name="MaximumAssumeRoleDurationInSeconds" Value="3600" />
-  "</CustomProperties>'
 
$connection = New-Item -Path $connectionPath -ConnectionType "AmazonWorkSpacesCoreMachineManagerFactory" -HypervisorAddress "https://workspaces-instances.$($cloudRegion).api.aws" -Persist -Scope @() -UserName $apiKey -SecurePassword $secureKey -ZoneUid $zoneUid -CustomProperties $customProperties
 
New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid

<!--NeedCopy-->
-  Une fois la connexion d’hôte créée, créez des unités d’hébergement à l’aide de Studio ou de PowerShell. Cependant, sélectionnez VPC et Réseaux.

Contourner les Cloud Connectors pour les requêtes d’API AWS

Dans les environnements Amazon WorkSpaces Core Managed Instance (MI), le plug-in Citrix Machine Creation Services (MCS) réside généralement sur le Delivery Controller et achemine les requêtes d’API AWS via le Citrix Cloud Connector via un proxy.

Vous pouvez configurer les connexions d’hôte pour contourner le Cloud Connector pour les requêtes d’API AWS. Lorsque cette fonctionnalité est activée, le plug-in effectue des appels d’API, y compris ceux pour le provisionnement et la gestion de l’alimentation, directement du DDC vers les services AWS (tels qu’Amazon EC2, EBS et WorkSpaces Instances), supprimant ainsi la dépendance vis-à-vis du Cloud Connector via un proxy.

Avantages

  • Réduire la dépendance des appels d’API AWS vis-à-vis des Cloud Connectors : La suppression de la dépendance de l’API AWS vis-à-vis du Cloud Connector est une étape clé pour les clients qui souhaitent réduire leur empreinte d’infrastructure sur site ou dans le cloud.
  • Réduction de la consommation de ressources : Moins de trafic via le Cloud Connector réduit les exigences de calcul pour la machine virtuelle du Connector, ce qui peut entraîner des économies de coûts.
  • Flexibilité opérationnelle : Offre une disponibilité accrue en éliminant un point de défaillance potentiel (le chemin du proxy Cloud Connector/NGS) pour les tâches critiques de gestion de l’alimentation et de provisionnement.

Limitations et considérations

Avant d’activer cette fonctionnalité, tenez compte des exigences et limitations suivantes :

  • Authentification : L’authentification basée sur les rôles (rôles IAM) n’est pas prise en charge lors du contournement du Cloud Connector. Vous devez configurer la configuration pour les clés d’accès utilisateur IAM uniquement.
  • Portée de l’environnement : Cette fonctionnalité est exclusive aux instances gérées (MI) d’Amazon WorkSpaces Core. Elle n’est pas prise en charge pour les connexions d’hôte AWS EC2 standard.
  • Exigences réseau : Le DDC doit avoir un chemin réseau direct vers les points de terminaison du service AWS.
  • État de l’emplacement des ressources : Si un Cloud Connector a été initialement provisionné dans l’emplacement des ressources, il doit rester sous tension. Les composants non-MCS et les vérifications de l’état dépendent toujours du Cloud Connector s’il existe.
  • Fonctionnalités non prises en charge :
    • Provisionnement inter-comptes
    • Utilisation du proxy système
  • Exigences du connecteur : Bien que cette fonctionnalité supprime la dépendance de l’API, d’autres configurations sont nécessaires pour réduire les dépendances vis-à-vis des Cloud Connectors (les exigences pour les Cloud Connectors peuvent ne pas se limiter à celles énumérées ici) :
    • Jonction de domaine : Utilisation de machines non jointes à un domaine ou jointes à un domaine hybride Microsoft Entra.
    • Enregistrement VDA : Activation de Rendezvous V2 (communication DDC directe vers VDA via WebSockets) pour l’enregistrement VDA.

Créer une connexion d’hôte avec contournement d’API

Lors de la création d’une connexion d’hôte dans la configuration complète (Studio), vous pouvez désormais sélectionner les emplacements de ressources Amazon WorkSpaces Core même si aucun Cloud Connector n’est présent à cet emplacement.

Pour activer le contournement via PowerShell, utilisez la propriété personnalisée BypassConnectorForAwsApiRequests.

Exemple PowerShell :


$custProp = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation"> 
  <Property xsi:type="StringProperty" Name="BypassConnectorForAwsApiRequests" Value="true" /> 
</CustomProperties>' 
 
$connectionName = "MyWSCConnection" 
$cloudRegion = "us-east-1" 
$apiKey = "YOUR_IAM_ACCESS_KEY" 
$zoneUid = (Get-ConfigZone | Where-Object {$_.Name -eq "MyResourceLocation"}).Uid 
$securePassword = Read-Host 'Enter your IAM Secret Key' -AsSecureString 
 
$connectionPath = "XDHyp:\Connections\" + $connectionName 
 
$connection = New-Item -Path $connectionPath ` 
    -ConnectionType "Custom" ` 
    -PluginId "AmazonWorkSpacesCoreMachineManagerFactory" ` 
    -HypervisorAddress "https://workspaces-instances.$($cloudRegion).api.aws" ` 
    -Persist -Scope @() ` 
    -CustomProperties $custProp ` 
    -UserName $apiKey -SecurePassword $securePassword ` 
    -ZoneUid $zoneUid 
 
New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid

<!--NeedCopy-->

Gérer les connexions existantes

Vous pouvez activer ou désactiver la fonctionnalité de contournement pour les connexions d’hôte existantes.

  • Activation sur les connexions existantes : Vous pouvez modifier les propriétés personnalisées d’une connexion existante pour inclure BypassConnectorForAwsApiRequests = true.
  • Désactivation : Si cette option est désactivée, le DDC reprend le routage des appels d’API AWS via le Cloud Connector via le proxy NGS. Notez que cela nécessite qu’un Cloud Connector fonctionnel et un chemin de proxy NGS soient disponibles dans l’emplacement des ressources.

Dépannage

Si vous tentez d’activer la propriété de contournement dans des conditions non prises en charge, le système renvoie une erreur de validation :

  • Rôles IAM/Comptes croisés/Proxy : Si elle est activée en même temps que les rôles IAM, l’approvisionnement de comptes croisés ou les proxys système, la commande New-Item échoue avec :

    
     AmazonWorkSpacesCoreException: Bypassing the Cloud Connector For AWS API requests is not supported for IAM roles, Cross-Account provisioning and System Proxy.
    
     <!--NeedCopy-->
    
  • Type de connexion non pris en charge : Si elle est appliquée à une connexion Amazon EC2 (AWS) standard, le système échoue avec :

    
     AmazonWorkSpacesCoreException: Bypassing the Cloud Connector For AWS API requests is not supported for EC2 host connection.
    
     <!--NeedCopy-->
    

Modifier une connexion

Vous pouvez modifier une connexion d’hôte existante pour :

Modifier les options pour fournir des autorisations IAM

  1. Cliquez avec le bouton droit sur une connexion Amazon WorkSpaces Core existante.
  2. Sur la page Propriétés de la connexion, cliquez sur Modifier les paramètres.
  3. Sélectionnez l’une des options pour que Citrix fournisse des autorisations IAM pour gérer les ressources. Saisissez les détails requis et cliquez sur Enregistrer.

Modifier le nombre maximal d’actions simultanées

Lorsque vous créez des connexions d’hôte dans Studio pour les instances gérées Amazon WorkSpaces Core, les valeurs par défaut suivantes s’affichent :

Option Absolu Pourcentage
Actions simultanées (tous types) 125 100
Nombre maximal de nouvelles actions par minute 150 s/o
Nombre maximal d’opérations d’approvisionnement concurrentes 150 s/o

MCS prend en charge 150 opérations d’approvisionnement concurrentes maximales par défaut.

Vous pouvez configurer ces valeurs en accédant à la section Avancé de Citrix Studio sur l’écran Modifier la connexion :

Vous pouvez également utiliser le SDK PowerShell distant pour définir le nombre maximal d’opérations concurrentes afin d’obtenir des paramètres optimaux pour votre environnement.

Utilisez la propriété personnalisée PowerShell, MaximumConcurrentProvisioningOperations, pour spécifier le nombre maximal d’opérations d’approvisionnement AWS concurrentes.

Avant la configuration :

  • Assurez-vous d’avoir installé le SDK PowerShell pour le Cloud.
  • Comprenez que la valeur par défaut de MaximumConcurrentProvisioningOperations est 150.

Effectuez les étapes suivantes pour personnaliser la valeur de MaximumConcurrentProvisioningOperations :

  1. Ouvrez une fenêtre PowerShell.
  2. Exécutez asnp citrix* pour charger les modules PowerShell spécifiques à Citrix.
  3. Saisissez cd xdhyp:\Connections\.
  4. Saisissez dir pour lister les connexions.
  5. Modifiez ou initialisez la chaîne des propriétés personnalisées :

    • Si la chaîne des propriétés personnalisées a une valeur, copiez les propriétés personnalisées dans le Bloc-notes. Ensuite, modifiez la propriété MaximumConcurrentProvisioningOperations à la valeur de votre choix. Vous pouvez saisir une valeur comprise entre 1 et 1000.

    Par exemple, <Property xsi:type="IntProperty" Name="MaximumConcurrentProvisioningOperations" Value="xyz"/>.

    • Si la chaîne des propriétés personnalisées est vide ou nulle, vous devez initialiser la chaîne en saisissant la syntaxe appropriée pour le schéma et la propriété MaximumConcurrentProvisioningOperations.
  6. Dans la fenêtre PowerShell, collez les propriétés personnalisées modifiées du Bloc-notes et attribuez une variable aux propriétés personnalisées modifiées. Si vous avez initialisé les propriétés personnalisées, ajoutez les lignes suivantes après la syntaxe :

    
    $customProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Property xsi:type="IntProperty" Name="MaximumConcurrentProvisioningOperations" Value="100"/></CustomProperties>'
    
    <!--NeedCopy-->
    

    Cette chaîne définit la propriété MaximumConcurrentProvisioningOperations à 100. Dans la chaîne des propriétés personnalisées, vous devez définir la propriété MaximumConcurrentProvisioningOperations à une valeur qui correspond à vos besoins.

  7. Saisissez Get-XDAuthentication, ce qui vous invite à entrer vos informations d’identification.
  8. Exécutez $cred = Get-Credential, ce qui peut vous inviter à entrer uniquement un mot de passe (ou un nom et un mot de passe). Vous pouvez également être invité à entrer l’ID de l’application et le secret associé. Pour les connexions utilisant l’authentification basée sur les rôles, role_based_auth est à la fois le nom et le mot de passe. Sinon, entrez l’ID et le secret de l’API AWS.
  9. Exécutez set-item -PSPath 'XDHyp:\Connections<connection-name>' -CustomProperties $customProperties -username $cred.username -Securepassword $cred.password. Vous devez définir le <connection-name> sur le nom de la connexion.
  10. Saisissez dir pour vérifier la chaîne CustomProperties mise à jour.

Configurer les groupes de sécurité par interface réseau

Lors de la modification d’une connexion d’hôte, vous pouvez désormais configurer le nombre maximal de groupes de sécurité autorisés par interface réseau élastique (ENI) à l’aide d’une commande PowerShell. Pour plus d’informations sur les valeurs de quota des groupes de sécurité AWS, consultez Groupes de sécurité.

Pour configurer les groupes de sécurité par interface réseau :

  1. Ouvrez une fenêtre PowerShell.
  2. Exécutez asnp citrix* pour charger les modules PowerShell spécifiques à Citrix.
  3. Exécutez cd xdhyp:\Connections\.
  4. Exécutez dir pour répertorier les connexions.
  5. Exécutez la commande PowerShell suivante pour configurer les groupes de sécurité par interface réseau :

    
    Set-HypHypervisorConnectionMetadata -HypervisorConnectionName aws -Name "Citrix_MachineManagement_Options" -Value " AwsMaxENISecurityGroupLimit=<number>"
    
    <!--NeedCopy-->
    

    Remarque :

    Si vous ne définissez pas de valeur pour AwsMaxENISecurityGroupLimit, la valeur par défaut de 5 est utilisée.

Activer le proxy sur une connexion existante

  1. Ouvrez une fenêtre PowerShell.
  2. Exécutez les commandes suivantes.

    
    Add-PSSnapin citrix*.
    cd XDHyp:\Connections\
    dir
    
    <!--NeedCopy-->
    
  3. Copiez les CustomProperties de la connexion dans un bloc-notes et ajoutez le paramètre de propriété <Property xsi:type="StringProperty" Name="UseSystemProxyForHypervisorTrafficOnConnectors" Value="True" /> aux CustomProperties pour activer le proxy.
  4. Dans la fenêtre PowerShell, attribuez une variable aux propriétés personnalisées modifiées. Par exemple :

    
    $customProperty = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
    <Property xsi:type="StringProperty" Name="UseSystemProxyForHypervisorTrafficOnConnectors" Value="True" />
    </CustomProperties>'
    
    <!--NeedCopy-->
    
  5. Saisissez Get-XDAuthentication, ce qui vous invite à entrer vos informations d’identification.
  6. Exécutez $cred = Get-Credential, ce qui peut vous inviter à entrer uniquement un mot de passe (ou un nom et un mot de passe). Vous pouvez également être invité à entrer l’ID de l’application et le secret associé. Pour les connexions utilisant l’authentification basée sur les rôles, role_based_auth est à la fois le nom et le mot de passe. Sinon, entrez l’ID et le secret de l’API AWS.

  7. Exécutez set-item -PSPath 'XDHyp:\Connections<connection-name>' -CustomProperties $customProperties -username $cred.username -Securepassword $cred.password. Vous devez définir le <connection-name> sur le nom de la connexion.
  8. Saisissez dir pour vérifier la chaîne CustomProperties mise à jour.

URL du point de terminaison de service

URL du point de terminaison de service de zone standard

Lorsque vous utilisez MCS, une nouvelle connexion Amazon WorkSpaces Core Managed Instances est ajoutée avec une clé API et un secret API. Avec ces informations, ainsi que le compte authentifié, MCS interroge AWS pour les régions et zones prises en charge à l’aide des appels d’API AWS EC2 et Amazon WorkSpaces Core Managed Instances. La requête est effectuée à l’aide d’une URL de point de terminaison de service Workspace Instances https://workspaces-instances.us-east-1.api.aws/ et d’un point de terminaison de service EC2 https:/ec2.us-east-1.api.aws/.

Remarque :

Assurez-vous que https://workspaces-instances.us-east-1.api.aws/ est joignable.

URL de point de terminaison de service non standard

  • Il peut y avoir des situations où vous n’avez pas besoin de l’URL de point de terminaison de service AWS choisie automatiquement pour la connexion. Dans de tels cas, vous pouvez utiliser Citrix Cloud SDK et PowerShell pour créer une connexion avec une URL de point de terminaison de service non standard. Par exemple, pour créer une connexion à l’aide de l’URL de point de terminaison de service https://ec2.cn-north-1.amazonaws.com.cn :

    1. Configurez le Cloud Connector hébergé par AWS et assurez-vous qu’il dispose d’une connectivité.
    1. Exécutez les commandes PowerShell suivantes pour afficher la liste des Cloud Connectors.
    
      PS C:\> asnp citrix.*
      PS C:\> Get-XDAuthentication
      PS C:\> Get-ConfigEdgeServer
    
     <!--NeedCopy-->
    
  1. Recherchez le ZoneUid du Cloud Connector nouvellement créé et saisissez-le dans les commandes PowerShell suivantes. Remplacez les éléments en italique par les valeurs respectives.

    
    PS C:\> $hyp= New-Item -Path xdhyp:\Connections -ZoneUid ZoneUid -Name “My New Connection” -ConnectionType "Custom" -HypervisorAddress @("https://workspaces-instances.$($cloudRegion).api.aws")-PluginId "AmazonWorkSpacesCoreMachineManagerFactory" -UserName “APIkey” -Password “API Secret” -Persist 
    
    PS C:\> New-BrokerHypervisorConnection -HypHypervisorConnectionUid $hyp. HypervisorConnectionUid
    
    <!--NeedCopy-->
    
  2. Actualisez l’onglet Hébergement pour vérifier que la connexion a été créée.
  3. Ajoutez un emplacement de ressource à l’aide de la nouvelle connexion.

Autorisations AWS requises

Cette section contient la liste complète des autorisations AWS. Utilisez l’ensemble complet des autorisations tel qu’indiqué dans la section pour que la fonctionnalité fonctionne correctement.

Remarque :

L’autorisation iam:PassRole est nécessaire uniquement pour l’utilisation des rôles IAM permettant à Citrix de gérer les ressources.

Création d’une connexion d’hôte

Une nouvelle connexion d’hôte est ajoutée à l’aide des informations obtenues auprès d’AWS.


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:DescribeRegions",
                "workspaces-instances:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

<!--NeedCopy-->

Gestion de l’alimentation des machines virtuelles

Les machines virtuelles sont mises sous tension ou hors tension.


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:DescribeInstances",,
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:RebootInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
           "Action": [
               "workspaces-instances:*"
           ],
           "Effect": "Allow",
            "Resource": "*"
       }

    ]

}

<!--NeedCopy-->

Création, mise à jour ou suppression de machines virtuelles

Un catalogue de machines est créé, mis à jour ou supprimé avec des machines virtuelles provisionnées en tant qu’instances AWS.


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:AttachVolume",
                "ec2:AssociateIamInstanceProfile",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateImage",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:CreateVolume",
                "ec2:DeleteVolume",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeIamInstanceProfileAssociations",
                "ec2:DescribeImages",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeLaunchTemplateVersions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRegions",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSnapshots",
                "ec2:DescribeSubnets",
                "ec2:DescribeTags",
                "ec2:DescribeSpotInstanceRequests",
                "ec2:DescribeInstanceCreditSpecifications",
                "ec2:DescribeInstanceAttribute",
                "ec2:GetLaunchTemplateData",
                "ec2:DescribeVolumes",
                "ec2:DescribeVpcs",
                "ec2:DetachVolume",
                "ec2:DisassociateIamInstanceProfile",
                "ec2:RunInstances",
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:CreateSecurityGroup",
                "ec2:DeleteSecurityGroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ebs:StartSnapshot",
                "ebs:GetSnapshotBlock",
                "ebs:PutSnapshotBlock",
                "ebs:CompleteSnapshot",
                "ebs:ListSnapshotBlocks",
                "ebs:ListChangedBlocks",
                "ec2:CreateSnapshot"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "workspaces-instances:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }

    ]
}

<!--NeedCopy-->

Remarque :

  • La section EC2 relative aux groupes de sécurité n’est nécessaire que si un groupe de sécurité d’isolation doit être créé pour la machine virtuelle de préparation lors de la création du catalogue. Une fois cette opération effectuée, ces autorisations ne sont plus requises.

Téléchargement et chargement direct de disque

Les autorisations suivantes doivent être ajoutées à la stratégie :

  • ebs:StartSnapshot
  • ebs:GetSnapshotBlock
  • ebs:PutSnapshotBlock
  • ebs:CompleteSnapshot
  • ebs:ListSnapshotBlocks
  • ebs:ListChangedBlocks
  • ec2:CreateSnapshot
  • ec2:DeleteSnapshot
  • ec2:DescribeLaunchTemplates

Chiffrement EBS des volumes créés

EBS peut chiffrer automatiquement les volumes nouvellement créés si l’AMI est chiffrée, ou si EBS est configuré pour chiffrer tous les nouveaux volumes. Cependant, pour implémenter la fonctionnalité, les autorisations suivantes doivent être incluses dans la stratégie IAM.


{
     "Version": "2012-10-17",
     "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                 "kms:CreateGrant",
                 "kms:Decrypt",
                 "kms:DescribeKey",
                 "kms:GenerateDataKeyWithoutPlainText",
-  "kms:GenerateDataKey",
                 "kms:ReEncryptTo",
-  "kms:ReEncryptFrom"
-  ],
-  "Resource": "*"
        }
    ]
}

<!--NeedCopy-->

Remarque :

Les autorisations peuvent être limitées à des clés spécifiques en incluant un bloc Ressource et Condition, à la discrétion de l’utilisateur. Par exemple, Autorisations KMS avec condition :


{
     "Version": "2012-10-17",
     "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                 "kms:CreateGrant",
                 "kms:Decrypt",
                 "kms:DescribeKey",
                 "kms:GenerateDataKeyWithoutPlainText",
                 "kms:GenerateDataKey",
                 "kms:ReEncryptTo",
                 "kms:ReEncryptFrom"
            ],
            "Resource": [
                "arn:aws:kms:us-east-2:123456789012:key/abcd1234-a123-456d-a12b-a123b4cd56ef"
            ],
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": true
                }
            }
        }
    ]
}

<!--NeedCopy-->

L’instruction de stratégie de clé suivante est l’intégralité de la stratégie de clé par défaut pour les clés KMS qui est requise pour permettre au compte d’utiliser les stratégies IAM afin de déléguer l’autorisation pour toutes les actions (kms:*) sur la clé KMS.


{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:",
"Resource": ""
}

<!--NeedCopy-->

Pour plus d’informations, consultez la documentation officielle d’AWS Key Management Service.

Authentification basée sur les rôles IAM

Les autorisations suivantes sont ajoutées pour prendre en charge l’authentification basée sur les rôles.


{
     "Version": "2012-10-17",
     "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*"
        }
    ]
}

<!--NeedCopy-->

Stratégie d’autorisations IAM minimale

Le JSON suivant peut être utilisé pour toutes les fonctionnalités actuellement prises en charge. Vous pouvez créer des connexions d’hôte, créer, mettre à jour ou supprimer des machines virtuelles et gérer l’alimentation à l’aide de cette stratégie. La stratégie peut être appliquée aux utilisateurs comme expliqué dans les sections Définir les autorisations IAM ou vous pouvez également utiliser l’authentification basée sur les rôles en sélectionnant Utiliser le rôle IAM lors de la configuration d’une connexion d’hôte.

Important :

Pour utiliser les rôles IAM pour que Citrix gère les ressources, configurez d’abord le rôle IAM souhaité sur l’instance EC2 du connecteur cloud lors de la configuration du connecteur cloud. À l’aide de Citrix Studio, ajoutez la connexion d’hébergement et sélectionnez l’option Utiliser le rôle IAM. Une connexion d’hébergement avec ces paramètres utilise alors l’authentification basée sur les rôles.


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:AttachVolume",
                "ec2:AssociateIamInstanceProfile",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateImage",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateNetworkInterface",
                "ec2:CreateTags",
                "ec2:CreateVolume",
                "ec2:DeleteLaunchTemplate",
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteSecurityGroup",
                "ec2:DeleteSnapshot",
                "ec2:DeleteTags",
                "ec2:DeleteVolume",
                "ec2:DeregisterImage",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeIamInstanceProfileAssociations",
                "ec2:DescribeImages",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeLaunchTemplateVersions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRegions",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSnapshots",
                "ec2:DescribeSubnets",
                "ec2:DescribeTags",
                "ec2:DescribeSpotInstanceRequests",
                "ec2:DescribeInstanceCreditSpecifications",
                "ec2:DescribeInstanceAttribute",
                "ec2:GetLaunchTemplateData",
                "ec2:DescribeVolumes",
                "ec2:DescribeVpcs",
                "ec2:DetachVolume",
                "ec2:DisassociateIamInstanceProfile",
                "ec2:RebootInstances",
                "ec2:RunInstances",
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:CreateSecurityGroup",
                "ec2:DeleteSecurityGroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ebs:StartSnapshot",
                "ebs:GetSnapshotBlock",
                "ebs:PutSnapshotBlock",
                "ebs:CompleteSnapshot",
                "ebs:ListSnapshotBlocks",
                "ebs:ListChangedBlocks",
                "ec2:CreateSnapshot"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                 "kms:CreateGrant",
                 "kms:Decrypt",
                 "kms:DescribeKey",
                 "kms:GenerateDataKeyWithoutPlainText",
                 "kms:GenerateDataKey",
                 "kms:ReEncryptTo",
                 "kms:ReEncryptFrom"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "workspaces-instances:*"
            ],
            "Resource": "*"
        }

    ]
}

<!--NeedCopy-->

Remarque :

  • La section EC2 relative aux groupes de sécurité n’est nécessaire que si un groupe de sécurité d’isolation doit être créé pour la machine virtuelle de préparation lors de la création du catalogue. Une fois cette opération effectuée, ces autorisations ne sont plus requises.
  • La section KMS n’est requise que lors de l’utilisation du chiffrement de volume EBS.
  • La section d’autorisation iam:PassRole n’est nécessaire que pour l’utilisation des rôles IAM par Citrix pour gérer les ressources.
  • Des autorisations spécifiques au niveau des ressources peuvent être ajoutées au lieu d’un accès complet, en fonction de vos exigences et de votre environnement. Reportez-vous aux documents AWS Demystifying EC2 Resource-Level Permissions et Access management for AWS resources pour plus de détails.
  • Utilisez les autorisations ec2:CreateNetworkInterface et ec2:DeleteNetworkInterface uniquement si vous utilisez la méthode du travailleur de volume.

Étapes suivantes

Plus d’informations

Connexion aux instances gérées Amazon WorkSpaces Core