CREATE SECURITY INTEGRATION
CREATE SECURITY INTEGRATION (External secret provider)
워크로드 ID 연합(workload identity federation)을 사용해 AWS Secrets Manager, Azure Key Vault, 또는 Google Cloud Secret Manager에 접근하는 API 인증 보안 인티그레이션(security integration)을 만드는 명령이에요.
출처: 문서
본문
워크로드 ID 연합을 사용해 AWS Secrets Manager, Azure Key Vault, 또는 Google Cloud Secret Manager에 접근하는 API 인증 보안 인티그레이션을 만들어요.
다른 외부 API 인증 방법은 CREATE SECURITY INTEGRATION (External API Authentication)을 참고해요.
함께 보기: CREATE SECURITY INTEGRATION, CREATE SECURITY INTEGRATION (External API Authentication), ALTER SECURITY INTEGRATION (External secret provider), SYSTEM$VERIFY_EXTERNAL_SECRET_INTEGRATION, SYSTEM$LIST_EXTERNAL_SECRETS, SYSTEM$FETCH_EXTERNAL_SECRET_FROM_INTEGRATION, SYSTEM$GET_SECURITY_INTEGRATIONS_FOR_API_PROVIDER, DESCRIBE INTEGRATION, DROP INTEGRATION, SHOW INTEGRATIONS
구문 (Syntax)
CREATE [ OR REPLACE ] SECURITY INTEGRATION [ IF NOT EXISTS ] <name>
TYPE = API_AUTHENTICATION
AUTH_TYPE = WORKLOAD_IDENTITY_FEDERATION
API_PROVIDER = { AWS_SECRETS_MANAGER | AZURE_KEY_VAULT | GCP_SECRET_MANAGER }
ENABLED = { TRUE | FALSE }
[ AWS_ROLE_ARN = '<aws_role_arn>' ]
[ AWS_REGION = '<aws_region>' ]
[ AZURE_TENANT_ID = '<azure_tenant_id>' ]
[ AZURE_AD_APPLICATION_ID = '<azure_application_id>' ]
[ AZURE_KEY_VAULT_URI = '<azure_key_vault_uri>' ]
[ GCP_SECRET_MANAGER_PROJECT = '<gcp_project>' ]
[ GCP_WIF_PROVIDER = '<gcp_workload_identity_provider>' ]
[ GCP_SERVICE_ACCOUNT_EMAIL = '<gcp_service_account_email>' ]
[ COMMENT = '<string_literal>' ]
필수 매개변수 (Required parameters)
name
인티그레이션의 식별자를 지정해요. 식별자는 계정 안에서 고유해야 해요.
자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.
TYPE = API_AUTHENTICATION
인티그레이션이 Snowflake를 외부 API에 인증한다고 지정해요.
AUTH_TYPE = WORKLOAD_IDENTITY_FEDERATION
Snowflake가 워크로드 ID 연합으로 인증한다고 지정해요. Snowflake는 인티그레이션에 대한 단기 토큰을 발급하고 그것을 클라우드 공급자와 교환해요.
API_PROVIDER = { AWS_SECRETS_MANAGER | AZURE_KEY_VAULT | GCP_SECRET_MANAGER }
외부 시크릿 공급자를 지정해요. 선택한 공급자가 필요한 추가 매개변수를 결정해요.
| 공급자 (Provider) | 필수 매개변수 (Required parameters) |
|---|---|
AWS_SECRETS_MANAGER |
AWS_ROLE_ARN, AWS_REGION |
AZURE_KEY_VAULT |
AZURE_TENANT_ID, AZURE_AD_APPLICATION_ID, AZURE_KEY_VAULT_URI |
GCP_SECRET_MANAGER |
GCP_SECRET_MANAGER_PROJECT, GCP_WIF_PROVIDER, GCP_SERVICE_ACCOUNT_EMAIL |
API_PROVIDER는 인티그레이션을 만든 뒤에는 변경할 수 없어요.
ENABLED = { TRUE | FALSE }
인티그레이션을 사용할 수 있는지 지정해요.
TRUE는 인티그레이션에 대해USAGE권한이 있는 역할이 외부 시크릿 공급자 함수를 호출할 수 있게 해요.FALSE는 인티그레이션을 사용하지 못하게 해요.
선택 매개변수 (Optional parameters)
COMMENT = 'string_literal'
인티그레이션에 대한 설명(comment)을 지정해요.
- 기본값: 값 없음
공급자 매개변수 (Provider parameters)
선택한 API_PROVIDER의 매개변수만 지정해요.
AWS Secrets Manager
AWS_ROLE_ARN = 'aws_role_arn'
Snowflake가 워크로드 ID 연합으로 가정하는(assume) AWS IAM 역할의 ARN을 지정해요.
AWS_REGION = 'aws_region'
AWS STS(Security Token Service)와 Secrets Manager 호출에 사용되는 AWS 리전을 지정해요. Snowflake는 이 리전의 AWS 파티션에서 토큰 청중(audience)을 파생해요.
Azure Key Vault
AZURE_TENANT_ID = 'azure_tenant_id'
Microsoft Entra 테넌트 ID를 지정해요.
AZURE_AD_APPLICATION_ID = 'azure_application_id'
연합 ID 자격 증명(federated identity credential)으로 구성된 Entra 애플리케이션의 애플리케이션(클라이언트) ID를 지정해요.
AZURE_KEY_VAULT_URI = 'azure_key_vault_uri'
https://my-vault.vault.azure.net 같은 키 자격 증명 모음(key vault)의 HTTPS URI를 지정해요.
Google Cloud Secret Manager
GCP_SECRET_MANAGER_PROJECT = 'gcp_project'
시크릿을 포함하는 Google Cloud 프로젝트 ID를 지정해요.
GCP_WIF_PROVIDER = 'gcp_workload_identity_provider'
//iam.googleapis.com/ 접두사 없이 워크로드 ID 공급자 리소스 경로를 지정해요. 다음 형식을 사용해요.
projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/providers/<provider_id>
Snowflake는 토큰 청중을 파생할 때 접두사를 추가해요.
GCP_SERVICE_ACCOUNT_EMAIL = 'gcp_service_account_email'
Secret Manager를 호출하기 전에 Snowflake가 가장(impersonate)하는 Google 서비스 계정을 지정해요.
접근 제어 요구 사항 (Access control requirements)
이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.
| 권한 (Privilege) | 객체 (Object) | 비고 |
|---|---|---|
| CREATE INTEGRATION | Account | 기본적으로 ACCOUNTADMIN 역할만 이 권한을 가져요. 필요에 따라 추가 역할에 부여될 수 있어요. |
| CREATE SECURITY INTEGRATION | Account | Native Apps에서 사용 가능해요. API_AUTHENTICATION 유형의 외부 보안 인티그레이션을 만들 수 있는 권한을 부여해요. 이 권한은 다른 보안 인티그레이션 유형을 만들 수 있는 권한은 부여하지 않아요. |
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.
사용 메모 (Usage notes)
OR REPLACE와 IF NOT EXISTS를 같은 문에 지정할 수 없어요.
메타데이터에 관해서는 다음 사항에 주의해요.
⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.
CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.
인티그레이션을 만들기 전에 선택한 공급자에 필요한 클라우드 리소스 식별자를 준비해요. 완전한 설정 순서는 외부 시크릿 공급자(External secret providers)를 참고해요.
인티그레이션을 만든 뒤에는 DESCRIBE SECURITY INTEGRATION을 실행해 WORKLOAD_IDENTITY_FEDERATION_ISSUER와 WORKLOAD_IDENTITY_FEDERATION_SUBJECT를 얻어요. 이 값들을 사용해 클라우드 신뢰(cloud trust)를 구성해요.
인티그레이션을 교체하면 새 주체(subject)가 생성돼요. 클라우드 신뢰 구성이 이전 주체를 사용한다면 공급자 인증이 실패해요. 주체를 변경하지 않고 공급자 설정을 변경하려면 ALTER SECURITY INTEGRATION (External secret provider)을 사용해요.
예시 (Examples)
AWS Secrets Manager용 인티그레이션을 만들어요.
CREATE SECURITY INTEGRATION aws_sm_integration
TYPE = API_AUTHENTICATION
AUTH_TYPE = WORKLOAD_IDENTITY_FEDERATION
API_PROVIDER = AWS_SECRETS_MANAGER
AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-secrets-role'
AWS_REGION = 'us-west-2'
ENABLED = TRUE;
Azure Key Vault용 인티그레이션을 만들어요.
CREATE SECURITY INTEGRATION azure_kv_integration
TYPE = API_AUTHENTICATION
AUTH_TYPE = WORKLOAD_IDENTITY_FEDERATION
API_PROVIDER = AZURE_KEY_VAULT
AZURE_TENANT_ID = '00000000-0000-0000-0000-000000000000'
AZURE_AD_APPLICATION_ID = '11111111-1111-1111-1111-111111111111'
AZURE_KEY_VAULT_URI = 'https://my-vault.vault.azure.net'
ENABLED = TRUE;
Google Cloud Secret Manager용 인티그레이션을 만들어요.
CREATE SECURITY INTEGRATION gcp_sm_integration
TYPE = API_AUTHENTICATION
AUTH_TYPE = WORKLOAD_IDENTITY_FEDERATION
API_PROVIDER = GCP_SECRET_MANAGER
GCP_SECRET_MANAGER_PROJECT = 'my-gcp-project'
GCP_WIF_PROVIDER = 'projects/123456789012/locations/global/workloadIdentityPools/my-pool/providers/snowflake-provider'
GCP_SERVICE_ACCOUNT_EMAIL = '[email protected]'
ENABLED = TRUE;
더 알아보기 (Learn more)
- CREATE SECURITY INTEGRATION (External API Authentication) — 외부 API 인증 생성
- ALTER SECURITY INTEGRATION (External secret provider) — 외부 시크릿 공급자 수정
- 외부 시크릿 공급자 — 설정 순서