工作负载身份联合¶
本文档面向以下受众:
内部云服务的开发者。
管理与内部和外部服务集成的管理员。
多租户 SaaS 应用程序的开发者,这类开发者希望向其平台上运行的各个工作负载颁发 OpenID Connect (OIDC) 联合 (https://openid.net/developers/how-connect-works/) ID 令牌,以便每个客户工作负载都能作为专用用户向 Snowflake 进行身份验证。
工作负载身份联合是一种服务对服务的身份验证方法,可让工作负载(例如应用程序、服务或容器)使用其云提供商的原生身份系统(如 AWS Identity and Access Management (AWS IAM) 角色、Microsoft Entra ID 和 Google Cloud 服务帐户)向 Snowflake 进行身份验证,以获取 Snowflake 可使用和验证的证明。
使用工作负载身份联合时,无需管理和存储用于向 Snowflake 进行身份验证的长期凭据,例如密码、API 密钥、密钥对和编程访问令牌。工作负载身份联合还可降低获取凭据的复杂性,而其他方法(例如 外部 OAuth)可能需要执行更多设置工作。使用 Snowflake 连接器的应用程序、服务和容器会自动通过每个平台的原生机制,从其平台的身份提供商 (IdP) 处获得短期凭据。
优势¶
本节介绍为什么您可能要使用工作负载身份联合进行身份验证:
经济实惠:使用现有 IdPs 管理服务身份可减少对额外工具或许可证的需求,从而提高成本效益。
互操作性:热门的云提供商服务(如 AWS IAM、Entra ID 和 Google Cloud)支持并推荐将工作负载身份联合作为外部工作负载的身份验证方法。
便捷的审计和监控:
管理员可以使用现有的云提供商服务(例如 AWS CloudTrail (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 和 Azure Monitor (https://learn.microsoft.com/en-us/azure/azure-monitor/fundamentals/overview))来记录和监控活动。
Snowflake 管理员可以在 ACCOUNT_USAGE 架构 中查询 LOGIN_HISTORY 和 CREDENTIALS 视图,以监控和审计使用工作负载身份联合的服务。
实施工作负载身份联合的工作流程¶
您可以使用工作负载身份联合通过不同的 IdPs 对各种工作负载进行身份验证,但基本工作流程(如以下步骤所示)保持不变:
作为工作负载管理员,将您的服务配置为使用本地身份提供商,以便提供商能够对您工作负载的身份出具 证明。此证明通常是 JSON Web 令牌 (JWT),但不一定总是如此。
作为 Snowflake 管理员,为您的工作负载创建 Snowflake 服务用户。您可以将该用户的属性设置为在提供商发送的证明中找到的值。例如,用户属性可以指定 IAM 角色的名称或提供商的颁发者 URL。
作为工作负载开发者,将您的工作负载配置为使用 Snowflake 驱动程序。驱动程序会将证明发送给 Snowflake 进行验证。
要查看此工作流程针对不同类型工作负载和 IdPs 的端到端示例,请参阅 开始使用。
访问控制要求¶
要为 Snowflake 服务用户(即其 TYPE 属性设置为 SERVICE
的用户)配置工作负载身份联合,必须向激活的角色授予以下其中一种权限:
对该服务用户的 OWNERSHIP 权限。
对该服务用户的 MODIFY PROGRAMMATIC AUTHENTICATION METHODS 权限。
支持的 Snowflake 驱动程序¶
工作负载在连接到 Snowflake 时使用 Snowflake 驱动程序发送证明。以下驱动程序支持工作负载身份联合:
驱动程序 |
最低版本 |
---|---|
Go (https://pkg.go.dev/github.com/snowflakedb/gosnowflake#hdr-Authenticator_values) |
v1.16.0 |
v3.26.0 |
|
.NET (https://github.com/snowflakedb/snowflake-connector-net/blob/master/doc/Connecting.md) |
v4.8.0 |
v2.2.0 |
|
v3.11.0 |
|
v3.17.0 |
强化您的安全防护¶
您可以使用 身份验证策略 来控制哪些 Snowflake 服务用户可以通过工作负载身份联合进行身份验证。您还可以创建并设置身份验证策略,让工作负载仅在使用指定的身份提供商或该提供商中的帐户时才能进行身份验证。
例如,以下身份验证策略允许工作负载仅在使用 Microsoft Entra ID 作为提供商,且证明的颁发者为具有租户 ID 的 Microsoft Entra ID 租户时进行身份验证:https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0
CREATE AUTHENTICATION POLICY workload_policy WORKLOAD_IDENTITY_POLICY=( ALLOWED_PROVIDERS = (AZURE) ALLOWED_AZURE_ISSUERS = ( 'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0') );
有关 WORKLOAD_IDENTITY_POLICY
参数的更多信息,请参阅 CREATE AUTHENTICATION POLICY。
有关设置身份验证策略以使其强制执行的更多信息,请参阅 对账户或用户设置身份验证策略。
开始使用¶
使用 AWS IAM 角色和 Snowflake Python 驱动程序向 Snowflake 进行身份验证¶
配置 AWS¶
要将您的 AWS 服务配置为使用 AWS IAM 作为其身份提供商,请附加一个 IAM 角色。有关更多信息,请参阅与您的工作负载对应的 AWS 文档。
对于 Amazon EC2,请参阅 将 IAM 角色附加到实例 (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/attach-iam-role.html)。
对于 AWS Lambda,请参阅 `使用执行角色定义 Lambda 函数权限<https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html>`_。
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您必须拥有唯一标识用于向 Snowflake 进行身份验证的 AWS 用户或角色的 Amazon 资源标识符 (ARN)。要获取 IAM 角色的 ARN,请完成以下步骤:
登录 AWS 控制台,然后导航到 IAM 仪表板。
在左侧导航栏中,选择 Roles。
选择您已附加到 AWS 实例的角色的名称。
在 Summary 部分中,找到 ARN,然后选择 Copy 图标。
Snowflake 接受以下形式的 IAM 标识符 (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html):
arn:aws:iam::account:user/user_name_with_path
arn:aws:iam::account:role/role_name_with_path
arn:aws:sts::account:assumed_role/role_name/role_session_name
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = AWS ARN = '<amazon_resource_identifier>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
其中,
ARN
为在开始这些步骤前获取的值。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
import os import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='AWS' )
运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
使用 Microsoft Entra ID 和 Snowflake Python 驱动程序向 Snowflake 进行身份验证¶
完成下面列出的每个部分中的步骤,使用工作负载身份联合通过 Microsoft Entra ID 向 Snowflake 进行身份验证:
配置 Microsoft Entra ID¶
Microsoft Entra ID 租户管理员必须完成以下步骤才能允许使用 Snowflake 工作负载身份。每个 Microsoft Entra ID 租户只需执行一次这些步骤:
登录 Microsoft Azure 门户。
确保您拥有 Azure 租户管理员权限。
访问 `授权 URI <https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=fd3f753b-eed3-462c-b6a7-a4b5bb650aad&response_type=none&scope=openid&redirect_uri=https://www.snowflake.com/ (https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=fd3f753b-eed3-462c-b6a7-a4b5bb650aad&response_type=none&scope=openid&redirect_uri=https://www.snowflake.com/)> `_,同意安装多租户 Snowflake EntraID 应用程序。
多租户 Snowflake EntraID 应用程序已通过发布者验证,并将 Snowflake 表示为一种资源。向 Snowflake 进行身份验证时,该应用程序用作访问令牌的受众。此应用程序仅需要基本权限,无特权。
选择 Accept,以向 Snowflake EntraID 应用程序授予权限。
配置 Microsoft Azure¶
完成以下步骤,将您的 Microsoft Azure 服务配置为使用工作负载身份联合:
登录 Microsoft Azure 门户。
选择您的工作负载,例如 虚拟机 (https://learn.microsoft.com/en-us/azure/virtual-machines/) 或 应用程序服务 (https://learn.microsoft.com/en-us/azure/app-service)。
在侧边栏中,导航至 Security » Identity。
为 Azure VM (https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-configure-managed-identities?pivots=qs-configure-portal-windows-vm#system-assigned-managed-identity) 或 Azure 函数 (https://learn.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=portal%2Chttp) 启用托管身份。
保存 Object (Principal) ID,以供后续步骤使用。
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您需要以下信息:
您在 上一步 中启用的托管身份的区分大小写对象 ID(主体 ID)。您可以通过 Azure 门户,从 Azure VM 或函数的 Identity 页面复制此标识符。
您的 Microsoft Entra 租户 ID。您可以使用此值来构造颁发机构 URL。
要通过 Microsoft Entra 控制台获取租户 ID,请参阅 如何找到您的 Microsoft Entra 租户 ID (https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant)。
要使用 PowerShell 获取租户 ID,请运行以下命令:
Connect-AzAccount Get-AzTenant
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = AZURE ISSUER = 'https://login.microsoftonline.com/<tenant_id>/v2.0' SUBJECT = '<managed_identity_object_id>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
其中,
ISSUER
和SUBJECT
是您在开始这些步骤前获取的值。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='AZURE' )
运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
备注
作为工作负载开发者,您可能需要设置与工作负载管理员启用的托管身份相关的环境变量。如果您的管理员已启用 用户分配的托管身份 (https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-managed-identities-work-vm#user-assigned-managed-identity),而非系统分配的托管身份,则您必须将 MANAGED_IDENTITY_CLIENT_ID 环境变量设置为要用于向 Snowflake 进行身份验证的托管身份的客户端 ID。
使用 Google Cloud 和 Snowflake Python 驱动程序向 Snowflake 进行身份验证¶
配置 Google Cloud¶
要将您的服务配置为使用 Google Cloud 作为其身份提供商,请 将服务账户附加到您的 GCE 或 Cloud Run 实例 (https://cloud.google.com/compute/docs/instances/change-service-account)。
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您必须具有服务账户的 uniqueId
属性值。要获取此唯一 ID,请使用 Google Cloud CLI 运行以下命令:
gcloud iam service-accounts describe "<SERVICE_ACCOUNT_EMAIL_ADDRESS>" --format="value(uniqueId)"
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = GCP SUBJECT = '<unique_id_of_service_account>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
其中,
SUBJECT
为在开始这些步骤之前获取的值。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='GCP' )
运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
使用 Elastic Kubernetes Service (EKS) 中的 OpenID Connect (OIDC) 颁发者向 Snowflake 进行身份验证¶
完成下面列出的每个部分中的步骤,使用工作负载身份联合通过 Elastic Kubernetes Service (EKS) 向 Snowflake 进行身份验证:
配置 EKS¶
将 EKS 配置为颁发与 Snowflake 兼容的 ID 令牌。
配置您的 Pod 部署 YAML,以包含投影的 ServiceAccount 令牌卷 (https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#launch-a-pod-using-service-account-token-projection)。
将 ID 令牌配置为包含值为
snowflakecomputing.cn
的受众声明。以下是具有适当受众的 YAML 配置示例:
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.cn
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您需要以下信息:
为 Kubernetes 服务账户生成 ID 令牌的 OIDC 提供商的颁布者 URL。要获得此颁布者 URL,您可以执行以下任一任务:
导航到集群的 Overview 选项卡,然后复制 OpenID Connect provider URL 字段中的值。
在可访问 API 服务器端点的环境中运行以下命令:
aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
Kubernetes 服务账户的命名空间和名称。您使用这些信息来构建 OIDC 提供商颁发的 ID 令牌的主题。
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER my_eks_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://oidc.eks.<region>.amazonaws.com/id/<issuer_id>' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
其中,
ISSUER
和SUBJECT
是您在开始这些步骤前获取的值。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
其中,
service_account_token_path
为您在 label-wif_oidc_aws_kubernetes_configure_aws`步骤中创建的路径。根据该步骤中的 YAML 示例,令牌路径为 `/var/run/secrets/tokens/snowflake-token``。运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
使用 Azure Kubernetes Service (AKS) 中的 OpenID Connect (OIDC) 颁发者向 Snowflake 进行身份验证¶
完成下面列出的每个部分中的步骤,使用工作负载身份联合通过 Azure Kubernetes Service (AKS) 向 Snowflake 进行身份验证:
配置 AKS¶
将 AKS 配置为颁发与 Snowflake 兼容的 ID 令牌:
在您的 AKS 集群上启用 OIDC 颁发者 (https://learn.microsoft.com/en-us/azure/aks/use-oidc-issuer)。
将 AKS 配置为颁发与 Snowflake 兼容的 ID 令牌。
配置您的 Pod 部署 YAML,以包含投影的 ServiceAccount 令牌卷 (https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#launch-a-pod-using-service-account-token-projection)。
将 ID 令牌配置为包含值为
snowflakecomputing.cn
的受众声明。以下是具有适当受众的 YAML 配置示例:
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.cn
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您需要以下信息:
为 Kubernetes 服务账户生成 ID 令牌的 OIDC 提供商的颁布者 URL。要获取此颁发者 URL,请参阅 Microsoft 文档 (https://learn.microsoft.com/en-us/azure/aks/use-oidc-issuer#get-the-oidc-issuer-url)
Kubernetes 服务账户的命名空间和名称。您使用这些信息来构建 OIDC 提供商颁发的 ID 令牌的主题。
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER my_aks_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://<region>.oic.prod-aks.azure.com/<tenant_id>/<uuid>/' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
其中,
ISSUER
和SUBJECT
是您在开始这些步骤前获取的值。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
其中,
service_account_token_path
为您在 label-wif_oidc_azure_kubernetes_configure_azure`步骤中创建的路径。根据该步骤中的 YAML 示例,令牌路径为 `/var/run/secrets/tokens/snowflake-token``。运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
使用 Google Kubernetes Engine (GKE) 中的 OpenID Connect (OIDC) 颁发者向 Snowflake 进行身份验证¶
完成下面列出的每个部分中的步骤,使用工作负载身份联合通过 Google Kubernetes Engine (GKE) 向 Snowflake 进行身份验证:
配置 GKE¶
将 GKE 配置为颁发与 Snowflake 兼容的 ID 令牌。
配置您的 Pod 部署 YAML,以包含投影的 ServiceAccount 令牌卷 (https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#launch-a-pod-using-service-account-token-projection)。
将 ID 令牌配置为包含值为
snowflakecomputing.cn
的受众声明。以下是具有适当受众的 YAML 配置示例:
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.cn
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您需要以下信息:
Google Cloud 项目 ID、集群区域和集群名称。您使用这些信息来构建 OIDC 颁发者。
Kubernetes 服务账户的命名空间和名称。您使用这些信息来构建 OIDC 提供商颁发的 ID 令牌的主题。
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER my_gke_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://container.googleapis.com/v1/projects/<project_id>/locations/<region>/clusters/<cluster_name>' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
其中,
ISSUER
和SUBJECT
是您在开始这些步骤前获取的值。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
其中,
service_account_token_path
为您在 label-wif_oidc_google_kubernetes_configure_google`步骤中创建的路径。根据该步骤中的 YAML 示例,令牌路径为 `/var/run/secrets/tokens/snowflake-token``。运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
使用自定义 OpenID Connect (OIDC) 提供商向 Snowflake 进行身份验证¶
完成下面列出的每个部分中的步骤,以使用工作负载身份联合从自定义 OIDC 提供商向 Snowflake 进行身份验证:
配置您的 OIDC 提供商¶
确保您的 OIDC 提供商支持 Discovery 规范中指定的 `OpenID 配置<https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig>`_。配置本身及配置的
jwks_uri
端点都必须可公开访问。将您的 OpenID 提供商配置为使用设置为
snowflakecomputing.cn
或非空自定义列表的受众声明来颁发 ID 令牌。如果您定义了非空自定义列表,则需要在 Snowflake 中创建服务用户时指定该列表。
配置 Snowflake¶
要配置 Snowflake,请创建一个 Snowflake 服务用户,即类型为 SERVICE
的用户,该用户使用工作负载身份联合向 Snowflake 进行身份验证。
准备工作
要成功配置 Snowflake,您需要以下信息:
您的 OIDC 提供商的颁发者 URL。
与您的工作负载相关的主题声明。
您可以通过解析为工作负载颁发的 ID 令牌中的 iss
和 sub
声明来获得这两个值。例如,如果您可以使用 jq
、cat
和 echo
访问类似 Unix 的环境,则可以将 ID 令牌保存到文件中并运行以下命令。
ID_TOKEN_PATH=<id_token_path>
JWS_PAYLOAD=$(cat $ID_TOKEN_PATH | jq -R 'split(".") | .[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson')
echo "ISSUER = '$(echo $JWS_PAYLOAD | jq -r .iss)'"
echo "SUBJECT = '$(echo $JWS_PAYLOAD | jq -r .sub)'"
要了解如何获取 ID 令牌,请参阅 OIDC 提供商的文档。
为工作负载创建服务用户:
登录 Snowsight。
要打开工作表列表,请选择 Projects » Worksheets。
要打开新 SQL 工作表,请选择 +。
要创建使用工作负载身份联合向 Snowflake 进行身份验证的服务用户,请在工作表中运行 CREATE USER 语句:
CREATE USER my_custom_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = '<issuer>' SUBJECT = '<subject>' OIDC_AUDIENCE_LIST = ('<custom_audience>') ) TYPE = SERVICE;
其中:
ISSUER
和SUBJECT
是您在开始这些步骤前获取的值。OIDC_AUDIENCE_LIST
是 配置您的 OIDC 提供商 中设置的 ID 令牌受众声明的非空超集。如果 ID 令牌的受众声明为snowflakecomputing.cn
,则您无需指定OIDC_AUDIENCE_LIST
。
将您的工作负载配置为使用 Snowflake 驱动程序¶
备注
您可以将工作负载配置为使用任意支持工作负载身份联合的 Snowflake 驱动程序。有关完整列表,请参阅 支持的 Snowflake 驱动程序。
如果您的工作负载需要 Python 驱动程序,请完成以下步骤:
在您的 Python 应用程序代码中,添加以下源代码:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token='<id_token>' )
其中,
id_token
为从 OIDC 提供商处收到的用于您工作负载的未过期 ID 令牌。要了解如何获取此令牌,请参阅 OIDC 提供商的文档。运行您的 Python 应用程序。它使用工作负载身份联合向 Snowflake 进行身份验证。
限制和注意事项¶
Azure 工作负载不能位于 Azure 主权云中,例如 Azure 中国和 Azure US Gov。此限制与您账户所在的 Snowflake 区域无关。