Megosztás a következőn keresztül:


TLS végpont engedélyezése egy oldalkocsis konténerben

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ó oldalkocsis 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ít be:

  • Egy alkalmazástároló, amely egy egyszerű webalkalmazást futtat a Nyilvános Microsoft aci-helloworld rendszerkép használatával.
  • TLS használatára konfigurált, nyilvános Nginx-lemezképet futtató oldalkocsis tároló.

Ebben a példában a tárolócsoport csak a nyilvános IP-címmel rendelkező Nginx 443-as portját teszi elérhetővé. Az Nginx a HTTPS-kéréseket a társ webalkalmazáshoz irányítja, amely belsőleg figyeli a 80-es portot. A más portokon figyelő tárolóalkalmazások példáját módosíthatja.

A TLS tárolócsoportban való engedélyezésének további lépéseit a következő lépésekben találja.

Előfeltételek

  • Ez a cikk az Azure CLI 2.0.55-ös vagy újabb verzióját igényli. 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 Shellben é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öznév) mezőben adja meg a tanúsítványhoz társított állomásnevet. Amikor a rendszer kéri a jelszót, nyomja le az Enter billentyűt gépelés nélkül, és hagyja ki a jelszó hozzáadását.

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élda:

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érelem (ssl.csr), a titkos kulcs (ssl.key) és az önaláírt tanúsítvány (ssl.crt). A későbbi lépésekben és ssl.crt a későbbi lépésekben is használhatjassl.key.

Az Nginx konfigurálása TLS használatára

Nginx-konfigurációs fájl létrehozása

Ebben a szakaszban egy konfigurációs fájlt hoz létre az Nginx számára a TLS használatához. Először másolja a következő szöveget egy új fájlba nginx.conf. Az Azure Cloud Shellben a Visual Studio Code használatával hozhatja létre a fájlt a munkakönyvtárban:

code nginx.conf

Ügyeljen locationarra, hogy a megfelelő portot adja meg proxy_pass az alkalmazáshoz. Ebben a példában a tárolóhoz a 80-at aci-helloworld állítjuk 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

A Base64 kódolja az Nginx konfigurációs fájlt, a TLS/SSL-tanúsítványt és a TLS-kulcsot. A következő szakaszban a tárolócsoport üzembe helyezéséhez használt YAML-fájlban adja meg 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 egy új, névvel ellátott deploy-aci.yamlfájlba. Az Azure Cloud Shellben a Visual Studio Code használatával hozhatja létre a fájlt a munkakönyvtárban:

code deploy-aci.yaml

Adja meg a base64 kódolású fájlok tartalmát, ahol a következőt secretjelöli: . Például cat a base64 kódolású fájlok mindegyike megtekintheti annak tartalmát. 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. A példában látható IP-cím tehát 52.157.22.76az .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.

Képernyőkép a böngészőről, ahol egy Azure-tárolópéldányban futó alkalmazás látható

Feljegyzé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 a tanúsítvány beállításait, hogy továbblépjen a lapra. Ez várt működés.

Következő lépések

Ez a cikk bemutatta, hogyan állíthat be Nginx-tárolót a tárolócsoportban futó webalkalmazások TLS-kapcsolatainak engedélyezéséhez. Ezt a példát a 80-as 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 automatikusan átirányítsa a kiszolgálói kapcsolatokat a 80-s porton (HTTP) a HTTPS használatára.

Bár ez a cikk Nginx-et használ 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 a TLS-végpontok engedélyezéséhez egy háttértároló-példányhoz, beleértve a következőket: