【入門編】GitHub OIDC認証で脱キー管理!AWS・GCP連携でアクセストークンを漏洩リスクから守る設定法 – バージョン管理・CI/CD活用バイブル

こんにちは。現場の最前線でエンジニアリングをしていると、「Secretsに保存したAWSアクセスキーが漏洩した」という悪夢のようなインシデントの話を耳にすることがあります。

皆さんは、まだGitHubのSecretsにAWSの長期的な認証情報を貼り付けていませんか?もしそうなら、今日でその習慣と決別しましょう。

今回は、GitHub Actionsの「OIDC(OpenID Connect)」を利用して、パスワードレスでAWSと連携する「最強の安全策」を伝授します。これをマスターすれば、鍵管理のストレスから解放され、セキュリティ強度は桁違いに向上します。

—

なぜ「IAMユーザーキー」は危険なのか?

従来のやり方では、AWSのIAMユーザーを作成し、`AWS_ACCESS_KEY_ID` と `AWS_SECRET_ACCESS_KEY` をGitHubのSecretsに保存していました。しかし、これには致命的な欠陥があります。

1. 鍵が永続的である: 漏洩した場合、誰かが明示的に無効化するまで攻撃者はアクセスし続けられます。
2. 権限過多になりがち: 鍵を回すのが面倒で、つい広範囲な権限を与えてしまいがちです。
3. 監査の難しさ: 「誰がいつ使ったか」の追跡が複雑になります。

OIDC認証という「魔法」の正体

OIDCは、「GitHub Actionsが発行する一時的なトークンを、AWSが信頼して身分証明書として受け取る」という仕組みです。

  • 鍵は存在しない: 固定のパスワードを保存する必要はありません。
  • 短命なセッション: GitHub Actionsの実行が終われば、そのトークンは無効になります。
  • 文脈(Context)ベースの認証: 「このリポジトリの、このブランチで実行されたときだけ」という条件付きでAWSへの接続を許可できます。

—

実践:AWSとGitHub OIDCの接続手順

まずは、「GitHubを信頼できる相手としてAWSに登録する」ことから始めます。

ステップ1:AWS側で「IDプロバイダー」を作成する

AWSコンソールで「IAM」→「IDプロバイダー」を選択し、以下のように設定します。

  • プロバイダーのタイプ: OpenID Connect
  • プロバイダーのURL: `https://token.actions.githubusercontent.com`
  • 対象者(Audience): `sts.amazonaws.com`

これで、AWSはGitHubからのリクエストを受け入れる準備が整いました。

ステップ2:信頼ポリシーを記述したIAMロールの作成

次に、GitHub Actionsが引き受けるための「ロール」を作成します。信頼ポリシー(Trust Policy)には、どのリポジトリからのアクセスを許可するかを明記します。

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Federated”: “arn:aws:iam::[あなたのAWSアカウントID]:oidc-provider/token.actions.githubusercontent.com”
},
“Action”: “sts:AssumeRoleWithWebIdentity”,
“Condition”: {
“StringLike”: {
“token.actions.githubusercontent.com:sub”: “repo:[GitHubユーザー名]/[リポジトリ名]:”
}
}
}
]
}

※ `sub` フィールドでリポジトリを限定するのが重要です。これによって、万が一他のリポジトリが乗っ取られても、このロールは使われません。

—

ステップ3:GitHub ActionsでHelloWorld(動作確認)

設定が完了したら、GitHub Actionsから実際にAWSへアクセスしてみましょう。`.github/workflows/deploy.yml` を作成します。

name: OIDC AWS Test
on: push

permissions:
# OIDCトークンを取得するために必須の権限
id-token: write
contents: read

jobs:
aws-test:
runs-on: ubuntu-latest
steps:

  • name: Configure AWS Credentials

uses: aws-actions/configure-aws-credentials@v4
with:
# 先ほど作成したIAMロールのARN
role-to-assume: arn:aws:iam::[あなたのAWSアカウントID]:role/[作成したロール名]
aws-region: ap-northeast-1

  • name: Run AWS Command

# 認証が成功すれば、自分のAWSアカウント情報が表示されます
run: aws sts get-caller-identity

この設定の何がすごいのか?

1. Secretsが空っぽ: GitHub側にAWSの秘密情報は一切ありません。
2. 権限の最小化: IAMロールに必要なS3バケットへのアクセス権やデプロイ権限だけを付与すれば、それ以外の悪用は不可能です。
3. 自動的なローテーション: 毎回発行される一時トークンを使うため、ローテーションという概念すら不要です。

—

先輩エンジニアからのアドバイス

初心者の方は「設定項目が多くて難しそう」と感じるかもしれません。しかし、一度この構築を済ませてしまえば、二度と「鍵の漏洩」に怯える必要はなくなります。

CI/CDを構築する際、まず考えるべきは「いかに便利にするか」ではなく「いかに安全に自動化するか」です。OIDCによるパスワードレス認証は、モダンなDevOpsにおける「現代の教養」と言っても過言ではありません。

まずは小さなリポジトリで、この設定を試してみてください。その瞬間、あなたの開発環境のセキュリティレベルが、世界トップクラスの企業と同じ水準に引き上がるはずです。

もし分からないことがあれば、いつでも聞いてくださいね。一緒に安全で快適なパイプラインを作り上げていきましょう!

タイトルとURLをコピーしました