์ด ํ์ด์ง์์๋ ๋ชจ๋ ์ฐ๊ฒฐ์ด ์ํธํ๋๋๋ก ์ธ์คํด์ค์ SSL/TLS ์ํธํ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ๋ํ Cloud SQL์์ ์์ฒด ๊ด๋ฆฌํ SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ Cloud SQL ์ธ์คํด์ค์ ์์ ํ๊ฒ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
๊ฐ์
์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ฉด Cloud SQL์ด ์๋ฒ ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๋ชจ๋ ์ฐ๊ฒฐ์ SSL/TLS์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ/์๋ฒ ID์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๋ง๋ค๊ณ ์ธ์ฆ์๋ฅผ PostgreSQL ํด๋ผ์ด์ธํธ ํธ์คํธ ๋จธ์ ์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค. ์ธ์คํด์ค์ ๋ํด SSL์ ์ ์ฉํ๋ ๊ฒฝ์ฐ ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ SSL/TLS ์ธ์ฆ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ธ์คํด์ค๊ฐ ์๋์ผ๋ก ๋ค์ ์์๋๊ณ ๋ค์ดํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.SSL ๋ชจ๋ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฐ๊ฒฐ์๋ง ์ ์ฉ๋ฉ๋๋ค. SSL์ ์ ์ฉํ๊ณ ์ธ์คํด์ค์ ์ํธํ๋์ง ์์ ๊ธฐ์กด ์ฐ๊ฒฐ์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ์ด ์ํธํ๋์ง ์์ ์ฑ ์ฐ๊ฒฐ๋ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์ํธํ๋์ง ์์ ์ฐ๊ฒฐ์ ๋ซ๊ณ ๋ชจ๋ ์ฐ๊ฒฐ์ SSL์ ์ ์ฉํ๋ ค๋ฉด ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํด์ผ ํฉ๋๋ค.
SSL/TLS ์ํธํ ์ ์ฉ
SSL ๋ชจ๋ ์ค์ ์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก SSL ์ํธํ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
SSL/TLS๊ฐ ์๋ ์ฐ๊ฒฐ๊ณผ SSL/TLS ์ฐ๊ฒฐ์ ๋ชจ๋ ํ์ฉํฉ๋๋ค. SSL/TLS ์ฐ๊ฒฐ์ ๋ํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ธ๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ ์ต์ ์ผ๋ก,
SSL/TLS๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. SSL ์ฐ๊ฒฐ์ ๋ํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ธ๋์ง ์์ต๋๋ค.
- SSL/TLS ๋ฐ ์ ํจํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค.
Cloud SQL ์ธ์คํด์ค์ ๋นSSL/๋นTLS ๋ฐ SSL/TLS ์ฐ๊ฒฐ ํ์ฉ์ ์ ํํ๋ฉด SSL/TLS ์ฐ๊ฒฐ์ ๋ฌผ๋ก ์ํธํ๋์ง ์์ ์ฐ๊ฒฐ๊ณผ ์์ ํ์ง ์์ ์ฐ๊ฒฐ๋ ํ์ฉ๋ฉ๋๋ค. ๋ชจ๋ ์ฐ๊ฒฐ์ SSL/TLS๋ฅผ ์๊ตฌํ์ง ์์ผ๋ฉด ์ํธํ๋์ง ์์ ์ฐ๊ฒฐ์ด ๊ณ์ ํ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ณต๊ฐ IP๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ์ก์ธ์คํ๋ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์ฐ๊ฒฐ์ SSL์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ์ง์ ์ฐ๊ฒฐํ๊ฑฐ๋ Cloud SQL ์ธ์ฆ ํ๋ก์ ๋๋ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. Cloud SQL ์ธ์ฆ ํ๋ก์๋ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ฉด ์ฐ๊ฒฐ์ด ์๋์ผ๋ก SSL/TLS๋ก ์ํธํ๋ฉ๋๋ค. Cloud SQL ์ธ์ฆ ํ๋ก์์ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ๋ฉด SSL ๋ชจ๋ ์ค์ ์ ๊ด๊ณ์์ด ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ID๋ ์๋์ผ๋ก ํ์ธ๋ฉ๋๋ค.
SSL/TLS ํ์๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์ฝ์
-
Google Cloud ์ฝ์์์ Cloud SQL ์ธ์คํด์ค ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์คํด์ค์ ๊ฐ์ ํ์ด์ง๋ฅผ ์ด๋ ค๋ฉด ์ธ์คํด์ค ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- SQL ํ์ ๋ฉ๋ด์์ ์ฐ๊ฒฐ์ ํด๋ฆญํฉ๋๋ค.
- ๋ณด์ ํญ์ ์ ํํฉ๋๋ค.
- ๋ค์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
- ์ํธํ๋์ง ์์ ๋คํธ์ํฌ ํธ๋ํฝ ํ์ฉ(๊ถ์ฅ๋์ง ์์)
- SSL ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ์ด ์ต์ ์ SSL/TLS ์ํธํ๋ฅผ ์ฌ์ฉํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ์ธ์ฆ์๊ฐ ๊ฒ์ฆ๋์ง ์์ต๋๋ค.
- ์ ๋ขฐํ ์ ์๋ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ํฉ๋๋ค. ์ด ์ต์ ์ ์ ํจํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ณ SSL๋ก ์ํธํ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์๊ฐ IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ Cloud SQL ์ธ์ฆ ํ๋ก์๋ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ๋ณธ์ธ ์ธ์ฆ์ ์ํํด์ผ ํฉ๋๋ค.
gcloud
gcloud sql instances patch INSTANCE_NAME \ --ssl-mode=SSL_ENFORCEMENT_MODE
SSL_ENFORCEMENT_MODE๋ฅผ ๋ค์ ์ต์ ์ค ํ๋๋ก ๋ฐ๊ฟ๋๋ค.
ALLOW_UNENCRYPTED_AND_ENCRYPTED
๋ ๋นSSL/๋นTLS ๋ฐ SSL/TLS ์ฐ๊ฒฐ์ ํ์ฉํฉ๋๋ค. SSL ์ฐ๊ฒฐ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ธ๋์ง ์์ต๋๋ค. ์ด ์ค์ ์ด ๊ธฐ๋ณธ ์ค์ ์ ๋๋ค.ENCRYPTED_ONLY
๋ SSL/TLS๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. SSL ์ฐ๊ฒฐ์ ๋ํด์๋ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ธ๋์ง ์์ต๋๋ค.TRUSTED_CLIENT_CERTIFICATE_REQUIRED
๋ SSL/TLS ๋ฐ ์ ํจํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์๊ฐ IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ Cloud SQL ์ธ์ฆ ํ๋ก์๋ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ๋ณธ์ธ ์ธ์ฆ์ ์ํํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ PostgreSQL์ฉ Cloud SQL ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Terraform
SSL/TLS ์ํธํ๋ฅผ ์ ์ฉํ๋ ค๋ฉด Terraform ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
ํ๋ก์ ํธ์ Terraform ๊ตฌ์ฑ์ ์ ์ฉํ๋ ค๋ฉด Google Cloud ๋ค์ ์น์ ์ ๋จ๊ณ๋ฅผ ์๋ฃํ์ธ์.
Cloud Shell ์ค๋น
- Cloud Shell์ ์คํํฉ๋๋ค.
-
Terraform ๊ตฌ์ฑ์ ์ ์ฉํ ๊ธฐ๋ณธ Google Cloud ํ๋ก์ ํธ๋ฅผ ์ค์ ํฉ๋๋ค.
์ด ๋ช ๋ น์ด๋ ํ๋ก์ ํธ๋น ํ ๋ฒ๋ง ์คํํ๋ฉด ๋๋ฉฐ ์ด๋ค ๋๋ ํฐ๋ฆฌ์์๋ ์คํํ ์ ์์ต๋๋ค.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform ๊ตฌ์ฑ ํ์ผ์์ ๋ช ์์ ๊ฐ์ ์ค์ ํ๋ฉด ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ์ ์๋ฉ๋๋ค.
๋๋ ํฐ๋ฆฌ ์ค๋น
๊ฐ Terraform ๊ตฌ์ฑ ํ์ผ์๋ ์์ฒด ๋๋ ํฐ๋ฆฌ(๋ฃจํธ ๋ชจ๋์ด๋ผ๊ณ ๋ ํจ)๊ฐ ์์ด์ผ ํฉ๋๋ค.
-
Cloud Shell์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ํด๋น ๋๋ ํฐ๋ฆฌ ๋ด์ ์ ํ์ผ์ ๋ง๋์ธ์. ํ์ผ ์ด๋ฆ์๋
.tf
ํ์ฅ์๊ฐ ์์ด์ผ ํฉ๋๋ค(์:main.tf
). ์ด ํํ ๋ฆฌ์ผ์์๋ ํ์ผ์main.tf
๋ผ๊ณ ํฉ๋๋ค.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ ์น์ ์ด๋ ๋จ๊ณ์์ ์ํ ์ฝ๋๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
์ํ ์ฝ๋๋ฅผ ์๋ก ๋ง๋
main.tf
์ ๋ณต์ฌํฉ๋๋ค.ํ์ํ ๊ฒฝ์ฐ GitHub์์ ์ฝ๋๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์ด๋ Terraform ์ค๋ํซ์ด ์๋ ํฌ ์๋ ์๋ฃจ์ ์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ์ ๊ถ์ฅ๋ฉ๋๋ค.
- ํ๊ฒฝ์ ์ ์ฉํ ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒํ ํ๊ณ ์์ ํฉ๋๋ค.
- ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํฉ๋๋ค.
-
Terraform์ ์ด๊ธฐํํฉ๋๋ค. ์ด ์์
์ ๋๋ ํฐ๋ฆฌ๋น ํ ๋ฒ๋ง ์ํํ๋ฉด ๋ฉ๋๋ค.
terraform init
์ํ๋ ๊ฒฝ์ฐ ์ต์ Google ๊ณต๊ธ์ ์ฒด ๋ฒ์ ์ ์ฌ์ฉํ๋ ค๋ฉด
-upgrade
์ต์ ์ ํฌํจํฉ๋๋ค.terraform init -upgrade
๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
-
๊ตฌ์ฑ์ ๊ฒํ ํ๊ณ Terraform์์ ๋ง๋ค๊ฑฐ๋ ์
๋ฐ์ดํธํ ๋ฆฌ์์ค๊ฐ ์์๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.
terraform plan
ํ์์ ๋ฐ๋ผ ๊ตฌ์ฑ์ ์์ ํฉ๋๋ค.
-
๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ํ๋กฌํํธ์
yes
๋ฅผ ์ ๋ ฅํ์ฌ Terraform ๊ตฌ์ฑ์ ์ ์ฉํฉ๋๋ค.terraform apply
Terraform์ '์ ์ฉ ์๋ฃ' ๋ฉ์์ง๊ฐ ํ์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด Google Cloud ํ๋ก์ ํธ๋ฅผ ์ฝ๋๋ค. Google Cloud ์ฝ์์์ UI์ ๋ฆฌ์์ค๋ก ์ด๋ํ์ฌ Terraform์ด ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋์ง ํ์ธํฉ๋๋ค.
๋ณ๊ฒฝ์ฌํญ ์ญ์
๋ณ๊ฒฝ์ฌํญ์ ์ญ์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
- Terraform ๊ตฌ์ฑ ํ์ผ์์ ์ญ์ ๋ณดํธ๋ฅผ ์ฌ์ฉ ์ค์งํ๋ ค๋ฉด
deletion_protection
์ธ์๋ฅผfalse
๋ก ์ค์ ํฉ๋๋ค.deletion_protection = "false"
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ํ๋กฌํํธ์
yes
๋ฅผ ์ ๋ ฅํ์ฌ ์ ๋ฐ์ดํธ๋ Terraform ๊ตฌ์ฑ์ ์ ์ฉํฉ๋๋ค.terraform apply
-
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ํ๋กฌํํธ์
yes
๋ฅผ ์ ๋ ฅํ์ฌ ์ด์ ์ Terraform ๊ตฌ์ฑ์ ์ ์ฉ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.terraform destroy
REST v1
-
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- PROJECT_ID: ํ๋ก์ ํธ ID
- SSL_ENFORCEMENT_MODE: ๋ค์ ์ต์
์ค ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ALLOW_UNENCRYPTED_AND_ENCRYPTED
: SSL/TLS๊ฐ ์๋ ์ฐ๊ฒฐ๊ณผ SSL/TLS ์ฐ๊ฒฐ์ ํ์ฉํฉ๋๋ค. SSL ์ฐ๊ฒฐ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ธ๋์ง ์์ต๋๋ค. ์ด ์ค์ ์ด ๊ธฐ๋ณธ ์ค์ ์ ๋๋ค.ENCRYPTED_ONLY
: SSL/TLS๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค.TRUSTED_CLIENT_CERTIFICATE_REQUIRED
: SSL/TLS ๋ฐ ์ ํจํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์๊ฐ IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ Cloud SQL ์ธ์ฆ ํ๋ก์๋ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ๋ณธ์ธ ์ธ์ฆ์ ์ํํด์ผ ํฉ๋๋ค.
- INSTANCE_ID: ์ธ์คํด์ค ID์ ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "settings": { "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"} } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
REST v1beta4
-
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- PROJECT_ID: ํ๋ก์ ํธ ID
- SSL_ENFORCEMENT_MODE: ๋ค์ ์ต์
์ค ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ALLOW_UNENCRYPTED_AND_ENCRYPTED
: SSL/TLS๊ฐ ์๋ ์ฐ๊ฒฐ๊ณผ SSL/TLS ์ฐ๊ฒฐ์ ํ์ฉํฉ๋๋ค. SSL ์ฐ๊ฒฐ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๊ฐ ํ์ธ๋์ง ์์ต๋๋ค. ์ด ์ค์ ์ด ๊ธฐ๋ณธ ์ค์ ์ ๋๋ค.ENCRYPTED_ONLY
: SSL/TLS๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค.TRUSTED_CLIENT_CERTIFICATE_REQUIRED
: SSL/TLS ๋ฐ ์ ํจํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ก ์ํธํ๋ ์ฐ๊ฒฐ๋ง ํ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์๊ฐ IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ Cloud SQL ์ธ์ฆ ํ๋ก์๋ Cloud SQL ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ๋ณธ์ธ ์ธ์ฆ์ ์ํํด์ผ ํฉ๋๋ค.
- INSTANCE_ID: ์ธ์คํด์ค ID์ ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "settings": { "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"} } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
์๋ฒ ์ธ์ฆ์
์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ฉด Cloud SQL์ด ์๋ฒ ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ์๋ฒ ์ธ์ฆ์๊ฐ ์ ํจํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฒ ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. Cloud SQL์์๋ ์ธ ๊ฐ์ง ์ธ์ฆ ๊ธฐ๊ด(CA) ๊ณ์ธต ๊ตฌ์กฐ ์ค์์ ์ ํํ ์ ์์ต๋๋ค. ์ ํํ CA ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์ธ์คํด์ค์ ์๋ฒ CA ๋ชจ๋๊ฐ ๋ฉ๋๋ค. ์ธ์คํด์ค์ ์๋ฒ CA ๋ชจ๋๋ก ์ธ์คํด์ค๋ณ CA๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ฒ ์ธ์ฆ์์ ๋ง๋ฃ์ผ์ 10๋ ์ ๋๋ค. ๊ณต์ CA ๋๋ ๊ณ ๊ฐ ๊ด๋ฆฌ CA๋ฅผ ์ธ์คํด์ค์ ์๋ฒ CA ๋ชจ๋๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ฒ ์ธ์ฆ์์ ๋ง๋ฃ์ผ์ 1๋ *์ ๋๋ค. ๋ง๋ฃ์ผ ์ดํ์๋ ์๋ฒ ์ธ์ฆ์๊ฐ ๋ ์ด์ ์ ํจํ์ง ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ๋ณด์ ์ฐ๊ฒฐ์ ์ค์ ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ CA๋ฅผ ์ธ์ฆํ๊ฑฐ๋ ์๋ฒ ์ธ์ฆ์์ ํธ์คํธ ์ด๋ฆ์ ์ธ์ฆํ๋๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ๋ง๋ฃ๋ ์๋ฒ ์ธ์ฆ์๊ฐ ์๋ Cloud SQL ์ธ์คํด์ค์ ๋ํ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ์คํจํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ด ์ค๋จ๋์ง ์๋๋ก ์ธ์ฆ์๊ฐ ๋ง๋ฃ๋๊ธฐ ์ ์ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ํํ์ธ์. ์๋ฒ ์ธ์ฆ์๊ฐ ๊ณง ๋ง๋ฃ๋๋ค๋ ์๋ฆผ์ด ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์ก๋ฉ๋๋ค. ์๋ฆผ์ ๋ง๋ฃ์ผ 90, 30, 10, 2, 1์ผ ์ ์ ์ ์ก๋ฉ๋๋ค.
* ๊ณ ๊ฐ์ด ๊ด๋ฆฌํ๋ CA์ ๊ฒฝ์ฐ CA์ ์ ํจ ๊ธฐ๊ฐ์ ๋ ์งง์ ๋ง๋ฃ์ผ์ ์ ํํ ๊ฒฝ์ฐ ์๋ฒ ์ธ์ฆ์์ ๋ง๋ฃ์ผ์ด 1๋ ๋ฏธ๋ง์ผ ์ ์์ต๋๋ค.
์๋ฒ ์ธ์ฆ์ ๋์ด ๋ฐ ์์ฑ
Google Cloud ์ฝ์์์ ์๋ฒ ์ธ์ฆ์์ ์ธ๋ถ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ์ฐ๊ฒฐ ํ์ด์ง๋ก ์ด๋ํ์ฌ ๋ณด์ ํญ์ ํด๋ฆญํฉ๋๋ค.
์ธ์ฆ์ ํ์์ ๋ค์ ์ธ๋ถ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ์ธ์ฆ์ ์ํ: ์์ ๋จ, ํ์ฑ ๋๋ ์ด์
- ์์ ๋จ: ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ํ์ฑ ์ํ๋ ์๋๋๋ค. ์ธ์ฆ์๋ฅผ ํ์ฑ ์ํ๋ก ๋ง๋ค๋ ค๋ฉด ์ํ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ธ์.
- ํ์ฑ: ์ธ์ฆ์๊ฐ ์ฌ์ฉ ์ค์ ๋๋ค.
- ์ด์ : ์ธ์ฆ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ธ์ฆ์๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋กค๋ฐฑ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ธ์.
- ์์ฑ๋จ: ์ธ์ฆ์๊ฐ ์์ฑ๋ ๋ ์ง ๋ฐ ์๊ฐ์ ๋๋ค.
- ๋ง๋ฃ: ์ธ์ฆ์๊ฐ ๋ง๋ฃ๋๋ ๋ ์ง ๋ฐ ์๊ฐ์ ๋๋ค.
ํ์ฑ ์ธ์ฆ์๊ฐ ๋ง๋ฃ๋๊ธฐ ์ ์ ์ ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ฝ์
์์ฒด ์๋ช ๋ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค(์ธ์คํด์ค๋ณ CA)์ ๊ฒฝ์ฐ:
-
Google Cloud ์ฝ์์์ Cloud SQL ์ธ์คํด์ค ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์คํด์ค์ ๊ฐ์ ํ์ด์ง๋ฅผ ์ด๋ ค๋ฉด ์ธ์คํด์ค ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- SQL ํ์ ๋ฉ๋ด์์ ์ฐ๊ฒฐ์ ํด๋ฆญํฉ๋๋ค.
- ๋ณด์ ํญ์ ์ ํํฉ๋๋ค.
- ์๋ฒ CA ์ธ์ฆ์ ๊ด๋ฆฌ ์น์ ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์ฆ์ ๊ด๋ฆฌ๋ฅผ ํด๋ฆญํ์ฌ ํผ์นฉ๋๋ค.
- ์ CA ์ธ์ฆ์ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์๋ฒ CA ์ธ์ฆ์๊ฐ ์์ ๋จ ์ฌ๋กฏ์ ํ์๋ฉ๋๋ค. ์ ์๋ฒ CA ์ธ์ฆ์๋ก ์ฆ์ ์ ํํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ํ์ ์๋ฃํ์ฌ ์๋ฒ CA ์ธ์ฆ์ ์ํ์ ์งํํฉ๋๋ค.
๊ณต์ CA์์ ๋ฐ๊ธํ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค์ ๊ฒฝ์ฐ:
-
Google Cloud ์ฝ์์์ Cloud SQL ์ธ์คํด์ค ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์คํด์ค์ ๊ฐ์ ํ์ด์ง๋ฅผ ์ด๋ ค๋ฉด ์ธ์คํด์ค ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- SQL ํ์ ๋ฉ๋ด์์ ์ฐ๊ฒฐ์ ํด๋ฆญํฉ๋๋ค.
- ๋ณด์ ํญ์ ์ ํํฉ๋๋ค.
- ์๋ฒ ์ธ์ฆ์ ๊ด๋ฆฌ ์น์ ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์ฆ์ ๊ด๋ฆฌ๋ฅผ ํด๋ฆญํ์ฌ ํผ์นฉ๋๋ค.
- ์๋ฒ ์ธ์ฆ์ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์๋ฒ ์ธ์ฆ์๊ฐ ์์ ๋จ ์ฌ๋กฏ์ ํ์๋ฉ๋๋ค. ์ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ฆ์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ํ์ ์๋ฃํ์ฌ ์๋ฒ ์ธ์ฆ์ ์ํ์ ์งํํฉ๋๋ค.
gcloud
์์ฒด ์๋ช ๋ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค(์ธ์คํด์ค๋ณ CA)์ ๊ฒฝ์ฐ:
- ์๋ฒ ์ธ์ฆ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด sql ssl server-ca-certs list ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud sql ssl server-ca-certs list \ --instance=INSTANCE_NAME
- ์๋ฒ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด sql ssl server-ca-certs create ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud sql ssl server-ca-certs create \ --instance=INSTANCE_NAME
- ์ธ์ฆ์ ์ ๋ณด๋ฅผ ๋ก์ปฌ PEM ํ์ผ๋ก ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud sql ssl server-ca-certs list \ --format="value(cert)" \ --instance=INSTANCE_NAME > \ FILE_PATH/FILE_NAME.pem
- ๋ค์ด๋ก๋ํ ํ์ผ์ ํด๋ผ์ด์ธํธ ํธ์คํธ ๋จธ์ ์ ๋ณต์ฌํ๊ณ ๊ธฐ์กด
server-ca.pem
ํ์ผ์ ๋์ฒดํ์ฌ ๋ชจ๋ ํด๋ผ์ด์ธํธ์์ ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
๊ณต์ CA์์ ๋ฐ๊ธํ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค์ ๊ฒฝ์ฐ:
- ์๋ฒ ์ธ์ฆ์์ ๊ดํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด sql ssl server-certs list ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud sql ssl server-certs list \ --instance=INSTANCE_NAME
- ์๋ฒ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด sql ssl server-certs create ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud sql ssl server-certs create \ --instance=INSTANCE_NAME
- ์ธ์ฆ์ ์ ๋ณด๋ฅผ ๋ก์ปฌ PEM ํ์ผ๋ก ๋ค์ด๋ก๋ํฉ๋๋ค.
gcloud sql ssl server-certs list \ --format="value(ca_cert.cert)" \ --instance=INSTANCE_NAME > \ FILE_PATH/FILE_NAME.pem
- ๋ค์ด๋ก๋ํ ํ์ผ์ ํด๋ผ์ด์ธํธ ํธ์คํธ ๋จธ์ ์ ๋ณต์ฌํ๊ณ ๊ธฐ์กด
server-ca.pem
ํ์ผ์ ๋์ฒดํ์ฌ ๋ชจ๋ ํด๋ผ์ด์ธํธ์์ ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
Terraform
์๋ฒ ์ธ์ฆ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅ์ผ๋ก ์ ๊ณตํ๋ ค๋ฉด Terraform ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Terraform ๊ตฌ์ฑ ํ์ผ์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.
data "google_sql_ca_certs" "ca_certs" { instance = google_sql_database_instance.default.name } locals { furthest_expiration_time = reverse(sort([for k, v in data.google_sql_ca_certs.ca_certs.certs : v.expiration_time]))[0] latest_ca_cert = [for v in data.google_sql_ca_certs.ca_certs.certs : v.cert if v.expiration_time == local.furthest_expiration_time] } output "db_latest_ca_cert" { description = "Latest CA certificate used by the primary database server" value = local.latest_ca_cert sensitive = true }
server-ca.pem
ํ์ผ์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.terraform output db_latest_ca_cert > server-ca.pem
ํด๋ผ์ด์ธํธ ์ธ์ฆ์
์ ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ๋ง๋ค๊ธฐ
์ธ์คํด์ค๋น ์ต๋ 10๊ฐ์ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด Cloud SQL Admin
IAM ์ญํ ์ด ์์ด์ผ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ๋ํด ์์์ผ ํ ๋ช ๊ฐ์ง ์ค์ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ธ์ฆ์์ ๋น๊ณต๊ฐ ํค๋ฅผ ๋ถ์คํ ๊ฒฝ์ฐ, ์ ํค๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋น๊ณต๊ฐ ํค๋ ๋ณต๊ตฌํ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ๋ง๋ฃ์ผ์ 10๋ ์ ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ๋ง๋ฃ๊ฐ ๊ฐ๊น์์ง๋ฉด ์๋ฆผ์ด ๋ฐ์ก๋์ง ์์ต๋๋ค.
- SSL ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด Cloud SQL ์ธ์คํด์ค๊ฐ ์คํ ์ค ์ํ์ฌ์ผ ํฉ๋๋ค.
์ฝ์
-
Google Cloud ์ฝ์์์ Cloud SQL ์ธ์คํด์ค ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์คํด์ค์ ๊ฐ์ ํ์ด์ง๋ฅผ ์ด๋ ค๋ฉด ์ธ์คํด์ค ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- SQL ํ์ ๋ฉ๋ด์์ ์ฐ๊ฒฐ์ ํด๋ฆญํฉ๋๋ค.
- ๋ณด์ ํญ์ ์ ํํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ๋ง๋ค๊ธฐ ๋ํ์์์์ ๊ณ ์ ์ด๋ฆ์ ์ถ๊ฐํฉ๋๋ค.
- ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ SSL ์ธ์ฆ์๊ฐ ์์ฑ๋จ ๋ํ์์์ ์ฒซ ๋ฒ์งธ ์น์
์์ client-key.pem ๋ค์ด๋ก๋๋ฅผ ํด๋ฆญํ์ฌ ๋น๊ณต๊ฐ ํค๋ฅผ
client-key.pem
ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. - ๋ ๋ฒ์งธ ์น์
์์ client-cert.pem ๋ค์ด๋ก๋๋ฅผ ํด๋ฆญํ์ฌ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ
client-cert.pem
ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. - ์ธ ๋ฒ์งธ ์น์
์์ server-ca.pem ๋ค์ด๋ก๋๋ฅผ ํด๋ฆญํ์ฌ ์๋ฒ ์ธ์ฆ์๋ฅผ
server-ca.pem
ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. - ๋ซ๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
ssl client-certs create
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๋ง๋ญ๋๋ค.gcloud sql ssl client-certs create CERT_NAME client-key.pem \ --instance=INSTANCE_NAME
ssl client-certs describe
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฉ๊ธ ๋ง๋ ์ธ์ฆ์์ ๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ์ฌclient-cert.pem
ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.gcloud sql ssl client-certs describe CERT_NAME \ --instance=INSTANCE_NAME \ --format="value(cert)" > client-cert.pem
instances describe
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ์ธ์ฆ์๋ฅผserver-ca.pem
ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.gcloud sql instances describe INSTANCE_NAME \ --format="value(serverCaCert.cert)" > server-ca.pem
Terraform
ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด Terraform ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
REST v1
SSL/TLS ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด ์ด ์ธ์คํด์ค์ ๊ณ ์ ํ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- project-id: ํ๋ก์ ํธ ID
- instance-id: ์ธ์คํด์ค ID
- client-cert-name: ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ด๋ฆ
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "commonName" : "client-cert-name" }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
-
๋ค์๊ณผ ๊ฐ์ด ์๋ต์์ ๋ฐ์ดํ ์์ ์๋ ๋ชจ๋ ์ธ์ฆ์ ์ฝํ
์ธ (๋ฐ์ดํ๋ ์ ์ธ)๋ฅผ ๋ก์ปฌ ํ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.
serverCaCert.cert
๋ฅผserver-ca.pem
์ ๋ณต์ฌํฉ๋๋ค.clientCert.cert
๋ฅผclient-cert.pem
์ ๋ณต์ฌํฉ๋๋ค.certPrivateKey
๋ฅผclient-key.pem
์ ๋ณต์ฌํฉ๋๋ค.
REST v1beta4
SSL/TLS ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด ์ด ์ธ์คํด์ค์ ๊ณ ์ ํ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- project-id: ํ๋ก์ ํธ ID
- instance-id: ์ธ์คํด์ค ID
- client-cert-name: ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ด๋ฆ
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "commonName" : "client-cert-name" }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
-
๋ค์๊ณผ ๊ฐ์ด ์๋ต์์ ๋ฐ์ดํ ์์ ์๋ ๋ชจ๋ ์ธ์ฆ์ ์ฝํ
์ธ (๋ฐ์ดํ๋ ์ ์ธ)๋ฅผ ๋ก์ปฌ ํ์ผ๋ก ๋ณต์ฌํฉ๋๋ค.
serverCaCert.cert
๋ฅผserver-ca.pem
์ ๋ณต์ฌํฉ๋๋ค.clientCert.cert
๋ฅผclient-cert.pem
์ ๋ณต์ฌํฉ๋๋ค.certPrivateKey
๋ฅผclient-key.pem
์ ๋ณต์ฌํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ์คํํ๋ฉด ๋ค์์ ๋ณด์ ํ๊ฒ ๋ฉ๋๋ค.
server-ca.pem
์ผ๋ก ์ ์ฅ๋ ์๋ฒ ์ธ์ฆ์client-cert.pem
์ผ๋ก ์ ์ฅ๋ ํด๋ผ์ด์ธํธ ๊ณต๊ฐ ํค ์ธ์ฆ์client-key.pem
์ผ๋ก ์ ์ฅ๋ ํด๋ผ์ด์ธํธ ๋น๊ณต๊ฐ ํค
sslrootcert
, sslcert
, sslkey
๋งค๊ฐ๋ณ์ ๊ฐ์
๋๋ค. psql ํด๋ผ์ด์ธํธ์ SSL/TLS๋ฅผ ์ฌ์ฉํ ์ฐ๊ฒฐ ์์๋ psql ํด๋ผ์ด์ธํธ๋ก ์ฐ๊ฒฐ์ ์ฐธ์กฐํ์ธ์.
์๋ฒ ๋ณธ์ธ ์ธ์ฆ
์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ Cloud SQL ์ธ์คํด์ค์ ์๋ฒ ์ธ์ฆ ๊ธฐ๊ด(CA) ๊ณ์ธต ๊ตฌ์กฐ ๊ตฌ์ฑ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์ธ์คํด์ค๋ณ CA๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค์ ๊ฒฝ์ฐ ๊ฐ ์ธ์คํด์ค์ ๊ณ ์ ํ CA๊ฐ ์์ผ๋ฏ๋ก CA๋ฅผ ํ์ธํ๋ฉด ์๋ฒ ID๋ ํ์ธ๋ฉ๋๋ค. ๊ณต์ CA๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค์ ๊ฒฝ์ฐ ์๋ฒ CA๊ฐ ์ธ์คํด์ค ๊ฐ์ ๊ณต์ ๋๋ฏ๋ก ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์ํด CA ํ์ธ๊ณผ ํจ๊ป ํธ์คํธ ์ด๋ฆ ํ์ธ์ด ํ์ํฉ๋๋ค.
์ธ์คํด์ค๋ณ CA๊ฐ ์๋ ๊ฒฝ์ฐ Private Service Connect๋ก ๊ตฌ์ฑ๋ ์ธ์คํด์ค์ ๋ํด์๋ง DNS ์ด๋ฆ ๊ธฐ๋ฐ ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์ํํ ์ ์์ต๋๋ค. ๊ณต์ CA๊ฐ ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ํ์ ์ธ์คํด์ค(์: Private Service Connect, ๋น๊ณต๊ฐ ์๋น์ค ์ก์ธ์ค, ๊ณต๊ฐ IP ์ธ์คํด์ค)์ ๋ํด DNS ์ด๋ฆ ๊ธฐ๋ฐ ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์ํํ ์ ์์ต๋๋ค.
๊ณ ๊ฐ ๊ด๋ฆฌ CA๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ CA ์ ๋ขฐ ์ฒด์ธ์ ํ์ธํ๊ณ serverCAmode
์ ๊ณ ๊ฐ ๊ด๋ฆฌ CA๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ ํ์ ์ธ์คํด์ค์ ๋ํด DNS ์ด๋ฆ ๊ธฐ๋ฐ ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์คํํ ์ ์์ต๋๋ค.
์ธ์คํด์ค์ ๊ณ ๊ฐ ๊ด๋ฆฌ CA ์ต์ ์ ์ ํํ๋ฉด ์๋ฒ ์ธ์ฆ์์ SAN ํ๋์ ์ปค์คํ DNS ์ด๋ฆ์ ์ฝ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ปค์คํ SAN ํ๋ ์์ ์ ์ฐธ์กฐํ์ธ์.
์ธ์คํด์ค ์ธ๋ถ์ ๋ณด๋ฅผ ํ์ธํ์ฌ Cloud SQL ์ธ์คํด์ค์ ๊ตฌ์ฑ๋ CA ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ธ์คํด์ค ์ ๋ณด ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฒ ๋ณธ์ธ ์ธ์ฆ ์ฌ์ฉ ์ค์
๊ณต์ CA๋ฅผ Cloud SQL ์ธ์คํด์ค์ ์๋ฒ CA ๋ชจ๋๋ก ์ ํํ๊ฑฐ๋ ์ปค์คํ SAN ๊ฐ์ ์ฌ์ฉํ์ฌ ์ปค์คํ DNS ์ด๋ฆ์ ์ค์ ํ๋ ๊ฒฝ์ฐ ์๋ฒ ๋ณธ์ธ ์ธ์ฆ๋ ์ฌ์ฉ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ณต์ CA๋ฅผ ์๋ฒ CA ๋ชจ๋๋ก ์ฌ์ฉํ๋ ์ธ์คํด์ค์๋ ์๋ฒ ์ธ์ฆ์์ ์ฃผ์ฒด ๋์ฒด ์ด๋ฆ(SAN) ํ๋์ ์ธ์คํด์ค DNS ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. ์ธ์คํด์ค ์กฐํ API๋ฅผ ์ฌ์ฉํ๊ณ ์๋ต์ ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์ํ ํธ์คํธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ์ฌ ์ด DNS ์ด๋ฆ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. DNS ์ด๋ฆ์ DNS ๋ณํ์ ์ค์ ํด์ผ ํฉ๋๋ค.
๊ณต์ CA๋ฅผ ์ฌ์ฉํ๋ ์ธ์คํด์ค์ ๋ํด ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํ์ธ์.
DNS ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค.
์ธ์คํด์ค์ DNS ์ด๋ฆ์ ํฌํจํ์ฌ Cloud SQL ์ธ์คํด์ค์ ๋ํ ์์ฝ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
gcloud sql instances describe
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
๋ค์์ ๋ฐ๊ฟ๋๋ค.
- INSTANCE_NAME: Cloud SQL ์ธ์คํด์ค์ ์ด๋ฆ
- PROJECT_ID: ์ธ์คํด์ค๊ฐ ํฌํจ๋ Google Cloud ํ๋ก์ ํธ์ ID ๋๋ ํ๋ก์ ํธ ๋ฒํธ
์๋ต์์
dnsNames:
ํ๋๋ฅผ ์ฐพ์ต๋๋ค. ์ด ํ๋๋ ๋ค์ ํ์์ DNS ์ด๋ฆ์ ์ฌ๋ฌ ๊ฐ ๋ฐํํ ์ ์์ต๋๋ค.๋คํธ์ํฌ ๊ตฌ์ฑ DNS ์ด๋ฆ ํ์ ์ด๋ฆ ์์ค Private Service Connect ๋๋ ๊ณต๊ฐ IP ์ฃผ์ INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.
์์:
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
์ธ์คํด์ค ๋น๊ณต๊ฐ ์๋น์ค ์ก์ธ์ค INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql-psa.goog.
์์:
1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
์ธ์คํด์ค
DNS ์์ญ์์ DNS ๋ ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค. ๋น๊ณต๊ฐ๋ก ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ํ๋ผ์ด๋น ํด๋ผ์ฐ๋(VPC) ๋คํธ์ํฌ์ ๋น๊ณต๊ฐ DNS ์์ญ์ DNS ๋ ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค.
PostgreSQL์ฉ Cloud SQL ์ธ์คํด์ค์ ์ฐ๊ฒฐํ ๋ DNS ์ด๋ฆ์ ํธ์คํธ ์ด๋ฆ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ ๋ณธ์ธ ์ธ์ฆ์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด
psql
ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ๋๋sslmode=verify-full
ํ๋๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค. ๋ค๋ฅธ PostgreSQL ํด๋ผ์ด์ธํธ ๋๋ผ์ด๋ฒ์๋ ์ ์ฌํ ๊ตฌ์ฑ ํ๋๊ทธ๊ฐ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ
- Cloud SQL ์ธ์คํด์ค์์ SSL/TLS ๊ด๋ฆฌํ๊ธฐ
- Google Cloud์์ ์ํธํ๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
- SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ Cloud SQL ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๊ธฐ
- PostgreSQL์ SSL/TLS ์ธ์ฆ์ ์ฌ์ฉ ๋ฐฉ๋ฒ ์์ธํ ์์๋ณด๊ธฐ