繁体   English   中英

GCP 工作负载身份联合 Azure

[英]GCP workload identity federation with Azure

我有一个 azure function 写在 c# 发布消息到 gcp pubsub 主题。 它适用于我们从 gcp 收到的凭据文件,但现在由于某些安全性,我们想使用身份联合并使用我们的 AAD 租户生成的短期令牌来验证调用。 我有生成访问令牌的代码

    public async Task<string> GetToken()
{
    var credential = _userAssignedClientId == null
        ? new DefaultAzureCredential()
        : new DefaultAzureCredential(new DefaultAzureCredentialOptions
            { ManagedIdentityClientId = _userAssignedClientId });

    var accessToken =
        await credential.GetTokenAsync(new TokenRequestContext(new[]
            { _resourceUri }));
    return accessToken.Token;
}   

这是我们用于凭证的代码

            var builder = new PublisherClientBuilder
        {
            JsonCredentials = _credentials,
            TopicName = TopicName.FromProjectTopic(_projectId, _topicId)
        };
        
        var publisher = await builder.BuildAsync();

问题是,gcp .net 客户端没有明显的方法引入access token,它只接收与access token 不同的credential,而DefaultAzureCredential生成的credential 也不能使用。 问题是如何使用生成的 access_token 向 gcp 验证我的发布者。 gcp 端也配置为信任 AAD 应用程序。

问题是如何使用生成的 access_token 来验证我的发布者到 gcp

如果你有一个对谷歌云有效的access_token,那么你可以这样做:

var builder = new PublisherClientBuilder
{
    GoogleCredential = Google.Apis.Auth.GoogleCredential.FromAccessToken(access_token);
    TopicName = TopicName.FromProjectTopic(_projectId, _topicId);
};

请注意,我说过“如果您有一个对 Google Cloud 有效的 access_token”,因为我不熟悉DefaultAzureCredential方法或它返回的凭证类型。

现在,无论如何,从 v1.58.0 开始, Google.Apis.Auth库是 Google 拥有并推荐给 Google 的 .NET Auth 库,支持工作负载身份联合,包括 Azure。

如果您遵循使用 Azure 配置工作负载联合身份验证,那么您的代码只需要如下所示(即不指定凭据):

var builder = new PublisherClientBuilder
{
    TopicName = TopicName.FromProjectTopic(_projectId, _topicId);
};

像这样构建的PublisherClient将使用 GOOGLE_APPLICATION_CREDENTIALS 引用的已配置工作负载身份联合凭证(来自上面的文档),并将根据需要生成和刷新访问令牌。

如果您遇到任何问题,请随时在https://github.com/googleapis/google-api-do.net-client中创建和发布

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM