如何在使用Visual Studio 2017运行Docker容器时管理AWS凭据

Joe*_*Joe 1 amazon-web-services docker visual-studio-2017

我有一个使用Visual Studio 2017开发的.NET Core 2.0控制台应用程序.unitSettings.json文件设置了一个环境变量,允许它使用开发人员的默认AWS凭据

  "environmentVariables": {
    "AWS_PROFILE": "default"
    ...
  }
Run Code Online (Sandbox Code Playgroud)

我现在已经为VS解决方案添加了Docker支持,并且我正在尝试在Linux Docker容器中运行该应用程序.当然它失败并出现以下异常,因为它无法找到配置文件:

Amazon.Runtime.AmazonClientException: Unable to find the 'default' profile in CredentialProfileStoreChain.
Run Code Online (Sandbox Code Playgroud)

在开发环境中将AWS凭据传递给Docker容器的最佳方法是什么?我显然不希望将我的凭据作为环境变量放在launchSettings.json中,因为此文件已提交给源代码控制.

编辑

为了清楚起见,我正在寻找一种解决方案,允许我的Docker容器在开发人员的机器上的Visual Studio 2017中进行调试时访问开发人员的凭据.发布版本将部署到AWS,IAM角色将排除对凭据的需求.凭据在文件中%USERPROFILE%\.aws\credentials,我正在寻找一种解决方案,使我能够在Docker容器中使用它们而不将它们暴露在别处:因此我不想将它们放在launchSettings.json或任何其他启动的文件中Docker容器.

我设想的解决方案可能涉及将Windows驱动器安装在Docker容器(或至少是目录 %USERPROFILE%\.aws\)中,然后AWS_SHARED_CREDENTIALS_FILE在Docker容器中设置环境变量(?),以便AWS自动查找凭证文件.

我不知道怎么做,因为我对Docker很新.

Joe*_*Joe 9

我采用的解决方案是编辑docker-compose.override.ymlVisual Studio Tools for Docker添加的文件,并添加以下行:

version: '3'

services:
  mydockerapp:
    volumes:
      - ${USERPROFILE}/.aws:/root/.aws
    environment:
      - AWS_REGION=(your region)
      - AWS_PROFILE=default
Run Code Online (Sandbox Code Playgroud)

这会将包含AWS凭据的.aws目录安装在Docker容器中的适当位置(/root是默认的HOME目录),并设置环境变量以选择配置文件和区域.launchSettings.json在Docker中运行时,不使用.NET Core项目中的文件.

  • 当我不使用 docker compose 时该怎么办? (2认同)

Sha*_*ane 6

感谢乔的回答,这/root对我来说很关键。这是我的docker-compose.ymlJava/Maven/Mac OSX 环境的样子:

volumes:
  # Map in the aws directory
  - ~/.aws:/root/.aws:ro
Run Code Online (Sandbox Code Playgroud)

:RO当然使其只读。我没有必要明确定义 Region 和 Profile。

  • “:RO 使其只读” - 有用的知识,我不知道这一点。尽管目前我只运行图像,但我相信不会尝试修改它。 (2认同)