27
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actions⇔AWS らくらく連携手順書♪

Posted at

閲覧ありがとうございます。
本記事では、一回繋いでしまえば超絶便利な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'

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

27
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?