Cloudflare Secrets Store は、アカウントレベルのシークレットを保存し、管理する安全で集中した場所です。シークレットは安全に暗号化され、すべての Cloudflare データセンターに保存されます。
アカウントの Secrets Store の値を Cloudflare Workers で使う手順は、次のとおりです。
-
ダッシュボードを使う 場合は、すでに Workers アプリケーションがあることを確認してください。手順は Workers の始め方 を参照してください。
-
ダッシュボードの Secrets Store タブにストアがあることも必要です。アカウントの最初のストアは、Super Administrator または Secrets Store Admin ロール を持つユーザーが操作したときに自動で作成されます。
- アカウントにまだストアがなく、必要な権限がある場合は、Wrangler コマンド
secrets-store store create <name> --remoteで最初のストアを作成できます。
- アカウントにまだストアがなく、必要な権限がある場合は、Wrangler コマンド
次の手順でシークレットを作成します。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)-
Cloudflare ダッシュボードで Secrets Store ページを開きます。
Secrets Store を開く ↗ -
Create secret を選びます。
-
必須項目を入力し、Permission scope に Workers を選びます。保存後、シークレットの値は表示できなくなります。
-
(任意)Add additional secret を選び、一度に複数のシークレットを作成します。
-
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
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": ""
}
]'追加の操作は アカウントシークレットを管理する を参照してください。
バインディング を使うと、Worker が Cloudflare アカウント上のリソースと連携できます。
アカウントシークレットを Worker にバインドするには、Cloudflare アカウントで次のいずれかの ロール が必要です。
- Super Administrator
- Secrets Store Deployer
- 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>"-
Cloudflare ダッシュボードで Workers & Pages を開きます。
Workers & Pages を開く ↗ -
Workers アプリケーションを選びます。
-
Settings > Bindings を開き、Add を選びます。
-
Add a resource binding サイドパネルで Secrets Store を選びます。
-
必須項目を入力します。
- Variable name: バインディングの名前です。Worker がシークレットにアクセスするときに使います(次の ステップ 3)。
- Secret name: ステップ 1 で作成した、利用可能なアカウントシークレットの一覧から選びます。
- (任意 — 管理者のみ)必要なシークレットがまだない場合は Create secret を選びます。Secrets Store で作成する の場合と同じように、アカウントレベルのシークレットが追加されます。
-
Deploy を選び、バインディングをデプロイします。デプロイ時の選択肢は 2 つです。
- Deploy: バインディングをオーディエンスの 100% にすぐデプロイします。
- Save version: あとでデプロイできるバインディングのバージョンを保存します。
バインディング は env オブジェクトにあります。シークレットにアクセスするには、まず非同期呼び出しが必要です。
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" },
});
},
};