LoginSignup
0
0

[CI CD] OIDCでGithubActionとAWS繋がってReactAppのCI CDを設定

Posted at

前提

前の記事にはこちらテーマも説明しました。但し、「Secret access key」をダウンロードして、GitHubに保存することから、漏れる懸念があります。

概要

本記事では、「Secret access key」の代わりにOIDC方法をつじてGitHubActionはAWSリソースをアクセスできるということを説明させて頂きます。法方のメリットは、秘密なキーなどがなくてAWSコンソール上でリポジ名のみで利用しますから漏れる可能性がありません。

1. S3バケット設定

前記事のように進めます。

今回のバケット名:demo-oidc-ci-cd-react

2. OIDC設定

IAMサービス画面に入ります

2.0 ポリシー作成

最小権限規則で S3アクセスのみポリシを作成しております。
簡単なデモをしたい場合は、後で貴方はロールにS3アドミン権を付与しますから、こちらステップを飛ばしてもいいです。

Screenshot 2024-05-08 at 21.46.49.png

Screenshot 2024-05-08 at 21.59.04.png
JSONを選択して以下を貼ってください。
但し、本記事の対象S3バケット名はdemo-oidc-ci-cd-react

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "githutaction",
			"Effect": "Allow",
			"Action": [
				"s3:PutObject",
				"s3:DeleteObject",
				"s3:ListBucket"
			],
			"Resource": [
				"arn:aws:s3:::<対象S3バケット名>",
				"arn:aws:s3:::<対象S3バケット名>/*"
			]
		}
	]
}

Screenshot 2024-05-08 at 21.59.50.png
ポリシー名を登録しておきます。下ステップ2.2で利用されます
ポリシー名:github-action-oicd

2.1 アイデンティティプロバイダー作成

 tạo oidc2.png
tạo oidc 1.png

  • プロバイダURLはhttps://token.actions.githubusercontent.com
  • 対象者はsts.amazonaws.com

2.2 ロールを作成してアイデンティティプロバイダーにをアサイン

Screenshot 2024-04-21 at 15.02.20.png
Screenshot 2024-04-21 at 15.03.49.png
新規ロールを作成します。
Screenshot 2024-04-21 at 15.30.42.png

以下のカスタムポリシーを貼ってください。ただし、いくつかのところは修正が必要

  • Federated はアイデンティティプロバイダーのARN

  • < githubユーザー名 > /<対象リポジ名>

例:https://github.com/17021084/Github-Action-OIDC-ci-cd
< githubユーザー名 > /<対象リポジ名> = 17021084/Github-Action-OIDC-ci-cd

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Github-action-oidc-demo",
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<アカウントID>:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:sub": [
            "repo:<githubユーザー名>/<対象リポジ名>:pull_request",
            "repo:<githubユーザー名>/<対象リポジ名>:ref:refs/heads/main"
          ],
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}

Screenshot 2024-05-08 at 22.07.09.png

ステップ2.0で作成してポリシーを探して選びます。
もしステップ2.0を飛ばしたら、「AdministratorAccess」を選びます。これはいい方法ではありませんが、簡単なデモとしては大丈夫です。

Screenshot 2024-05-08 at 22.20.42.png

ロール名を入力します。

本記事のロール名はgithub-action-oicd

3. リポジ設置

React作成についてはこちらを参考

name: AWS OIDC Connect Demo
on:
  push: 
    branches: 
      - 'main'
env:
  AWS_REGION : "ap-northeast-1"
  AWS_S3_BUCKET : "demo-oidc-ci-cd-react"
permissions:
      id-token: write   # This is required for requesting the JWT
      contents: read    # This is required for actions/checkout
jobs:
  DemoOIDC:
    runs-on: ubuntu-latest
    steps:
      - name: Git clone the repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 14
      - name: Install dependencies
        run: npm install
      - name: Run unit test without prompt
        run: npm test -- --watchAll=false
      - name: Build React app
        run: npm run build
      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          role-to-assume: arn:aws:iam::656898940349:role/github-action-oicd
          role-session-name: samplerolesession
          aws-region: ${{ env.AWS_REGION }}
      - name: Remove all files
        run:  aws s3 rm s3://${{env.AWS_S3_BUCKET}} --recursive
      - name: Upload build to s3
        run:  aws s3 cp --recursive ./build s3://${{env.AWS_S3_BUCKET}}
  • AWS_S3_BUCKET は対象S3のバケット(demo-oidc-ci-cd-react)

  • role-to-assumeはステップ2.2で作成したロールのARN

Screenshot 2024-05-08 at 22.23.44.png
Screenshot 2024-05-08 at 22.26.24.png

結果

こちらは私のGitHubAction ログ
こちらはデプロイしたサイト
Screenshot 2024-05-08 at 22.29.51.png

最後

最後まで読んで頂いて有り難うございます。
役に立つを感じしたらハートやコメントやを残ってください:bow:

参考

0
0
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
0
0