如何在`~/.aws/config`中生成一个AWS配置文件,以便在CodeBuild项目中使用

3
我正在使用一个名为 dbt 的工具,该工具的数据库身份验证方法利用了 IAM。不幸的是,当构建 CodeBuild 项目时,IAM 配置文件不存在,因为它使用实例配置文件。因此我无法连接到我的数据库。
参考这个问题,我尝试在项目中运行aws sts get-caller-identity,看看是否能够返回我需要的一些值,但它返回:
botocore.exceptions.ProfileNotFound: The config profile (***) could not be found

有人知道如何在CodeBuild项目中生成自己的~/.aws/config文件吗?
编辑:该工具使用boto3在此处生成临时凭证:https://github.com/fishtown-analytics/dbt/blob/9d00c000720d17c42a4fa08a26b75bd500cc857f/plugins/redshift/dbt/adapters/redshift/connections.py#L101-L123,但似乎无法在CodeBuild项目中生成这些凭据。
编辑: buildspec.yml
version: 0.2

env:
  variables:
    MODELS_REPO: dbt-dev
    PYTHON_VERSION: 3.8
  parameter-store:
    AWS_ENVIRONMENT: "/cloudformation/environment"
    AWS_PROFILE: "/cloudformation/environment"
    CODEARTIFACT_COMPANY: "/codeartifact/company"
    GITHUB_OWNER: "/github/owner"
    GITHUB_PERSONAL_ACCESS_TOKEN: "/secret/github/token"
    GITHUB_USER: "/github/user"

phases:
  install:
    runtime-versions:
        python: "${PYTHON_VERSION}"
    commands:
      - pip install -r projects/${PROJECT_NAME}/requirements.txt
      - ./projects/${PROJECT_NAME}/.aws/phases/install.sh
  pre_build:
    commands:
      - ./projects/${PROJECT_NAME}/.aws/phases/pre_build.sh
  build:
    commands:
      - ./projects/${PROJECT_NAME}/.aws/phases/build.sh
  post_build:
    commands:
      - ./projects/${PROJECT_NAME}/.aws/phases/post_build.sh

cache:
  paths:
    - /root/.cache/pip
    - /root/.cache/pip/**/*
    - ~/.cache/pip
    - ~/.cache/pip/**/*

你能否澄清一下,你所指的实例配置文件不存在是什么意思?你需要使用CB角色向你的CB添加权限。 - Marcin
我理解这一点,但我认为我需要某种 hacky 解决方案来生成一个位于 ~/.aws/config 的配置文件,以便我可以使用 dbt 工具。该工具需要能够使用 IAM 生成数据库凭据。 - metersk
您可以使用要设置的参数值运行 aws configure set - Marcin
请问您能否发布您的 buildspec.yml 文件吗? - hephalump
@hephalump 发布了 - metersk
1个回答

3
以下脚本可适用于您的用例:
apt install jq -y
creds=$(aws sts get-session-token)

AWS_ACCESS_KEY_ID=$(echo $creds | jq '.Credentials.AccessKeyId')
AWS_SECRET_ACCESS_KEY=$(echo $creds | jq '.Credentials.SecretAccessKey')
AWS_SESSION_TOKEN=$(echo $creds | jq '.Credentials.SessionToken')

aws configure --profile $AWS_PROFILE set region "us-east-1"
aws configure --profile $AWS_PROFILE set output "json"
aws configure --profile $AWS_PROFILE set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
aws configure --profile $AWS_PROFILE set aws_access_key_id "$AWS_ACCESS_KEY_ID"
aws configure --profile $AWS_PROFILE set aws_session_token "$AWS_SESSION_TOKEN"

您可以根据自己的需求更改区域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接