Blog

GitHub ActionsでIAMロールを使ったAWS認証の実践

この記事は、ニフティグループ Advent Calendar 2024 18日目の記事です

1. はじめに

こんにちは。ニフティ新卒1年目のSREチームに所属している滝川です。

AWS環境でTerraformを使ったCI/CDパイプラインを構築する際、認証情報の管理は避けて通れない課題です。これまで、”AWS Access Key方式”を使用する方法が一般的でしたが、セキュリティや運用の面から、最近ではIAMロールを活用する方法が注目されています。

この記事をご覧の方は、アクセスキー方式ではなくIAMロールを用いて認証を行いたい方、もしくは以下のようなエラーの解消を試みている方々だと思います。

このエラーはGitHub ActionsがAWSリソースにアクセスするための適切な認証情報を見つけられない状況を示しています。

上記の課題はIAMロールを用いた認証方法の実装することで解決すると思います。手順を詳細に説明しているのでぜひ最後までお読みください。


2. 従来の認証方法: AWS Access Keyの使用

1. 仕組み

AWS Access Keyは、AWSアカウントのアクセス許可を設定するためのキーです。Access Key IDSecret Access Key をGitHub Secretsに登録し、GitHub Actionsで環境変数として使用します。

以下は典型的なGitHub Actionsの設定例です。

GitHub Secretsには以下を保存します。

  • AWS_ACCESS_KEY_ID: IAMユーザーで作成したAccess Key ID
  • AWS_SECRET_ACCESS_KEY:IAMユーザーで作成したSecrets Access Key

2. 課題

  1. セキュリティリスク
    • 長期的に有効なクレデンシャルであるため、流出した場合のリスクが大きい。
    • 一度流出すると、取り消すまで悪用される可能性がある。
  2. 権限の制御が難しい
    • IAMユーザー単位での権限付与になるため、CI/CD専用の細かな権限設定が難しい。
    • 必要以上の権限が付与されやすく、最小権限の原則に反する可能性がある。

3. 新しい認証方法: IAMロールとGitHub Secrets

1. 仕組み

AWSのIAMロールを使えば、長期的なアクセスキーを使わずに安全に認証を行えます。GitHub ActionsがAWSに一時的な権限をリクエストすることで、最小限の権限で操作を行います。

以下のように設定します。

GitHub Secretsには以下を保存します。

  • AWS_ROLE_ARN: 作成したIAMロールのARN

3.2 メリット

  1. セキュリティ向上
    • GitHub Actionsでのみ有効な一時的な権限を使用するため、クレデンシャル流出のリスクが低減。
    • 一時的な認証情報は短期間で失効するため、万が一流出しても影響を最小限に抑えられる。
  2. 最小権限の適用が容易
    • IAMロールに対して必要最小限の権限を設定可能。
    • Assume Roleを使用することで、特定のリソースやサービスに対する権限を細かく制御できる。
    • CI/CD処理に必要な操作のみを許可するIAMポリシーを柔軟に設定可能。

4. 比較: AWS Access Key と IAMロール

項目AWS Access KeyIAMロール
運用負荷高い低い
追跡難しい容易
最小権限の適用難しい容易

5. 実装手順

Step 1: IAM OIDC IDプロバイダを追加

  1. OpenID Connectを選択
  2. プロバイダのURLにhttps://token.actions.githubusercontent.com
  3. 対象者にsts.amazonaws.com
  4. プロバイダを追加をクリック

Step 2: IAMロールを作成

AWS CLIまたはAWSコンソールでIAMロールを作成します。以下の設定を行います。

  1. IAMロールの信頼関係を設定 ロールを信頼するエンティティとしてGitHub Actionsを指定します。
  2. ポリシーのアタッチ Terraformに必要な権限(例: S3, EC2, IAM)のみを付与します。

Step 3: GitHub Secretsに登録

GitHubのsetting→Actions secrets and variables→actionsからsercretsに以下の値を登録

  • AWS_ROLE_ARN: Step2で作成したIAMロールのARN

Step 4: GitHub Actionsの設定

.github/workflows/terraform.yml(任意のファイル)で環境変数を定義する。
下記はterraformのCIの実装例


6. まとめ

従来のAWS Access Keyを用いた認証方法には、セキュリティと運用の課題がありましたが、IAMロールを活用することで、認証情報を容易でセキュアに設定することができます!

ぜひ、この方法を試してみてください!

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!