我正在分享一个解决方案,因为我认为这将对其他人有用。
在遵循https://docs.snowflake.com/en/user-guide/oauth-azure.html上的说明将Azure AD与Oauth集成到Snowflake之后,我们遇到了一个问题。Snowflake仅支持每个AAD租户一个安全集成。
因为我们希望同时在客户端级和用户级使用集成;
create security integration (...)
external_oauth_token_user_mapping_claim = 'sub'
vs
external_oauth_token_user_mapping_claim = 'upn'
为了解决这个问题,我们在AAD中创建了两个自定义策略:
New-AzureADPolicy -Definition @('
{
"ClaimsMappingPolicy":
{
"Version":1,"IncludeBasicClaimSet":"true",
"ClaimsSchema": [{"Source":"application","ID":"objectid","JwtClaimType":"sfuser"}]
}
}') -DisplayName "SnowflakeUserObjectClaims" -Type "ClaimsMappingPolicy"
和
New-AzureADPolicy -Definition @('
{
"ClaimsMappingPolicy":
{
"Version":1,"IncludeBasicClaimSet":"true",
"ClaimsSchema": [{"Source":"user","ID":"userprincipalname","JwtClaimType":"sfuser"}]
}
}') -DisplayName "SnowflakeUserUpnClaims" -Type "ClaimsMappingPolicy"
然后,这些可以与应用程序的一个应用程序注册和用户的另一个应用程序注册('Add-AzureADServicePrincipalPolicy')相关联。换句话说,这些声明中的每一个都将始终包含“sfuser”声明。这还需要在应用程序清单中手动更改:
"acceptMappedClaims": true,
我们现在可以使用我们的新声明在Snowflake中创建安全集成:
create security integration (...)
external_oauth_token_user_mapping_claim = 'sfuser'
雪花能够使用新的声明来验证来自我们两个app.registrations的请求。
发布于 2021-11-19 15:42:09
为子孙后代加分。此字段接受列表。我使用了以下代码:
ALTER SECURITY INTEGRATION sample_integration SET EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = ('sub','upn');
https://stackoverflow.com/questions/67174147
复制相似问题