【问题标题】:Localstack on docker with .NET S3 SDK throws "The AWS Access Key Id you provided does not exist in our records."带有 .NET S3 SDK 的 docker 上的 Localstack 抛出“您提供的 AWS 访问密钥 ID 在我们的记录中不存在。”
【发布时间】:2020-09-08 11:55:47
【问题描述】:

我正在尝试为本地 S3 实例设置 localstack。尝试执行任何操作时出现错误:

AmazonS3Exception: The AWS Access Key Id you provided does not exist in our records.

docker-compose 是:

version: '3.4'

services:
  myapp.api:
    image: ${DOCKER_REGISTRY-}myapp/api
    container_name: "myapp-api"
    build:
      context: .
      dockerfile: MyApp.Api/MyApp.Api/Dockerfile
    ports:
      - "8080:80"
    environment:
      - AWS_ACCESS_KEY_ID=root
      - AWS_SECRET_ACCESS_KEY=pass
  myapp.s3:
    image: localstack/localstack:latest
    container_name: "myapp-localstack"
    ports:
      - "14566:4566"
    environment: 
      - SERVICES=s3
      - DEFAULT_REGION=eu-west-2
      - AWS_REGION=us-west-2
      - DEBUG=1
    user: root

MyApp 是整个解决方案的名称,MyApp.Api 是一个 ASP.NET Core 3.1 项目。没有自定义网络,所有容器都运行在 docker-compose 创建的默认网络上。

与 S3 交互的代码如下所示:

[ApiController]
[Route("[controller]")]
public class TestS3Controller : ControllerBase
{
    [HttpGet]
    [Route("")]
    public async Task<IActionResult> GetAsync()
    {
        using var client = new AmazonS3Client(new AmazonS3Config
        {
            ServiceURL = "https://myapp.s3:4566",
            RegionEndpoint = RegionEndpoint.EUWest2,
            ForcePathStyle = true
        });
        
        var bucket = await client.PutBucketAsync(new PutBucketRequest
        {
            BucketName = "myapp-test-bucket",
            BucketRegion = S3Region.EUW2
        }).ConfigureAwait(false);

        ... // snip
    }
}

AWSSDK.S3 版本为 3.3.113.2。等待PutBucketAsync 任务会引发上述异常。我能找到的所有资源都告诉我,访问密钥 id 和密钥可以是任何东西,只要它们不为空,但它似乎是错误的。

此外,我已经从amazon/dynamodb-local:latest 映像运行了一个容器,它需要在环境变量中定义root/pass 凭据,并且它们可以正常工作。我可以通过本地 DynamoDB 工作以及手动实例化 EnvironmentAWSCredentials 产生 root/pass 来确认已加载凭据。从 myapp.api 中删除环境变量会引发与 AWSSKD 无法获取任何凭据相关的不同异常(我没有定义 .aws 配置文件)。

MyApp 的 Dockerfile 是 Visual Studio 为 ASP.NET Core 生成的标准文件,用于构建项目并将 MyApp.Api.dll 作为入口点。

感谢任何允许我在本地使用 S3 存储桶的解决方案,只要它有效,我并不真正关心清洁度,因为它仅用于本地开发。

【问题讨论】:

    标签: .net amazon-web-services docker amazon-s3 localstack


    【解决方案1】:

    在 localstack 代码库中讨论了几个 github 问题线程。

    使用

    ForcePathStyle = true
    

    参考:

    https://github.com/localstack/localstack/issues/2092

    https://github.com/localstack/localstack/issues/942#issuecomment-427327889

    【讨论】:

      猜你喜欢
      • 2023-02-10
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      相关资源
      最近更新 更多