Jenkins

Jenkins と AWS の最小権限 CI/CD 構築ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

前提条件と最小権限の IAM ロール設計

Jenkins が AWS の各サービス(CodeBuild・CodeDeploy・S3・ECR など)にアクセスする際は、最小権限の原則 に従ってロールを作成します。過剰なポリシーは攻撃対象が増えるだけでなく、監査やコンプライアンスでも指摘されやすくなるため必ず避けましょう。

最小権限ポリシー例

以下の JSON は Jenkins 用 IAM ロールに付与する 最小限の許可 をまとめたものです。
- 必要なサービスごとに Sid で区切り、ActionResource を限定しています。
- SSM Parameter Store や Secrets Manager からは 読み取り のみ許可し、書き込みは除外しています。

ポイント
このロールは EC2 インスタンスや ECS/Fargate タスクに インスタンスプロファイル / タスクロール としてアタッチし、Jenkins は AWS SDK のデフォルト認証フローで自動的に権限を取得します。クレデンシャル情報を Secrets Manager に格納するような一時キーの管理は不要です。


AWS 上に Jenkins 環境を構築する方法

Jenkins を AWS にデプロイする代表的な選択肢として EC2(ベアメタル)ECS/Fargate(コンテナ) の 2 パターンがあります。どちらも Terraform または CloudFormation でコード化でき、再利用性と可搬性が高くなります。

EC2 インスタンスでのセットアップ

EC2 上に Jenkins を構築すれば、プラグインやカスタムツールのインストールがフルコントロールできます。以下は Free Tier 対応 (t2.micro) の最小構成例です。

補足
本番環境では CPU・メモリ要件に合わせて t3.mediumm5.large 等へスケールアウトしてください。インスタンスサイズを変更した場合でも、IAM ロールとセキュリティグループは同一です。

ECS/Fargate でのコンテナ型デプロイ

Fargate はサーバレスなコンテナ実行基盤であり、インフラ管理が不要です。公式 Jenkins イメージ public.ecr.aws/jenkins/jenkins:lts を利用した CloudFormation テンプレート抜粋を示します。

ポイント
- ExecutionRoleArn はコンテナイメージ取得や CloudWatch Logs への書き込みに必要です。
- TaskRoleArn が実際に Jenkins ジョブが利用する権限を保持し、ここに最小権限ポリシー(上記 JSON)をアタッチします。


Jenkins と AWS 認証情報・ソース管理の安全な連携

Jenkins のビルドジョブが AWS リソースへアクセスするときは 認証情報を平文で保存しない ことが最重要です。AWS が提供するロールベースの認証フローと、Jenkins 標準プラグインの組み合わせで安全に実装できます。

IAM ロール/インスタンスプロファイルを利用した認証情報管理

  • EC2aws_iam_instance_profile でアタッチしたロールが自動的に一時クレデンシャルを提供します。Jenkins の Credentials Plugin は「Amazon Web Services Credentials」タイプで “Default credential provider chain” を選択すれば、環境変数やプロファイルではなくインスタンスロールから取得できます。
  • ECS/Fargate:タスク定義の TaskRoleArn が同様に一時クレデンシャルを供給します。コンテナ内部で aws sts get-caller-identity を実行すれば、正しくロールが適用されていることを確認できます。

注意
Secrets Manager に AccessKey/SecretKey を格納して Jenkins から取得するパターンは推奨しません。キーのローテーションや漏洩リスクが増大します。代わりに ロールベース認証 を徹底してください。

Jenkinsfile 内での利用例

GitHub / GitLab Webhook 設定手順

Git リポジトリの変更を検知して Jenkins パイプラインを自動起動させる設定です。以下は GitHub を例にした流れですが、GitLab でも同様の項目があります。

  1. Jenkins 側
  2. 「新規ジョブ > パイプライン」作成 → SCM に Git、リポジトリ URL とブランチを設定。
  3. 「ビルドトリガー」で “GitHub hook trigger for GITScm polling” を有効化。

  4. GitHub 側Settings > Webhooks

  5. Payload URLhttps://<jenkins-host>/github-webhook/
  6. Content typeapplication/json
  7. Secret: Jenkins で設定した Webhook secret と同一にし、プラグインの「Validate webhook payload」オプションをオン。

  8. イベント選択

  9. 「Just the push event」または「Pull request events」をチェックして保存。

ベストプラクティス:Webhook のシークレットは必ず Secrets Manager に保管し、Jenkins 起動時に環境変数として注入します。これによりコードリポジトリ側に平文が残りません。


Pipeline as Code 実装ガイド(Jenkinsfile サンプル)

Jenkins のパイプラインは Jenkinsfile でコード化し、バージョン管理下に置くことで変更履歴とレビューを一元化できます。以下では「ビルド → デプロイ → 後処理」の典型フローを示します。

ビルドステージ:CodeBuild の呼び出し例

Jenkins は AWS CLI を使って CodeBuild プロジェクトを起動し、実際のコンパイルや Docker イメージ作成は AWS 側で完結させます。これにより Jenkins サーバーへの負荷が軽減されます。

ポイント
- CODEBUILD_PROJECT は環境変数で外部化し、ステージング/本番で同一 Jenkinsfile を使い回せます。
- ビルドの進捗は CodeBuild の CloudWatch Logs で確認できるので、Jenkins 側では開始コマンドだけを管理します。

デプロイステージ:CodeDeploy と SAM CLI

CodeDeploy(EC2/ECS 向け)

SAM CLI(サーバーレス)

補足samconfig.tomldeployment_type = "canary10percent5minutes" を記載すると、デプロイ時に自動でカナリアリリースが適用されます。

オプションフロー:App2Container での自動コンテナ化

レガシーアプリでも AWS App2Container (A2C) を使えば Dockerfile の手書きなしでコンテナイメージを生成できます。以下は Jenkins から A2C CLI を呼び出すサンプルです。

ポイント:A2C は IAM ロールで実行するため、事前に AmazonApp2ContainerFullAccess 相当の権限をタスクロールへ付与してください。


運用ベストプラクティスとトラブルシュート

パイプラインが本番環境で安定稼働するように、失敗時の自動ロールバック・通知ステージング環境の IaC 管理可観測性の確保 の 3 本柱を整備します。

失敗時のロールバックと Slack / SNS 通知

post ブロックでビルド結果に応じたアクションを定義し、失敗したら自動で CodeDeploy を停止し、Slack と SNS に即時通知します。

ベストプラクティス:通知メッセージに ジョブ名・ビルド番号・失敗理由currentBuild.result など)を含めると、トラブルシュートが高速化します。

ステージング環境の IaC 管理(Terraform / CloudFormation)

ステージングと本番は 同一コードベース で管理し、変数だけ切り替えてデプロイします。以下は Terraform のモジュール構成例です。

  • var.environmentstaging または production を設定するだけで、VPC・サブネット・EC2/ ECS のリソースが自動的に切り替わります。
  • 本番環境への適用前には必ず terraform plan -out=plan.out で差分を確認し、承認後に terraform apply "plan.out" を実行します。

監視・ログ集約:CloudWatch アラーム と OpenSearch(旧 ELK)

CloudWatch アラーム例

  • アラームが発火したら SNS → Slack に自動転送し、担当者へ即時通知します。

OpenSearch(ELK)へのログ集約フロー

  1. JenkinsCodeBuild のログは aws logs へ出力(デフォルト)。
  2. Kinesis Firehose を作成し、CloudWatch Logs ストリームを Amazon OpenSearch Service に配信。
  3. Kibana ダッシュボードで以下の指標を可視化:
  4. ビルド実行時間・失敗率
  5. デプロイ成功/ロールバック回数
  6. Jenkins のシステムエラーログ

ポイント:検索クエリに @timestamp フィールドを使い、過去 30 日分のトレンド分析を自動化すると、異常検知が容易になります。


記事まとめ

  • 最小権限 IAM:EC2/ECS のインスタンスロール/タスクロールに JSON ポリシーを付与し、一時キーは一切使用しない。
  • Jenkins 環境構築:Free Tier 用 t2.micro(EC2)と Fargate の両パターンを Terraform/CloudFormation でコード化。
  • 認証情報管理:Secrets Manager にキー保存は廃止し、ロールベース認証+Credentials Plugin のデフォルトプロバイダーを利用。
  • Pipeline as Code:Jenkinsfile で CodeBuild 起動 → CodeDeploy / SAM デプロイ → 必要に応じて App2Container を組み込むフローを実装。
  • 運用ベストプラクティス:失敗時自動ロールバックと Slack/SNS 通知、ステージング環境の IaC 管理、CloudWatch + OpenSearch による可観測性確保。

これらの手順とコード例をそのままプロジェクトに取り込めば、 安全・スケーラブルな Jenkins‑AWS CI/CD パイプライン が迅速に構築できます。まずは Free Tier の t2.micro で動作確認し、要件に合わせてインスタンスタイプやポリシーを拡張していくことを推奨します。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Jenkins