AWS ALB μμ mTLSλ₯Ό μ§μνμ§ μμλ€κ³ ?!
OpenADR μμ² μ 451 μ€λ₯κ° λ°μν©λλ€ π₯
OpenADR νλ‘ν μ½μμ NOT_ALLOWED(451)μ μμ²μ΄ μ¬λ°λ₯΄μ§ μμλ μλ΅λλ λ©μμ§μ΄λ€. μ²μμλ OpenADR ν΄λΌμ΄μΈνΈ μμ² μ μ λ¬ν μΈμ¦μκ° μ¬λ°λ₯΄μ§ μμ κ²μ 체ν¬νμΌλ ν μ€νΈ νκ²½μμ νμΈν΄λ³΄λ μΈμ¦μκ° μλ²κΉμ§ μ λ¬λμ§ μμμ νμΈν μ μμλ€. ν΄λΉ ν μ€νΈ νκ²½μ κ·Έλμ μ‘°μ§μμ ꡬμ±ν μΈνλΌ λ°©μμ΄ μλ μΌλ³Έ κ³ κ° νκ²½μ μ΅λν λͺ¨λ°©ν΄μ λ§λ μ κ· νκ²½μ ν΄λΉλλ€. νμ¬ μ‘°μ§μμ μ 곡νλ μ루μ μ μλ§μ‘΄ μΉ μλΉμ€μμ μΈνλΌλ₯Ό ꡬμ±νλ κ²½μ° Elastic Beanstalk μ (ELB μ€ L4μ ν΄λΉνλ) NLB λ‘ κ΅¬μ±λλ€.
λ‘λλ°Έλ°μλ₯Ό ALBλ‘ κ΅¬μ±νμ§ μλ μ΄μ λ λΉ λ₯Έ νΈλν½ μ λ¬κ³Ό μλμ§ κ΄λ ¨ μμ€ν νΉμ± μ μΈλΆμμ κ³ μ λμ΄μΌνλ μμ΄νΌκ° νμνκΈ° λλ¬Έμ΄λ€.
AWS ALB λ mTLSλ₯Ό μ§μν΄μ πΌ
2023λ 12μμ Application Load Balancer μνΈ μΈμ¦ κΈ°λ₯μ μ§μνκ² λμκ³ μλμ κ°μ΄ Application Load Balancerμ© HTTPS 리μ€λ μμ±λ¬Έμμλ κ·Έλμ ALB μμ mTLS μ μ©μ ν μ μλ€λ μ λ³΄κ° λ¨μμλ κ±Έ νμΈν μ μλ€. κ³ κ° νκ²½κ³Ό λμΌν μΈνλΌλ₯Ό ꡬμ±νλ©΄μλ ALB μμ mTLSλ₯Ό μ§μνμ§ μλλ€λ λΆλΆμ μ μ½μ΄ μλ€λ κ²μ μμμ±μ§ λͺ»νλ€.
μλλ μ§μνμ§ μμλ€λκ±Έ μ μ μλ μ€νμ€λ²νλ‘μ° λ΅λ³ λ§ν¬
mTLS ν¨μ€μ€λ£¨ μ΅μ
μνΈ μΈμ¦ μ΅μ μ λ κ°μ§κ° μμ΅λλ€. ν¨μ€μ€λ£¨ μ΅μ μ μ ννλ©΄ HTTP ν€λλ₯Ό μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈλ‘λΆν° λ°μ λͺ¨λ ν΄λΌμ΄μΈνΈ μΈμ¦μ 체μΈμ λ°±μλ μ ν리μΌμ΄μ μΌλ‘ 보λ λλ€. mTLSκ° νμ±νλ Application Load Balancerλ νΈλμ °μ΄ν¬μμ ν΄λΌμ΄μΈνΈ μΈμ¦μλ₯Ό κ°μ Έμ€κ³ , TLS μ°κ²°μ μ€μ ν λ€μ, HTTPS ν€λμ μλ λͺ¨λ νλͺ©μ λμ μ ν리μΌμ΄μ μΌλ‘ 보λ λλ€. μ ν리μΌμ΄μ μ ν΄λΌμ΄μΈνΈλ₯Ό μΈμ¦νκΈ° μν΄ ν΄λΌμ΄μΈνΈ μΈμ¦μ 체μΈμ νμΈν΄μΌ ν©λλ€.
μ λ¬Έμ₯μΌλ‘λ§ ν΄μνλ©΄ ALB μμ ν¨μ€μ€λ£¨ μ΅μ
μ μ μ©ν λ€ λ°±μλ μ ν리μΌμ΄μ
κΉμ§ ν΄λΌμ΄μΈνΈ μΈμ¦μκ° λλ¬ν΄μΌνμ§λ§ ν¨μ€μ€λ£¨ μ΅μ
μ νμ±ννμ¬λ ν΄λΉ μ¦μμ λμΌνκ² λ°μνλ€. μ΅κ·Ό κ°±μ λ νμ΄μ§λΌ νκ΅μ΄λ‘ λ²μμ΄ λμ§ μμ Mutual authentication with TLS in Application Load Balancerλ₯Ό μ°Έκ³ νλ©΄ X-Amzn-Mtls-Clientcert
ν€λμ URL-encoded PEM ννμ κ°μΌλ‘ λ‘λλ°Έλ°μμ λμμΌλ‘ μ λ¬λλ κ²μ νμΈν μ μμλ€.
URL-encoded PEM with +=/
as safe characters λ‘ μΈν μ€λ₯ β‘οΈ
μλλ NLBλ₯Ό μ¬μ©νλλΌλ AWS Elastic Beanstalk νκ²½μ Nginxμ μ λ¬λλ μΈμ¦μλ₯Ό λ°±μλ μ ν리μΌμ΄μ
μ μ λ¬νκΈ° μν΄μ $ssl_client_escaped_cert λ³μλ₯Ό X-SSL-CERT
ν€λμ ν¬ν¨νμ¬ μ λ¬νλ©΄ ν€λμ κ°μ μΆμΆνμ¬ μΈμ¦μλ‘ λ³ννμ¬ μ¬μ©νλλ‘ μ‘°μΉλμ΄ μμκΈ°μ X-Amzn-Mtls-Clientcert
ν€λλ‘ μ λ¬λλ μΈμ¦μ μ 보λ₯Ό κ·Έλλ‘ X-SSL-CERT
ν€λμ μ λ¬νλ μ‘°μΉλ‘ ν΄κ²°νλ € νμΌλ μ€λ₯κ° λ°μνλ€. μκ³ λ³΄λ μΌλ°μ μΈ URL μΈμ½λ©μ΄ μλλΌ +=/ μ κ°μ μΌλΆ λ¬Έμλ μΈμ½λ©μμ μ μΈλμκΈ° λλ¬Έμ μ½λμμ μ¬μ©νκ³ μλ URLDecoder
λ‘ λμ½λ©νλ κ²½μ° μ¬λ°λ₯΄μ§ μμ μΈμ¦μκ° λμ΄λ²λ¦¬λ μν©μ΄ λμλ€.
μμ κ°μ μν©μΌλ‘ μ ν리μΌμ΄μ μ½λ μμ μμ΄λ μ‘°μΉκ° λΆκ°λ₯νκΈ° λλ¬Έμ X-SSL-CERT ν€λ μ΄μΈμ X-Amzn-Mtls-Clientcert κ° μλ€λ©΄ μΈμ¦μλ‘ λ³ννλλ‘ νλ μ½λλ₯Ό μΆκ°νμ΅λλ€. λν, κΈ΄κΈν μν©μ μλμκΈ°μ μμ λ 릴리μ¦μ ν¬ν¨ν΄μ λ°°ν¬νκΈ°λ‘ νμ΅λλ€.
Tip. ν΄λΌμ΄μΈνΈ λλ λ‘λλ°Έλ°μμμ μ λ¬ν μμ² ν€λμ κ°μ Nginxμμ λ€λ₯Έ ν€λλ‘ λ°κΎΈμ΄μ μ λ¬νλ λ°©λ²
Nginx μ€μ μμ X-Amzn-Mtls-Clientcert ν€λμ κ°μ X-SSL-CERT μΌλ‘ μ λ¬νλ κ²μ μλμ κ°μ΄ ν μ μλ€.
server {
underscores_in_headers on;
location / {
proxy_set_header X-SSL-CERT $http_x_amzn_mtls_clientcert;
}
}
ν΄λΌμ΄μΈνΈ λλ λ‘λλ°Έλ°μμμ μ λ¬ν 컀μ€ν ν€λλ₯Ό Nginx μμ λ€μ μ€μ νμ¬ ν¬ν¨μν€λ λ°©λ²μ μ°Ύκ³ μλ λΆμκ² λμμ΄ λκΈΈ λ°λλλ€.