経緯
今まで直接SSH接続してgit pullやらphp artisan やらをしていたことが多く
また1から作成したことがないなと思いこの機会に学習したので備忘録として残します。
色々検索してみる
「github ec2 自動デプロイ」でググるといろんな方法がありました。
認証鍵の方法だとGitHub ActionsのIPが固定じゃないので「セキュリティグループでSSHのIP制限をしていたら使えないんじゃないか?」と思い今回はOpenID Connectを使用することにしました。
※self-hosted runner等使用すると認証鍵でもいけそうでした。
構成
Amazon Linux2023
Laravel (sailを使用)
Vue3
- git,composer等、使用するものをEC2でインストール済み
やること
AWS
- IDプロバイダの作成
- IAMロールの作成
- ポリシーの作成
1. IDプロバイダの作成
-
以下を追加し作成
• プロバイダーのタイプ: OpenID Connect
• プロバイダーURL: https://token.actions.githubusercontent.com
• 対象者: sts.amazonaws.comtoken.actions.githubusercontent.com:audは、トークンの発行者(audience)を指定します。ここでは 'sts.amazonaws.com' を使用
token.actions.githubusercontent.com:subは、トークンのサブジェクトを指定し、特定のGitHubリポジトリやブランチに対するアクセスを制限します。引用元
2. IAMロールの作成
-
信頼されたエンティティタイプを「ウェブアイディンティティ」を選択し下記を入力
アイデンティティプロバイダー: token.actions.githubusercontent.com
Audience: sts.amazonaws.com
GitHub 組織: ユーザー名 (今回は個人のためユーザー名になります)
GitHub repository: 対象のリポジトリ
GitHub branch: 対象のブランチ -
許可ポリシーは設定せずに次へ
-
名前、確認、および作成画面で任意のロール名を入力(必要であれば説明も)しロールを作成
-
作成したロールを確認しARNをメモします。(GitHubで使用します)
3. ポリシーの作成
-
ポリシーエディタを「JSON」に変更
下記を追加し「次へ」ボタン押下json{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:GetCommandInvocation" ], "Resource": [ "arn:aws:ec2:[リージョン]:[アカウントID]:instance/*", "arn:aws:ssm:[リージョン]::document/AWS-RunShellScript" ] }, { "Effect": "Allow", "Action": [ "ssm:GetCommandInvocation" ], "Resource": [ "*" ] } ] }
-
Effect
許可または拒否を設定。 -
Action
許可もしくは拒否する操作。 -
Resource
対象のリソース。 -
[リージョン]
使用しているEC2のリージョンを記載します。(例:ap-northeast-1) -
[アカウントID]
IAMダッシュボードの右側に記載されているアカウントIDになります。
インスタンスARNにも記載されています。
GetCommandInvocationがResourceをグローバル(*)にしないと認識してくれませんでした。。。
-
Effect
最後に
ロールやポリシーの付け方がいろんな方法で可能なのでどこで設定したか戸惑ってしまいました。
AWSの設定はこれで終了です。
次回はGitHubの設定をしていきます。↓
参考