Rôle IAM de la tâche Amazon ECS - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Rôle IAM de la tâche Amazon ECS

Vos tâches Amazon ECS peuvent être associées à un rôle IAM. Les autorisations accordées dans le rôle IAM sont prises en charge par les conteneurs exécutés dans la tâche. Ce rôle permet au code de votre application (sur le conteneur) d'utiliser d'autres AWS services. Le rôle de tâche est requis lorsque votre application accède à d'autres AWS services, tels qu'Amazon S3.

Note

Le conteneur Amazon ECS et les agents Fargate n'accèdent pas à ces autorisations. Pour connaître les autorisations IAM dont Amazon ECS a besoin pour extraire des images de conteneurs et exécuter la tâche, veuillez consulter Rôle IAM d'exécution de tâche Amazon ECS.

Les avantages de l'utilisation des rôles de tâches sont les suivants :

  • Isolation des informations d'identification : les informations d'identification des tâches sont isolées au niveau de l' EC2 instance. Bien que chaque tâche reçoive des informations d'identification pour le rôle IAM défini par le biais de l'agent de conteneur ECS et du service de métadonnées d'instance, les tâches exécutées sur la même EC2 instance peuvent potentiellement accéder aux informations d'identification appartenant à d'autres tâches de cette instance. Pour les charges de travail nécessitant une isolation renforcée, pensez à utiliser Fargate, qui permet une isolation au niveau des tâches.

  • Autorisation : les conteneurs non autorisés ne peuvent pas accéder aux informations d'identification du rôle IAM définies pour les autres tâches.

  • Audit : la journalisation des accès et des événements est disponible CloudTrail pour garantir un audit rétrospectif. Les informations d'identification des taskArn tâches ont un contexte associé à la session, de sorte que CloudTrail les journaux indiquent quelle tâche utilise quel rôle.

Note

Lorsque vous spécifiez un rôle IAM pour une tâche, les personnes présentes SDKs dans les AWS CLI conteneurs de cette tâche utilisent exclusivement les AWS informations d'identification fournies par le rôle de tâche et n'héritent plus d'aucune autorisation IAM de la part d'Amazon EC2 ou de l'instance externe sur laquelle elles s'exécutent.

Création du rôle IAM de la tâche

Lorsque vous créez une politique IAM pour vos tâches, celle-ci doit inclure les autorisations que vous souhaitez que les conteneurs de vos tâches assument. Vous pouvez utiliser une politique AWS gérée existante ou créer une politique personnalisée à partir de zéro qui répond à vos besoins spécifiques. Pour plus d’informations, consultez Création de politiques IAM dans le Guide de l’utilisateur IAM.

Important

Pour les tâches Amazon ECS (pour tous les types de lancement), nous vous recommandons d'utiliser la politique et le rôle IAM pour vos tâches. Ces informations d'identification permettent à votre tâche d'effectuer des demandes d' AWS API sans appeler sts:AssumeRole pour assumer le même rôle que celui déjà associé à la tâche. Si votre tâche nécessite qu'un rôle s'assume, vous devez créer une politique de confiance qui autorise explicitement ce rôle à s'assumer. Pour plus d'informations, consultez la section Mise à jour d'une politique d'approbation des rôles dans le Guide de l'utilisateur IAM.

Après la création de la politique IAM, vous pouvez créer un rôle IAM qui inclut la politique que vous référencez dans votre définition de tâche Amazon ECS. Vous pouvez créer le rôle à l'aide du cas d'utilisation Amazon Elastic Container Service Task dans la console IAM. Vous pouvez ensuite associer votre politique IAM spécifique au rôle qui donne aux conteneurs de votre tâche les autorisations souhaitées. Les procédures ci-dessous expliquent comment procéder.

Si vous avez plusieurs définitions de tâche ou services qui requièrent des autorisations IAM, nous vous conseillons de créer un rôle pour chaque définition de tâche ou service en lui affectant les autorisations minimales requises pour les tâches à exécuter, afin de minimiser les accès octroyés à chaque tâche.

Pour plus d'informations sur le point de terminaison de service de votre région, consultez la section Points de terminaison du service dans le Référence générale d'Amazon Web Services Guide.

Le rôle de tâche IAM doit posséder une politique de confiance qui spécifie le service ecs-tasks.amazonaws.com. L'sts:AssumeRoleautorisation permet à vos tâches d'assumer un rôle IAM différent de celui utilisé EC2 par l'instance Amazon. Ainsi, votre tâche n'hérite pas du rôle associé à l' EC2 instance Amazon. Voici un exemple de politique de confiance. Remplacez l'identifiant de région et spécifiez le numéro de AWS compte que vous utilisez lors du lancement des tâches.

Important

Lorsque vous créez votre rôle IAM de tâche, il est recommandé d'utiliser les clés de aws:SourceArn condition aws:SourceAccount ou de la politique de relation de confiance associée au rôle afin de définir davantage les autorisations afin d'éviter tout problème de sécurité adjoint confus. L'utilisation de la clé de condition aws:SourceArn pour spécifier un cluster spécifique n'est actuellement pas prise en charge, vous devez utiliser le caractère générique pour spécifier tous les clusters. Pour en savoir plus sur le problème des députés confus et sur la manière de protéger votre AWS compte, consultez la section Le problème des adjoints confus dans le guide de l'utilisateur d'IAM.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }

Utilisez la procédure suivante pour créer une politique permettant de récupérer des objets depuis Amazon S3 avec un exemple de politique. Remplacez tous les user input par vos propres valeurs.

AWS Management Console
Pour utiliser l’éditeur de politique JSON afin de créer une politique
  1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à https://console.aws.amazon.com/iam/l'adresse.

  2. Dans le panneau de navigation de gauche, sélectionnez Policies (Politiques).

    Si vous sélectionnez Politiques pour la première fois, la page Bienvenue dans les politiques gérées s’affiche. Sélectionnez Mise en route.

  3. En haut de la page, sélectionnez Créer une politique.

  4. Dans la section Éditeur de politique, choisissez l’option JSON.

  5. Entrez le document de politique JSON suivant :

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ] } ] }
  6. Choisissez Suivant.

    Note

    Vous pouvez basculer à tout moment entre les options des éditeurs visuel et JSON. Toutefois, si vous apportez des modifications ou si vous choisissez Suivant dans l’éditeur visuel, IAM peut restructurer votre politique afin de l’optimiser pour l’éditeur visuel. Pour plus d’informations, consultez la page Restructuration de politique dans le Guide de l’utilisateur IAM.

  7. Sur la page Vérifier et créer, saisissez un Nom de politique et une Description (facultative) pour la politique que vous créez. Vérifiez les Autorisations définies dans cette politique pour voir les autorisations accordées par votre politique.

  8. Choisissez Create policy (Créer une politique) pour enregistrer votre nouvelle politique.

AWS CLI

Remplacez tous les user input par vos propres valeurs.

  1. Créez un fichier nommé s3-policy.json avec le contenu suivant.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ] } ] }
  2. Utilisez la commande suivante pour créer la stratégie IAM à l'aide du fichier de document de stratégie JSON. Remplacez tous les user input par vos propres valeurs.

    aws iam create-policy \ --policy-name taskRolePolicy \ --policy-document file://s3-policy.json

Utilisez la procédure suivante pour créer le rôle de service.

AWS Management Console
Pour créer le rôle de service pour Elastic Container Service (console IAM)
  1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à https://console.aws.amazon.com/iam/l'adresse.

  2. Dans le volet de navigation de la console IAM, sélectionnez Roles (Rôles), puis Create role (Créer un rôle).

  3. Pour Trusted entity (Entité de confiance), choisissez Service AWS.

  4. Pour Service ou cas d'utilisation, choisissez Elastic Container Service, puis choisissez le cas d'utilisation d'Elastic Container Service Task.

  5. Choisissez Suivant.

  6. Pour Ajouter des autorisations, recherchez et choisissez la politique que vous avez créée.

  7. Choisissez Suivant.

  8. Dans le champ Role name (Nom de rôle), saisissez un nom pour votre rôle. Pour cet exemple, tapez AmazonECSTaskS3BucketRole comme nom du rôle.

  9. Passez en revue les informations du rôle, puis choisissez Create role (Créer un rôle).

AWS CLI
  1. Créez un fichier nommé ecs-tasks-trust-policy.json contenant la politique de confiance à utiliser pour le rôle IAM de la tâche. Le fichier doit contenir les éléments suivants. Remplacez l'identifiant de région et spécifiez le numéro de AWS compte que vous utilisez lors du lancement des tâches.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ] } ] }
  2. Créez un rôle IAM nommé ecsTaskRole à l'aide de la stratégie d'approbation créée à l'étape précédente.

    aws iam create-role \ --role-name ecsTaskRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. Récupérez l'ARN de la politique IAM que vous avez créée à l'aide de la commande suivante. taskRolePolicyRemplacez-le par le nom de la politique que vous avez créée.

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`taskRolePolicy`].Arn'
  4. Attachez la politique IAM que vous avez créée au ecsTaskRole rôle. Remplacez le policy-arn par l'ARN de la politique que vous avez créée.

    aws iam attach-role-policy \ --role-name ecsTaskRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy

Après avoir créé le rôle, ajoutez-y des autorisations supplémentaires pour les fonctionnalités suivantes.

Fonctionnalité Autorisations supplémentaires

Utiliser ECS Exec

Autorisations ECS Exec

Utiliser une image provenant d'un référentiel Amazon ECR privé

Autorisations Amazon ECR

Utiliser EC2 des instances (Windows et Linux)

Configuration supplémentaire des EC2 instances Amazon

Utiliser des instances externes

Configuration supplémentaire de l'instance externe

Utiliser des EC2 instances Windows

Configuration supplémentaire de l'instance Amazon EC2 Windows

Autorisations Amazon ECR

Les autorisations suivantes sont requises lorsque le code de votre application doit interagir directement avec les référentiels Amazon ECR. Notez que pour une implémentation de base où vous devez uniquement extraire des images depuis Amazon ECR, ces autorisations ne sont pas requises au niveau du rôle IAM de la tâche. Au lieu de cela, le rôle d'exécution de tâches Amazon ECS doit disposer de ces autorisations. Pour plus d'informations sur le rôle d'exécution de tâche, consultez Rôle IAM d'exécution de tâche Amazon ECS.

Si le code de votre application exécuté dans le conteneur doit interagir APIs directement avec Amazon ECR, vous devez ajouter les autorisations suivantes à un rôle IAM de tâche et inclure le rôle IAM de tâche dans votre définition de tâche. Pour plus d'informations, consultez la section Ajout et suppression de politiques IAM dans le guide de l'utilisateur IAM.

Utilisez la politique suivante pour votre rôle IAM de tâche afin d'ajouter les autorisations Amazon ECR requises pour les applications de conteneur qui doivent interagir directement avec Amazon ECR :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }

Autorisations ECS Exec

La fonctionnalité ECS Exec nécessite un rôle IAM de tâche pour accorder aux conteneurs les autorisations nécessaires à la communication entre l'agent SSM géré (execute-commandagent) et le service SSM. Vous devez ajouter les autorisations suivantes à un rôle IAM de tâche et inclure le rôle IAM de tâche dans votre définition de tâche. Pour plus d'informations, consultez la section Ajout et suppression de politiques IAM dans le guide de l'utilisateur IAM.

Utilisez la stratégie suivante pour votre rôle IAM de tâche afin d'ajouter les autorisations SSM requises.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

Configuration supplémentaire des EC2 instances Amazon

Nous vous recommandons de limiter les autorisations dans votre rôle d'instance de conteneur à la liste minimale des autorisations utilisées dans la politique IAM gérée AmazonEC2ContainerServiceforEC2Role.

Vos EC2 instances Amazon nécessitent au moins une version 1.11.0 de l'agent de conteneur pour utiliser le rôle de tâche ; nous vous recommandons toutefois d'utiliser la dernière version de l'agent de conteneur. Pour plus d'informations sur la vérification de la version de votre agent et la mise à jour à la dernière version, consultez Mise à jour de l'agent de conteneur Amazon ECS. Si vous utilisez une AMI optimisée pour Amazon ECS, votre instance a besoin d'au moins une partie 1.11.0-1 du ecs-init package. Si vos instances utilisent la dernière AMI optimisée pour Amazon ECS, elles contiennent les versions requises de l'agent de conteneur et ecs-init. Pour de plus amples informations, veuillez consulter Linux optimisé pour Amazon ECS AMIs.

Si vous n'utilisez pas l'AMI optimisée pour Amazon ECS pour vos instances de conteneur, ajoutez l'--net=hostoption à votre docker run commande qui démarre l'agent et les variables de configuration d'agent suivantes pour la configuration souhaitée (pour plus d'informations, consultezConfiguration de l'agent de conteneur Amazon ECS) :

ECS_ENABLE_TASK_IAM_ROLE=true

Utilise les rôles IAM pour les tâches des conteneurs associés aux modes réseau bridge et default.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Utilise les rôles IAM pour les tâches des conteneurs associés au mode réseau host. Cette variable est uniquement prise en charge sur les versions d'agent 1.12.0 et ultérieures.

Pour obtenir un exemple de commande d'exécution, consultez Mise à jour manuelle de l'agent de conteneur Amazon ECS (pour les applications non optimisées pour Amazon ECS AMIs). Vous devrez également définir les commandes réseau suivantes sur votre instance de conteneur afin que les conteneurs de vos tâches puissent récupérer leurs AWS informations d'identification :

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

Pour garantir le maintien de ces règles iptables après un redémarrage, vous devez les enregistrer sur votre instance de conteneur. Vous pouvez utiliser les commandes iptables-save et iptables-restore pour enregistrer vos règles iptables et les restaurer au démarrage. Pour plus d'informations, consultez la documentation de votre système d'exploitation.

Pour empêcher les conteneurs exécutés par des tâches utilisant le mode awsvpc réseau d'accéder aux informations d'identification fournies au profil d' EC2 instance Amazon, tout en autorisant les autorisations fournies par le rôle de tâche, définissez la variable de configuration de l'ECS_AWSVPC_BLOCK_IMDSagent sur true dans le fichier de configuration de l'agent et redémarrez l'agent. Pour de plus amples informations, veuillez consulter Configuration de l'agent de conteneur Amazon ECS.

Pour empêcher les conteneurs exécutés par des tâches utilisant le mode bridge réseau d'accéder aux informations d'identification fournies au profil d' EC2 instance Amazon, tout en autorisant les autorisations fournies par le rôle de tâche, exécutez la iptables commande suivante sur vos EC2 instances Amazon. Cette commande n'a pas d'incidence sur les conteneurs dans les tâches utilisant le mode réseau host ou awsvpc. Pour de plus amples informations, veuillez consulter Mode réseau.

  • sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

    Vous devez enregistrer cette iptables règle sur votre EC2 instance Amazon pour qu'elle puisse survivre au redémarrage. Lors de l'utilisation de l'AMI optimisée pour Amazon ECS, vous pouvez utiliser la commande qui suit. Pour les autres systèmes d'exploitation, consultez la documentation correspondante.

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables

Configuration supplémentaire de l'instance externe

Vos instances externes ont besoin d'au moins une version 1.11.0 de l'agent de conteneur pour utiliser les rôles IAM des tâches ; nous vous recommandons toutefois d'utiliser la dernière version de l'agent de conteneur. Pour plus d'informations sur la vérification de la version de votre agent et la mise à jour à la dernière version, consultez Mise à jour de l'agent de conteneur Amazon ECS. Si vous utilisez l'AMI Linux optimisée pour Amazon ECS, votre instance doit également au moins disposer de la version 1.11.0-1 du package ecs-init. Si vos instances utilisent la dernière AMI optimisée pour Amazon ECS, elles contiennent les versions requises de l'agent de conteneur et ecs-init. Pour de plus amples informations, veuillez consulter Linux optimisé pour Amazon ECS AMIs.

Si vous n'utilisez pas l'AMI optimisée pour Amazon ECS pour vos instances de conteneur, ajoutez l'--net=hostoption à votre docker run commande qui démarre l'agent et les variables de configuration d'agent suivantes pour la configuration souhaitée (pour plus d'informations, consultezConfiguration de l'agent de conteneur Amazon ECS) :

ECS_ENABLE_TASK_IAM_ROLE=true

Utilise les rôles IAM pour les tâches des conteneurs associés aux modes réseau bridge et default.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Utilise les rôles IAM pour les tâches des conteneurs associés au mode réseau host. Cette variable est uniquement prise en charge sur les versions d'agent 1.12.0 et ultérieures.

Pour obtenir un exemple de commande d'exécution, consultez Mise à jour manuelle de l'agent de conteneur Amazon ECS (pour les applications non optimisées pour Amazon ECS AMIs). Vous devrez également définir les commandes réseau suivantes sur votre instance de conteneur afin que les conteneurs de vos tâches puissent récupérer leurs AWS informations d'identification :

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

Pour garantir le maintien de ces règles iptables après un redémarrage, vous devez les enregistrer sur votre instance de conteneur. Vous pouvez utiliser les commandes iptables-save et iptables-restore pour enregistrer vos règles iptables et les restaurer au démarrage. Pour plus d'informations, consultez la documentation de votre système d'exploitation.

Configuration supplémentaire de l'instance Amazon EC2 Windows

Important

Cela s'applique uniquement aux conteneurs Windows EC2 qui utilisent des rôles de tâche.

Le rôle de tâche associé aux fonctionnalités Windows nécessite une configuration supplémentaire activée EC2.

  • Lorsque vous lancez vos instances de conteneur, vous devez définir l'option -EnableTaskIAMRole dans le script de données utilisateur des instances de conteneur. EnableTaskIAMRole active la fonction Rôles IAM pour les tâches. Par exemple :

    <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole </powershell>
  • Vous devez amorcer votre conteneur avec les commandes de mise en réseau fournies dans Script d'amorçage du conteneur Amazon ECS.

  • Vous devez créer un rôle et une stratégie IAM pour vos tâches. Pour de plus amples informations, veuillez consulter Création du rôle IAM de la tâche.

  • Les rôles IAM pour le fournisseur d'informations d'identification de tâche utilisent le port 80 sur l'instance de conteneur. Par conséquent, si vous configurez des rôles IAM pour les tâches sur votre instance de conteneur, vos conteneurs ne peuvent pas utiliser le port 80 pour le port hôte des mappages de ports. Pour exposer vos conteneurs sur le port 80, nous vous recommandons de configurer un service pour ceux qui utilisent l'équilibrage de charge. Vous pouvez utiliser le port 80 sur l'équilibreur de charge. Ce faisant, le trafic peut être acheminé vers un autre port hôte sur vos instances de conteneur. Pour de plus amples informations, veuillez consulter Utiliser l'équilibrage de charge pour distribuer le trafic du service Amazon ECS.

  • Si votre instance Windows est redémarrée, vous devez supprimer l'interface proxy et initialiser à nouveau l'agent conteneur Amazon ECS pour rétablir la sauvegarde du proxy d'informations d'identification.

Script d'amorçage du conteneur Amazon ECS

Avant que les conteneurs puissent accéder au proxy d'informations d'identification sur l'instance de conteneur afin d'obtenir des informations d'identification, le conteneur doit être amorcé avec les commandes de mise en réseau requises. L'exemple de script de code suivant doit être exécuté sur vos conteneurs lorsqu'ils démarrent.

Note

Vous n'avez pas besoin d'exécuter ce script lorsque vous utilisez le mode réseau awsvpc sur Windows.

Si vous exécutez des conteneurs Windows qui incluent Powershell, utilisez le script suivant :

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API

Si vous exécutez des conteneurs Windows qui n'ont que le shell Command, utilisez le script suivant :

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API