初めに
この記事はGitHub ActionsからECRにコンテナをデプロイするの1つ目の記事Github ActionsとAWSの接続する工程を行う記事になります。

上記の赤い枠の部分で、GitHubにPushしGitHub Actionsを利用してAWSに接続を行います。
概要
本記事では以下のようなことについて解説します。
・GitHub ActionsでAWSに接続するための設定
・AWSでGitHub Actionsからの接続を許可する設定
前提条件
以下の準備が行えていることを前提として説明を行います。
・GitHubが利用できる
・AWSが利用できる
それでは始めていきます。
Github ActionsとAWSの接続
サンプルソースの取得
今回はサンプルとしてAngularのを利用しようと思います。Angularで利用する場合は、以下のGitHubから取得をお願いします。
特にソースの内容などは理解する必要はありません。内容もng newして作成した、初期のソースです。
GitHub Actionsを実行する
次にGitHub Actionsで利用する設定ファイルを追加していきます。
以下のようなファルダを作成します。
プロジェクトフォルダ/.github/workflows

次にworkflowsフォルダ下に、workflow.ymlを作成します。

workflow.ymlに次のように追加します。
name: test workflow
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
これで、GitHub Actionsを利用する設定は完了です。ソースコードをPushしてみましょう。
実行後、ブラウザでGitHubを開いてください。以下の「Actions」をクリックし、GitHub Actionsが実行されていることを確認します。

workflow run resultsの中に、コミット時にコメントした、workflowが動いていることを確認します。

これでGitHub Actionsが利用できることが確認できました。
AWSを設定する
次にGitHub ActionsからAWSに接続するためにAWSの設定を行っていきます。
まずどのようにGitHub ActinosとAWSを接続するかというと、OIDC(OpenID Connect)という方法を利用して接続します。OIDCについて内容を細かく知る必要はありません。簡単に言うと一時的に認証情報を取得し、それを用いてアクセスする方法になります。詳細は以下の記事を確認してください。
それでは実際にAWSで設定を行っていきましょう。
IDプロバイダを作成する
まず、AWS IAMにアクセスしアクセス管理→IDプロバイダを開きます

次に「プロバイダを追加」をクリックします。

Add Identity provider画面で以下のように入力し、プロバイダを追加をクリックする。
項目 | 値 |
プロバイダのタイプ | OpenID Connect |
プロバイダのURL | https://token.actions.githubusercontent.com |
対象者 | sts.amazonaws.com |

ロールを追加する
次にロールを作成します。
アクセス管理→ロール→ロールを作成をクリックします。

信頼されたエンティティを選択の画面で次のように、入力する。
項目 | 値 |
信頼されたエンティティタイプ | カスタム信頼ポリシー |
カスタム信頼ポリシー | 以下のJSON |

カスタム信頼ポリシー
以下のようなJSONとなります。Federatedの<AWSアカウントID>と、token.actions.githubusercontent.com:subの<GitHubユーザー名>/<GitHubリポジトリ名>は自身のものに変更お願いします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AWSアカウントID>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringLike": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
"token.actions.githubusercontent.com:sub": "repo:<GitHubユーザー名>/<GitHubリポジトリ名>:*"
}
}
}
]
}
入力が完了したら次へをクリック
許可を追加画面では、今回は特に許可を追加せず次へを押してください。

次に、「名前、確認、および作成」画面でロールに名前を付けます。今回私は「sample-ECR-deploy-role」と名前を付けましたが、任意の名前でOKです!

入力が完了次第ロールを作成ボタンをクリックし完了する。

これでAWS側の設定を完了です!
GitHub ActionsとAWSを接続する
再度GitHub Actionsに戻りAWSとの接続を確認します。
プロジェクトフォルダ/.github/workflows/workflow.ymlを以下のように書き換えます。
name: test workflow
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: '<リージョン>'
role-to-assume: 'arn:aws:iam::<AWSアカウントID>:role/<ロール名>'
そのまま実行し、以下のようにbuildが成功すればAWSとの接続は完了です!

最後に
以上今回はGitHub ActionsとAWSとの接続を行いました。次回は#3として、Github ActionsからECSへのPushを行っていきます!
以下から次の記事を読んでみてください!