返回

如何在 Linux/Rancher 中的 .NET 8 Web API 调用 AWS API?

Linux

## 在 Linux/Rancher 中使用 .NET 8 Web API 调用 AWS API

### 概述

在 .NET 8 Web API 应用中使用 AWS 资源时,需要使用正确的方法来实现安全性和便捷性。本文将指导您如何使用 AWS SDK for .NET 传递本地证书,以及在 Linux 环境中使用 aws_signing_helper。

### 使用 AWS SDK for .NET

AWS SDK for .NET 提供了一个强大的库,可以简化与 AWS 服务的交互。要安装 AWS SDK for .NET,请使用以下 NuGet 命令:

dotnet add package Amazon.Runtime --version 3.4.4
dotnet add package AWSSDK.Auth --version 3.4.4

### 创建 AWS 凭证

使用 AWS SDK for .NET 创建 AWS 凭证是与 AWS 服务进行身份验证的关键步骤。在 Linux 环境中,我们使用的是 Amazon Cognito 用户池进行身份验证,步骤如下:

var credentials = new AssumeRoleWithWebIdentityCredentials(
    "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx",
    "us-east-1",
    "arn:aws:iam::xxxxxxxxxxxx:role/MyRole"
);
  • https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx 是托管 Cognito 用户池的 URL。
  • us-east-1 是用户池所在的区域。
  • arn:aws:iam::xxxxxxxxxxxx:role/MyRole 是要承担的角色的 ARN。

### 配置 AWS 客户机

使用 AWS 凭证配置 AWS 客户端,以便能够调用 AWS API:

var client = new Amazon.S3.AmazonS3Client(credentials, new Amazon.S3.AmazonS3Config
{
    RegionEndpoint = RegionEndpoint.USEast1
});
  • RegionEndpoint.USEast1 指定了客户端要连接到的 AWS 区域。

### 调用 AWS API

使用配置的 AWS 客户端,您可以调用任何 AWS API:

var response = await client.GetObjectAsync("my-bucket", "my-object");

这将从名为 "my-bucket" 的 S3 存储桶中获取名为 "my-object" 的对象。

### 结论

使用 AWS SDK for .NET 和 Cognito 用户池的身份验证,可以在 Linux 环境中直接调用 AWS API,无需使用 aws_signing_helper。这简化了与 AWS 服务的交互,并提高了应用程序的安全性。

### 常见问题解答

Q1. 如何解决 "无法找到 AWSSDK.Auth 程序集" 错误?
A1. 确保已安装最新版本的 AWS SDK for .NET。

Q2. 如何处理 "访问被拒绝" 错误?
A2. 检查您使用的凭证是否有权访问您要调用的 AWS 资源。

Q3. 可以使用 AWS SDK for .NET 调用所有 AWS API 吗?
A3. 是的,AWS SDK for .NET 支持调用 AWS 提供的所有服务。

Q4. 如何使用自定义证书调用 AWS API?
A4. 使用 CertificateCredentials 类将自定义证书添加到 AWS 凭证中。

Q5. 是否需要在生产环境中使用 Cognito 用户池?
A5. 在生产环境中,建议使用更安全的身份验证方法,如 AWS Identity and Access Management (IAM) 角色。