CREATE SECURITY INTEGRATION(External API ์ธ์ฆ)ยถ
๊ณ์ ์ External API ์ธ์ฆ์ ์ํ ์ ๋ณด์ ํตํฉ์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํตํฉ์ ๋ฐ๊ฟ๋๋ค.
๋ค๋ฅธ ์ ํ์ ๋ณด์ ํตํฉ(์: External OAuth) ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ CREATE SECURITY INTEGRATION ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ์ฐธ๊ณ ํญ๋ชฉ:
ALTER SECURITY INTEGRATION(External API ์ธ์ฆ) , DESCRIBE INTEGRATION , DROP INTEGRATION , SHOW INTEGRATIONS
๊ตฌ๋ฌธยถ
OAuth: ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช ยถ
CREATE SECURITY INTEGRATION <name>
TYPE = API_AUTHENTICATION
AUTH_TYPE = OAUTH2
ENABLED = { TRUE | FALSE }
[ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
[ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
[ OAUTH_CLIENT_ID = '<string_literal>' ]
[ OAUTH_CLIENT_SECRET = '<string_literal>' ]
[ OAUTH_GRANT = 'CLIENT_CREDENTIALS']
[ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
[ OAUTH_ALLOWED_SCOPES = ( '<scope_1>' [ , '<scope_2>' ... ] ) ]
[ COMMENT = '<string_literal>' ]
OAuth: JWT ์ ๋ฌ์ ํ๋ฆยถ
CREATE SECURITY INTEGRATION <name>
TYPE = API_AUTHENTICATION
AUTH_TYPE = OAUTH2
ENABLED = { TRUE | FALSE }
[ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
[ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
[ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
[ OAUTH_CLIENT_ID = '<string_literal>' ]
[ OAUTH_CLIENT_SECRET = '<string_literal>' ]
[ OAUTH_GRANT = 'JWT_BEARER']
[ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
[ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
[ COMMENT = '<string_literal>' ]
ํ์ ๋งค๊ฐ ๋ณ์ยถ
name
ํตํฉ์ ์๋ณ์(์ฆ, ์ด๋ฆ)๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ๊ฐ์ ๊ณ์ ์์ ๊ณ ์ ํด์ผ ํฉ๋๋ค.
๋ํ, ์๋ณ์๋ ์ํ๋ฒณ ๋ฌธ์๋ก ์์ํด์ผ ํ๋ฉฐ ์ ์ฒด ์๋ณ์ ๋ฌธ์์ด์ ํฐ๋ฐ์ดํ(์: โMy objectโ)๋ก ๋ฌถ์ง ์๋ ํ ๊ณต๋ฐฑ์ด๋ ํน์ ๋ฌธ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ธ ์๋ณ์๋ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ์๋ณ์ ์๊ตฌ ์ฌํญ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
TYPE = API_AUTHENTICATION
External API Authentication๊ณผ ํจ๊ป OAuth 2.0์ ์ฌ์ฉํ๋ ์ธ๋ถ ์๋น์ค์ Snowflake ์ฌ์ด์ ๋ณด์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋๋ก ์ง์ ํฉ๋๋ค.
AUTH_TYPE = OAUTH2
ํตํฉ์์ OAuth 2.0์ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์๋น์ค์ ๋ํด ์ธ์ฆํ๋๋ก ์ง์ ํฉ๋๋ค.
ENABLED = { TRUE | FALSE }
์ด ๋ณด์ ํตํฉ์ ์ฌ์ฉํ ์ง, ์ฌ์ฉํ์ง ์์์ง ์ง์ ํฉ๋๋ค.
TRUE
ํตํฉ ์ ์์ ์ง์ ๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํตํฉ์ ์คํํ ์ ์์ต๋๋ค.
FALSE
์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํด ํตํฉ์ด ์ผ์ ์ค๋จ๋ฉ๋๋ค. Snowflake์ ์๋ ํํฐ ์๋น์ค ๊ฐ์ ํตํฉ์ด ์๋ํ์ง ์์ต๋๋ค.
์ ํ์ ๋งค๊ฐ ๋ณ์ยถ
๋ค์์ ๊ตฌ์ฑํ ์ ์๋ ๋ชจ๋ ๋งค๊ฐ ๋ณ์์ ๋ชฉ๋ก์ ๋๋ค. ์ ํํ๋ OAuth ํ๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์ํฌ๋ฆฟ์ ๋ง๋ค ๋ ๊ตฌ์ฑํ๋ ๋งค๊ฐ ๋ณ์์ ์ผ์นํ๋๋ก ํตํฉ์์ ๋งค๊ฐ ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
OAUTH_AUTHORIZATION_ENDPOINT = 'string_literal'
์ธ๋ถ ์๋น์ค์ ์ธ์ฆํ๊ธฐ ์ํ URL์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ServiceNow ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ค๋ฉด URL์ด ๋ค์ ํ์์ด์ด์ผ ํฉ๋๋ค.
https://<instance_name>.service-now.com/oauth_token
์ฌ๊ธฐ์
instance_name
์ ServiceNow ์ธ์คํด์ค์ ์ด๋ฆ์ ๋๋ค.OAUTH_TOKEN_ENDPOINT = 'string_literal'
๊ถํ ๋ถ์ฌ ๋๋ ์๋ก ๊ณ ์นจ ํ ํฐ์ ์ ์ํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์ป๊ธฐ ์ํด ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ํ ํฐ ์๋ํฌ์ธํธ๋ฅผ ์ง์ ํฉ๋๋ค. (์ก์ธ์ค ํ ํฐ์ด ์ง์ ๋ฐํ๋๋ฏ๋ก) ํ ํฐ ์๋ํฌ์ธํธ๋ ์์์ ๊ถํ ๋ถ์ฌ ์ ํ์ ์ ์ธํ ๋ชจ๋ ๊ถํ ๋ถ์ฌ์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
POST๊ฐ ์ธ๋ถ ์๋น์ค์ ๋ํ ์ธ์ฆ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋๋๋ก ์ง์ ํฉ๋๋ค.
OAUTH_CLIENT_ID = 'string_literal'
์ธ๋ถ ์๋น์ค์ OAuth ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ํด๋ผ์ด์ธํธ ID๋ฅผ ์ง์ ํฉ๋๋ค.
OAUTH_CLIENT_SECRET = 'string_literal'
์ด์ ๋จ๊ณ์์ ServiceNow ์ธ์คํด์ค์ OAuth ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ์ง์ ํฉ๋๋ค. ์ปค๋ฅํฐ๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ServiceNow ์ธ์คํด์ค์์ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํฉ๋๋ค.
OAUTH_GRANT = 'string_literal'
OAuth ํ๋ฆ์ ์ ํ์ ์ง์ ํฉ๋๋ค. ๋ค์ ์ค ํ๋:
ํตํฉ์์ ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ ๋
'CLIENT_CREDENTIALS'
.ํตํฉ์์ ์ธ์ฆ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋
'AUTHORIZATION_CODE'
.ํตํฉ์์ ์ ํ JWT์ ์ ๋ฌ์ ํ ํฐ(JSON ์น ํ ํฐ)์ ์ฌ์ฉํ ๋
'JWT_BEARER'
.
OAUTH_ACCESS_TOKEN_VALIDITY = integer
OAuth ์๋ฒ์์ ๋ฐ๊ธํ OAuth ์ก์ธ์ค ํ ํฐ์ ๊ธฐ๋ณธ ์๋ช (์ด)์ ์ง์ ํฉ๋๋ค.
์ก์ธ์ค ํ ํฐ ์๋ช ์ด OAuth ํ ํฐ ์๋ต์ ์ผ๋ถ๋ก ๋ฐํ๋์ง ์๋ ๊ฒฝ์ฐ์ ์ด ์์ฑ์ ์ค์ ๋ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ ๊ฐ ์ค ๋ ์์ ๊ฐ์ด ์ก์ธ์ค ํ ํฐ์ ์๋ก ๊ณ ์น๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
OAUTH_REFRESH_TOKEN_VALIDITY = integer
OAuth ์๋ฒ์์ ์ป์ ์๋ก ๊ณ ์นจ ํ ํฐ์ ์ ํจ์ฑ์ ํ๋ณํ๊ธฐ ์ํ ๊ฐ์ ์ง์ ํฉ๋๋ค.
OAUTH_ALLOWED_SCOPES = ( 'scope_1' [ , 'scope_2' ... ] )
OAuth ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช ํ๋ฆ ์ค์ ํตํฉ์์ USAGE๊ฐ ์๋ ์ญํ ๋ก OAuth์์ ์์ฒญํ ๋ ์ฌ์ฉํ ๋ฒ์์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ ์ง์ ํ๋ฉฐ, ๊ฐ ๋ฒ์๋ ์์๋ฐ์ดํ๋ก ๋ฌถ์ต๋๋ค.
์ด ๋ชฉ๋ก์ ๋ณด์ ํตํฉ์
OAUTH_ALLOWED_SCOPES
์์ฑ์ ์ ์๋ ๋ฒ์์ ํ์ ์ธํธ์ฌ์ผ ํฉ๋๋ค.OAUTH_SCOPES
์์ฑ ๊ฐ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ๋น๋ฐ๋ฒํธ๋ ๋ณด์ ํตํฉ์ ์ง์ ๋ ๋ชจ๋ ๋ฒ์๋ฅผ ์์ํฉ๋๋ค.ServiceNow ์ปค๋ฅํฐ์ ๊ฒฝ์ฐ ์ ์ผํ๊ฒ ๊ฐ๋ฅํ ๋ฒ์ ๊ฐ์
'useraccount'
์ ๋๋ค.๊ธฐ๋ณธ๊ฐ: ๋น ๋ชฉ๋ก(์ฆ,
[]
).COMMENT = 'string_literal'
ํตํฉ์ ๋ํ ์ค๋ช ์ ์ง์ ํฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ: ๊ฐ ์์
์ก์ธ์ค ์ ์ด ์๊ตฌ ์ฌํญยถ
์ด ์์ ์ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ญํ ์๋ ์ต์ํ ๋ค์ ๊ถํ ์ด ์์ด์ผ ํฉ๋๋ค.
๊ถํ |
์ค๋ธ์ ํธ |
์ฐธ๊ณ |
---|---|---|
CREATE INTEGRATION |
๊ณ์ |
Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed. |
์ง์ ๋ ๊ถํ ์ธํธ๋ก ์ฌ์ฉ์ ์ง์ ์ญํ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ฌ์ฉ์ ์ง์ ์ญํ ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ณด์ ์ค๋ธ์ ํธ ์ ๋ํด SQL ์์ ์ ์ํํ๊ธฐ ์ํ ์ญํ ๊ณผ ๊ถํ ๋ถ์ฌ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ ์ก์ธ์ค ์ ์ด์ ๊ฐ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฌ์ฉ๋ฒ ๋ ธํธยถ
๋ฉํ๋ฐ์ดํฐ ๊ด๋ จ:
์ฃผ์
๊ณ ๊ฐ์ Snowflake ์๋น์ค๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ธ ๋ฐ์ดํฐ(์ฌ์ฉ์ ์ค๋ธ์ ํธ ์ ์ธ), ๋ฏผ๊ฐํ ๋ฐ์ดํฐ, ์์ถ ํต์ ๋์ ๋ฐ์ดํฐ ๋๋ ๊ธฐํ ๊ท์ ๋ฐ์ดํฐ๊ฐ ๋ฉํ๋ฐ์ดํฐ๋ก ์ ๋ ฅ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Snowflake์ ๋ฉํ๋ฐ์ดํฐ ํ๋ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
CREATE OR REPLACE <์ค๋ธ์ ํธ> ๋ฌธ์ ์์์ฑ์ ๋๋ค. ์ฆ, ์ค๋ธ์ ํธ๊ฐ ๋ฐ๋ ๋ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ด์ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋๊ณ ์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
์ยถ
์ฝ๋ ๊ถํ ๋ถ์ฌ ํ๋ฆ๊ณผ ํจ๊ป OAuth๋ฅผ ์ฌ์ฉํ์ฌ Snowflake๋ฅผ myinstance
๋ผ๋ ServiceNow ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด servicenow_oauth
๋ผ๋ ๋ณด์ ํตํฉ์ ๋ง๋ญ๋๋ค.
CREATE SECURITY INTEGRATION servicenow_oauth TYPE = API_AUTHENTICATION AUTH_TYPE = OAUTH2 OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST OAUTH_CLIENT_ID = 'sn-oauth-134o9erqfedlc' OAUTH_CLIENT_SECRET = 'eb9vaXsrcEvrFdfcvCaoijhilj4fc' OAUTH_TOKEN_ENDPOINT = 'https://myinstance.service-now.com/oauth_token.do' ENABLED = TRUE;
sharepoint_security_integration
์ด๋ผ๋ ๋ณด์ ํตํฉ์ ๋ง๋ค์ด ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช
๊ณผ ํจ๊ป OAuth ๋ฅผ ์ฌ์ฉํ์ฌ Snowflake๋ฅผ Microsoft Sharepoint์ ์ฐ๊ฒฐํฉ๋๋ค.
CREATE SECURITY INTEGRATION sharepoint_security_integration TYPE = API_AUTHENTICATION AUTH_TYPE = OAUTH2 OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST OAUTH_CLIENT_ID = 'YOUR_CLIENT_ID' OAUTH_CLIENT_SECRET = 'YOUR_CLIENT_SECRET' OAUTH_GRANT = 'CLIENT_CREDENTIALS' OAUTH_TOKEN_ENDPOINT = 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token' OAUTH_ALLOWED_SCOPES = ('https://graph.microsoft.com/.default') ENABLED = TRUE;