INTEGRITY Dokumentace

Integrace AWS

Tato příručka vás krok za krokem provede nastavením pro jednotlivé hostitele authenticated origin pulls pro zabezpečené připojení k AWS Application Load Balancer pomocí ověření vzájemného TLS.

Než začnete

1. Vygenerování vlastního certifikátu

  1. Následujícím příkazem vygenerujte 4096bitový privátní klíč RSA se šifrováním AES-256. Po vyzvání zadejte přístupovou frázi.
openssl genrsa -aes256 -out rootca.key 4096
  1. Vytvořte kořenový certifikát CA. Až budete vyzváni, vyplňte informace, které se mají do certifikátu zahrnout. U pole Common Name pole použijte jako hodnotu název domény, nikoli hostname.
openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1826 -out rootca.crt
  1. Vytvořte žádost o podpis certifikátu (CSR). Až budete vyzváni, vyplňte informace, které se mají do žádosti zahrnout. U pole Common Name pole použijte jako hodnotu hostname.
openssl req -new -nodes -out cert.csr -newkey rsa:4096 -keyout cert.key
  1. Podepište certifikát pomocí rootca.key a rootca.crt vytvořený v předchozích krocích.
openssl x509 -req -in cert.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out cert.crt -days 730 -sha256 -extfile ./cert.v3.ext
  1. Ujistěte se, že soubor rozšíření certifikátu cert.v3.ext určuje následující:
basicConstraints=CA:FALSE

2. Konfigurace AWS Application Load Balancer

  1. Nahrajte rootca.cert na Bucket S3.
  2. Vytvořte úložiště důvěryhodnosti v konzoli EC2 s uvedením S3 URI kam jste certifikát nahráli.
  3. Vytvořte instanci EC2 a nainstalujte HTTPD daemon. Vyberte typ instance podle svých potřeb, může jít o minimální instanci, která má nárok na AWS Free Tier. Tento tutoriál vychází z příkladu, který používá t2.micro a Amazon Linux 2023.
sudo yum install -y httpd
sudo systemctl start httpd
  1. Vytvořte cílová skupina pro váš Application Load Balancer.
    • Vyberte Instance jako cílový typ.
    • Zadejte port HTTP/80.
  2. Po dokončení konfigurace cílové skupiny ověřte, že cílová skupina je v pořádku.
  3. Nakonfigurujte load balancer a listener.
    • Vyberte Přístupné z internetu schéma.
    • Přepněte listener na port 443 aby mTLS možnost je k dispozici, a vyberte cílovou skupinu vytvořenou v předchozích krocích.
    • Pro Výchozí certifikát serveru SSL/TLS, vyberte Importovat certifikát > Import do ACM, a přidejte soukromý klíč a tělo certifikátu.
    • V části Zpracování klientského certifikátu, vyberte Ověření pomocí úložiště důvěryhodných certifikátů.
  4. Uložte svá nastavení.
  5. (Volitelné) Spusťte následující příkazy a ověřte, že Application Load Balancing vyžaduje klientský certifikát.
openssl s_client -verify 5 -connect <your-application-load-balancer>:443 -quiet -state

Jelikož jste certifikát ještě nenahráli do Cloudflare, připojení by mělo selhat (read:errno=54, například).

Můžete také spustit curl --verbose a potvrďte Request CERT (13) je přítomen v rámci handshake SSL/TLS:

curl --verbose https://<your-application-load-balancer>
...
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
...

3. Nakonfigurujte Cloudflare

  1. Nahrání certifikátu který jste vytvořili v Krok 1 na Cloudflare. Měli byste použít listový certifikát, nikoli kořenovou CA.
MYCERT="$(cat cert.crt|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"
MYKEY="$(cat cert.key|perl -pe 's/\r?\n/\\n/'|sed -e's/..$//')"

request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method":"ubiquitous"
}
EOF
))

# Push the certificate

curl --silent \
"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames/certificates" \
--header "Content-Type: application/json" \
--header "X-Auth-Email: $MYAUTHEMAIL" \
--header "X-Auth-Key: $MYAUTHKEY" \
--data "$request_body"
  1. Přiřaďte certifikát k hostitelskému názvu které by ho měly používat.

Požadovaná oprávnění API tokenu

Alespoň jeden z následujících oprávnění tokenu je povinné:
Enable or Disable a Hostname for Client Authentication
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames" \
	--request PUT \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"config": [
				{
						"enabled": true,
						"cert_id": "<CERT_ID>",
						"hostname": "<YOUR_HOSTNAME>"
				}
		]
	}'

Vrácení konfigurace Cloudflare

  1. Použijte PUT požadavek a vypněte Authenticated Origin Pulls pro daný hostname.

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • SSL and Certificates Write
    Enable or Disable a Hostname for Client Authentication
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"config": [
    				{
    						"enabled": false,
    						"cert_id": "<CERT_ID>",
    						"hostname": "<YOUR_HOSTNAME>"
    				}
    		]
    	}'
  2. (Volitelné) Použijte GET požadavek a získejte seznam ID klientských certifikátů. V dalším kroku budete potřebovat ID certifikátu, který chcete odebrat.

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • SSL and Certificates Write
    • SSL and Certificates Read
    Zobrazit certifikáty
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames/certificates" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  3. Použijte Odstranění klientského certifikátu hostname endpoint pro odstranění certifikátu, který jste nahráli.

    Požadovaná oprávnění API tokenu

    Alespoň jeden z následujících oprávnění tokenu je povinné:
    • SSL and Certificates Write
    Odstranění klientského certifikátu hostname
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames/certificates/$CERTIFICATE_ID" \
    	--request DELETE \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"