GitHub Actions⇔AWS らくらく連携手順書♪ #GitHubActions - Qiita

閲覧ありがとうございます。
本記事では、一回繋いでしまえば超絶便利なGitHub ActionsとAWSの連携方法を共有します。
今回は、GitHub ActionsとAWSを、IAM IDプロバイダ・STSを用いて連携します。

AWS側の設定

【 用意するもの 】

  • GitHub ActionsがAWS環境にアクセスするためのIAMロール
  • GitHub Actionsからのアクセスに対し一時的な認証情報を渡すためのIDプロバイダ

① IAMロールの作成

1. 任意のIAMポリシーをアタッチしたIAMロールを作成

私はAWS Nuke(*1)をAWS環境に対し実行したかったため、AdministratorAccess権限を持つIAMロールを作成しました。

(*1) AWS Nuke:AWS環境内のリソースを一括削除することができるオープンソースのツール。(後日NukeとGitHub Actionsを用いた不要リソースの自動定期削除について記事を投稿予定です)

スクリーンショット 2025-04-09 224224.png

2. IAMロールの信頼ポリシーを設定

信頼ポリシー内で、ワークフローファイル(=GitHub Actionsでスクリプトを実行するファイル)からの認証用URL経由のアクセス時にassume roleするよう許可します。

スクリーンショット 2025-04-09 230243.png

IAMポリシー(コピペ用)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::[アカウントID]:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringLike": {
                    "token.actions.githubusercontent.com:sub": "repo:[Organizations名 or 個人アカウント名]/[リポジトリ名]:*"
                }
            }
        }
    ]
}

注意点

  • 赤くマークした箇所:個人のGitHub内リポジトリを使用する際は個人のGitHubアカウント名を、企業などのOrganizations配下のリポジトリを使用する際はOrganizations名を記入してください
  • 青でマークした箇所:使用するリポジトリ名を記入してください

② IAM IDプロバイダーの作成

1. IAMコンソール画面で「IDプロバイダ」を選択

スクリーンショット 2025-04-09 224711.png

2. 「IDプロバイダを追加」ボタンをクリック

スクリーンショット 2025-04-09 225038.png

3. IDプロバイダの詳細を設定

上記を設定し、「プロバイダを追加」ボタンを押下

スクリーンショット 2025-04-09 225426.png

AWS側の設定はこれで終了です!

GitHub Actions側の設定

①実行用IAMロールのARNをSecretsに設定

※variablesやベタ打ちでも大丈夫ですがセキュリティ面に不安があるためSecretsに保存するのがおすすめです。

1. GitHubにアクセスし、Settingsタブに移動

image.png

2. 「Security」内「Secrets and variables」の「Actions」を選択

image.png

3. Repository secretsの「New repository secret」ボタンを押下

image.png

4. 「Name」に任意のSecret変数名、「Secret」に作成したIAMロールのARNを記載し、「Add secret」ボタンを押下

スクリーンショット 2025-04-09 232113.png

5. Actionsタブに移動し、「New workflow」ボタンを押下

image.png

6. Simple workflowの「Configure」ボタンを押下すると、新しいワークフロー作成画面へ遷移する

image.png

7. ワークフローファイルの中身には以下を設定

ファイル名には「任意のファイル名.yaml」を設定してください。

github-actions-to-aws.yaml

name: github-actions-to-aws  # 任意のワークフロー名(処理名)
on: push  # on:push = ファイルがプッシュ(更新)されるごとに処理を動かす

jobs:
  run-container: # job名は任意。ワークフローを起動させるための設定
    name: run  # 任意の関数名
    runs-on: [Organaizationsで指定されているセルフホステッドランナー]  # 個人のアカウントの場合は「ubuntu-latest」などを設定
    permissions:
      id-token: write
      contents: write
    steps:
      - name: Checkout  # 関数名は任意
        uses: actions/checkout@v3
        
      - name: Configure AWS credentials  # 関数名は任意。AWS環境にアクセスする
        uses: aws-actions/configure-aws-credentials@v2
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME_TEST }}  # 先ほど作成したSecretsを指定
          aws-region: ap-northeast-1  # Assume roleを行うリージョンを指定

      - name: CLI-install  # 関数名は任意。CLIのインストールを行う
        run: |
          curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
          unzip awscliv2.zip
          sudo ./aws/install  

      - name: [任意の関数名]
        run: |
          [任意の処理]
        # 例:bash ami-get.sh
          

最後の行 [任意の処理] の中に任意のスクリプトを入力することでAWS環境に対し任意のスクリプトを実行することができます。

また、2行目のon: pushを以下のように変更すると、任意の日次で定期実行や1回きりの実行ができるようになります。(cron形式で指定)

on:
  schedule:
    - cron: '0 6 * * 4'

本記事はここまでとなります。
閲覧いただき、ありがとうございました!



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link