aws-auth: NGINX-Modul zum Proxying zu authentifizierten AWS-Diensten
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und 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
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_aws_auth_module.so;
Dieses Dokument beschreibt nginx-module-aws-auth v2.1.1, veröffentlicht am 06. März 2017.
Dieses NGINX-Modul kann Anfragen an authentifizierte S3-Backends über Amazons V4-Authentifizierungs-API proxyen. Die erste Version dieses Moduls wurde für das V2-Authentifizierungsprotokoll geschrieben und ist im AuthV2-Branch zu finden.
Anwendungsbeispiel
Implementiert das Proxying von authentifizierten Anfragen an S3.
server {
listen 8000;
aws_access_key your_aws_access_key; # Beispiel AKIDEXAMPLE
aws_key_scope scope_of_generated_signing_key; #Beispiel 20150830/us-east-1/service/aws4_request
aws_signing_key signing_key_generated_using_script; #Beispiel L4vRLWAO92X5L3Sqk5QydUSdB0nC9+1wfqLMOKLbRp4=
aws_s3_bucket your_s3_bucket;
location / {
aws_sign;
proxy_pass http://your_s3_bucket.s3.amazonaws.com;
}
# Dies ist ein Beispiel, das nicht den Serverstamm für den Proxy-Stamm verwendet
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;
}
# Dies ist ein Beispiel, das einen spezifischen S3-Endpunkt verwendet, der Standardendpunkt ist 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;
}
}
Sicherheitsüberlegungen
Das V4-Protokoll benötigt keinen Zugriff auf die tatsächlichen geheimen Schlüssel, die man vom IAM-Dienst erhält. Der richtige Weg, den IAM-Schlüssel zu verwenden, besteht darin, tatsächlich einen scoped signing key zu generieren und diesen signing key zu verwenden, um auf S3 zuzugreifen. Dieses NGINX-Modul benötigt den signing key und nicht den tatsächlichen geheimen Schlüssel. Es ist eine unsichere Praxis, den geheimen Schlüssel auf Ihrem NGINX-Server zu belassen.
Beachten Sie, dass signing keys nur eine Gültigkeit von einer Woche haben. Daher müssen sie ständig aktualisiert werden. Bitte verwenden Sie Ihr bevorzugtes Konfigurationsmanagementsystem wie SaltStack, Puppet, Chef usw., um die signing keys an Ihre NGINX-Cluster zu verteilen. Vergessen Sie nicht, den Server nach dem Platzieren des neuen signing keys mit HUP neu zu laden, da NGINX die Konfiguration nur beim Start liest.
Ein eigenständiges Python-Skript wurde bereitgestellt, um den signing key zu generieren
./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
Bekannte Einschränkungen
Die 2.x-Version des Moduls unterstützt derzeit nur GET- und HEAD-Anfragen. Dies liegt daran, dass das Signieren des Anfragekörpers komplex ist und noch nicht implementiert wurde.
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-aws-auth.
