Blog

OIDCのすゝめ 「GitHub actionsのシークレットキー管理からの解放」

はじめに

こんにちは。ニフティ株式会社の仲上です。

CI/CDを構築する際、アクセスキーの管理が大変です。

アクセスキーやシークレットキーをGitHub secretsなどに格納する方法がありますが、管理が大変で、期限切れの対応などが必要になります。

そこで、本記事ではOIDCを利用した認証でAWSへのアクセス権限を管理する方法をご紹介したいと思います。

OIDCについて

OIDCはOpenID Connectの略です。

OIDCはSSO(シングルサインオン)の実装手法の1つで、多くのサービスに利用されている認証フォーマットです。

他の認証フォーマットとしては、SAMLが有名です。

OpenID Connect の言葉の説明は以下の記事がわかりやすいです。

仕組みの解説については、以下の記事が有名です。

AWSではこの認証方式を利用した権限管理機能が備わっています。

メリット

メリットとしては以下の点が挙げられます。

  • 鍵の管理が不要
  • ユーザーに依存しない認証方法になる
  • トークンの期限に頭を抱えなくて済む

デメリット

デメリットとしては以下の点が挙げられます。

  • 他のリポジトリからデプロイするようになった場合、再度認証が必要
  • 設定をミスするとすべてのGitHub上のリポジトリからアクセスできてしまう

特に、AWSのIAMロールへのアクセス権限管理には細心の注意を払う必要があります。

今回はこの機能でリポジトリの認証設定を行い、デプロイしていくことにします。

設定手順


AWS の IAM へ GitHub のIDプロバイダを追加

デプロイ対象のIAMでIDプロバイダを選択します。

プロバイダを追加します。

以下の内容で設定します。

プロバイダのタイプOpenID Connect
プロバイダの URLhttps://token.actions.githubusercontent.com
対象者sts.amazonaws.com

IAMロールの作成

IAMロールから、カスタム信頼ポリシーを選択します。

カスタム信頼ポリシーの内容は以下の通りです。

「許可」ではデプロイに使用する権限を選択します。ここでは以下の権限を付与します。

  • AWSCloudFormationFullAccess
  • AmazonS3FullAccess
  • AWSLambda_FullAccess
  • CloudWatchLogsFullAccess
  • IAMFullAccess
  • AmazonDynamoDBFullAccess
  • AmazonEC2FullAccess

権限はデプロイするテンプレートの内容によって変更してください。

ロール名と説明を追加して、「ロールを作成」を選択します。

ワークフローを作成する

ここでようやく GitHubのワークフローが登場します。

認証には以下のアクションを使用します。

こちらのアクションを使用することで、Role arnを指定するだけでAWS認証を行ってくれるようになります。

ワークフローを定義します。

GitHub Acrtions の画面から変数を登録します。

Repository variables を選択します。

AWS_OIDC_ROLE_ARNを設定します。先ほど作成したRoleのARNを書きます。

ワークフローを動かすため、デフォルトブランチをmain以外にしておきます。

以下のコードを作成してpushします。

動作確認

うまくいきました。みなさんもぜひOIDCを利用してみてください。

参考

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

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

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