TLS-végpont engedélyezése oldalkocsi-tárolóban
Ez a cikk bemutatja, hogyan hozhat létre egy tárolócsoportot egy alkalmazástárolóval és egy TLS/SSL-szolgáltatót futtató sidecar-tárolóval. Ha külön TLS-végponttal rendelkező tárolócsoportot állít be, az alkalmazás kódjának módosítása nélkül engedélyezheti az alkalmazás TLS-kapcsolatait.
Két tárolóból álló példatárolócsoportot állított be:
- Egy alkalmazástároló, amely egy egyszerű webalkalmazást futtat a Nyilvános Microsoft aci-helloworld rendszerkép használatával.
- A nyilvános Nginx-lemezképet futtató oldalkocsi-tároló, amely TLS használatára van konfigurálva.
Ebben a példában a tárolócsoport csak a nyilvános IP-címével teszi elérhetővé az Nginx 443-at. Az Nginx a HTTPS-kéréseket a társ webalkalmazáshoz irányítja, amely belsőleg figyeli a 80-es portot. A példát a más portokon figyelő tárolóalkalmazások esetében is módosíthatja.
A TLS tárolócsoportban való engedélyezésének további lépéseit a Következő lépések című témakörben találja.
Előfeltételek
Használja a Bash-környezetet az Azure Cloud Shell. További információ: Rövid útmutató a Bashhez az Azure Cloud Shell-ben.
Ha helyileg szeretné futtatni a PARANCSSOR-referenciaparancsokat, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd: Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
- Ehhez a cikkhez az Azure CLI 2.0.55-ös vagy újabb verziója szükséges. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.
Önaláírt tanúsítvány létrehozása
Az Nginx TLS-szolgáltatóként való beállításához TLS-/SSL-tanúsítványra van szükség. Ez a cikk bemutatja, hogyan hozhat létre és állíthat be önaláírt TLS/SSL-tanúsítványt. Éles forgatókönyvek esetén tanúsítványt kell beszereznie egy hitelesítésszolgáltatótól.
Önaláírt TLS/SSL-tanúsítvány létrehozásához használja az Azure Cloud Shell és számos Linux-disztribúcióban elérhető OpenSSL eszközt, vagy használjon egy hasonló ügyféleszközt az operációs rendszerben.
Először hozzon létre egy tanúsítványkérelmet (.csr fájlt) egy helyi munkakönyvtárban:
openssl req -new -newkey rsa:2048 -nodes -keyout ssl.key -out ssl.csr
Kövesse az utasításokat az azonosítási adatok hozzáadásához. A Common Name (Közös név) mezőben adja meg a tanúsítványhoz társított állomásnevet. Ha a rendszer jelszó megadását kéri, nyomja le az Enter billentyűt gépelés nélkül a jelszó hozzáadásának kihagyásához.
Futtassa a következő parancsot az önaláírt tanúsítvány (.crt fájl) létrehozásához a tanúsítványkérelemből. Például:
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
Most három fájlnak kell megjelennie a könyvtárban: a tanúsítványkérés (ssl.csr
), a titkos kulcs (ssl.key
) és az önaláírt tanúsítvány (ssl.crt
). Használja ssl.key
a és ssl.crt
a későbbi lépéseket.
Az Nginx konfigurálása a TLS használatára
Nginx-konfigurációs fájl létrehozása
Ebben a szakaszban létrehoz egy konfigurációs fájlt az Nginx számára a TLS használatához. Először másolja a következő szöveget egy nevű új fájlba nginx.conf
. Az Azure Cloud Shell a Visual Studio Code használatával hozhatja létre a fájlt a munkakönyvtárban:
code nginx.conf
A fájlban location
ügyeljen arra, hogy a megfelelő portot adja meg proxy_pass
az alkalmazáshoz. Ebben a példában a tárolóhoz a 80-s portot aci-helloworld
állítottuk be.
# nginx Configuration File
# https://wiki.nginx.org/Configuration
# Run as a less privileged user for security reasons.
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
pid /var/run/nginx.pid;
http {
#Redirect to https, using 307 instead of 301 to preserve post data
server {
listen [::]:443 ssl;
listen 443 ssl;
server_name localhost;
# Protect against the BEAST attack by not using SSLv3 at all. If you need to support older browsers (IE6) you may need to add
# SSLv3 to the list of protocols below.
ssl_protocols TLSv1.2;
# Ciphers set to best allow protection from Beast, while providing forwarding secrecy, as defined by Mozilla - https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;
ssl_prefer_server_ciphers on;
# Optimize TLS/SSL by caching session parameters for 10 minutes. This cuts down on the number of expensive TLS/SSL handshakes.
# The handshake is the most CPU-intensive operation, and by default it is re-negotiated on every new/parallel connection.
# By enabling a cache (of type "shared between all Nginx workers"), we tell the client to re-use the already negotiated state.
# Further optimization can be achieved by raising keepalive_timeout, but that shouldn't be done unless you serve primarily HTTPS.
ssl_session_cache shared:SSL:10m; # a 1mb cache can hold about 4000 sessions, so we can hold 40000 sessions
ssl_session_timeout 24h;
# Use a higher keepalive timeout to reduce the need for repeated handshakes
keepalive_timeout 300; # up from 75 secs default
# remember the certificate for a year and automatically connect to HTTPS
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';
ssl_certificate /etc/nginx/ssl.crt;
ssl_certificate_key /etc/nginx/ssl.key;
location / {
proxy_pass http://localhost:80; # TODO: replace port if app listens on port other than 80
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
Base64-kódolású titkos kódok és konfigurációs fájl
Az Nginx-konfigurációs fájl, a TLS/SSL-tanúsítvány és a TLS-kulcs base64 kódolása. A következő szakaszban a tárolócsoport üzembe helyezéséhez használt YAML-fájlba írja be a kódolt tartalmat.
cat nginx.conf | base64 > base64-nginx.conf
cat ssl.crt | base64 > base64-ssl.crt
cat ssl.key | base64 > base64-ssl.key
Tárolócsoport üzembe helyezése
Most helyezze üzembe a tárolócsoportot egy YAML-fájl tárolókonfigurációinak megadásával.
YAML-fájl létrehozása
Másolja a következő YAML-t deploy-aci.yaml
egy nevű új fájlba. Az Azure Cloud Shell a Visual Studio Code használatával hozhatja létre a fájlt a munkakönyvtárban:
code deploy-aci.yaml
Itt adhatja meg a base64 kódolású fájlok tartalmát, ahol a felirat látható.secret
Az egyes base64 kódolású fájlok például cat
a tartalmának megtekintéséhez. Az üzembe helyezés során ezek a fájlok hozzáadódnak egy titkos kötethez a tárolócsoportban. Ebben a példában a titkos kötet az Nginx-tárolóhoz van csatlakoztatva.
api-version: 2019-12-01
location: westus
name: app-with-ssl
properties:
containers:
- name: nginx-with-ssl
properties:
image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
ports:
- port: 443
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx
- name: my-app
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- port: 80
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumes:
- secret:
ssl.crt: <Enter contents of base64-ssl.crt here>
ssl.key: <Enter contents of base64-ssl.key here>
nginx.conf: <Enter contents of base64-nginx.conf here>
name: nginx-config
ipAddress:
ports:
- port: 443
protocol: TCP
type: Public
osType: Linux
tags: null
type: Microsoft.ContainerInstance/containerGroups
A tárolócsoport üzembe helyezése
Hozzon létre egy erőforráscsoportot az az group create paranccsal:
az group create --name myResourceGroup --location westus
Helyezze üzembe a tárolócsoportot az az container create paranccsal, és adja át a YAML-fájlt argumentumként.
az container create --resource-group <myResourceGroup> --file deploy-aci.yaml
Üzembehelyezési állapot megtekintése
Az üzembe helyezés állapotának megtekintéséhez használja az alábbi az container show parancsot:
az container show --resource-group <myResourceGroup> --name app-with-ssl --output table
Sikeres üzembe helyezés esetén a kimenet a következőhöz hasonló:
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
------------ --------------- -------- ------------------------------------------------------- ------------------- --------- --------------- -------- ----------
app-with-ssl myresourcegroup Running nginx, mcr.microsoft.com/azuredocs/aci-helloworld 52.157.22.76:443 Public 1.0 core/1.5 gb Linux westus
TLS-kapcsolat ellenőrzése
A böngészőben keresse meg a tárolócsoport nyilvános IP-címét. Az ebben a példában látható IP-cím a 52.157.22.76
, tehát az URL-cím.https://52.157.22.76 A futó alkalmazás megtekintéséhez HTTPS-t kell használnia az Nginx-kiszolgáló konfigurációja miatt. A HTTP-kapcsolaton keresztüli kapcsolódási kísérletek sikertelenek.
Megjegyzés
Mivel ez a példa nem hitelesítésszolgáltatótól származó, hanem önaláírt tanúsítványt használ, a böngésző biztonsági figyelmeztetést jelenít meg, amikor HTTPS-en keresztül csatlakozik a webhelyhez. Előfordulhat, hogy el kell fogadnia a figyelmeztetést, vagy módosítania kell a böngésző- vagy tanúsítványbeállításokat a lap folytatásához. Ez várt működés.
Következő lépések
Ez a cikk azt mutatta be, hogyan állíthat be Nginx-tárolót a tárolócsoportban futó webalkalmazás TLS-kapcsolatainak engedélyezéséhez. Ezt a példát a 80-s porttól eltérő portokon figyelő alkalmazásokhoz is módosíthatja. Az Nginx konfigurációs fájlját úgy is frissítheti, hogy a kiszolgálói kapcsolatokat a 80-os (HTTP) porton automatikusan átirányítsa a HTTPS használatára.
Bár ez a cikk az Nginxet használja az oldalkocsiban, használhat egy másik TLS-szolgáltatót, például a Caddyt.
Ha a tárolócsoportot egy Azure-beli virtuális hálózaton helyezi üzembe, megfontolhat más lehetőségeket is, amelyekkel engedélyezheti a TLS-végpontot egy háttérbeli tárolópéldányhoz, beleértve a következőket:
- Azure Functions proxyk
- Azure API Management
- Azure Application Gateway – tekintse meg a minta üzembehelyezési sablont.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: