![](/img/trans.png)
[英]GCP workload identity federation - Github provider - 'Unable to acquire impersonated credentials'
[英]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.