GitHub App または personal access token (classic) を使うことで、GitHub API に対して Actions Runner Controller (ARC) の認証を行うことができます。
メモ
エンタープライズ レベルで、ランナーに対応する GitHub App を使用して認証を行うことはできません。 詳しくは、「グループを使用してセルフホストランナーへのアクセスを管理する」をご覧ください。
GitHub App で ARC の認証を行う
-
組織が所有するGitHub Appを作成してください。 詳しくは、「GitHub アプリの登録」をご覧ください。 次のように GitHub App を構成します。
-
[ホームページの URL] に「
https://github.com/actions/actions-runner-controller」と入力します。 -
[アクセス許可] で [リポジトリのアクセス許可] をクリックします。 次に、ドロップダウン メニューを使って、次のアクセス許可を選びます。 * 管理: 読み取りと書き込み
メモ
`Administration: Read and write` は、リポジトリ スコープに登録するように Actions Runner Controller を構成する場合にのみ必要です。 組織のスコープで登録する必要はありません。-
**メタデータ**: 読み取り専用
-
-
[アクセス許可] で、[組織のアクセス許可] をクリックします。 次に、ドロップダウン メニューを使って、次のアクセス許可を選びます。 * セルフホステッド ランナー 読み取りと書き込み
-
-
GitHub App のページで GitHub App を作成した後、"アプリ ID" の値を書き留めます。 この値は後で使用します。
-
[秘密キー] で、 [秘密キーの生成] をクリックし、
.pemファイルを保存します。 このキーは後で使用します。 -
ページの左上隅のメニューで [アプリのインストール] をクリックし、Organization の横にある [インストール] をクリックして、Organization にアプリをインストールします。
-
Organization でインストールのアクセス許可を確認した後、アプリのインストール ID を記録しておきます。 あなたはこれを後で使います。 アプリのインストール ID はアプリのインストール ページで確認でき、次の URL 形式になっています。
https://HOSTNAME/organizations/ORGANIZATION/settings/installations/INSTALLATION_ID -
アプリ ID、インストール ID、および前の手順でダウンロードした
.pem秘密キー ファイルを Kubernetes にシークレットとして登録します。GitHub App の値を使って Kubernetes シークレットを作成するには、次のコマンドを実行します。
メモ
gha-runner-scale-setグラフがインストールされているのと同じ名前空間にシークレットを作成します。 この例では、名前空間はarc-runnersクイックスタート ドキュメントと一致します。 詳しくは、「アクション ランナー コントローラーのクイックスタート」をご覧ください。Bash kubectl create secret generic pre-defined-secret \ --namespace=arc-runners \ --from-literal=github_app_id=123456 \ --from-literal=github_app_installation_id=654321 \ --from-literal=github_app_private_key='-----BEGIN RSA PRIVATE KEY-----********'
kubectl create secret generic pre-defined-secret \ --namespace=arc-runners \ --from-literal=github_app_id=123456 \ --from-literal=github_app_installation_id=654321 \ --from-literal=github_app_private_key='-----BEGIN RSA PRIVATE KEY-----********'次に、
values.yamlファイルのコピーでgithubConfigSecretプロパティを使用して、シークレット名を参照として渡します。githubConfigSecret: pre-defined-secret
その他の Helm 構成のオプションについては、ARC リポジトリの values.yaml を参照してください。
personal access token (classic) で ARC の認証を行う
ARC では、personal access tokens (classic) を使ってセルフホステッド ランナーを登録できます。
メモ
personal access token (classic) での ARC の認証は、Enterprise レベルでランナーを登録するためにサポートされている唯一の認証方法です。
-
必要なスコープを使って personal access token (classic) を作成します。 必要なスコープは、リポジトリ、Organization、または Enterprise のどのレベルでランナーを登録するかによって異なります。 personal access token (classic) の作成方法の詳細については、「個人用アクセス トークンを管理する」を参照してください。
ARC ランナーに必要な personal access token スコープの一覧を次に示します。
- リポジトリ ランナー:
repo - Organization ランナー:
admin:org - Enterprise ランナー:
manage_runners:enterprise
- リポジトリ ランナー:
-
personal access token (classic) の値を使って Kubernetes シークレットを作成するには、次のコマンドを使います。
メモ
gha-runner-scale-setグラフがインストールされているのと同じ名前空間にシークレットを作成します。 この例では、名前空間はarc-runnersクイックスタート ドキュメントと一致します。 詳しくは、「アクション ランナー コントローラーのクイックスタート」をご覧ください。Bash kubectl create secret generic pre-defined-secret \ --namespace=arc-runners \ --from-literal=github_token='YOUR-PAT'
kubectl create secret generic pre-defined-secret \ --namespace=arc-runners \ --from-literal=github_token='YOUR-PAT' -
お使いの
values.yamlファイルのコピーで、シークレット名を参照渡しとして指定します。githubConfigSecret: pre-defined-secretデータ 再利用可能アクション.actions-runner-controller-helm-chart-オプション %}
fine-grained personal access token を使用した ARC の認証
ARC では、fine-grained personal access tokens を使ってセルフホステッド ランナーを登録できます。
メモ
personal access token (classic) での ARC の認証は、Enterprise レベルでランナーを登録するためにサポートされている唯一の認証方法です。
-
必要なスコープを使って fine-grained personal access token を作成します。 必要なスコープは、リポジトリまたは organization のどちらのレベルでランナーを登録するかによって異なります。 fine-grained personal access token の作成方法について詳しくは、「個人用アクセス トークンを管理する」をご覧ください。
ARC ランナーに必要な personal access token スコープの一覧を次に示します。
-
リポジトリ ランナー: * 管理: 読み取りと書き込み
-
organization (組織) のランナー: * 管理: 読み取り * セルフホステッド ランナー 読み取りと書き込み
-
-
fine-grained personal access token の値を使って Kubernetes シークレットを作成するには、次のコマンドを使います。
メモ
gha-runner-scale-setグラフがインストールされているのと同じ名前空間にシークレットを作成します。 この例では、名前空間はarc-runnersクイックスタート ドキュメントと一致します。 詳しくは、「アクション ランナー コントローラーのクイックスタート」をご覧ください。Bash kubectl create secret generic pre-defined-secret \ --namespace=arc-runners \ --from-literal=github_token='YOUR-PAT'
kubectl create secret generic pre-defined-secret \ --namespace=arc-runners \ --from-literal=github_token='YOUR-PAT' -
お使いの
values.yamlファイルのコピーで、シークレット名を参照渡しとして指定します。githubConfigSecret: pre-defined-secretデータ 再利用可能アクション.actions-runner-controller-helm-chart-オプション %}
ARC をボルトのシークレットで認証する
メモ
Vault 統合は現在、Azure Key Vaultをサポートするパブリック プレビューで利用できます。
gha-runner-scale-set バージョン 0.12.0 以降、ARC では、外部コンテナーからのGitHub資格情報の取得がサポートされています。 Vault (コンテナー) の統合は、ランナースケールセットごとに構成されます。 つまり、セキュリティと運用の要件に応じて、一部のスケール セットは Kubernetes のシークレットを使って実行し、他のスケール セットではコンテナーベースのシークレットを使って実行することができます。
ボールト統合の有効化
ランナー スケール セットのボールト統合を有効にするには:
-
`githubConfigSecret` ファイルの **** フィールドを、ボールトに保管されているシークレットキーの名前に設定します。 この値には文字列を設定する必要があります。 -
`keyVault` のコメントを解除し、適切なプロバイダーとアクセスの詳細で設定してください。 - コントローラーとリスナーの両方に必要な証明書を提供してください****。 これを行うには、証明書が含まれるコントローラー イメージをリビルドするか、
listenerTemplateとcontrollerManagerフィールドを使ってコントローラーとリスナーの両方で証明書をボリュームとしてマウントします。
秘密フォーマット
Azure Key Vaultに格納されるシークレットは、JSON 形式である必要があります。 構造は、お使いの認証の種類によって異なります。
例: GitHub トークン
{
"github_token": "TOKEN"
}
例: GitHub アプリ
{
"github_app_id": "APP_ID_OR_CLIENT_ID",
"github_app_installation_id": "INSTALLATION_ID",
"github_app_private_key": "PRIVATE_KEY"
}
Vault統合用の values.yaml の構成
証明書は .pfx ファイルとして格納され、/akv/cert.pfx でコンテナーにマウントされます。 次に示すのは、認証にこの証明書を使うように keyVault セクションを構成する方法の例です。
keyVault:
type: "azure_key_vault"
proxy:
https:
url: "PROXY_URL"
credentialSecretRef: "PROXY_CREDENTIALS_SECRET_NAME"
http: {}
noProxy: []
azureKeyVault:
clientId: <AZURE_CLIENT_ID>
tenantId: <AZURE_TENANT_ID>
url: <AZURE_VAULT_URL>
certificatePath: "/akv/cert.pfx"
コントローラーとリスナーへの証明書の提供
ARC で、コンテナーと組み合わせて認証を行うには、.pfx 証明書が必要です。 コントローラーのインストールの間にコントローラーとリスナーの両方のコンポーネントでこの証明書を使用できるようにする必要があります。
これを行うには、controllerManager ファイルの listenerTemplate と values.yaml フィールドを使って、証明書をボリュームとしてマウントします。
volumes:
- name: cert-volume
secret:
secretName: my-cert-secret
volumeMounts:
- mountPath: /akv
name: cert-volume
readOnly: true
listenerTemplate:
volumeMounts:
- name: cert-volume
mountPath: /akv/certs
readOnly: true
volumes:
- name: cert-volume
secret:
secretName: my-cert-secret
次のコードは、スケール セットの values.yml ファイルの例です。
listenerTemplate:
spec:
containers:
- name: listener
volumeMounts:
- name: cert-volume
mountPath: /akv
readOnly: true
volumes:
- name: cert-volume
secret:
secretName: my-cert-secret
法務上の通知
Apache-2.0 ライセンスのもとで https://github.com/actions/actions-runner-controller/ から一部を引用しています。
Copyright 2019 Moto Ishizawa
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.