# API 資格情報をセキュリティで保護する

これらのベスト プラクティスに従って、API の資格情報とトークンをセキュリティで保護してください。

## 適切な認証方法を選択する

実行するタスクに適した認証方法を選ぶ必要があります。

* この API を個人用に使用するには、 personal access tokenを作成します。
* 組織または別のユーザーの代わりに API を使用するには、 GitHub Appを作成する必要があります。
* GitHub Actions ワークフローで API を使用するには、組み込みの`GITHUB_TOKEN`で認証する必要があります。

詳しくは、「[GitHubへの認証について](/ja/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/about-authentication-to-github#authenticating-with-the-api)」をご覧ください。

## 資格情報のアクセス許可を制限する

personal access tokenを作成するときは、必要な最小限のアクセス許可またはスコープのみを選択し、トークンを使用する必要がある最小時間の有効期限を設定します。
GitHubでは、fine-grained personal access tokenではなくpersonal access tokens (classic)を使用することをお勧めします。 詳しくは、「[個人用アクセス トークンを管理する](/ja/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#types-of-personal-access-tokens)」をご覧ください。

トークンは、トークンのオーナーと同様に、リソースにアクセスしてそれらのリソースに対してアクションを実行できますが、さらに、トークンに付与されるスコープまたはアクセス許可によって制限されます。 トークンは、ユーザーに追加のアクセス権を付与できません。

GitHub Appを作成するときに、GitHub Appに必要な最小限のアクセス許可を選択します。 詳しくは、「[GitHub アプリを作成するためのベスト プラクティス](/ja/enterprise-server@3.22/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app)」をご覧ください。

`GITHUB_TOKEN` ワークフローでGitHub Actionsを使用して認証する場合は、必要な最小限のアクセス許可のみを付与します。 詳しくは、「[ワークフローでの認証に GITHUB\_TOKEN を使用する](/ja/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token#modifying-the-permissions-for-the-github_token)」をご覧ください。

## 認証資格情報を安全に保管する

認証資格情報は、パスワードや他の機密資格情報と同じように扱います。

* 暗号化されていないメッセージやメール システムを使って、認証資格情報を共有しないでください。
* コマンド ラインで personal access token をプレーン テキストとして渡さないでください。 詳しくは、「[個人用アクセス トークンを管理する](/ja/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#keeping-your-personal-access-tokens-secure)」をご覧ください。
* リポジトリがプライベートであっても、トークンやキーなどの暗号化されていない認証資格情報をリポジトリにプッシュしないでください。 代わりに、 GitHub Actions シークレットの使用を検討してください。 詳細については、 [GitHub Actions でのシークレットの使用](/ja/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) を参照してください。
* リポジトリにプッシュされたトークン、秘密キー、その他のシークレットを検出したり、シークレットを含む将来のプッシュをブロックしたりするには、シークレット スキャンを使用できます。 詳しくは、「[シークレット スキャン](/ja/enterprise-server@3.22/code-security/concepts/secret-security/secret-scanning)」をご覧ください。

## 認証資格情報にアクセスできるユーザーを制限する

personal access tokenを他のユーザーと共有しないでください。
personal access tokenを共有する代わりに、GitHub Appを作成することを検討してください。 詳しくは、「[GitHub アプリの作成について](/ja/enterprise-server@3.22/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)」をご覧ください。

資格情報をチームと共有する必要がある場合は、セキュリティ保護された共有システムに資格情報を格納します。 たとえば、[1Password](https://1password.com/) を使用してパスワードを安全に保存して共有したり、キーを [Azure KeyVault](https://azure.microsoft.com/en-gb/products/key-vault) に格納したり、IAM (ID とアクセス管理) を使用してアクセスを管理したりできます。

API にアクセスする必要がある GitHub Actions ワークフローを作成する場合は、暗号化されたシークレットに資格情報を格納し、ワークフローから暗号化されたシークレットにアクセスできます。 詳細については、「[GitHub Actions でのシークレットの使用](/ja/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)」および「[GitHub Actions ワークフローでGitHub アプリを使用して認証済み API 要求を作成する](/ja/enterprise-server@3.22/apps/creating-github-apps/authenticating-with-a-github-app/making-authenticated-api-requests-with-a-github-app-in-a-github-actions-workflow)」を参照してください。

## コードで認証資格情報を安全に使用する

トークン、キー、アプリ関連のシークレットなどの認証資格情報をコードにハードコーディングしないでください。 代わりに、<c0>Azure Key Vault</c0> や <c1>HashiCorp Vault\</c1 などのシークレット マネージャーを使用することを検討>。
GitHub App資格情報のセキュリティ保護の詳細については、「[GitHub アプリを作成するためのベスト プラクティス](/ja/enterprise-server@3.22/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app)」を参照してください。

スクリプトで personal access token を使用する場合は、トークンを GitHub Actions シークレットとして格納し、 GitHub Actionsを使用してスクリプトを実行することを検討してください。 詳細については、 [GitHub Actions でのシークレットの使用](/ja/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) を参照してください。

これらのどのオプションも使えない場合は、認証資格情報を `.env` ファイルに保管できます。 必ず `.env` ファイルを暗号化して、リポジトリにはプッシュしないでください。

## 修復計画を準備する

すべてのセキュリティ侵害をタイムリーに処理するための計画を作成する必要があります。 トークンまたは他の認証資格情報が漏洩した場合は、次のことが必要になります。

* 新しい資格情報を生成します。
* 資格情報を保管またはアクセスしているすべての場所で、古い資格情報を新しい資格情報に置き換えます。
* 侵害された古い資格情報を削除します。

GitHub Appの侵害された資格情報のローテーションに関しては、「[GitHub アプリを作成するためのベスト プラクティス](/ja/enterprise-server@3.22/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app)」をご参照ください。

personal access tokenの作成と削除については、[個人用アクセス トークンを管理する](/ja/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) を参照してください。