![](/img/trans.png)
[英]How can I let metricbeat use iam policy to access other AWS account?
[英]How can I let docker container use codebuild IAM authentication to deploy to AWS?
我在 codebuild 項目中運行 CI/CD,並且我已經為 codebulid 項目配置了一個角色,以允許它部署資源,例如 lambda 到 AWS 帳戶。
但是,當我從 codebuild 項目中的 docker 容器運行部署命令時,出現此錯誤:
AWS provider credentials not found. Learn how to set up AWS provider credentials in our docs here: <http://slss.io/aws-creds-setup>.
我搜索過人們說要使用 env var 或 aws 憑據配置文件。 但是我的腳本是從帶有 IAM 身份驗證的 codebuild 項目運行的。 如何將其傳遞給 docker 容器?
我不會讓Codebuild
直接訪問修改資源,您可以通過單獨的角色輕松地將其分開以部署內容,並確保您已添加必要的權限來承擔該角色。 以下是 AWS 推薦的方法。
version: 0.2
phases:
install:
runtime-versions:
nodejs: 8
commands:
- ASSUME_ROLE_ARN="arn:aws:iam::$account_id:role/Secretassumerole"
- TEMP_ROLE=`aws sts assume-role --role-arn $ASSUME_ROLE_ARN --role-session-name test`
- export TEMP_ROLE
- echo $TEMP_ROLE
- export AWS_ACCESS_KEY_ID=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.AccessKeyId')
- export AWS_SECRET_ACCESS_KEY=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SecretAccessKey')
- export AWS_SESSION_TOKEN=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SessionToken')
- echo $AWS_ACCESS_KEY_ID
- echo $AWS_SECRET_ACCESS_KEY
- echo $AWS_SESSION_TOKEN
pre_build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build --build-arg AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID --build-arg AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY --build-arg AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN
里面Dockefile
FROM amazonlinux:latest
RUN yum -y install aws-cli
ARG AWS_DEFAULT_REGION
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_SESSION_TOKEN
RUN echo $AWS_DEFAULT_REGION
RUN echo $AWS_ACCESS_KEY_ID
RUN echo $AWS_SECRET_ACCESS_KEY
RUN echo $AWS_SESSION_TOKEN
RUN aws sts get-caller-identity
RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret
如何使用 AWS CodeBuild 將 AssumeRole 的臨時憑證傳遞到 Docker 運行時?
或者
如果您仍想使用CodeBuild
IAM 權限,那么您可以在buildspec.yml
中為您的Codebuild
項目解析對元數據服務的調用,這將為您提供Codebuild IAM Service Role
的憑證,最終以類似的方式傳遞給docker build
命令如上。 或者,如果您希望可以將其存儲在憑證文件中並與 docker 環境共享,您可以在其中通過提供配置文件來運行命令。
version: 0.2
phases:
install:
commands:
- TOKEN=$(curl http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)
- echo $TOKEN
- export AWS_ACCESS_KEY_ID=$(echo "${TOKEN}" | jq -r '.Credentials.AccessKeyId')
- export AWS_SECRET_ACCESS_KEY=$(echo "${TOKEN}" | jq -r '.Credentials.SecretAccessKey')
- export AWS_SESSION_TOKEN=$(echo "${TOKEN}" | jq -r '.Credentials.SessionToken')
pre_build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build --build-arg AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID --build-arg AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY --build-arg AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN
這將為您提供憑據:
{
"RoleArn": "AQICAHi8hGr15WsKx4aqJ3PRJImmR37T8bWHAVZQA8s9Lug",
"AccessKeyId": "ASIA2WXKNDTKPASDADRT",
"SecretAccessKey": "***",
"Token": "IQoJb3JpZ2luX2VjENH//////////wEaCXVzLWVhc3QtMSJ",
"Expiration": "2021-03-05T10:02:01Z"
}
samtoddler 的第二個答案的變體:
docker build --build-arg AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI --build-arg AWS_REGION=$AWS_REGION
在 docker 文件中:
ARG AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
ARG AWS_REGION
基本上 CodeBuild/Docker 足夠聰明,可以自動執行 Sam 在安裝部分中的命令:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.