在我的单元测试中,我使用<code>aws sdk
一开始,我试图将值设置为<code>~/。aws/credentials使用github工作流中的run命令:
# .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 })
...
我试图用另一种方式在我的测试中获得证书,但也不起作用:
js prettyprint-override">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(使用动作js库,如:@action/core、@action/io、@action/exec),以获取AWS env值并将其设置为~/. aws/凭据
,但也无法按预期工作
一种有效的方法是公开AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(不使用GitHub Actions机密,出于安全目的不理想)
有人知道AWS凭证如何在GitHub操作中使用秘密吗?
非常感谢您的关注。
看看:https://github.com/aws-actions/configure-aws-credentials
它允许您配置AWS凭证和区域环境变量,以便在其他GitHub操作中使用。AWS SDK和AWS CLI将检测环境变量,以确定用于AWS API调用的凭据和区域。
避免使用长期和硬编码凭证。
配置 AWS 凭证操作提供了一种机制,用于配置 AWS 凭证和区域环境变量,以便在其他 GitHub 操作中使用。环境变量将由 AWS 开发工具包和 AWS CLI 检测,以确定用于 AWS API 调用的凭证和区域。
我建议将configure-aws-凭据配置为使用OpenID Connect(OIDC)。这允许您的GitHub Actions工作流访问AWS中的资源,而无需将AWS凭据存储为长期存在的GitHub机密。AWS帖子中的GitHub配置OpenID Connect将介绍此设置。
为了给你一个实际的例子,我建立了一个管道上传虚拟数据到S3桶。首先设置一个OpenID Connect提供者,并为github设置一个角色,以便将其加入到您的AWS帐户中。configure-aws-credentials中的例子是用CloudFormation编写的,但是我已经把它们翻译成了下面的Python Cloud-Development-Kit(CDK)。请确保更改角色条件以匹配您的存储库。
github_oidc_provider = iam.OpenIdConnectProvider(
self,
"GithubOIDC",
url="https://token.actions.githubusercontent.com",
thumbprints=["a031c46782e6e6c662c2c87c76da9aa62ccabd8e"],
client_ids=[
"sts.amazonaws.com"
]
)
github_actions_role = iam.Role(
self,
"DeployToBucketRole",
max_session_duration=cdk.Duration.seconds(3600),
role_name="github-actions-role",
description="Github actions deployment role to S3",
assumed_by=iam.FederatedPrincipal(
federated=github_oidc_provider.open_id_connect_provider_arn,
conditions={
"StringLike": {
# <GITHUB USERNAME>/<YOUR REPO NAME>
"token.actions.githubusercontent.com:sub": 'repo:arbitraryrw/cdk-github-actions-demo:*'
}
},
assume_role_action="sts:AssumeRoleWithWebIdentity"
)
)
bucket = s3.Bucket(
self,
f"example_bucket",
bucket_name="cdk-github-actions-demo",
encryption=s3.BucketEncryption.S3_MANAGED,
enforce_ssl=True,
block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
removal_policy=cdk.RemovalPolicy.DESTROY,
auto_delete_objects=True
)
# Give the role permissions to read / write to the bucket
bucket.grant_read_write(github_actions_role)
然后,您可以在管道中引用它,并使用这些凭据运行AWS CLI / SDK命令。注意,代码片段引用了Github加密的秘密,我建议利用这个功能:
name: Example CDK Pipeline
on:
push:
branches: [ main ]
jobs:
build:
name: Emulate build step
runs-on: ubuntu-latest
steps:
- name: Checking out repository
uses: actions/checkout@v2
- name: "Upload artifacts"
uses: actions/upload-artifact@v2
with:
name: build-artifacts
path: ${{ github.workspace }}/resources
deploy:
needs: build
name: Deploy build artifacts to S3
runs-on: ubuntu-latest
# These permissions are needed to interact with GitHub's OIDC Token endpoint.
permissions:
id-token: write
contents: read
steps:
- name: "Download build artifacts"
uses: actions/download-artifact@v2
with:
name: build-artifacts
path: ${{ github.workspace }}/resources
- name: Configure AWS credentials from Test account
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: us-east-1
role-to-assume: ${{ secrets.AWS_ROLE_FOR_GITHUB }}
role-session-name: GitHubActions
- run: aws sts get-caller-identity
- name: Copy files to the test website with the AWS CLI
run: |
aws s3 sync ./resources s3://${{ secrets.BUCKET_NAME }}
关于如何使用CDK设置它的完整例子,你可以看看我设置的cdk-github-actions-demo repo。
幸运的是,< code>aws-sdk应该自动检测设置为环境变量的凭证,并将它们用于请求
要访问操作中的秘密,您需要在repo中设置它们。然后,您可以将它们作为env var公开给步骤。
更多详情请见GitHub加密秘密
在你的情况下,你将需要为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: ...
我必须在nifi进程中使用aws临时凭证AccessKey、SecretKey和令牌来访问S3对象。AccessKey、SecretKey和Token将由Api调用提供。如何在nifi ListS3对象等中使用这些临时凭证? 我发现的选项之一是使用AWSCre的alsProviderControlllerService,因为这可以根据API调用更新控制器服务的值吗? 在这个场景中我还可以使用其他选
我遇到了与这里提到的问题类似的问题。我使用的是spring xml配置。我指定了我的全局AWS上下文凭据。我正在使用S3出站通道适配器从S3下载一个文件。我在config.properties文件中指定了我的键。我仍然看不出用来和S3谈话的凭据。 s3-read.xml aws-credentials.xml 配置属性 例外情况是: 我在这方面花了很多时间。当我尝试调试时,它似乎在寻找默认的凭据提
当使用AWS CLI时,是否有一种方法可以指定它使用凭据文件,而不是存储在env变量中的值? 是存储在~/.aws/credentials中的凭据文件中的配置文件名。我希望AWS CLI默认使用此凭据文件,而不使用存储在env变量中的凭据文件。我怎么能这么做?
我的意思是我的错误是: ``` 正在检查“contacts”表是否存在{unrecognizedClientException:请求中包含的安全令牌无效。在request.extractorry(/root/work/contacts_api/node_modules/aws-sdk/lib/protocol/json.js:51:27)在request.calllisteners(/root/w
问题内容: 我在AppEngine Python3.7标准版中启动了新应用。 我正在尝试使用以下代码段获取凭据,但失败了。 任何人都可以使用GAE标准Python37吗? 输入: 输出: 问题答案: 将App Engine Standard与python 3.7结合使用时,没有google.xxx库可用。您必须构建自己的数据库或使用标准的Python库。这同样适用于:,,,,,,,,,等等,甚至在
我已经在的Jenkins中输入了AWS凭据,但是它们不会显示在AWS Elastic Beanstek插件中的Post Build步骤的下拉列表中。 如果我单击验证凭据,我会得到这个奇怪的错误。 失败com.amazonaws.SdkClientException:无法从链中的任何提供者加载AWS凭据:[环境变量凭据提供者:无法从环境变量(AWS_ACCESS_KEY_ID(或AWS_ACCESS