aws s3 ou du code Boto3 sur vos buckets à l’aide d’identifiants d’authentification qui expirent automatiquement.
Fonctionnement
La passerelle de sandbox délivre à chaque sandbox un JSON Web Token (JWT) émis par l’émetteur CoreWeave fixehttps://oidc.cwsandbox.com. AI Object Storage valide ce jeton au regard d’une configuration de fédération de charges de travail définie dans votre organisation, dérive une identité de rôle à partir des revendications iss et sub du jeton, puis renvoie des identifiants d’authentification temporaires dont la portée est limitée par vos politiques d’accès.
Trois éléments de configuration doivent concorder :
L’identité de rôle dérivée suit le format
role/https://oidc.cwsandbox.com:user:[USER-ID], où [USER-ID] correspond à l’ID utilisateur CoreWeave de l’appelant dont le jeton d’accès API a démarré la sandbox. Comme le sujet varie d’un utilisateur à l’autre, les politiques d’accès doivent soit lister le rôle de chaque utilisateur, soit couvrir l’ensemble de l’émetteur au moyen d’un caractère générique final. Voir Accorder des autorisations au rôle de sandbox.
À l’intérieur de la sandbox, vous n’avez pas besoin de mettre en place votre propre processus de récupération des identifiants d’authentification. Le fournisseur d’identifiants de conteneur du SDK AWS lit le jeton monté, appelle le point de terminaison d’identifiants d’authentification CoreWeave et actualise les identifiants avant leur expiration.
Avant de commencer
Les étapes destinées à l’administrateur nécessitent les éléments suivants :- Une organisation CoreWeave sur laquelle AI Object Storage est activé, avec au moins un bucket. Pour en créer un, voir Créer un bucket.
- Des privilèges d’administrateur pour votre organisation : les rôles IAM Admin et Object Storage Admin, ou un accès hérité équivalent.
- L’action
SANDBOX_ADMINdans la gestion des identités et des accès (IAM), qui vous permet de définir la configuration WIF des sandboxes. Accordez-la depuis la page Access Policies de la Cloud console. - L’identifiant de votre organisation CoreWeave, affiché sur la page Settings de la Cloud console.
- Un jeton d’accès à l’API CoreWeave. Générez-en un depuis la page Tokens et copiez la valeur Token Secret. Pour plus d’informations, voir Gérer les jetons d’accès à l’API.
curl de cette page puissent le lire. Remplacez [API-ACCESS-TOKEN] par votre jeton d’accès à l’API CoreWeave :
Étape 1 : créer une configuration de fédération d’identité de charge de travail OIDC
Enregistrez l’émetteur des sandboxes auprès de votre organisation afin qu’AI Object Storage accepte les jetons de sandbox.- Dans la Cloud console, accédez à la page Workload Federation.
- Cliquez sur Create OIDC configuration.
-
Fournissez les valeurs suivantes :
- Name : un nom permettant d’identifier cette configuration, par exemple
coreweave-sandboxes. - Issuer URL :
https://oidc.cwsandbox.com - Client ID (Audience) :
https://oidc.cwsandbox.com - Description (facultatif) : une description de cette configuration.
- Name : un nom permettant d’identifier cette configuration, par exemple
- Cliquez sur Create.
Étape 2 : accorder des autorisations au rôle du sandbox
Les politiques d’accès de l’organisation déterminent ce qu’un sandbox peut faire avec les identifiants d’authentification qu’il reçoit. Deux autorisations sont requises. Elles doivent figurer dans des instructions distinctes, car l’action d’échange de jeton est globale, alors que les actions S3 sont limitées aux buckets. La politique suivante autorise l’échange de jeton. L’actioncwobject:CreateAccessKeyOIDC s’applique à toutes les ressources ; son instruction utilise donc "resources": ["*"]. Remplacez [USER-ID] par l’ID de l’utilisateur CoreWeave dont le jeton d’accès API sert à démarrer les bacs à sable :
role/https://oidc.cwsandbox.com:*. Comme la partie correspondant à l’émetteur doit toujours correspondre exactement, cette autorisation ne s’applique qu’aux jetons de sandbox, et non aux autres fournisseurs d’identité que vous fédérez.
Accordez ensuite aux identifiants d’authentification l’autorisation d’agir sur les buckets. Remplacez [BUCKET-NAME] par le bucket qu’utilisent vos bacs à sable :
arn:aws:iam::[ORG-ID]:role/https://oidc.cwsandbox.com:*, et les revendications sont référencées sous forme de clés de condition nommées oidc:[ORG-ID]:[CLAIM]. Pour connaître les revendications que contient un jeton de sandbox, voir Revendications du jeton.
Étape 3 : enregistrer la configuration WIF auprès du plan de contrôle des sandboxes
Indiquez au plan de contrôle des sandboxes la configuration de fédération de charges de travail à utiliser pour émettre les jetons, et définissez la limite maximale de ce que toute sandbox de votre organisation peut demander. Chaque organisation dispose d’une seule configuration, et la requête est un upsert idempotent. Remplacez[WIF-CONFIG-ID] par l’ID de configuration obtenu à l’étape 1 et [BUCKET-NAME] par chaque bucket que vous souhaitez autoriser :
Set the sandbox WIF configuration
L’organisation est déduite de l’appelant authentifié : le corps de requête ne comporte donc aucun champ d’organisation, et chaque appelant ne peut gérer que la configuration de sa propre organisation.
Vérifiez que la configuration a bien été enregistrée :
Get the sandbox WIF configuration
Delete the sandbox WIF configuration
Étape 4 : demander l’accès au stockage d’objets au démarrage d’un sandbox
Les étapes 1 à 3 correspondent à une configuration ponctuelle, effectuée une seule fois par un administrateur pour l’organisation. Les étapes suivantes sont à réaliser par un chercheur pour chaque sandbox qui nécessite un stockage d’objets. L’accès au stockage d’objets doit être activé explicitement pour chaque sandbox. AjoutezobjectStorageAccess à la requête de démarrage, en indiquant les buckets dont le sandbox a besoin et le niveau d’autorisation requis. Remplacez [CONTAINER-IMAGE] par l’image à exécuter dans le sandbox :
Start a sandbox with object storage access
buckets doit être un sous-ensemble de allowedBuckets, et permission ne peut pas dépasser maxPermission. Toute requête qui demande davantage que ce que l’organisation autorise est rejetée, tout comme toute requête effectuée alors que l’organisation ne dispose d’aucune configuration WIF active.
Il est recommandé de demander une portée plus restreinte que le plafond autorisé : une sandbox qui se contente de lire des données d’entraînement doit demander OBJECT_STORAGE_PERMISSION_READ, même si le plafond de l’organisation autorise la lecture-écriture.
Étape 5 : utiliser les identifiants d’authentification dans la sandbox
Lorsqu’une sandbox démarre avecobjectStorageAccess, le plan de contrôle monte son jeton OIDC et définit les variables d’environnement qu’utilisent les SDK AWS pour les identifiants de conteneur :
Le jeton lui-même est un fichier en lecture seule situé dans
/var/run/secrets/sandbox/storage-token/osa-token. Vous n’avez pas besoin de le lire, et vous ne devez ni le copier hors de la sandbox ni le transmettre à une autre charge de travail.
C’est votre bibliothèque cliente qui se charge de l’échange. Définissez la région de vos buckets, puis utilisez le client compatible S3 de votre choix. Remplacez [AVAILABILITY-ZONE] par l’Availability Zone où se trouvent vos buckets, par exemple US-EAST-04A :
List objects from inside a sandbox
PathStyleRequestNotAllowed.
Boto3 utilise les mêmes variables d’environnement : aucun identifiant d’authentification explicite n’est donc nécessaire. L’exemple suivant liste les objets d’un bucket en lisant le point de terminaison et la région depuis l’environnement de la sandbox :
list_objects.py
BUCKET_NAME sur le bucket auquel vous avez accordé l’accès :
Example output
L’échange d’identifiants d’authentification nécessite un SDK qui prend en charge les identifiants de conteneur avec un hôte autre que l’adresse de bouclage (loopback). Utilisez
awscli 2.33.2 ou version ultérieure, ou boto3 1.42.5 ou version ultérieure. Les versions antérieures échouent avec l’erreur Unsupported host 'api.coreweave.com'. Intégrez ces versions lors de la compilation de l’image de conteneur de votre sandbox.Durées de vie des jetons
Le jeton OIDC du sandbox et les identifiants d’authentification temporaires obtenus en échange n’expirent pas au même moment :- Jeton OIDC du sandbox : une heure par défaut, jusqu’à 12 heures maximum. Le plan de contrôle l’émet au démarrage du sandbox.
- Identifiants d’authentification AI Object Storage temporaires : émis à la demande à partir du jeton. La réponse de l’échange contient un horodatage
Expiration, et le SDK AWS actualise les identifiants d’authentification avant cette échéance, sans aucune intervention de votre code.
maxLifetimeSeconds dans la requête de démarrage afin que le jeton couvre toute la durée de vie du sandbox.
Revendications du jeton
Les jetons de stockage d’objets des sandboxes contiennent les revendications suivantes. Pour y faire référence dans les conditions d’une stratégie de bucket, utilisez la formeoidc:[ORG-ID]:[CLAIM] :
Dépannage
Les sections suivantes décrivent les échecs les plus courants lors de la configuration ou de l’utilisation de l’accès au stockage d’objets depuis une sandbox, ainsi que les points à vérifier dans chaque cas.La requête de démarrage est rejetée
Si une requête de démarrage avecobjectStorageAccess échoue, vérifiez les points suivants :
- L’organisation dispose d’une configuration WIF dont le champ
enabledest défini surtrue. Pour la récupérer, utilisez la requête Get de l’étape 3. - Chaque bucket indiqué dans la requête figure dans
allowedBuckets, ouallowedBucketsest vide. - La
permissiondemandée ne dépasse pasmaxPermission.
L’échange d’identifiants d’authentification renvoie une erreur d’autorisation refusée
Si la première opération S3 échoue avec une erreur d’autorisation, c’est l’échange lui-même qui a été refusé. Vérifiez les points suivants :- Une politique d’accès de l’organisation accorde
cwobject:CreateAccessKeyOIDCsur"resources": ["*"]au rôle de la sandbox, dans une instruction distincte. - Le principal de la politique correspond exactement au rôle dérivé, y compris le préfixe
user:dans le sujet. Le principal doit êtrerole/https://oidc.cwsandbox.com:user:[USER-ID], et nonrole/https://oidc.cwsandbox.com:[USER-ID]. - La configuration de fédération des charges de travail dans la Cloud console est active et son URL d’émetteur est bien
https://oidc.cwsandbox.com, sans trait d’union. - Le jeton OIDC de la sandbox n’a pas expiré. Redémarrez la sandbox pour en générer un nouveau.
L’échange d’identifiants d’authentification réussit, mais les opérations S3 renvoient AccessDenied
L’échange a réussi, mais les identifiants d’authentification obtenus ne disposent pas des autorisations nécessaires sur le bucket. Vérifiez qu’une politique d’accès de l’organisation accorde au rôle de la sandbox les actionss3: requises sur les ressources du bucket au format abrégé ([BUCKET-NAME] et [BUCKET-NAME]/*). Si des stratégies d’accès au bucket s’appliquent également, vérifiez qu’elles ne contiennent pas d’instructions Deny, qui prévalent sur toute instruction Allow.
La requête d’identifiants d’authentification expire
Les sandboxes régies par une politique dont le trafic sortant est limité à une liste d’autorisation doivent pouvoir accéder àhttps://api.coreweave.com. Sans cette route, la récupération des identifiants d’authentification expire et la première opération S3 échoue. Autorisez l’accès à cet hôte dans la liste d’autorisation du trafic sortant de la politique. Voir Configurer une politique de sandbox.
La charge de travail crée un grand nombre de clés d’accès
Chaque échange crée une clé d’accès de courte durée. Laissez le fournisseur d’identifiants d’authentification du SDK mettre en cache et actualiser les identifiants d’authentification pendant toute la durée de vie de votre processus, plutôt que de créer un nouveau client pour chaque élément de travail. Générer des clés à chaque requête produit un volume important de clés, sans aucun bénéfice.Pages associées
- Fédération d’identités de charges de travail pour AI Object Storage : fonctionnement de la WIF dans l’ensemble de CoreWeave.
- Utiliser la fédération d’identités de charges de travail avec OIDC : le guide général de la fédération OIDC, pour les fournisseurs d’identité autres que les bacs à sable.
- Politiques d’accès de l’organisation : le schéma de politique utilisé à l’étape 2.
- Architecture des bacs à sable : emplacement de la passerelle et de l’exécuteur dans le chemin des requêtes du sandbox.