๋ชฉํ
IAP๋ฅผ ์ฌ์ฉํ์ฌ App Engine ์ฑ ์ฌ์ฉ์๊ฐ ์์ ์ ์ธ์ฆํ๋๋ก ์๊ตฌํฉ๋๋ค.
์ฑ์ ์ฌ์ฉ์ ID์ ์ก์ธ์คํ์ฌ ํ์ฌ ์ฌ์ฉ์์ ์ธ์ฆ๋ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ํ์ํฉ๋๋ค.
๋น์ฉ
์ด ๋ฌธ์์์๋ ๋น์ฉ์ด ์ฒญ๊ตฌ๋ ์ ์๋ Google Cloud๊ตฌ์ฑ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ ํธ ์ฌ์ฉ๋์ ๊ธฐ์ค์ผ๋ก ์์ ๋น์ฉ์ ์ฐ์ถํ๋ ค๋ฉด ๊ฐ๊ฒฉ ๊ณ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ธ์.
์ด ๋ฌธ์์ ์ค๋ช ๋ ํ์คํฌ๋ฅผ ์๋ฃํ์ผ๋ฉด ๋ง๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ์ฌ ์ฒญ๊ตฌ๊ฐ ๊ณ์๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ญ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ํ๊ธฐ ์ ์
- Google Cloud ๊ณ์ ์ ๋ก๊ทธ์ธํฉ๋๋ค. Google Cloud๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณ์ ์ ๋ง๋ค๊ณ Google ์ ํ์ ์ค์ ์ฑ๋ฅ์ ํ๊ฐํด ๋ณด์ธ์. ์ ๊ท ๊ณ ๊ฐ์๊ฒ๋ ์ํฌ๋ก๋๋ฅผ ์คํ, ํ ์คํธ, ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ $300์ ๋ฌด๋ฃ ํฌ๋ ๋ง์ด ์ ๊ณต๋ฉ๋๋ค.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
๋ฐฐ๊ฒฝ
์ด ํํ ๋ฆฌ์ผ์์๋ IAP๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฐ๋ฅํ ์ ๊ทผ๋ฐฉ๋ฒ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค. ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ธ์ฆ ๊ฐ๋ ์น์ ์ ์ฐธ์กฐํ์ธ์.
Hello user-email-address ์ฑ
์ด ํํ ๋ฆฌ์ผ์ ์ฑ์ ์ต์ํ์ Hello World App Engine ์ฑ์ผ๋ก, ํ ๊ฐ์ง ๋น์ ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. 'Hello World' ๋์ 'Hello user-email-address'๋ฅผ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์ user-email-address๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์์
๋๋ค.
์ด ๊ธฐ๋ฅ์ IAP๊ฐ ์ฑ์ผ๋ก ์ ๋ฌํ๋ ๊ฐ ์น ์์ฒญ์ ์ถ๊ฐํ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฒํ ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฑ์ ๋๋ฌํ๋ ๊ฐ ์น ์์ฒญ์๋ 3๊ฐ์ ์๋ก์ด ์์ฒญ ํค๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ์ฒ์ ๋ ํค๋๋ ์ฌ์ฉ์๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ผ๋ฐ ํ ์คํธ ๋ฌธ์์ด์ ๋๋ค. ์ธ ๋ฒ์งธ ํค๋๋ ๋์ผ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ํธํ ์๋ช ๊ฐ์ฒด์ ๋๋ค.
X-Goog-Authenticated-User-Email: ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์๋ก ์๋ณํฉ๋๋ค. ์ฑ์์ ์ฌ์ฉํ์ง ์์ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ๋ง์ธ์. ์ด ์ฑ์ ์ด๋ ํ ๋ฐ์ดํฐ๋ ์ ์ฅํ์ง ์๊ณ ์ฌ์ฉ์์๊ฒ ๋ค์ ํ์ํฉ๋๋ค.X-Goog-Authenticated-User-Id: Google์์ ํ ๋นํ ์ด ์ฌ์ฉ์ ID๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ํ์ํ์ง ์์ง๋ง, ID๋ฅผ ํตํด ์ฑ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ์ด์ ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋์ผํ์ง ํ์ ํ ์ ์์ต๋๋ค.X-Goog-Iap-Jwt-Assertion: ์ธํฐ๋ท ์น ์์ฒญ ์ธ์๋ IAP๋ฅผ ์ฐํํ์ฌ ๋ค๋ฅธ ํด๋ผ์ฐ๋ ์ฑ์ ์น ์์ฒญ์ ์๋ฝํ๋๋ก Google Cloud ์ฑ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฑ์ด ์ด์ ๊ฐ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์์ฒญ์๋ ์์กฐ๋ ํค๋๊ฐ ์์ ์ ์์ต๋๋ค. ์์์ ์ธ๊ธํ ์ผ๋ฐ ํ ์คํธ ํค๋ ๋์ ์ด ์ํธํ ์๋ช ํค๋๋ฅผ ์ฌ์ฉํ์ฌ Google์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์์ ์๊ตฌ ์ฌ์ฉ์ ID ๋ชจ๋ ์๋ช ๋ ํค๋์ ์ผ๋ถ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ธํฐ๋ท ์น ์์ฒญ๋ง ์ ๋ฌํ ์ ์๋๋ก ์ฑ์ด ๊ตฌ์ฑ๋์ด ์๊ณ ์ฑ์ IAP ์๋น์ค๋ฅผ ์ฌ์ฉ ์ค์งํ ์ ์๋ ๊ฒฝ์ฐ, ์ ์ฌ์ฉ์ ID๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ์ฝ๋ ํ ์ค๋ก ์ถฉ๋ถํฉ๋๋ค.
user_id = request.headers.get('X-Goog-Authenticated-User-ID')
ํ์ง๋ง ํ๋ ฅ์ ์ธ ์ฑ์ ์๊ธฐ์น ๋ชปํ ๊ตฌ์ฑ ๋๋ ํ๊ฒฝ ๋ฌธ์ ๋ฅผ ๋น๋กฏํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ฏ๋ก ์ํธํ ์๋ช ํค๋๋ฅผ ์ฌ์ฉํ๊ณ ํ์ธํ๋ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ํค๋์ ์๋ช ์ ์์กฐํ ์ ์๊ณ , ํ์ธ๋๋ฉด ID๋ฅผ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ค ์ฝ๋ ๋ง๋ค๊ธฐ
ํ ์คํธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ
main.pyํ์ผ์ ๋ง๋ค๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.์ด
main.pyํ์ผ์ ์ด ํํ ๋ฆฌ์ผ์ ๋ท๋ถ๋ถ์ ์๋ ์ฝ๋ ์ดํดํ๊ธฐ ์น์ ์์ ์์ธํ ์ค๋ช ํฉ๋๋ค.requirements.txt์ด๋ผ๋ ๋ค๋ฅธ ํ์ผ์ ๋ง๋ค๊ณ ๋ค์์ ๋ถ์ฌ๋ฃ์ต๋๋ค.requirements.txtํ์ผ์๋ App Engine์์ ๋ก๋ํ๊ธฐ ์ํด ์ฑ์ ํ์ํ ๋ชจ๋ ๋นํ์ค Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ด๋ฉ๋๋ค.Flask๋ ์ฑ์ ์ฌ์ฉ๋๋ Python ์น ํ๋ ์์ํฌ์ ๋๋ค.cryptography๋ ๊ฐ๋ ฅํ ์ํธํ ํจ์๋ฅผ ์ ๊ณตํ๋ ๋ชจ๋์ ๋๋ค.python-jose[cryptography]๋ JWT ๊ฒ์ฌ ๋ฐ ๋์ฝ๋ฉ ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค.requests๋ ์น์ฌ์ดํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
app.yamlํ์ผ์ ๋ง๋ค๊ณ ๋ค์ ํ ์คํธ๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.app.yamlํ์ผ์ ์ฝ๋์ ํ์ํ ์ธ์ด ํ๊ฒฝ์ App Engine์ ์ง์ ํฉ๋๋ค.
์ฝ๋ ์ดํดํ๊ธฐ
์ด ์น์
์์๋ main.py์ ์ฝ๋๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ์ฑ๋ง ์คํํ๋ ค๋ฉด ์ฑ ๋ฐฐํฌ ์น์
์ผ๋ก ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
๋ค์ ์ฝ๋๋ main.py ํ์ผ์ ์์ต๋๋ค. ์ฑ์์ ํํ์ด์ง์ ๋ํ HTTP GET ์์ฒญ์ ์์ ํ๋ฉด Flask ํ๋ ์์ํฌ๊ฐ say_hello ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
say_hello ํจ์๋ ์์ ์์ฒญ์์ IAP๊ฐ ์ถ๊ฐํ JWT ์ด์ค์
ํค๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ํจ์๋ฅผ ํธ์ถํ์ฌ ํด๋น ์ํธํ ์๋ช
๊ฐ์ ๊ฒ์ฆํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐํ๋ ์ฒซ ๋ฒ์งธ ๊ฐ(์ด๋ฉ์ผ)์ด ๊ฐ์ ๋ง๋ค๊ณ ๋ฐํํ๋ ์ต์ ์นํ์ด์ง์์ ์ฌ์ฉ๋ฉ๋๋ค.
validate_assertion ํจ์๋ ์ 3์ jose ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ jwt.decode ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ค์
์ด ์ ์ ํ๊ฒ ์๋ช
๋์ด ์๋์ง ํ์ธํ๊ณ ์ด์ค์
์์ ํ์ด๋ก๋ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค. ์ด ์ ๋ณด๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์์ด๋ฉฐ ์ฌ์ฉ์์ ์๊ตฌ ๊ณ ์ ID์
๋๋ค.
์ด์ค์
์ ๋์ฝ๋ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ด ํจ์๋ ๊ฐ ๊ฐ์ ๋ํด None์ ๋ฐํํ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ฌ ์ค๋ฅ๋ฅผ ๋ก๊น
ํฉ๋๋ค.
JWT ์ด์ค์ ์ ๊ฒ์ฆํ๋ ค๋ฉด ์ด์ค์ ์ ์๋ช ํ ๊ฐ์ฒด(์ด ๊ฒฝ์ฐ Google)์ ๊ณต๊ฐ ํค ์ธ์ฆ์์ ์ด ์ด์ค์ ์ ๋์์ธ ์ ์ฌ๊ณ ๊ฐ์ ํ์ ํด์ผ ํฉ๋๋ค. App Engine ์ฑ์ ๊ฒฝ์ฐ ์ ์ฌ๊ณ ๊ฐ์ Google Cloud ํ๋ก์ ํธ ์๋ณ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ฌธ์์ด์ ๋๋ค. ์ด ํจ์๋ ์์ ํจ์์์ ์ ์ฌ๊ณ ๊ฐ ๋ฌธ์์ด๊ณผ ์ธ์ฆ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
Google Cloud ํ๋ก์ ํธ์ ์ซ์ ID์ ์ด๋ฆ์ ์กฐํํ์ฌ ์์ค ์ฝ๋์ ์ง์ ๋ฃ์ ์๋ ์์ง๋ง audience ํจ์๋ ๋ชจ๋ App Engine ์ฑ์ ์ ๊ณต๋๋ ํ์ค ๋ฉํ๋ฐ์ดํฐ ์๋น์ค๋ฅผ ์ฟผ๋ฆฌํ์ฌ ์ด ์์
์ ๋์ ์คํํฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ ์๋น์ค๋ ์ฑ ์ฝ๋ ์ธ๋ถ์ ์์ผ๋ฏ๋ก ๊ฒฐ๊ณผ๋ ํ์ ํธ์ถ์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ง ์๊ณ ๋ ๋ฐํ๋๋ ์ ์ญ ๋ณ์์ ์ ์ฅ๋ฉ๋๋ค.
App Engine ๋ฉํ๋ฐ์ดํฐ ์๋น์ค (๋ฐ ๊ธฐํGoogle Cloud ์ปดํจํ
์๋น์ค์ ์ ์ฌํ ๋ฉํ๋ฐ์ดํฐ ์๋น์ค)๋ ์น์ฌ์ดํธ์ ์ ์ฌํ๋ฉฐ ํ์ค ์น ์ฟผ๋ฆฌ๋ก ์ฟผ๋ฆฌ๋ฉ๋๋ค. ํ์ง๋ง ์ค์ ๋ก๋ ์ธ๋ถ ์ฌ์ดํธ๊ฐ ์๋๋ผ ์คํ ์ค์ธ ์ฑ์ ๊ดํด ์์ฒญ๋ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ๋ด๋ถ ๊ธฐ๋ฅ์ด๋ฏ๋ก https ์์ฒญ ๋์ http๋ฅผ ์ฌ์ฉํด๋ ์์ ํฉ๋๋ค.
JWT ์ด์ค์
์ ๋์ ์ ์ฌ๊ณ ๊ฐ์ ์ ์ํ๋ ๋ฐ ํ์ํ ํ์ฌ Google Cloud ์๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋์งํธ ์๋ช ์ ๊ฒ์ฆํ๋ ค๋ฉด ์๋ช ์์ ๊ณต๊ฐ ํค ์ธ์ฆ์๊ฐ ํ์ํฉ๋๋ค. Google์์๋ ํ์ฌ ์ฌ์ฉ๋๋ ๋ชจ๋ ๊ณต๊ฐ ํค ์ธ์ฆ์๋ฅผ ๋ฐํํ๋ ์น์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ฒฐ๊ณผ๋ ๋์ผํ ์ฑ ์ธ์คํด์ค์์ ๋ค์ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ์ํด ์บ์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ฑ ๋ฐฐํฌ
์ด์ ์ฑ์ ๋ฐฐํฌํ ๋ค์ IAP๋ฅผ ์ฌ์ฉ ์ค์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฑ์ ์ก์ธ์คํ๊ธฐ ์ ์ ์ธ์ฆํ๋๋ก ํฉ๋๋ค.
ํฐ๋ฏธ๋ ์ฐฝ์์
app.yamlํ์ผ์ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ฑ์ App Engine์ ๋ฐฐํฌํฉ๋๋ค.gcloud app deploy๋ฉ์์ง๊ฐ ํ์๋๋ฉด ์ธ๊ทผ ๋ฆฌ์ ์ ์ ํํฉ๋๋ค.
๋ฐฐํฌ ์์ ์ ๊ณ์ํ ์ง ๋ฌป๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด
Y๋ฅผ ์ ๋ ฅํฉ๋๋ค.๋ช ๋ถ ๋ด์ ์ฑ์ด ์ธํฐ๋ท์ ๊ฒ์๋ฉ๋๋ค.
์ฑ์ ํ์ธํฉ๋๋ค.
gcloud app browse์ถ๋ ฅ์์ ์ฑ์ ์น ์ฃผ์์ธ
web-site-url์ ๋ณต์ฌํฉ๋๋ค.๋ธ๋ผ์ฐ์ ์ฐฝ์์
web-site-url์ ๋ถ์ฌ๋ฃ์ด ์ฑ์ ์ฝ๋๋ค.์์ง IAP๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์ฑ์ผ๋ก ์ ์ก๋์ง ์์ผ๋ฏ๋ก ์ด๋ฉ์ผ์ด ํ์๋์ง ์์ต๋๋ค.
IAP ์ฌ์ฉ ์ค์
์ด์ App Engine ์ธ์คํด์ค๊ฐ ์์ฑ๋์์ผ๋ฏ๋ก IAP๋ฅผ ์ฌ์ฉํ์ฌ ๋ณดํธํ ์ ์์ต๋๋ค.
Google Cloud ์ฝ์์์ IAP(Identity-Aware Proxy) ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ด ํ๋ก์ ํธ์ ์ธ์ฆ ์ต์ ์ ์ฒ์ ์ฌ์ฉ ์ค์ ํ์ผ๋ฏ๋ก IAP๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ OAuth ๋์ ํ๋ฉด์ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
๋์ ํ๋ฉด ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ํ์ด์ง์ OAuth ๋์ ํ๋ฉด ํญ์์ ๋ค์ ํ๋๋ฅผ ์์ฑํฉ๋๋ค.
๊ณ์ ์ด Google Workspace ์กฐ์ง์ ์๋ ๊ฒฝ์ฐ ์ธ๋ถ๋ฅผ ์ ํํ๊ณ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค. ์ฐ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ ์ฌ์ฉ์๋ง ์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ ํ๋์
IAP Example์ ์ ๋ ฅํฉ๋๋ค.์ง์ ์ด๋ฉ์ผ ํ๋์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์น์ธ๋ ๋๋ฉ์ธ ํ๋์ ์ฑ URL์ ํธ์คํธ ์ด๋ฆ ๋ถ๋ถ์ ์ ๋ ฅํฉ๋๋ค(์:
iap-example-999999.uc.r.appspot.com). ํ๋์ ํธ์คํธ ์ด๋ฆ์ ์ ๋ ฅํ ํ์Enterํค๋ฅผ ๋๋ฆ ๋๋ค.์ ํ๋ฆฌ์ผ์ด์ ํํ์ด์ง ๋งํฌ ํ๋์ ์ฑ์ URL์ ์ ๋ ฅํฉ๋๋ค(์:
https://iap-example-999999.uc.r.appspot.com/).์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๋ฐฉ์นจ ํ ํ๋์ ํํ์ด์ง ๋งํฌ์ ๋์ผํ URL์ ํ ์คํธ์ฉ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ ์ฅ์ ํด๋ฆญํฉ๋๋ค. ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ง๋ค๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด ์ฐฝ์ ๋ซ์ ์ ์์ต๋๋ค.
Google Cloud ์ฝ์์์ IAP(Identity-Aware Proxy) ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํ์ด์ง๋ฅผ ์๋ก๊ณ ์น๋ ค๋ฉด ์๋ก๊ณ ์นจ refresh์ ํด๋ฆญํฉ๋๋ค. ๋ณดํธํ ์ ์๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ด ํ์ด์ง์ ํ์๋ฉ๋๋ค.
IAP ์ด์์ ์ฑ์ IAP๋ฅผ ํด๋ฆญํ์ฌ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์์
web-site-url๋ก ๋ค์ ์ด๋ํฉ๋๋ค.์นํ์ด์ง ๋์ ์์ ์ ์ธ์ฆํ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ด ํ์๋ฉ๋๋ค. IAP์ ์ฑ์ ํ์ฉํ ์ฌ์ฉ์ ๋ชฉ๋ก์ด ์์ผ๋ฏ๋ก ๋ก๊ทธ์ธํ๋ฉด ์ก์ธ์ค๊ฐ ๊ฑฐ๋ถ๋ฉ๋๋ค.
์ฑ์ ์น์ธ๋ ์ฌ์ฉ์ ์ถ๊ฐ
Google Cloud ์ฝ์์์ IAP(Identity-Aware Proxy) ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
App Engine ์ฑ์ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ ํํ ๋ค์ ์ฃผ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
allAuthenticatedUsers๋ฅผ ์ ๋ ฅํ ๋ค์ Cloud IAP/IAP ๋ณด์ ์น ์ฑ ์ฌ์ฉ์ ์ญํ ์ ์ ํํฉ๋๋ค.์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
์ด์ Google์์ ์ธ์ฆํ ์ ์๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฑ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ํ๋ ์ด์์ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์ ์ฃผ ๊ตฌ์ฑ์์ผ๋ก ์ถ๊ฐํ์ฌ ์ก์ธ์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
Gmail ๋๋ Google Workspace ์ด๋ฉ์ผ ์ฃผ์
Google ๊ทธ๋ฃน์ค ์ด๋ฉ์ผ ์ฃผ์
Google Workspace ๋๋ฉ์ธ ์ด๋ฆ
์ฑ์ ์ก์ธ์คํ๊ธฐ
๋ธ๋ผ์ฐ์ ์์
web-site-url๋ก ์ด๋ํฉ๋๋ค.ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ ค๋ฉด ์๋ก๊ณ ์นจrefresh์ ํด๋ฆญํฉ๋๋ค.
๋ก๊ทธ์ธ ํ๋ฉด์์ Google ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
ํ์ด์ง์ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ํฌํจ๋ 'Hello
user-email-address' ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค.์ด์ ๊ณผ ๋์ผํ ํ์ด์ง๊ฐ ๊ณ์ ํ์๋๋ ๊ฒฝ์ฐ, ์ด์ IAP๋ฅผ ์ฌ์ฉ ์ค์ ํ์ผ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์์ฒญ์ ์์ ํ ์ ๋ฐ์ดํธํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋ชจ๋ ๋ซ๊ณ ๋ค์ ์ฐ ๋ค์ ๋ค์ ์๋ํ์ธ์.
์ธ์ฆ ๊ฐ๋
์ฑ์ด ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ ์น์ธ๋ ์ฌ์ฉ์๋ก๋ง ์ก์ธ์ค๋ฅผ ์ ํํ ์ ์๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ฑ์ ๋ ์๊ณ ๋ก์ด ์์๋๋ก ๋ค์ ์น์ ์ ๋์ด๋์ด ์์ต๋๋ค.
| ์ต์ | ์ฅ์ | ๋จ์ |
|---|---|---|
| ์ฑ ์ธ์ฆ |
|
|
| OAuth2 |
|
|
| IAP |
|
|
์ฑ ๊ด๋ฆฌ ์ธ์ฆ
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฑ์ด ์ฌ์ฉ์ ์ธ์ฆ์ ๋ชจ๋ ์ธก๋ฉด์ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ฑ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฒด์ ์ผ๋ก ์ ์งํ๊ณ ์ฌ์ฉ์ ์ธ์ ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๋ํ ์ฌ์ฉ์ ๊ณ์ ๋ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ํ์ธํ๋ฉฐ, ์ธ์ฆ๋ ๊ฐ ๋ก๊ทธ์ธ์ผ๋ก ์ฌ์ฉ์ ์ธ์ ์ ๋ฐํ, ํ์ธ, ๋ฐ ์ ๋ฐ์ดํธํ ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ์ฑ ๊ด๋ฆฌ ์ธ์ฆ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
๋ค์ด์ด๊ทธ๋จ๊ณผ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ํ์ ์ฑ์ ์ฌ์ฉ์ ์ธ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ง๋ค๊ณ ์ ์งํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ฑ์ ์์ฒญํ ๋ ์์ฒญ์๋ ์ฑ์์ ํ์ธํด์ผ ํ๋ ์ธ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์ด ์ ๊ทผ๋ฐฉ๋ฒ์ ์ฃผ์ ์ฅ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๊ณ ์ฑ์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ ์ฑ์ด ์ธํฐ๋ท ์์ ์กด์ฌํ์ง ์์๋ ๋ฉ๋๋ค. ์ฃผ์ ๋จ์ ์ ์ฑ์์ ๋ชจ๋ ๊ณ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ๋ชจ๋ ๋ฏผ๊ฐํ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํด์ผ ํ๋ค๋ ์ ์ ๋๋ค.
OAuth2๋ฅผ ์ฌ์ฉํ ์ธ๋ถ ์ธ์ฆ
๋ชจ๋ ๊ฒ์ ์ฑ ๋ด์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋์์ผ๋ก๋ ์ฌ์ฉ์ ๊ณ์ ์ ๋ณด์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๊ณ ๋ฏผ๊ฐํ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณดํธํ๋ Google๊ณผ ๊ฐ์ ์ธ๋ถ ID ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ก๊ทธ์ธํ๋ ค๊ณ ํ๋ฉด ์์ฒญ์ด ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๋ ID ์๋น์ค๋ก ๋ฆฌ๋๋ ์ ๋ ํ์ ๋ค์ ํ์ํ ์ธ์ฆ ์ ๋ณด์ ํจ๊ป ์ฑ์ผ๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์น ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ OAuth 2.0 ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ๋ค์ด์ด๊ทธ๋จ์ OAuth2 ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ธ๋ถ ์ธ์ฆ์ ๋ณด์ฌ์ค๋๋ค.
๋ค์ด์ด๊ทธ๋จ์ ํ๋ฆ์ ์ฌ์ฉ์๊ฐ ์ฑ ์ก์ธ์ค ์์ฒญ์ ์ ์กํ๋ฉด ์์๋ฉ๋๋ค. ์ง์ ์๋ตํ๋ ๋์ ์ฑ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ Google์ Identity Platform์ผ๋ก ๋ฆฌ๋๋ ์ ํ์ฌ Google์ ๋ก๊ทธ์ธํ๋ ํ์ด์ง๋ฅผ ํ์ํฉ๋๋ค. ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ฉด ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ ์ฑ์ผ๋ก ๋์๊ฐ๋๋ค. ์ด ์์ฒญ์๋ ์ฑ์ด ์ธ์ฆ๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ ๋ณด๊ฐ ํฌํจ๋๋ฉฐ, ๋ฐ๋ก ์ฑ์ด ์ฌ์ฉ์์๊ฒ ์๋ตํฉ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฑ์ ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ ๊ณ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ๊ณผ ์ํ์ ์ธ๋ถ ์๋น์ค์ ์์ํ๋ฏ๋ก ์ฑ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋ก๊ทธ์ธ ๋ฐ ๊ณ์ ๋ณด์์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ๋ค์ด์ด๊ทธ๋จ์ ํ์๋ ๊ฒ์ฒ๋ผ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฑ์์ ์ธํฐ๋ท์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ ํ์ ์ฑ์์ ์ธ์ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
IAP(Identity-Aware Proxy)
์ด ํํ ๋ฆฌ์ผ์์ ๋ค๋ฃจ๋ ์ธ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ์ฑ์ ๋ณ๊ฒฝํ์ฌ ๋ชจ๋ ์ธ์ฆ ๋ฐ ์ธ์ ๊ด๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด IAP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. IAP๋ ์ฑ์ ๋ํ ๋ชจ๋ ์น ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ , ์ธ์ฆ๋์ง ์์ ์์ฒญ์ ์ฐจ๋จํ๋ฉฐ, ๊ฐ ์์ฒญ์ ์ฌ์ฉ์ ID ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋ค๋ฅธ ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
์์ฒญ ์ฒ๋ฆฌ๋ ๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ํ์๋ฉ๋๋ค.
์ฌ์ฉ์ ์์ฒญ์ IAP๊ฐ ๊ฐ๋ก์ฑ์ด ์ธ์ฆ๋์ง ์์ ์์ฒญ์ ์ฐจ๋จํฉ๋๋ค. ์ธ์ฆ๋ ์์ฒญ์ ์ฑ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ๋จ, ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ํ์ฉ๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ์์ด์ผ ํฉ๋๋ค. IAP๋ฅผ ํตํด ์ ๋ฌ๋ ์์ฒญ์๋ ํค๋๊ฐ ์ถ๊ฐ๋์ด ์์ฒญํ ์ฌ์ฉ์๋ฅผ ์๋ณํฉ๋๋ค.
์ฑ์ ๋ ์ด์ ์ฌ์ฉ์ ๊ณ์ ๋๋ ์ธ์ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์์ ๊ณ ์ ์๋ณ์๋ฅผ ์์์ผ ํ๋ ์์ ์ ์์ ๋๋ ๊ฐ ์น ์์ฒญ์์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ App Engine ๋ฐ ๋ถํ ๋ถ์ฐ๊ธฐ ๊ฐ์ด IAP๋ฅผ ์ง์ํ๋ ์ปดํจํ ์๋น์ค์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ก์ปฌ ๊ฐ๋ฐ ๋จธ์ ์์๋ IAP๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ญ์
์ด ํํ ๋ฆฌ์ผ์์ ์ฌ์ฉ๋ ๋ฆฌ์์ค ๋น์ฉ์ด Google Cloud ๊ณ์ ์ ์ฒญ๊ตฌ๋์ง ์๋๋ก ํ๋ ค๋ฉด ๋ฆฌ์์ค๊ฐ ํฌํจ๋ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ํ๋ก์ ํธ๋ฅผ ์ ์งํ๊ณ ๊ฐ๋ณ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ์ธ์.
- Google Cloud ์ฝ์์์ ๋ฆฌ์์ค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ํ๋ก์ ํธ ๋ชฉ๋ก์์ ์ญ์ ํ ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ํ์์์์ ํ๋ก์ ํธ ID๋ฅผ ์ ๋ ฅํ ํ ์ข ๋ฃ๋ฅผ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํฉ๋๋ค.