Aller au contenu

aws-auth: module NGINX pour proxy vers des services AWS authentifiés

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-aws-auth
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-aws-auth

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_aws_auth_module.so;

Ce document décrit nginx-module-aws-auth v2.1.1 publié le 06 mars 2017.


Gitter chat

Ce module nginx peut proxy les requêtes vers des backends S3 authentifiés en utilisant l'API d'authentification V4 d'Amazon. La première version de ce module a été écrite pour le protocole d'authentification V2 et peut être trouvée dans la branche AuthV2.

Exemple d'utilisation

Implémente le proxy des requêtes authentifiées vers S3.

  server {
    listen     8000;

    aws_access_key your_aws_access_key; # Exemple AKIDEXAMPLE
    aws_key_scope scope_of_generated_signing_key; #Exemple 20150830/us-east-1/service/aws4_request
    aws_signing_key signing_key_generated_using_script; #Exemple L4vRLWAO92X5L3Sqk5QydUSdB0nC9+1wfqLMOKLbRp4=
    aws_s3_bucket your_s3_bucket;

    location / {
      aws_sign;
      proxy_pass http://your_s3_bucket.s3.amazonaws.com;
    }

    # Ceci est un exemple qui n'utilise pas la racine du serveur pour la racine du proxy
    location /myfiles {

      rewrite /myfiles/(.*) /$1 break;
      proxy_pass http://your_s3_bucket.s3.amazonaws.com/$1;

      aws_access_key your_aws_access_key;
      aws_key_scope scope_of_generated_signing_key;
      aws_signing_key signing_key_generated_using_script;
    }

    # Ceci est un exemple qui utilise un point de terminaison s3 spécifique, le point de terminaison par défaut est s3.amazonaws.com
    location /s3_beijing {

      rewrite /s3_beijing/(.*) /$1 break;
      proxy_pass http://your_s3_bucket.s3.cn-north-1.amazonaws.com.cn/$1;

      aws_sign;
      aws_endpoint "s3.cn-north-1.amazonaws.com.cn";
      aws_access_key your_aws_access_key;
      aws_key_scope scope_of_generated_signing_key;
      aws_signing_key signing_key_generated_using_script;
    }
  }

Considérations de sécurité

Le protocole V4 n'a pas besoin d'accéder aux clés secrètes réelles que l'on obtient du service IAM. La bonne façon d'utiliser la clé IAM est de générer une clé de signature scoping et d'utiliser cette clé de signature pour accéder à S3. Ce module nginx nécessite la clé de signature et non la clé secrète réelle. Il est peu sûr de laisser la clé secrète résider sur votre serveur nginx.

Notez que les clés de signature ont une validité d'une semaine seulement. Par conséquent, elles doivent être rafraîchies constamment. Veuillez utiliser votre système de gestion de configuration préféré tel que saltstack, puppet, chef, etc. pour distribuer les clés de signature à vos clusters nginx. N'oubliez pas de HUP le serveur après avoir placé la nouvelle clé de signature, car nginx lit la configuration uniquement au moment du démarrage.

Un script python autonome a été fourni pour générer la clé de signature

./generate_signing_key -h
usage: generate_signing_key [-h] -k ACCESS_KEY -r REGION [-s SERVICE]
                            [-d DATE] [--no-base64] [-v]

Generate AWS S3 signing key in it's base64 encoded form

optional arguments:
  -h, --help            show this help message and exit
  -k SECRET_KEY, --secret-key SECRET_KEY
                        The secret key generated using AWS IAM. Do not confuse
                        this with the access key id
  -r REGION, --region REGION
                        The AWS region where this key would be used. Example:
                        us-east-1
  -s SERVICE, --service SERVICE
                        The AWS service for which this key would be used.
                        Example: s3
  -d DATE, --date DATE  The date on which this key is generated in yyyymmdd
                        format
  --no-base64           Disable output as a base64 encoded string. This NOT
                        recommended
  -v, --verbose         Produce verbose output on stderr


./generate_signing_key -k wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY -r us-east-1
L4vRLWAO92X5L3Sqk5QydUSdB0nC9+1wfqLMOKLbRp4=
20160902/us-east-1/s3/aws4_request

Limitations connues

La version 2.x du module ne prend actuellement en charge que les appels GET et HEAD. Cela est dû au fait que la signature du corps de la requête est complexe et n'a pas encore été implémentée.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-aws-auth.