AWS made in China

Mi-novembre, pour faire suite à une évolution réglementaire en Chine, AWS a cédé ses infrastructures physiques à son partenaire Sinnet, déjà l’opérateur de la plateforme AWS China.

Nous avons pu lire dans la presse de mauvaises interprétations de cette information relatant la fin d’AWS en Chine. Ironiquement, la mise en service d’une seconde région en Chine est annoncée un mois plus tard, confirmant l'intérêt d’Amazon pour le marché Chinois.

Parmi les 18 régions AWS réparties autour du globe, trois font figures d’exception : GovCloud à destination des agences ou services gouvernementaux américains et les deux régions chinoises.

Nous avons participé à un projet déployé sur AWS en Chine, voici ce qu’il en ressort.

Les régions AWS China

Amazon en Chine, ce sont deux régions situées à :

  • Pékin (cn-north-1), opérée par Sinnet
  • Ningxia (cn-northwest-1), opérée par Ningxia Western Cloud Data Technology

https://aws.amazon.com/about-aws/global-infrastructure/

A la différence des autres régions “standards” AWS elles sont :

  • opérées par des hébergeurs locaux et non par AWS
  • totalement isolées des autres régions AWS. Par isolée, nous entendons séparées au niveau IAM et réseau. Il s’agit des différences les plus impactantes ; nous y revenons plus bas dans la suite de cet article.

ICP Licence

Première surprise une fois votre compte AWS China actif, vos load-balancers publics et vos buckets S3 ne sont pas joignables via Internet si vous n’avez pas fait de demande de licence ICP (Internet Content Provider) auprès du ministère chinois de l’industrie et des technologies de l’information.

C’est une question de réglementation chinoise, qui demande pour tout contenu public servi par AWS ou un autre cloud, une licence dans le cadre d'activités commerciales ou, a minima, un enregistrement pour du non-commercial. La demande doit indiquer les domaines DNS, une description de l’application, le système de modération en place et le mode d’authentification des utilisateurs.

Le délai d’obtention d’une licence peut s’étendre sur un mois.

Avec le numéro de votre licence ou enregistrement ICP, vous pouvez ouvrir un ticket au support AWS pour autoriser les flux publics sur votre compte.

Les endpoints de services

Si vous utilisez une solution d’Infrastructure As Code autre que CloudFormation (Terraform, Ansible ou autre), vous devrez indiquer les endpoints spécifiques aux régions Chine qui sont sur le domaine racine amazonaws.com.cn et non pas amazonaws.com

Ce changement de configuration est généralement assez aisé puisqu’il suffit d’indiquer la région cn-north-1 ou cn-northwest-1 qui doit être utilisée par votre solution d’IaC.

Les endpoints apparaissent aussi dans les rôles IAM qui doivent être assumés par des services AWS (action sts:AssumeRole).

Dans le cas de Terraform, ces changements sont adaptables via la data source aws_region :

data "aws_region" "cn-north-1"{
 name = "cn-north-1"

}

resource "aws_iam_role" "my-role" {

 name = "my-role"
 assume_role_policy = <<EOF
{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Sid": "XXX",
     "Effect": "Allow",
     "Principal": {
       "Service": "${data.aws_region.cn-north-1.endpoint}" // EC2 endpoint
     },
     "Action": "sts:AssumeRole"
   }
 ]
}
EOF
}

Les services

Vu la taille de l’infrastructure opérée au niveau mondial, les services AWS suivent un plan de déploiement région par région qui peut s’étendre sur plusieurs mois.

Il est donc toujours bon de vérifier si les services qui sont prévus d’être utilisés sont bien disponibles sur les régions ciblées.

Cela s’applique aussi à la Chine : par exemple au moment de la rédaction cet article, ApiGateway ou ConfigRules sont disponibles sur cn-north-1 mais pas cn-northwest-1.

La revue de la disponibilité des services est d’autant plus importante que les services assurés par les edges AWS manquent à l’appel : Route53 (DNS), CloudFront (CDN), WAF.

Concernant la version des services AWS, un service sur AWS China est totalement à jour par rapport à ses versions extérieures à la Chine ; il ne s’agit pas de versions dégradées.

IAM

Une fois les éventuels ajustements réalisés pour les rôles utilisés par les services AWS (vu dans la section “endpoints de services”), les politiques IAM devront être revues puisque les identifiants (ARN) des ressources ciblées dans les politiques IAM comportent une partition qui est aws-cn et non aws.

Pour rappel, le format d’un ARN AWS est :

arn:partition:service:region:account-id:resource

Dans le cas de Terraform, ces changements sont adaptables via la data source aws_partition :

data "aws_partition" "current" {}

data "aws_iam_policy_document" "cloud_trail" {
 statement {
   sid = "1"
   actions = [
     "s3:GetBucketAcl",
     "s3:GetBucketLocation",
   ]
   resources = [
     "arn:${data.aws_partition.current.partition}:s3:::my-bucket",
   ]

…

Ces partitions différentes au niveau des ARN traduisent un cloisonnement total au niveau IAM.

C’est sans doute le point le plus impactant pour une architecture cross-region sur la Chine et en dehors : tous les objets IAM (utilisateurs/roles/policies/..) devront être dupliqués entre les régions AWS China et les autres.

Ainsi pour faire un transfert de fichiers entre deux buckets S3, l’un en Chine et l’autre à l’extérieur, vous serez amené à poser des credentials sur les machines puisque les rôles d’instances sont isolés (une VM EC2 en Chine ne pouvant faire un assume-role d’un rôle en dehors de la Chine à partir de son serveur de metadata).

Profitons de ce cas utilisateur de copie entre bucket depuis/vers la Chine pour introduire le sujet le plus douloureux : le réseau.

Le réseau

Ne tournons pas autour du pot, tous les points listés dans cet article ont pu être traités facilement sauf celui du réseau. La copie de fichiers entre buckets S3 en Europe vers la Chine s’est avérée très complexe.

Sur recommandation du support AWS, nous avons mis en oeuvre TsunamiUDP pour tenter d’améliorer les choses, mais la vraie réponse est soit :

  • ne faites pas de synchronisation entre buckets S3 Chine/reste du monde
  • ou
  • mettez en place un lien privé DirectConnect

A noter que la création de VPN n’est pas possible via le service managé d’AWS VPC.

Conclusion

Que retenir de cet article?

Tout d’abord, l’histoire d’AWS en Chine n’est pas terminée ; loin de là. La liste des services proposées s’allonge, comme pour les autres régions.

Le réseau (… le fameux grand firewall) est un vrai sujet, mais pas lié à AWS. Tout opérateur Cloud ou hébergeur a les mêmes contraintes. Outre les contraintes techniques, Amazon doit faire face à de nombreuses contraintes de législation qui impactent la présence de certains services massivement utilisés (DNS / CDN).

Concernant les alternatives côté géants américains, indiquons que Google n’est pas (plus présent) ; seul perdure Microsoft avec une approche similaire à AWS : s’associer à un hébergeur local avec les services DNS/CDN eux aussi absents.

Si la Chine est votre unique coeur de marché, une approche envisageable serait de passer par un fournisseur de cloud local : Tencent / AlibabaCloud fournissent des solutions qui ont fait leurs preuves. Dans ce cas, vous aurez une présence massive en Chine (6 régions pour AlibabaCloud) mais avec une offre de services plus limitée que ce propose AWS.