1

无法从 terraform 代码创建 s3 存储桶来创建 s3 存储桶。我有代码


uses: hashicorp/terraform-github-actions/init@v0.4.0
      env:
        TF_ACTION_WORKING_DIR: 'terraform'
        AWS_ACCESS_KEY_ID:  ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY:  ${{ secrets.AWS_SECRET_ACCESS_KEY }}

它适用于我的 aws。但在我的组织中,我们将 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 操作中执行此操作。

我们从虚拟 MFA 自动化了 MFA 令牌。如下所示:

                            export AWS_SECRET_ACCESS_KEY="${env.AWS_SECRET_ACCESS_KEY}"
                            MFA="\$(oathtool --base32 --totp ${env.MFA_KEY})"

那么github中有没有简单的方法。

4

1 回答 1

0

我想你快到了,你已经想出了如何使用oathtool来做到这一点。您只需oathtool在您的 GitHub Actions 工作流程中安装并将您的 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
于 2022-03-01T17:56:00.910 回答