Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Workers 連携

最終更新 Markdown で表示Agent セットアップ

Cloudflare Secrets Store は、アカウントレベルのシークレットを保存し、管理する安全で集中した場所です。シークレットは安全に暗号化され、すべての Cloudflare データセンターに保存されます。

アカウントの Secrets Store の値を Cloudflare Workers で使う手順は、次のとおりです。

始める前に

  • ダッシュボードを使う 場合は、すでに Workers アプリケーションがあることを確認してください。手順は Workers の始め方 を参照してください。

  • ダッシュボードの Secrets Store タブにストアがあることも必要です。アカウントの最初のストアは、Super Administrator または Secrets Store Admin ロール を持つユーザーが操作したときに自動で作成されます。

    • アカウントにまだストアがなく、必要な権限がある場合は、Wrangler コマンド secrets-store store create <name> --remote で最初のストアを作成できます。

1. Secrets Store にアカウントシークレットを用意する

次の手順でシークレットを作成します。Cloudflare アカウントで Super Administrator または Secrets Store Admin ロール が必要です。

Wrangler コマンド secrets-store secret create を使います。

次の例を使うときは、ストア ID とシークレット名を実際のデータに置き換えてください。ストア ID はダッシュボードの Secrets Store タブ からコピーするか、wrangler secrets-store store list を使います。

シークレット名にスペースは使えません。

npx wrangler secrets-store secret create <STORE_ID> --name MY_SECRET_NAME --scopes workers --remote
 Enter a secret value: ***

🔐 Creating secret... (Name: MY_SECRET_NAME, Value: REDACTED, Scopes: workers, Comment: undefined)
 Select an account: My account
 Created secret! (ID: 13bc7498c6374a4e9d13be091c3c65f1)
  1. Cloudflare ダッシュボードで Secrets Store ページを開きます。

    Secrets Store を開く ↗
  2. Create secret を選びます。

  3. 必須項目を入力し、Permission scopeWorkers を選びます。保存後、シークレットの値は表示できなくなります。

  4. (任意)Add additional secret を選び、一度に複数のシークレットを作成します。

  5. Save を選び、確定します。

ストア ID はダッシュボードの Secrets Store タブ からコピーするか、Wrangler コマンド を使います。シークレットの name にスペースが含まれないことも確認してください。

API の全体は Secrets Store API を参照してください。

Required API token permissions

At least one of the following token permissions is required:
  • Secrets Store Write
Create a secretbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/secrets_store/stores/$STORE_ID/secrets" \
	--request POST \
	--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
	--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
	--json '[
		{
				"name": "<MY_SECRET_NAME>",
				"value": "<SECRET_VALUE>",
				"scopes": [
						"workers"
				],
				"comment": ""
		},
		{
				"name": "<MY_SECRET_NAME_2>",
				"value": "<SECRET_VALUE>",
				"scopes": [
						"workers"
				],
				"comment": ""
		}
	]'

追加の操作は アカウントシークレットを管理する を参照してください。

2. アカウントシークレットを Worker にバインドする

バインディング を使うと、Worker が Cloudflare アカウント上のリソースと連携できます。

アカウントシークレットを Worker にバインドするには、Cloudflare アカウントで次のいずれかの ロール が必要です。

  • Super Administrator
  • Secrets Store Deployer

Wrangler から

  1. Wrangler 設定ファイル に Secrets Store バインディングを追加します。
    • binding: バインディングの分かりやすい名前です。Workers アプリケーションで env オブジェクトからシークレットにアクセスする ときに使います。
    • store_id: アカウントシークレットを作成した Secrets Store の ID です。
    • secret_name: アカウントシークレット作成時に決めた一意のシークレット名です。
{
	"main": "./src/index.js",
	"secrets_store_secrets": [
		{
			"binding": "<BINDING_VARIABLE>",
			"store_id": "<STORE_ID>",
			"secret_name": "<MY_SECRET_NAME>"
		}
	]
}
main = "./src/index.js"

[[secrets_store_secrets]]
binding = "<BINDING_VARIABLE>"
store_id = "<STORE_ID>"
secret_name = "<MY_SECRET_NAME>"

ダッシュボードから

  1. Cloudflare ダッシュボードで Workers & Pages を開きます。

    Workers & Pages を開く ↗
  2. Workers アプリケーションを選びます。

  3. Settings > Bindings を開き、Add を選びます。

  4. Add a resource binding サイドパネルで Secrets Store を選びます。

  5. 必須項目を入力します。

    • Variable name: バインディングの名前です。Worker がシークレットにアクセスするときに使います(次の ステップ 3)。
    • Secret name: ステップ 1 で作成した、利用可能なアカウントシークレットの一覧から選びます。
    • (任意 — 管理者のみ)必要なシークレットがまだない場合は Create secret を選びます。Secrets Store で作成する の場合と同じように、アカウントレベルのシークレットが追加されます。
  6. Deploy を選び、バインディングをデプロイします。デプロイ時の選択肢は 2 つです。

    • Deploy: バインディングをオーディエンスの 100% にすぐデプロイします。
    • Save version: あとでデプロイできるバインディングのバージョンを保存します。

3. env オブジェクトからシークレットにアクセスする

バインディングenv オブジェクトにあります。シークレットにアクセスするには、まず非同期呼び出しが必要です。

バインディング変数で get() を呼び出す

export default {
  async fetch(request, env) {
    // Example of using the secret safely in an API request
		const APIkey = await env.<BINDING_VARIABLE>.get()

    const response = await fetch("https://api.example.com/data", {
      headers: { "Authorization": `Bearer ${APIKey}` },
    });

    if (!response.ok) {
      return new Response("Failed to fetch data", { status: response.status });
    }

    const data = await response.json();
    return new Response(JSON.stringify(data), {
      headers: { "Content-Type": "application/json" },
    });
  },
};

役に立ちましたか?