无法从 terraform 代码创建 s3 存储桶来创建 s3 存储桶。 我有代码
uses: hashicorp/terraform-github-actions/[email protected]
env:
TF_ACTION_WORKING_DIR: 'terraform'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
它很适合我。 但在我的组织中,我们对帐户使用 MFA。 我们使用虚拟令牌生成器进行 MFA,并拥有密钥和 ARN。
需要帮助生成令牌和角色。它是否已在 githubactions 中的任何库中。
我有这个脚本来创建 aws 令牌和角色。
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
export AWS_ACCESS_KEY_ID=<<YOUR_KEY>>
export AWS_SECRET_ACCESS_KEY=<<YOUR_SECRET>>
aws sts get-session-token --duration-seconds 36000 \
--serial-number arn:aws:iam::<<YOUR_IAM_ACCOUNT_NUMBER>>:mfa/<<YOUR_IAM_ACCOUNT>> \
--token-code <<YOUR_MFA_OTP>> \
--output json
export AWS_ACCESS_KEY_ID=<<GET_FROM_JSON>>
export AWS_SECRET_ACCESS_KEY=<<GET_FROM_JSON>>
export AWS_SESSION_TOKEN=<<GET_FROM_JSON>>
aws sts assume-role --role-arn arn:aws:iam::<<YOUR_DEV_ACCOUNT_NUMER>>:role/<<YOUR_ROLE>> \
--role-session-name <<YOUR_ROLE>> \
--duration 3600 \ --output json
export AWS_ACCESS_KEY_ID=<<GET_FROM_JSON>>
export AWS_SECRET_ACCESS_KEY=<<GET_FROM_JSON>>
export AWS_SESSION_TOKEN=<<GET_FROM_JSON>>
需要在 github actions 中执行此操作。
我们从虚拟 MFA 自动化了 MFA 令牌。 像下面这样:
export AWS_SECRET_ACCESS_KEY="${env.AWS_SECRET_ACCESS_KEY}"
MFA="\$(oathtool --base32 --totp ${env.MFA_KEY})"
github上有什么简单的方法吗
我想你已经快完成了,你已经弄清楚如何使用
oathtool
来做到这一点。您只需在 GitHub Actions 工作流程中安装 oathtool
并将 MFA 密钥注册为 GitHub 存储库中的机密或(如果您的计划中有此选项)GitHub 组织机密。
如果您在 Ubuntu 容器上运行,安装
oathtool
就像将以下步骤添加到您的工作流程作业中一样简单:
- name: install oathtool
run: sudo apt-get install -y oathtool
您帖子中的所有内容也可以在 GitHub Actions 工作流程中完成,无论是简单的 shell 命令。我不知道有任何现成的操作可以为您完成所有这一切(但没有什么可以阻止您自己创建一个)。
完整的工作可能看起来像这样(尚未测试过):
job:
aws:
runs-on: ubuntu-latest
env:
AWS_ACCOUNT_NUMBER: 12345678
AWS_IAM_USER: me@mydomain
steps:
- name: install oathtool and jq
run: sudo apt-get install -y oathtool jq
- name: get time-based one-time password
run: TOTP=`oathtool --base32 --totp ${{secrets.MFA_KEY})"`
- name: get temporary session token
run: >-
eval `aws sts get-session-token
--duration-seconds 36000
--serial-number arn:aws:iam::${{ env.AWS_ACCOUNT_NUMBER }}:mfa/${{ env.AWS_IAM_USER }}
--token-code ${{env.TOTP}}
| jq -r '"AWS_ACCESS_KEY_ID="+.Credentials.AccessKeyId,"AWS_SECRET_ACCESS_KEY="+.Credentials.SecretAccessKey,"AWS_SESSION_TOKEN="+.Credentials.SessionToken'`
- name: do your AWS thing
run: aws ec2 describe-instances
我已经针对我的用例测试了上面的脚本,其中我必须执行 mfa 然后承担该角色,为此我必须将密钥作为环境变量传递,然后在操作中使用它。希望这可以帮助任何正在从 Github 操作中寻找此类身份验证的人。
''''
steps:
# Checkout the repository to the GitHub Actions runner
- name: Checkout
uses: actions/checkout@v2
- name: install oathtool and jq
run: echo "${{secrets.RUNNER_PASSWORD}}" | sudo -S -k apt-get install -y oathtool jq
- name: get token
run: |
TOTP="oathtool -b --totp ${{secrets.MFA_KEY}}"
$TOTP >> totp.output
token=$(cat totp.output)
eval `aws sts get-session-token --duration-seconds 36000 --serial-number ${{ secrets.MFA_ARN}} --token-code $token | (jq -r '"AWS_ACCESS_KEY_ID="+.Credentials.AccessKeyId,"AWS_SECRET_ACCESS_KEY="+.Credentials.SecretAccessKey,"AWS_SESSION_TOKEN="+.Credentials.SessionToken' >> $GITHUB_ENV)`
- name: Identity Check
run: aws sts get-caller-identity
- name: Assume execution role
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }}
aws-region: us-east-1
aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }}
aws-session-token: ${{ env.AWS_SESSION_TOKEN }}
role-duration-seconds: 3000
role-skip-session-tagging: true
role-to-assume: "arn:aws:iam::${{secrets.AWS_ACCOUNT_ID}}:role/${{secrets.ROLE_NAME}}"
''''
不幸的是,根据https://florian.ec/blog/github-actions-awscli-errors的报告,这种方法不再有效。他的解决方法不再有效。当将 --region xxx 添加到 AWS CLI 命令时,会引发错误“无法找到凭证。您可以通过运行“aws configure”来配置凭证。