> ## Documentation Index
> Fetch the complete documentation index at: https://docs.replit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 環境へのシークレットの追加

> Replit のオープンソース OIDC モジュール、有効期間の短い認証情報、プロバイダーポリシーを使って、外部のシークレットマネージャーを開発環境に接続します。

以下からプロバイダーを選び、その設定を Replit に渡してシークレットマネージャーを接続し、[再利用可能な環境](https://docs.replit.com/ja/build/code/create-reusable-environment.md)に保存します。例の識別子はご自身の開発用リソースに置き換え、先にプロバイダー側のトラストと権限を設定してください。
これらのモジュールは有効期間の短いプロバイダー認証情報を設定するものであり、シークレットがアプリに自動的に読み込まれるわけではありません。

## シークレットマネージャーを接続する

**AWS Secrets Manager**

```yaml theme={null}
repos:
  - repo: https://github.com/replit/dev-modules
    ref: f9ec152dd804895d59cb01fa71ee01864d932c40
    path: dev-modules
build:
  - run: >-
      bash ./dev-modules/aws-oidc/build.sh
      --role-arn=arn:aws:iam::123456789012:role/replit-development
      --region=us-east-1
```

前提条件: `https://sts.replit.com` をオーディエンス `sts.amazonaws.com` の AWS OIDC プロバイダーとして登録し、上記のロールを作成します。
トラストは Replit ワークスペースに限定し、必要なシークレットへの読み取りアクセスを付与してください。
[AWS の詳細な手順](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40/aws-oidc)を参照してください。

接続したプロバイダーからアプリに必要なシークレットを取得し、アプリがそれらを使用するよう設定することを Agent に依頼します。特定のプロジェクト、vault、シークレットパスなど、Agent が確認すべき場所を伝えてください。

**Infisical**

```yaml theme={null}
repos:
  - repo: https://github.com/replit/dev-modules
    ref: f9ec152dd804895d59cb01fa71ee01864d932c40
    path: dev-modules
build:
  - run: >-
      bash ./dev-modules/infisical-oidc/build.sh
      --identity-id="<machine-identity-id>"
      --project-id="<project-id>"
      --environment=dev
```

前提条件: Replit の JWKS、オーディエンス `infisical`、[ワークスペースの `org_id`](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40#how-oidc-works) を使用する JWT 認証のマシンアイデンティティを作成します。
対象プロジェクトの開発環境とパスへの読み取りアクセスを付与してください。
[Infisical の詳細な手順](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40/infisical-oidc)を参照してください。

接続したプロバイダーからアプリに必要なシークレットを取得し、アプリがそれらを使用するよう設定することを Agent に依頼します。特定のプロジェクト、vault、シークレットパスなど、Agent が確認すべき場所を伝えてください。

**Azure Key Vault**

```yaml theme={null}
repos:
  - repo: https://github.com/replit/dev-modules
    ref: f9ec152dd804895d59cb01fa71ee01864d932c40
    path: dev-modules
build:
  - run: >-
      bash ./dev-modules/azure-oidc/build.sh
      --client-id="<client-id>"
      --tenant-id="<tenant-id>"
      --subscription-id="<subscription-id>"
```

前提条件: `https://sts.replit.com` を信頼するマネージド ID またはアプリ登録を作成します。オーディエンスは `api://AzureADTokenExchange`、サブジェクトは [`//replit.com/customer/<customer-id>/org/<org-id>`](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40#how-oidc-works) です。
開発用 Key Vault のシークレットへの読み取りアクセスを付与してください。
[Azure の詳細な手順](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40/azure-oidc)を参照してください。

接続したプロバイダーからアプリに必要なシークレットを取得し、アプリがそれらを使用するよう設定することを Agent に依頼します。特定のプロジェクト、vault、シークレットパスなど、Agent が確認すべき場所を伝えてください。

**HashiCorp Vault**

```yaml theme={null}
repos:
  - repo: https://github.com/replit/dev-modules
    ref: f9ec152dd804895d59cb01fa71ee01864d932c40
    path: dev-modules
build:
  - run: >-
      bash ./dev-modules/vault-oidc/build.sh
      --address=https://vault.example.com
      --role=replit-development
```

前提条件: Replit を信頼する JWT ロールを作成し、[ワークスペースの `org_id`](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40#how-oidc-works) と、オーディエンスとしての Vault ホスト名にバインドします。
対象のシークレットパスへの読み取りアクセスを付与し、環境から Vault サーバーに到達できることを確認してください。
[Vault の詳細な手順](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40/vault-oidc)を参照してください。

接続したプロバイダーからアプリに必要なシークレットを取得し、アプリがそれらを使用するよう設定することを Agent に依頼します。特定のプロジェクト、vault、シークレットパスなど、Agent が確認すべき場所を伝えてください。

**Google Secret Manager**

```yaml theme={null}
repos:
  - repo: https://github.com/replit/dev-modules
    ref: f9ec152dd804895d59cb01fa71ee01864d932c40
    path: dev-modules
build:
  - run: >-
      bash ./dev-modules/gcp-oidc/build.sh
      --workload-identity-provider=projects/123456789/locations/global/workloadIdentityPools/replit/providers/replit-oidc
      --service-account=replit-dev@my-project.iam.gserviceaccount.com
      --project=my-project
```

前提条件: `https://sts.replit.com` を信頼し、Replit ワークスペースに限定した Google ワークロード ID プロバイダーを作成します。
許可されるオーディエンスは `//iam.googleapis.com/<provider-resource-name>` と一致する必要があります。`--workload-identity-provider` に渡す完全なリソース名を使用してください。
上記のサービスアカウントの権限借用 (impersonation) を許可し、そのアカウントに Secret Manager へのアクセスを付与します。
[Google の詳細な手順](https://github.com/replit/dev-modules/tree/f9ec152dd804895d59cb01fa71ee01864d932c40/gcp-oidc)を参照してください。

接続したプロバイダーからアプリに必要なシークレットを取得し、アプリがそれらを使用するよう設定することを Agent に依頼します。特定のプロジェクト、vault、シークレットパスなど、Agent が確認すべき場所を伝えてください。

> [!NOTE]
>
> 非対話型のアプリコマンドでは、`~/.config/replit-oidc/env.sh` を読み込み、リンク先のプロバイダー README にある実行時の手順に従うよう Agent に依頼してください。
> CLI 認証は、SDK 認証や認証情報の更新を保証するものではありません。Vault および Infisical の CLI ヘルパーは、無関係な SDK プロセスに認証情報を提供しません。

> **このチャットだけでシークレットが必要ですか?**
>
> メッセージに値を入力せず、名前を指定して Agent にシークレットの追加を依頼します。例:
>
> ```text theme={null}
> This app needs DEVELOPMENT_API_KEY. Ask me to add it securely for this chat.
> ```
>
> Agent は、値を入力するための安全な入力フォームを開くことができます。シークレットはプロンプトに含まれたり Git にコミットされたりすることなく、安全に保存され、プライベートチャットにスコープが限定されます。必要な権限だけを持つ開発用の認証情報を使用し、送信する前にフォームに表示される変数名とスコープを確認してください。チャットスコープのシークレットが、別のチャットや再利用可能な環境ビルドで利用できるとは想定しないでください。
>
> ![値フィールドが空の、シークレット入力用の安全なフォーム。](https://mintcdn.com/replit/Scz0QdkCm-76dARz/images/code-contributions/chat-secret-elicitation.png?fit=max\&auto=format\&n=Scz0QdkCm-76dARz\&q=85\&s=0a259e2853c5ec254f1bfb9c58de097b)
>
> または、エディターのタブバーで **+**、続いて **Secrets** を選択します。
>
> ![新規タブメニューで Secrets が強調表示されているエディター。](https://mintcdn.com/replit/ZvLiuMLrojYoqf3I/images/code-contributions/open-secrets-tab.jpg?fit=max\&auto=format\&n=ZvLiuMLrojYoqf3I\&q=85\&s=9dfd78422324f9c2c7742688b6ab8c81)
>
> **New Secret** を選択し、**Key** と **Value** を入力して、**Add Secret** を選択します。認証情報はフォームに入力し、チャットには決して入力しないでください。
>
> ![Key フィールドと空の Value フィールドがある Add Secret フォーム。](https://mintcdn.com/replit/bwyNlFMrtiNdFQiG/images/code-contributions/add-secret-form.jpg?fit=max\&auto=format\&n=bwyNlFMrtiNdFQiG\&q=85\&s=128c3e3878cdfb9e92c569a08d729c07)
