ଜୀବନରେ ଯିବା ପୂର୍ବରୁ ଆପଣଙ୍କର ଏଜେଣ୍ଟ ୱାଲେଟ୍ ସୁରକ୍ଷିତ କରନ୍ତୁ।
ଏଜେଣ୍ଟ ଦେୟ ସହିତ ପ୍ରୋଡକ୍ସନ୍କୁ ଯିବା ସାଧାରଣ API ଇଣ୍ଟେଗ୍ରେସନ୍ର ସମାନ ଚେକ୍ଲିଷ୍ଟ ନୁହେଁ। ଯୋଗ କରନ୍ତୁ: ଏକ ଚେତନାପୂର୍ଣ୍ଣ ୱାଲେଟ୍-ପ୍ରକାର ବାଛନ୍ତୁ, ଏକ ସମଞ୍ଜସ୍ଥ ଖର୍ଚ୍ଚ ନୀତି (ଡିଫଲ୍ଟ ନୁହେଁ), API ଏବଂ ଓେବ୍ହୁକ୍ ଗୁପ୍ତ ଘୁରଣା ଏକ ଘୋଷିତ ଗତିରେ, ସାପ୍ତାହିକ ଅଡିଟ୍-ଲଗ୍ ସମୀକ୍ଷା, ଏବଂ ଏକ ଘଟଣା-ପ୍ରତିକ୍ରିୟା ରନ୍ବୁକ୍ ଯାହାକୁ କମ୍ସେକମ୍ ଏକଥର ଅଭ୍ୟାସ କରାଯାଇଛି। ଏହାର ବିନା, ଆପଣ ଶିପ୍ କରନ୍ତି ଏବଂ ଗୁରୁତର ଭାବରେ ଶିଖନ୍ତି।
ଆପଣ ଆରମ୍ଭ କରିବା ପୂର୍ବରୁ।
- ଏକ କାମ କରୁଥିବା ଏଜେଣ୍ଟ ଇଣ୍ଟେଗ୍ରେସନ୍ ଏଣ୍ଡ-ଟୁ-ଏଣ୍ଡ ଟେଷ୍ଟରେ - add-payments-to-agent ଏବଂ test-without-real-moneyକୁ ଦେଖ।
- ଖର୍ଚ୍ଚ ନିୟନ୍ତ୍ରଣ ସଂରଚିତ - ଖର୍ଚ୍ଚ ନିୟନ୍ତ୍ରଣ ଦେଖନ୍ତୁ (ଏହି ଗାଇଡ୍ ଧାରଣା କରେ ଯେ ଏକ ନୀତି ପୂର୍ବରୁ ଥିବା ଆବଶ୍ୟକ)।
- ଏକ ସିକ୍ରେଟ୍ ମ୍ୟାନେଜର୍ (AWS Secrets Manager, GCP Secret Manager, Vault, 1Password, ଇତ୍ୟାଦି) - .env ଫାଇଲ୍ରେ ସିକ୍ରେଟ୍ଗୁଡିକ ପ୍ରୟାପ୍ତ ନୁହେଁ।
- wallet dashboard କୁ admin access ଥିବା ସ୍ପଷ୍ଟଭାବେ ଚିହ୍ନଟ on-call engineer।
- 15 ମିନିଟ୍ ଗୁଡିକର ଗଭୀର ଅବଧି। ନିମ୍ନରେ ଥିବା ଚେକ୍ଲିଷ୍ଟ ଆକାଂକ୍ଷାମୟ ନୁହେଁ - ଏହାକୁ ଲାଇନ୍ ବାଇ ଲାଇନ୍ କାମ କରନ୍ତୁ।
ପ୍ରେ-ଲଞ୍ଚ ଚେକ୍ଲିଷ୍ଟ୍ ଚାଲାନ୍ତୁ।
ଏଗାରୋଟି ଆଇଟମ୍ଗୁଡିକ। ପ୍ରତିଟି ଏକ ହଁ/ନା ପ୍ରଶ୍ନ ଯାହାର ଏକ ମାଲିକ ଅଛି। ଯଦି କୌଣସି ଆଇଟମ୍ ଅନ୍ୟାୟ ହୁଏ, ସଜୀବ ହେବାକୁ ଯାଁନ୍ତୁ - ପ୍ରଥମେ ସେହି ଆଇଟମ୍କୁ ସମାପ୍ତ କରନ୍ତୁ। ଉତ୍ପାଦନରେ ଏକ ମିସ୍ ଆଇଟମ୍ର ଖର୍ଚ୍ଚ ସଦା ସମୟରେ ଏହାକୁ ବିଷୟରେ ଶେଷ କରିବାର ଖର୍ଚ୍ଚରୁ ବଡ।
# Pre-launch security checklist for agent wallets.
[ ] Wallet type chosen with reasoned trade-offs (smart wallet vs EOA).
[ ] Spend permission set in the dashboard: an allowance per period + a per-transaction cap.
[ ] API keys scoped to the minimum the agent needs (read_wallet_metadata / pay_bills / receive_money).
[ ] All API keys stored in a secret manager (not env files committed to git).
[ ] Test keys and live keys cannot be swapped (boot-time prefix check in place).
[ ] Webhook secret rotated within the last 90 days (webhooks.rotateSecret).
[ ] Webhook URL pointed at production, not a tunnel.
[ ] Audit review scheduled; alerting in place for unusual events.
[ ] A spike of rejected payments triggers an alert (>5/hour from one agent).
[ ] Incident runbook exists, has been read by someone other than the author.
[ ] One person other than you knows how to revoke an API key in < 5 minutes.API କି ଏବଂ webhook ଗୁପ୍ତ ଘୁରାଣାର ତାଲିକା କରନ୍ତୁ।
ତ୍ରାଇମାସିକ୍ ଡିଫଲ୍ଟ କ୍ୟାଡେନ୍ସ; ସନ୍ଦେହ ଲିକ୍, ନେତୃତ୍ୱ ଇଞ୍ଜିନିୟର୍ ଚାଲିଯିବା, କମ୍ପାନୀରେ ଅନ୍ୟାନ୍ୟ ସୁରକ୍ଷା ଘଟଣା ଉପରେ ତୁରନ୍ତ ରୋଟେଟ୍ କରନ୍ତୁ। ଦୁଇ-କୀ ଜାଲା ଆକୃତି ଆପଣଙ୍କୁ ଶୂନ୍ୟ ଡାଉନ୍ଟାଇମ୍ ସହିତ କୀଗୁଡିକୁ ବଦଳାଇବାକୁ ଅନୁମତି ଦିଏ: ନୂତନ କୀ ସୃଷ୍ଟି କରନ୍ତୁ, ସେଥିରେ ତାଲିକା କରନ୍ତୁ, ନିଶ୍ଚିତ କରନ୍ତୁ, ପରେ ପୁରୁଣାଟିକୁ ବାତିଲ୍ କରନ୍ତୁ।
// One-time key rotation script. Run quarterly, on lead departure, on suspected leak.
import { createClient } from "@blockchain0x/node";
const client = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! });
async function rotate() {
// Scope the new key to only what the agent needs.
const fresh = await client.apiKeys.create({
name: `prod-${new Date().toISOString().slice(0, 10)}`,
scopes: ["read_wallet_metadata", "pay_bills", "receive_money"],
});
console.log("NEW KEY:", fresh.secret); // Store in secret manager NOW.
// Wait until the new key is deployed and verified working, THEN:
// await client.apiKeys.revoke(OLD_KEY_ID); // (or apiKeys.rotate in one call)
}# One-time key rotation script. Run quarterly, on lead departure, on suspected leak.
from blockchain0x import Client
import datetime, os
client = Client() # reads BLOCKCHAIN0X_API_KEY
def rotate():
fresh = client.api_keys.create(body={
"name": f"prod-{datetime.date.today().isoformat()}",
"scopes": ["read_wallet_metadata", "pay_bills", "receive_money"],
})
print("NEW KEY:", fresh["secret"]) # Store in secret manager NOW.
# Wait until new key is deployed and verified, THEN:
# client.api_keys.revoke(OLD_KEY_ID) # (or api_keys.rotate in one call)Webhook ସାଇନିଂ ସିକ୍ରେଟ୍ଗୁଡିକ ଡ୍ୟାସ୍ବୋର୍ଡ ମାଧ୍ୟମରେ ସମାନ ଭାବରେ ଘୁରେ - ଗୋଟିଏ ଦ୍ୱିତୀୟ ସିକ୍ରେଟ୍ ସକ୍ରିୟ କରନ୍ତୁ, ଦୁଇଟି ଗ୍ରହଣ କରିବାକୁ ହ୍ୟାଣ୍ଡଲରୁ ପୁନର୍ନିର୍ମାଣ କରନ୍ତୁ, ତେବେ ପୁରୁଣାଟିକୁ ବିଶ୍ରାମ କରନ୍ତୁ। ଦୁଇଟି ତିନି ମାସିକ ଶ୍ରେଣୀରେ କ୍ୟାଲେଣ୍ଡର୍ ସ୍ମୃତିରେ।
ସାପ୍ତାହିକ ଅଡିଟ୍ ସମୀକ୍ଷା ସେଟ୍ କରନ୍ତୁ।
ପ୍ରତି ସପ୍ତାହେ ତିନୋଟି ବିଷୟ ଦେଖନ୍ତୁ: ନୂତନ counterparties (ପୂର୍ବରୁ ନ ଦେଖାଯାଇଥିବା କୌଣସି ଜିନିଷ 30-second sanity check ଯୋଗ୍ୟ), rejected payments (spend permission ତାହାର କାମ କଲା - agent କେଉଁଠି ଅଟକିଗଲା କି?), ଏବଂ off-hours payments (business hours ରେ ମାତ୍ର run କରୁଥିବା ଏକ agent ଠାରୁ 3am ରେ ହୋଇଥିବା payment ହେଉଛି ସେହି ପ୍ରକାରର signal ଯାହା injection attacks କୁ ଶୀଘ୍ର ଧରିଥାଏ)।
// Weekly audit query over the webhook events YOU persisted (payment.received /
// payment.sent). There is no transactions.list API - your own store is the log.
const since = Date.now() - 7 * 24 * 60 * 60 * 1000;
const events = await db.paymentEvents.findMany({ where: { receivedAt: { gte: since } } });
const newCounterparties = events.filter((e) => e.counterpartyFirstSeen);
const offHours = events.filter((e) => {
const h = new Date(e.receivedAt).getUTCHours();
return h < 5 || h > 22;
});
// Reconcile anything that looks off against the chain:
// const tx = await client.transactions.get(event.txHash);
console.log({ newCounterparties, offHours });from datetime import datetime, timedelta, timezone
# Query your own persisted webhook events - the SDK has transactions.get(id),
# not a list endpoint, so your event store is the audit log.
since = datetime.now(timezone.utc) - timedelta(days=7)
events = db.payment_events.where(received_at__gte=since)
new_counterparties = [e for e in events if e.counterparty_first_seen]
off_hours = [e for e in events if not (5 <= e.received_at.hour <= 22)]
# Reconcile against the chain when something looks off:
# tx = client.transactions.get(event.tx_hash)
print({"new_counterparties": new_counterparties, "off_hours": off_hours})ଘଟଣା ରନବୁକ୍ ଲେଖନ୍ତୁ (ଏବଂ ଡ୍ରିଲ୍ କରନ୍ତୁ)।
ଏକ ରନବୁକ୍ କେବଳ ସେତେବେଳେ ଭଲ ହୁଏ ଯେତେବେଳେ ଏହାକୁ ଶେଷ ଥର ପରୀକ୍ଷା କରାଯାଇଥିଲା। ତଳେ ଏହାର ଟେମ୍ପଲେଟ୍ ଅଛି - ଏହାକୁ ତୁମର ଦଳର ୱିକିରେ କପି କର, ତୁମର ବିଶେଷତା ପାଇଁ ସଂପାଦନା କର, ଏବଂ ଆଗାମୀ କ୍ୱାର୍ଟରରେ 30-ମିନିଟ୍ ଡ୍ରିଲ୍ ନିର୍ଦ୍ଧାରଣ କର। ଏହାକୁ ସମୟ ଦିଅ; ଯାହା କିଛି ଡ୍ରିଲ୍ ଦେଖାଏ ସେଥିରେ ଯାହା ଅନୁପସ୍ଥିତ ଅଛି ସେଥିରେ ସଂଶୋଧନ କର।
# Incident response runbook - Agent wallet compromise (suspected or confirmed)
## Trigger
Any of:
- Unrecognised counterparty receiving > $10 USDC.
- > 50 rejected payment attempts from one agent in an hour.
- Engineer reports they cannot account for a recent payment.
- A leaked API key surfaces in a public scan.
## Step 1 - Stop the bleeding (< 5 minutes)
- Revoke the suspect API key: dashboard, or apiKeys.revoke / apiKeys.rotate.
- Revoke the agent's spend permission in the dashboard (allowance to zero).
- A revoked key cannot move funds and a revoked permission authorizes nothing.
## Step 2 - Preserve evidence (< 15 minutes)
- Pull the last 24h from the dashboard activity log and your stored events.
- Note the agent's spend permission as it was at the time of the incident.
- Note the timestamps of any unrecognised payments and their txHash on Base
(fetch with transactions.get).
## Step 3 - Communicate (< 30 minutes)
- Inform the on-call lead and finance.
- If customer funds are affected, draft a notification template (do not send
until investigation is far enough along to be accurate).
## Step 4 - Root cause and remediation (24-72 hours)
- Determine: leaked key, compromised webhook secret, prompt-injection
bypass, integration bug, or other.
- Rotate every secret that could have been exposed.
- Tighten the spend permission (lower the allowance or per-transaction cap).
- File a post-mortem with timeline, RCA, and follow-ups.ଦଳଗୁଡିକୁ ତାଙ୍କର ପ୍ରଥମ ଉତ୍ପାଦନ ଘଟଣାରେ ଧରିବାକୁ ଯୋଗ୍ୟ ପାଞ୍ଚ ଜିନିଷ।
ନୂତନ agent କୁ 'ପୁରୁଣାଟି ଭଳି' ଭାବିବା
ପ୍ରତ୍ୟେକ ଏଜେଣ୍ଟ ତାଙ୍କର ନିଜସ୍ୱ ପ୍ରୋଫାଇଲ୍, ତାଙ୍କର ନିଜସ୍ୱ କୀ, ତାଙ୍କର ନିଜସ୍ୱ ବ୍ୟୟ ନୀତି ପାଉଛି। ଯଦି ଆପଣ 'ସମାନ' ହେବାରୁ କାରଣରେ ଏଜେଣ୍ଟମାନେ ମଧ୍ୟରେ କୀଗୁଡିକୁ ପୁନର୍ବ୍ୟବହାର କରନ୍ତି, ତେବେ ଗୋଟିଏ କୀ ଅବିକାର ଏକ ସମୟରେ ପ୍ରତ୍ୟେକ ଏଜେଣ୍ଟକୁ ବ୍ଲାସ୍ଟ୍ କରେ। ଏକ ନୂତନ ଏଜେଣ୍ଟ ପ୍ରୋଫାଇଲ୍ ସ୍ଥାପନା କରିବାକୁ ଗୋଟିଏ API କଲ୍ ଆବଶ୍ୟକ; ପ୍ରତି-ଏଜେଣ୍ଟ ଆଇସୋଲେସନ୍ ସଠିକ୍ ଭାବରେ କରିବାକୁ ଏହାକୁ କରିବାରେ ଲାଗିଥିବା ମିନିଟ୍ର ମୂଲ୍ୟ ଅଛି।
ଡାଟା ନୁହେଁ, ଅନୁମାନ ଆଧାରରେ ନିର୍ଦ୍ଧାରିତ spend permission
ଗୁସ୍ତାକରୁ ଅନୁମତି ଓ ପର-ଲେନଦେନ କ୍ୟାପ୍ ବାଛନ୍ତୁ ଏବଂ ଦୁଇଟି କଥା ଘଟିବ: ଅତି କମ୍ ଓ ଏଜେଣ୍ଟ୍ ପ୍ରତିଦିନ ମଧ୍ୟରେ ସୀମାକୁ ଲାଗିଥାଏ 'ଦେୟ ରଦ୍ଦ'; ଅତି ଉଚ୍ଚ ଓ ନିୟନ୍ତ୍ରଣ ଥିଏଟର୍। ପ୍ରଥମ ସପ୍ତାହରେ, ବାସ୍ତବ ଦିନିକାଳୀନ ବ୍ୟୟ ଦେଖନ୍ତୁ ଓ ଅନୁମତିକୁ 2-3x ତାହାରେ ସେଟ୍ କରନ୍ତୁ - 1x (ଅତି ଟାଇଟ୍) ଓ 100x (କାର୍ଯ୍ୟକ୍ଷମ ଅସୀମିତ) ନୁହେଁ। ଏହା ଗୋଟିଏ ଡ୍ୟାସ୍ବୋର୍ଡ ପରିବର୍ତ୍ତନ, ତେଣୁ ପୁନର୍ନିର୍ଦ୍ଧାରଣ କରିବା ସସ୍ତା।
Webhook ସାଇନିଂ ସିକ୍ରେଟ୍ କେବେ ବଦଳାଯାଇନି
webhook secret ଲିକ୍ ହେଲେ, ଏକ attacker legitimate payment.received events ପରି ଦେଖାଯାଉଥିବା webhooks forge କରିପାରେ, ଯାହା ଆପଣଙ୍କ handler କୁ କେବେ ପେମେଣ୍ଟ ହୋଇନଥିବା କାମ ଦେଇବାକୁ ଠକେଇପାରେ। API keys (quarterly) ସହିତ ସମାନ cadence ରେ କିମ୍ବା exposure ସନ୍ଦେହ ହେଉଥିବା ସମୟରେ secret (webhooks.rotateSecret) rotate କରନ୍ତୁ, ଏବଂ ସବୁବେଳେ current secret ଦ୍ୱାରା webhooks.verify ସହିତ deliveries verify କରନ୍ତୁ।
ଅଡିଟ୍ ଲଗ୍ ଯାହା କେହି ପଢ଼େନାହିଁ
Audit log କେବଳ କେହି ଦେଖିଲେ ମାତ୍ର କିଛି ଧରିପାରେ। ଅଧିକାଂଶ team log କୁ enable କରନ୍ତି, କେବେ ଦେଖନ୍ତି ନାହିଁ, ଏବଂ customer complaints ରୁ ସମସ୍ୟା ବିଷୟରେ ଜାଣନ୍ତି। ସପ୍ତାହକୁ ଗୋଟେ 15-minute review schedule କରନ୍ତୁ: new counterparties, rejected payments, off-hours payments। ଖର୍ଚ୍ଚ ଅତ୍ୟଳ୍ପ; detect କରିବାର ସମୟ weeks ରୁ days କୁ କମିଯାଏ।
ଘଟଣା ରନ୍ବୁକ୍ରେ କୌଣସି ଡ୍ରିଲ୍ ନାହିଁ
ଏକ ରନବୁକ୍ ଯାହା କେବଳ କେବଳ କେବଳ କରାଯାଇନି ସେ କଳ୍ପନା। ଏକ କ୍ୱାର୍ଟର୍ ତାରିଖ ବାଛନ୍ତୁ, ଏକ ଲିକ୍ ହୋଇଥିବା କୀ ସିନାରିଓ ସିମ୍ୟୁଲେଟ୍ କରନ୍ତୁ, କେତେ ସମୟ ଲାଗେ ରିଭୋକ୍ କରିବାକୁ ଏବଂ ଧରିବାକୁ ସେଥିରେ ସମୟ ଦିଅ। ପ୍ରଥମ ଡ୍ରିଲ୍ ସଦା ଅନୁପସ୍ଥିତ କିଛି ଦେଖାଏ (ଯେଉଁ ଇଞ୍ଜିନିୟର୍ ଯିଏ ରୋଟେଟ୍ କରିବାକୁ ଜାଣେ ସେ ଛୁଟିରେ ଅଛନ୍ତି, ରନବୁକ୍ ଏକ ବିଲମ୍ବିତ ନୋଟିଓନ୍ ଲିଙ୍କରେ ଅଛି)। ଏହାକୁ ଏକ ଡ୍ରିଲ୍ ମଧ୍ୟରେ ଖୋଜିବାକୁ ଭଲ, ବା ଏକ ବାସ୍ତବ ଘଟଣାରେ 3am ରେ ନୁହେଁ।
ସୁରକ୍ଷା ପାସ୍ ପରେ।
ସୁରକ୍ଷା କେବେ ହେବ ନାହିଁ, କିନ୍ତୁ ଅନ୍ୟାନ୍ୟ କାର୍ଯ୍ୟାଳୟ ଷ୍ଟ୍ୟାକ୍ ଏକ ସ୍ୱଚ୍ଛ ବେସ୍ଲାଇନ୍ ରୁ ଲାଭ ନେଇଥାଏ। ବ୍ୟୟ ନିୟନ୍ତ୍ରଣକୁ ଏକ୍ଚୁଆଲ୍ ବ୍ୟବହାର ତଥ୍ୟ ଏକତ୍ରିତ ହେବା ସହିତ କଠିନ କରନ୍ତୁ, ଲୋଡ୍ ବିରୁଦ୍ଧରେ webhook ହାଣ୍ଡଲିଂ କୁ ଦୃଢ କରନ୍ତୁ, ଏବଂ ଏଜେଣ୍ଟ ଚିହ୍ନଟ କୁ ଯାଞ୍ଚ କରନ୍ତୁ ଯାହା ଦ୍ୱାରା ପ୍ରତିପକ୍ଷମାନେ ଆପଣଙ୍କର ସାଧାରଣ ପ୍ରୋଫାଇଲ୍ ଉପରେ ବିଶ୍ୱାସ କରନ୍ତି।
ପ୍ରମ୍ପ୍ଟ ଇଞ୍ଜେକ୍ସନ୍ କୁ ଅତିକ୍ରମ କରିବା ପାଇଁ ଏଜେଣ୍ଟ ବ୍ୟୟ ନିୟନ୍ତ୍ରଣ ସେଟ୍ କରନ୍ତୁ
developer ମାନେ ସବୁଠାରୁ ଅଧିକ ପଚାରୁଥିବା webhook pattern
GitHub ଏବଂ ଡୋମେନ୍ ଯାଞ୍ଚ ବ୍ୟାଜ୍ ଉପାର୍ଜନ କରନ୍ତୁ
docs.blockchain0x.com ରେ ପୂର୍ଣ୍ଣ ସନ୍ଦର୍ଭ। ସମ୍ବନ୍ଧିତ ଶବ୍ଦକୋଷ: Coinbase Smart Wallet. ଉତ୍ପାଦ ସତହ: Agent wallets.