0
1

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 と OIDC で AWS デプロイを安全に: IAM ユーザー廃止の手順

0
Posted at

はじめに

GitHub Actions を使って AWS にデプロイする際、従来は AWS_ACCESS_KEY_ID と SECRET_ACCESS_KEY を GitHub シークレットに保存して使用していました。しかし、この方法はセキュリティリスクがあり、管理の手間もかかります。この記事では、これを OIDC (OpenID Connect) を使ってより安全かつ管理しやすい方法に置き換える手順を解説します。対象読者は、AWS と GitHub Actions を使用しているエンジニアです。この手法を使うことで、以下のことが可能になります。

  • AWS IAM ユーザーのキー管理を不要に
  • OIDC を用いたセキュアな認証
  • GitHub Actions からの安全な AWS リソース操作

環境

  • AWS アカウント
  • GitHub アカウント
  • Terraform v1.x

IAM Identity Provider の作成

まず、AWS マネジメントコンソールで IAM Identity Provider を作成します。これにより、GitHub の OIDC プロバイダーを AWS に登録します。

  1. AWS マネジメントコンソールにログインし、IAM サービスを開きます。
  2. 左のメニューから "Identity providers" を選択し、"Add provider" をクリック。
  3. Provider type を "OpenID Connect" に設定し、以下の情報を入力します。
    • Provider URL: https://token.actions.githubusercontent.com
    • Audience: sts.amazonaws.com

IAM Role の作成と Trust Policy の設定

次に、GitHub Actions から AWS リソースを操作できる IAM Role を作成します。この Role の Trust Policy に OIDC プロバイダーと GitHub リポジトリを指定します。

# trust-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:<YOUR_GITHUB_REPO>:ref:refs/heads/main"
        }
      }
    }
  ]
}

IAM Role を Terraform で作成する場合の例:

# main.tf
resource "aws_iam_role" "github_actions" {
  name               = "github-actions-role"
  assume_role_policy = file("trust-policy.json")
}

resource "aws_iam_role_policy_attachment" "attach_policy" {
  role       = aws_iam_role.github_actions.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}

GitHub Actions の設定

続いて、GitHub Actions のワークフローで AWS 認証を設定します。aws-actions/configure-aws-credentials を使います。

# .github/workflows/deploy.yml
name: Deploy to AWS

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        role-to-assume: arn:aws:iam::<ACCOUNT_ID>:role/github-actions-role
        aws-region: us-west-2

    - name: Deploy to S3
      run: |
        aws s3 sync . s3://<YOUR_BUCKET> --delete

ハマったポイント / トラブルシュート

OIDC プロバイダー URL の間違い

OIDC プロバイダーの URL は https://token.actions.githubusercontent.com である必要があります。これを間違えると、AssumeRole が失敗します。

Trust Policy の条件設定

Trust Policy の sub クレームは、repo:<YOUR_GITHUB_REPO>:ref:refs/heads/main で指定する必要があります。これをミスすると、特定のブランチからしかデプロイできません。

まとめ

GitHub Actions を用いた AWS デプロイを OIDC によってよりセキュアに行う方法を紹介しました。IAM ユーザーを廃止し、OIDC によるフェデレーションを利用することで、アクセスキーの管理を簡素化できます。次に取り組むべき課題としては、さらに細かい IAM ポリシーの設定や、他の環境への展開が考えられます。

参考リンク

@card
@card
@card

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?