Amazon SageMaker AIとGitHubの連携は、向きで2種類に分かれます。SageMaker側のノートブックやエディタからGitHubのリポジトリを取り込んで編集する向きと、GitHub側のワークフローからSageMakerの学習やパイプラインを起動する向きです。前者は経路ごとに認証情報の置き場所が違い、後者はアクセスキーを使わずOIDCで一時認証情報を受け取るのが標準です。この記事では、ノートブックインスタンス・Studio・GitHub Actions・MLOpsプロジェクト・SageMaker Unified Studioの5つの設定を、2026年11月2日時点のAWSとGitHubの公式ドキュメントで確認した仕様に沿って説明します。
まとめ:SageMakerとGitHubを連携するときの要点
- ノートブックインスタンスは、リポジトリをSageMaker AIのリソースとして登録し、認証情報をAWS Secrets Managerに置きます。シークレット名に
sagemakerを含める、ステージングラベルをAWSCURRENTにする、値を username と password のJSONにする、の3条件が必須です。 - 関連付けられるのは既定1本と追加3本の計4本までです。クローン先は
/home/ec2-user/SageMakerの直下になります。 - Studio(JupyterLab・Code Editor)はStudio内でクローンする方式です。管理者がドメインやユーザープロファイルに候補URLを登録できるのはJupyterLabだけで、Code Editorの設定には同じ項目がありません。
- GitHubのGit操作はパスワード認証を受け付けません。password欄には個人用アクセストークン(PAT)を入れます。fine-grainedならpushにContentsのwrite、ワークフローファイルの更新にはWorkflowsのwriteも要ります。
- GitHub ActionsからSageMakerを動かす場合は、IAMのOIDCプロバイダーと信頼ポリシーで
subを絞ります。2026年7月15日以降に作ったリポジトリはsubの書式が変わっているため、古い書式の信頼ポリシーでは引き受けに失敗します。 - SageMaker Unified StudioのGit接続はCodeConnections経由で、有効にするとアカウント内の全ユーザーが接続配下の全リポジトリを読み書きできます。2026年7月30日に始まった新方式では、自動force-pushではなく明示的にpushします。
- Amazon Linux 2のノートブックインスタンスは2026年6月30日にサポートが終わり、8月1日からAWSによるAL2023への段階的なアップグレードが始まっています。
連携の向きと5つの設定経路の選び分け
最初に決めるのは「どこでコードを書き、どこから処理を起動するか」です。ノートブックで試行錯誤するならSageMaker側から取り込む経路、mainへのマージで学習を回したいならGitHub側から起動する経路を選びます。両方を組み合わせるのが一般的な形です。
| 経路 | 向き | 認証情報の置き場所 | 主な設定 |
|---|---|---|---|
| ノートブックインスタンス | SageMakerから取り込む | Secrets Manager | Git repositories に登録 |
| Studio JupyterLab | SageMakerから取り込む | クローン時に入力 | ドメインへのURL登録(任意) |
| Studio Code Editor | SageMakerから取り込む | クローン時に入力 | Explorerからクローン |
| GitHub Actions | GitHubから起動する | OIDCの一時認証情報 | IAMロールの信頼ポリシー |
| MLOpsプロジェクト | GitHubの変更で起動する | CodeConnections | 接続にタグ sagemaker=true |
| Unified Studio | 双方向(プロジェクト単位) | CodeConnections | Git接続を有効化 |
新規のチーム開発で、管理者がドメインやユーザープロファイルにクローン候補URLを配布したい場合は、StudioのJupyterLabを推奨します。ノートブックインスタンスはリポジトリの関連付けがインスタンス単位に閉じるため、人数が増えると設定が分散します。逆に、既存のノートブックインスタンスで回っている検証環境を残したまま、ノートブックをGitで保全したいだけなら、関連付け機能が最も手間がかかりません。
GitHubの個人用アクセストークンの作成と権限設定
ノートブックインスタンスの関連付け機能や、StudioからHTTPSでプライベートリポジトリをクローンする手順では、GitHubのユーザー名とPATを使います。GitHubはGit操作のパスワード認証を廃止しており、パスワード欄に入れるのはPATです。AWSのリポジトリ登録の手順も、GitHubリポジトリではpassword欄にPATを使うよう勧めています。
| 種類 | clone・pushに要る権限 | 対象リポジトリの絞り込み |
|---|---|---|
| fine-grained | cloneのみ:Contents read/push:write | リポジトリ単位で指定できる |
| classic | repo(ワークフロー更新はworkflowも必要) | アクセスできる全リポジトリ |
ノートブック用のトークンはfine-grainedで作り、対象リポジトリを連携先だけに絞ります。Secrets Managerに置いたトークンはノートブックの実行ロールから読めるため、漏れたときの影響範囲を最初から狭くしておく意味があります。組織が所有するリポジトリでは、組織側のポリシーでfine-grained PATの承認や有効期間の上限が課されている場合があるので、期限切れでクローンが止まる日を管理表に入れておきます。トークンの作成画面と失効の手順はGitHub PAT(Personal Access Token)とは?作成方法・classicとfine-grainedの違い・確認と失効【2026年10月】で扱っています。
ノートブックインスタンスへのGitHubリポジトリの関連付け
ノートブックインスタンスには、既定のリポジトリ1本と追加のリポジトリ最大3本を関連付けられます(公式ドキュメント)。CodeCommit、GitHub、その他のGitサーバーに対応します。関連付けの方法は2つあり、アカウントのリソースとして登録すれば認証情報を付けられ、公開リポジトリのURLを直接指定する場合は認証情報を付けられません。
Secrets Managerシークレットの3条件
プライベートリポジトリを登録するときは、シークレットの名前・ステージングラベル・JSON形式を確認します。AWSのリポジトリ登録の手順では、シークレット名に文字列 sagemaker を含むこと、ステージングラベルが AWSCURRENT であること、値が username と password のJSONであることを求めています。新規作成したシークレットは自動で AWSCURRENT になるので、実際に問題になるのは名前とJSONのキー名です。
aws secretsmanager create-secret \
--name sagemaker-github-my-ml-repo \
--secret-string '{"username":"your-github-user","password":"github_pat_xxxxxxxx"}'
CLIでシークレットを作成する操作には secretsmanager:CreateSecret の権限を使い、SageMaker AIの登録手順では、使用するIAMロールに secretsmanager:GetSecretValue の権限を求めています。リポジトリURLにはユーザー名を含めず、認証情報はシークレット側だけに置きます。ローテーションや料金の考え方はAWS Secrets Managerとは?料金・ローテーション設定と採用判断を実装者目線で解説【2026年版】にまとめています。
リポジトリの登録とインスタンスの作成(CLI)
コンソールでは「ノートブック」→「Git リポジトリ」→「リポジトリを追加」から「GitHub/Other Git-based repo」を選びます。SageMaker AI上のリポジトリ名は63文字以内で、使える文字は英数字とハイフンです。CLIで登録する場合は create-code-repository を使い、--git-config にURL・ブランチ・シークレットのARNを渡します(指定できるのはこの3項目で、URL以外は省略できます)。
aws sagemaker create-code-repository \
--code-repository-name my-ml-repo \
--git-config RepositoryUrl=https://github.com/example-org/my-ml-repo.git,Branch=main,SecretArn=arn:aws:secretsmanager:ap-northeast-1:111122223333:secret:sagemaker-github-my-ml-repo-AbCdEf
aws sagemaker create-notebook-instance \
--notebook-instance-name my-notebook \
--instance-type ml.t3.medium \
--role-arn arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole \
--platform-identifier notebook-al2023-v1 \
--default-code-repository my-ml-repo \
--additional-code-repositories https://github.com/example-org/shared-notebooks
既存のインスタンスに後から関連付けるときは、停止してから update-notebook-instance の --default-code-repository などで変更します。名前に「SageMaker」を含まないCodeCommitリポジトリを関連付ける場合は、実行ロールに codecommit:GitPull と codecommit:GitPush を足す必要があります(CLIでの作成手順)。
クローン先とSSH鍵の扱い
関連付けたリポジトリは、起動時に /home/ec2-user/SageMaker の直下へサブディレクトリとしてクローンされます。JupyterLabで開くとjupyterlab-git拡張が入っており、ファイルブラウザ横のGitパネルからコミットやpushができます。
関連付け機能の認証はSecrets Managerのusernameとpasswordだけで、SSH鍵を登録する項目はAPIにもありません。SSHで接続したい場合は、関連付けを使わずターミナルで鍵を作って手動でクローンする運用になります。ただし鍵はインスタンスのEBSボリュームに残るため、インスタンスを共有する構成ではPATとSecrets Managerを使う方が管理しやすいと判断します。
Studio(JupyterLab・Code Editor)でのGitHubリポジトリのクローン
新しいStudioは、リポジトリをアカウントのリソースとして持たず、各スペースの中でクローンします。公式ドキュメントは「Studio connects to a local Git repo only」と書いており、ノートブックインスタンスのように起動時に自動でクローンされる仕組みはありません。
ドメインとユーザープロファイルへのURL登録(JupyterLabのみ)
管理者は、クローン候補のURLをドメイン全体またはユーザープロファイル単位で登録できます。ドメインに登録したURLは全ユーザーに、ユーザープロファイルに登録したURLはそのユーザーだけに候補として表示されます。APIリファレンス上、登録できるのは最大10件です。
aws sagemaker update-domain \
--domain-id d-xxxxxxxxxxxx \
--default-user-settings 'JupyterLabAppSettings={CodeRepositories=[{RepositoryUrl="https://github.com/example-org/my-ml-repo.git"}]}'
aws sagemaker update-user-profile \
--domain-id d-xxxxxxxxxxxx \
--user-profile-name data-scientist-a \
--user-settings 'JupyterLabAppSettings={CodeRepositories=[{RepositoryUrl="https://github.com/example-org/team-a-repo.git"}]}'
この候補URLの設定項目 CodeRepositories は、JupyterLabの設定(JupyterLabAppSettings)とStudio Classic用のJupyterServerAppSettingsにはありますが、Code Editorの設定(CodeEditorAppSettings)にはありません。2026年11月2日時点の最新botocore 1.43.123のAPI定義で確認しました。Code Editorを使うチームには、URLをREADMEや社内Wikiで配る必要があります。
Code Editorでのクローンと制限モード
Code Editorの手順では、左のExplorerから「Clone Repository」を選び、URLを入力します。既定のクローン先は /home/sagemaker-user/ です。クローン後に作成者を信頼するか聞かれ、信頼しないを選ぶと制限モードで開きます。制限モードではタスクの実行とデバッグができず、ワークスペース設定も適用されません。解除するには、バナーの「Manage」から信頼を付け直します。
プライベートリポジトリをクローンすると、ユーザー名とPATの入力を求められます(公式ドキュメントはJupyterLabについて明記)。
GitHub ActionsからのSageMakerジョブの起動とOIDC設定
GitHub側からSageMakerのパイプラインや学習ジョブを動かすときは、IAMユーザーのアクセスキーをGitHubのSecretsに置くのではなく、OIDCで一時認証情報を受け取ります。GitHubの公式手順では、IAMにプロバイダーURL https://token.actions.githubusercontent.com、オーディエンス sts.amazonaws.com のOIDCプロバイダーを作り、引き受けるロールの信頼ポリシーで sub を検証するよう求めています。
信頼ポリシーとsubの新しい書式
2026年に変わった点があります。GitHubのOIDCリファレンスによると、2026年7月15日以降に作成されたリポジトリは、sub にオーナーIDとリポジトリIDを含む書式(immutable subject claims)が既定になりました。それ以前のリポジトリも、2026年7月15日以降の名前変更・移管、または組織・リポジトリ単位での明示的な切り替えによって、新しい書式になります。GitHub Enterprise Serverは対象外です。
- 2026-07-15より前(従来の書式):
repo:octo-org/octo-repo:ref:refs/heads/main - 2026-07-15以降(新しい書式):
repo:octo-org@123456/octo-repo@456789:ref:refs/heads/main
ネット上の記事から信頼ポリシーを写すと、新しいリポジトリでは従来書式の sub が一致せず、ロールを引き受けられません。aws-actions/configure-aws-credentials のREADMEも、信頼ポリシーの例を新しい書式に書き換えています。OIDCプロバイダーの登録コマンド、信頼ポリシーの全文、実際のトークンの sub を表示して条件を合わせる手順はconfigure-aws-credentialsの使い方:OIDC設定とv6の変更点、sub不一致エラーの直し方で扱っているので、ここではSageMaker側で決めることに絞ります。
このロールに付ける権限は、起動する操作だけに絞ります。下の例なら sagemaker:StartPipelineExecution を対象パイプラインのARNに限定します。StringLike と repo:example-org/my-ml-repo:* のようなワイルドカードは全ブランチとプルリクエストに引き受けを許すため、本番の学習を回すロールでは使いません。
パイプラインを起動するワークフロー
ワークフローには id-token: write の権限が必要です。2026年11月2日時点の最新は、configure-aws-credentialsがv6.3.0(2026年9月15日公開)、actions/checkoutがv7.0.1です。
name: start-sagemaker-pipeline
on:
push:
branches: [main]
permissions:
id-token: write
contents: read
jobs:
train:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: aws-actions/[email protected]
with:
role-to-assume: arn:aws:iam::111122223333:role/github-sagemaker-pipeline
aws-region: ap-northeast-1
- run: |
aws sagemaker start-pipeline-execution \
--pipeline-name my-training-pipeline \
--pipeline-parameters Name=GitCommit,Value=${{ github.sha }}
start-pipeline-execution の必須引数はAPI上 PipelineName とClientRequestTokenですが、ClientRequestTokenはCLIが自動で付けます。受け渡せるのはパイプラインに定義済みのパラメータだけなので、パイプライン側に GitCommit を定義しておきます。ハッシュを渡すだけでは学習コードの切り替えもモデルへの記録も起きないため、対象コミットのコードを取得して学習し、ハッシュを登録モデルのメタデータに残す処理をパイプライン側に書きます。こうしておくと、どのコードで学習したモデルかを後から辿れます。
MLOpsプロジェクトのGitHub連携とCodeConnections設定
SageMaker AIのプロジェクトテンプレート「third-party Git using CodePipeline」を使うと、モデルの構築用と配置用の2つのGitHubリポジトリに雛形コードが入り、pushで学習から配置までのCodePipelineが動きます。公式のウォークスルーの前提は、空のGitHubリポジトリ2本とプロジェクトテンプレートの利用権限です。
- CodePipelineコンソールの「設定」→「接続」で「接続を作成」し、プロバイダーにGitHubを選ぶ
- GitHubにAWS Connectorアプリをインストールし、対象リポジトリを選ぶ
- 作成した接続にキー
sagemaker、値trueのタグを付ける - 接続のARNを控え、Studioの「Deployments」→「Projects」でプロジェクト作成時に指定する
タグを付け忘れると、SageMaker AIのプロジェクトから接続を使えません。この経路はノートブックの編集環境とは独立しているので、ノートブックはStudioで書き、学習の起動はプロジェクトのパイプラインに任せる分担が取れます。CodePipelineのV1とV2の違いや料金はAWS CodePipelineとは?料金・V1/V2の違いと構築手順、サービス終了の現状【2026年10月】を参照してください。GitHubを使わずAWS内で完結させたい場合、CodeCommitは2025年11月に新規顧客への提供を再開しています(AWS CodeCommitの料金|無料枠5ユーザーの数え方と計算例、GA復活後の現状)。
SageMaker Unified StudioのGitHub接続とアクセス範囲
次世代のAmazon SageMakerであるSageMaker Unified Studioは、上の経路とは別の仕組みでGitを扱います。管理者ガイドによると、Git接続はAWS CodeConnectionsを使い、GitHub・GitHub Enterprise Server・GitLab・GitLab Self-Managed・Bitbucketに対応します。作成した接続は初期状態で無効で、有効にするとそのアカウントの全ドメイン・全プロジェクトから使えるようになります。
権限の設計で注意が要ります。同ガイドは、接続を有効にするとアカウント内の全ユーザーがその接続配下の全リポジトリを読み書きできるようになると警告しています。GitHub側でAWS Connectorアプリに許可するリポジトリを、Unified Studioで扱うものだけに絞ってから有効にします。
2026年7月30日のリリースノートで、Gitの挙動も変わりました。以前の方式では保存した変更がリモートへ自動でforce-pushされていましたが、新方式では明示的にpushするまでローカルに留まります。pullはrebaseで行われ、取り込んでいない変更があるとpushできません。複数リポジトリ・複数ブランチも扱えます。ただし、Git設定を含む既存のプロジェクトプロファイルから作ったプロジェクトは、メンバーがRepositoriesページから明示的に更新するまで従来のforce-push方式のままです。新しいプロジェクトにも新方式を既定で適用したい場合は、プロジェクトプロファイルを作り直します。
Amazon Linux 2ノートブックインスタンスとStudio Classicの期限
古い手順書のまま連携を組むと、作成できないプラットフォームや使えないStudioを前提にしてしまいます。AL2のサポート終了は2026年6月30日、Studio ClassicのJupyterLab 3ノートブックの新規作成・再起動・更新の停止は2025年1月31日です。
AL2ノートブックインスタンスの終了と移行
AWSの告知によると、2026年5月15日に新規作成の既定が notebook-al2023-v1 になり、6月30日にAL2がサポート終了、7月1日以降はAL2インスタンスの新規作成と停止後の再起動ができなくなりました。8月1日からはAWSが残ったAL2インスタンスを段階的にAL2023へ上げています。AWSは、AL2がPyTorch 2.10.0未満に影響するCVE-2026-24747に脆弱で、OSの制約で修正できないとしています。
移行はインスタンスを停止し、update-notebook-instance で --platform-identifier notebook-al2023-v1 を指定して起動するインプレース更新です。/home/ec2-user/SageMaker のEBSデータは残るので、関連付けたリポジトリのクローンも消えません。注意点は3つで、ライフサイクル設定の yum を dnf に書き換えること、PyTorchが2.6.0から2.10.0に上がること、AL2023では ml.p3・ml.p3dn・ml.inf1・ml.g3・ml.p2 が使えないことです。
Studio Classicで残っている操作
Studio Classicは2023年11月30日に旧Studioから改称された環境です。公式ドキュメントによると2024年12月31日に保守が終了し、2025年1月31日以降はJupyterLab 3ノートブックの新規作成・再起動・更新ができず、既存ノートブックの停止と削除だけが残っています。新規のオンボーディングもできません。Studio ClassicのGit拡張を前提にした手順書は、新しいStudioのJupyterLabに読み替えて使います。
SageMaker Python SDKのGitHubリポジトリと版の選び方
「sagemaker sdk github」で探されるSageMaker Python SDKのリポジトリは aws/sagemaker-python-sdk(Apache-2.0)です。2026年11月2日時点のPyPIでは、v3系が3.28.0(2026年10月30日公開、Python 3.10以上)、v2系が2.257.7(2026年10月7日公開)です。
v3の sagemaker パッケージ本体はコードを持たないメタパッケージで、実体は sagemaker-core・sagemaker-train・sagemaker-serve・sagemaker-mlops に分かれています。READMEはEstimator・Model・Predictorとそのサブクラスがv3では使えないと明記しており、v2の記事のコードはそのままでは動きません。v2はPyPIの説明のとおり2026年7月6日から保守モードに入り、2027年7月6日にサポートが終わります。既存のv2コードを残すなら pip install "sagemaker==2.*" で固定し、期限までにv3へ移す計画を立てます。v3での書き換えはSageMakerとは?SageMaker AIへの改称とPython SDK v3移行を実装手順で解説で扱っています。
連携でつまずく箇所と回避策
- シークレットが一覧に出ない・認証に失敗する:名前に
sagemakerが入っていない、JSONのキーがusernameとpasswordでない、といった設定不備を確認します。形式が正しい場合は、PATの期限・対象リポジトリ・権限、IAM権限、ネットワーク接続も確認します。 - Studioからリソース作成時にAccessDenied:StudioとStudio Classicは作成したリソースに自動でタグを付けるため、独自のIAMポリシーにはタグ付けの権限も必要です。
- GitHub Actionsでロールを引き受けられない:信頼ポリシーの
subがリポジトリの書式と一致しているか、ワークフローにid-token: writeがあるかを確認します。Environmentを使うジョブでは、immutable形式の組織名・リポジトリ名にはそれぞれIDが付きます。従来形式の場合、subはrepo:組織/リポジトリ:environment:環境名になります。
ノートブックとGitの連携はコードの版管理までで、学習の条件や指標の記録は別の仕組みが受け持ちます。実験管理やモデルレジストリまで含めた構成はMLOpsツール比較|実験管理・パイプライン・監視の主要スタックと選定基準で比較しています。SageMakerを使った学習・推論の基盤づくりを外部に任せたい場合は、生成AI開発・AI受託開発でも相談を受けています。
よくある質問
SageMakerとGitHubの連携にGitHubのパスワードは使えますか?
使えません。GitHubはGit操作のパスワード認証を廃止しているため、Secrets Managerのpassword欄やStudioの入力欄には個人用アクセストークンを入れます。
1台のノートブックインスタンスに何本のリポジトリを関連付けられますか?
既定のリポジトリ1本と追加のリポジトリ3本の、合計4本までです。すべて /home/ec2-user/SageMaker の直下にクローンされます。
StudioのCode Editorにリポジトリを事前登録できますか?
できません。ドメインやユーザープロファイルに候補URLを登録する CodeRepositories はJupyterLabの設定にだけあり、Code EditorではExplorerからURLを入力してクローンします。
GitHub ActionsからSageMakerを動かすのにアクセスキーは必要ですか?
不要です。IAMにGitHubのOIDCプロバイダーを登録し、信頼ポリシーで sub を絞ったロールをconfigure-aws-credentialsで引き受ければ、一時認証情報でSageMakerのAPIを呼べます。
SageMaker Python SDKのリポジトリはどれですか?
GitHubの aws/sagemaker-python-sdk です。2026年11月時点の最新はv3系の3.28.0で、v2系は2027年7月6日にサポートが終わります。