A la découverte de CloudShell

Sortie en décembre 2020, CloudShell est une interface shell intégrée à la console AWS. Elle permet de lancer des commandes Linux et contient des applications installées de base : node.js, python, …
Il est possible d’installer ses propres outils comme Terraform, sachant que le stockage persistant est de 1 Go.

Le service n’est pas encore disponible sur Paris mais …

C’est vrai que le service n’est pas encore disponible sur la région Paris (eu-west-3), c’est peut être la raison pour laquelle je ne m’y suis pas intéressé jusqu’à présent. Comme je travaille aussi sur d’autres régions, j’ai décidé cependant de changer mes habitudes et de regarder ce service en allant au delà du premier test que j’avais fait lors de sa sortie.
La première découverte est qu’il est possible finalement de travailler sur les services de la région Paris depuis une autre région, par exemple la région Irlande (eu-west-1), en modifiant simplement la variable d’environnement AWS_REGION.  Cela fonctionne comme pour une session AWS CLI on premise.

Lorsque nous comparons ce service avec les autres fournisseurs de Cloud, sa sortie n’est pas une nouveauté mais plutôt un rattrapage par rapport à la concurrence, qui propose ce service depuis quelques temps déjà. Chez GCP, ce service s’appelle pratiquement pareil : Cloud Shell (seul l’espace les différencie au niveau du nom).

Pour obtenir le service dans les régions où il est disponible, le plus simple est de cliquer sur la petite icône dans le haut de la console.

Quels peuvent être les apports ?

Pro

La gestion des droits d’accès aux APIs s’effectue avec les droits d’accès détenus par le user connecté à la console AWS. Dans ce cas, l’utilisation de ce service est plus sécurisé que l’utilisation d’un AWS CLI utilisé on prime.
De plus, on évite de créer une ec2 pour effectuer les mêmes tâches.

Cons

Ce service ne permet que des connexions en mode CLI, donc pour Windows l’accès ne peut se faire qu’avec l’utilisation de commande Powershell.
Le stockage persistant de 1Go peut paraitre faible dans certains cas.

Sécurité

Il existe des politiques de sécurité (policies) attachées spécifiquement à ce service, par exemple la policy suivante permettra d’autoriser ou d’interdire le téléchargement de fichiers depuis le CloudShell vers le poste local : « cloudshell:GetFileDownloadUrls ».

Cf. liste des policies attachées à ce service : https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html#restricting-actions

Quelles sont les caractéristiques de ce service

  • Les fichiers sont disponibles dans la même région pour de future sessions avec un stockage persistant de 1 Go.
  • Protégé par des permissions IAM : Les accès aux API AWS sont réalisées via les droits accordés à l’utilisateur connecté à la console AWS.
  • Caractéristiques système : 1 vCPU, 2 GiB RAM
  • 1 Go de stockage persistant qui sera perdu en cas d’inactivité de CloudShell sur la région durant plus de 120 jours.
  • Le nombre max de shells gratuits par région est de 10.
  • Temps maximum de session : 12h, même si l’utilisateur est en train d’utiliser son terminal.
  • Réseau : accès possible vers internet mais pas possible depuis internet.
  • Les shells disponibles sont le Z shell, le Bash shell, le PowerShell.

Point de vue d’utilisation de l’outil

Un outil est toujours conçu dans l’optique d’une utilisation précise. Tel est le cas de CloudShell avec les considérations suivantes.

Taille faible du stockage persistant :

  • La capacité de stockage est suffisante dans la mesure ou l’optique est l’utilisation de git pour gérer le contenu des developpements. Cloudshell n’a pas vocation à stocker des fichiers.
  • L’optique est d’utiliser le service S3 pour stocker les fichiers ou répertoires conséquents.
  • Puisque CloudShell utilise un conteneur, il est tout de même possible d’utiliser le répertoire /tmp pour réaliser un stockage temporaire de fichiers d’environ 17G o qui reste persistant tout de même 12h !

Connexions aux ec2:

  • La connexion aux ec2 est possible via l’utilisation de l’agent ssm installé sur chacunes des ec2 et de l’utilisation de la commande : aws ssm start-session –target

 

Fonctionnalités

Quelques fonctionnalités sont fournies en plus du shell lui-même, en dehors du formatage de l’affichage.
En cliquant sur le menu « Actions » en haut à gauche, nous avons accès à ces fonctionnalités.

 

Transfert de fichiers avec CloudShell : Download File, Upload File

Les uploads et downloads de fichiers sont réalisés uniquement avec le répertoire « /home/cloudshell-user ».

 

Split screens

Fonctionnalité permettant d’avoir plusieurs terminaux dans la même console soit en ligne soit en colonne.

Choix du type de shell

Lors du prompt par défaut, entrer une des commandes suivantes suivant le shell désiré :

  • bash: pour le Bash shell
  • pwsh: pour le PowerShell
  • zsh: pour le Z shell

 

Installation de Terraform

Pour terminer, voici un exemple d’installation d’un programme supplémentaire dans CloudShell, en l’occurrence Terraform.
Pour le fun, l’outil tfenv est utilisé pour installer et gérer éventuellement plusieurs versions de Terraform.

Installation de tfenv

$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
$ mkdir ~/bin
$ ln -s ~/.tfenv/bin/* ~/bin/
$ tfenv install

Listage de la version installée

$ tfenv list
1.0.1 (set by /home/cloudshell-user/.tfenv/version)

Utilisation de la version 1.0.1 de Terraform

$ tfenv use 1.0.1
Switching default version to v1.0.1
Switching completed
$ tfenv list
* 1.0.1 (set by /home/cloudshell-user/.tfenv/version)