はじめに
こんにちは。ニフティ株式会社の仲上です。
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 |
---|---|
プロバイダの URL | https://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を利用してみてください。
