在单元测试中,我正在使用aws-sdk
来测试SES,这需要一些凭据,我们在使用GitHub Actions访问机密时遇到了问题。
开始,我试图使用github工作流中的run命令将值设置为~/.aws/credentials
:
# .github/workflows/nodejs.yml
steps:
...
- name: Unit Test
run: |
mkdir -p ~/.aws
touch ~/.aws/credentials
echo "[default]
aws_access_key_id = ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key = ${{ secrets.AWS_SECRET_KEY_ID }}
region = ${AWS_DEFAULT_REGION}
[github]
role_arn = arn:aws:iam::{accountID}:role/{role}
source_profile = default" > ~/.aws/credentials
npm test
env:
AWS_DEFAULT_REGION: us-east-1
CI: true
最初是我的测试文件:
// ses.test.js
const AWS = require("aws-sdk")
const credentials = new AWS.SharedIniFileCredentials({ profile: "github" })
AWS.config.update({ credentials })
...
我试图使用另一种方式在测试中获取凭据,但这种方法也行不通:
const AWS = require("aws-sdk")
const credentials = new AWS.ChainableTemporaryCredentials({
params: {RoleArn: "arn:aws:iam::{accountID}:role/{role}"},
masterCredentials: new AWS.EnvironmentCredentials("AWS")
)}
AWS.config.update({ credentials })
最后,我尝试创建自定义的Action(使用@@ actions / core,@ actions / io,@ actions / exec之类的action js库),以获取AWS env值并将其设置为~/.aws/credentials
,但也不能按预期工作
一种有效的方法是公开AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(出于安全目的,不使用GitHub Actions机密,但不理想)
有人对AWS凭证如何在GitHub Actions中使用机密信息有任何想法吗?
非常感谢您的关注。
答案 0 :(得分:2)
看看:https://github.com/aws-actions/configure-aws-credentials
它允许您配置 AWS 凭证和区域环境变量以在其他 GitHub 操作中使用。 AWS 开发工具包和 AWS CLI 都将检测环境变量,以确定用于 AWS API 调用的凭证和区域。
答案 1 :(得分:1)
幸运的是,aws-sdk
应该automatically detect credentials设置为环境变量并将其用于请求
要访问操作中的机密,您需要在存储库中设置它们。然后,您可以将它们作为环境变量暴露给该步骤。
有关更多详细信息,请参见Creating and using secrets
在您的情况下,您将要同时添加AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
的机密。
现在已经设置好了,您可以通过工作流yaml将这些值传递给操作:
steps:
...
- name: Unit Test
uses: ...
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: ...
答案 2 :(得分:0)
如果可以从命令行运行aws
,则可以设置以下ENV变量,而仅使用aws
命令而无需运行aws configure
:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_DEFAULT_OUTPUT: json