秘密情報のローテーションとセキュリティ
秘密情報の有効期限、ローテーション戦略、Vaultソリューション(AWS Secrets Manager)を学びます。
「秘密情報のローテーションとセキュリティ」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
シークレットをローテーションする必要がある理由
シークレットが明示的に漏えいしていなくても、定期的にローテーションすることで、検知されていない侵害による被害を抑えられます。6か月前にひそかに盗まれたキーも、ローテーション後は使えなくなります。
多くのセキュリティ標準(SOC 2、PCI-DSS)では、定期的なシークレットのローテーションが求められます。ローテーションしやすいエージェントコードを構築することは、専門的な実践です。
APIキーの有効期限ポリシー
有効期限のポリシーはプロバイダーごとに異なります。キーに有効期限を設定できるプロバイダーもあれば、手動でローテーションしない限り期限切れにならないキーを発行するプロバイダーもあります。キーを定期的に監査し、手動ローテーションの予定をカレンダーに設定します。
# Key rotation schedule by provider (as of mid-2025):
# OpenAI: no automatic expiry, rotate manually every 90 days
# Anthropic: no automatic expiry, rotate manually every 90 days
# Google Cloud: API keys can have expiry dates set in the console
# AWS: IAM access keys: rotate every 90 days (AWS Security Hub recommends)
# Tavily: no automatic expiry, rotate when suspected compromise
# Best practices:
# - Set a recurring calendar event: 'Rotate API keys'
# - Document when each key was last rotated
# - Store rotation date in a secrets manager, not a spreadsheet
print('Schedule key rotation every 60-90 days as a standing task')エージェント向けAWS Secrets Manager
AWS Secrets Managerはシークレットを安全に保存し、自動ローテーションをサポートします。エージェントはSDKを介して実行時に最新のシークレット値を取得します。ハードコードしたキーも、本番環境の.envファイルも必要ありません。
# pip install boto3
import boto3
import json
def get_secret(secret_name: str, region: str = 'us-east-1') -> dict:
client = boto3.client('secretsmanager', region_name=region)
response = client.get_secret_value(SecretId=secret_name)
return json.loads(response['SecretString'])
# Store secrets as JSON in Secrets Manager:
# Secret name: 'prod/myagent/api-keys'
# Secret value: {'OPENAI_API_KEY': 'sk-...', 'SEARCH_API_KEY': 'tvly-...'}
# Fetch at agent startup:
# secrets = get_secret('prod/myagent/api-keys')
# openai_key = secrets['OPENAI_API_KEY']シークレット管理のHashiCorp Vault
HashiCorp Vaultは、エンタープライズ環境で広く使われているオープンソースのシークレット管理システムです。動的なシークレット、きめ細かなアクセス制御、すべてのシークレットアクセスの監査ログに対応しています。
# pip install hvac
import hvac
import os
def get_vault_secret(path: str, key: str) -> str:
client = hvac.Client(
url=os.environ['VAULT_ADDR'],
token=os.environ['VAULT_TOKEN'] # from env, not hard-coded
)
if not client.is_authenticated():
raise RuntimeError('Vault authentication failed')
response = client.secrets.kv.read_secret_version(path=path)
return response['data']['data'][key]
# Usage:
# openai_key = get_vault_secret('secret/myagent', 'OPENAI_API_KEY')
# Vault provides:
# - Audit log of every secret read
# - Lease-based secrets that expire automatically
# - Fine-grained ACL policiesシークレットスキャン:truffleHog
truffleHogは、誤ってコミットされた可能性のあるシークレットをgitリポジトリからスキャンします。現在のコードだけでなく、コミット履歴全体を検査します。リポジトリを公開する前に実行してください。
# pip install trufflehog
# Or: brew install trufflehog (Mac)
# Scan current git repository:
# trufflehog git file://.
# Scan only recent commits:
# trufflehog git file://. --since-commit HEAD~50
# Scan a GitHub repository:
# trufflehog github --repo https://github.com/yourorg/yourrepo
# truffleHog detects:
# - OpenAI API keys (sk-proj-...)
# - Anthropic keys (sk-ant-...)
# - AWS access keys (AKIA...)
# - Private keys (BEGIN RSA PRIVATE KEY)
# - And 700+ other secret patterns
print('Run truffleHog before open-sourcing any private repository')git-secrets:コミット前の保護
git-secretsは、設定されたパターンに一致するシークレットを含むコミットをブロックする、AWSのgitフックツールです。各コミットの前に実行され、シークレットパターンが見つかった場合はコミットを拒否します。
# Install:
# brew install git-secrets (Mac)
# or: git clone https://github.com/awslabs/git-secrets && make install
# Set up in your repo:
# git secrets --install
# git secrets --register-aws (adds AWS key patterns)
# Add custom patterns (e.g., OpenAI keys):
# git secrets --add 'sk-proj-[A-Za-z0-9_-]{48,}'
# Now attempting to commit a secret:
# git add agent.py # file containing API key
# git commit -m 'add agent'
# [ERROR] Untracked secret found in agent.py
# Commit blocked!
print('git-secrets prevents secrets from ever entering git history')キーが漏えいした場合の対処
漏えいしたAPIキーに対応するための手順を、順を追って説明します。迅速な対応が重要です。コミット後、数分以内に自動スキャナーが漏えいしたキーを収集する可能性があります。
# INCIDENT RESPONSE: Exposed API Key
#
# Step 1 (IMMEDIATE): Revoke the exposed key
# OpenAI: platform.openai.com/api-keys -> Delete key
# Anthropic: console.anthropic.com -> API Keys -> Delete
# AWS: IAM console -> Access Keys -> Deactivate/Delete
#
# Step 2: Generate a new key
# Create a replacement key with the same permissions
#
# Step 3: Update everywhere
# - Local .env
# - Staging environment
# - Production environment (Secrets Manager / Vault)
# - CI/CD secrets (GitHub Actions, GitLab CI)
#
# Step 4: Audit usage
# - Check provider usage logs for unauthorized activity
# - Check billing for unexpected charges
#
# Step 5: Prevent recurrence
# - Add pattern to git-secrets
# - Enable pre-commit hooks
print('Revoke first. Then rotate. Then audit. Then prevent.')不正利用の検出
キーをローテーションした後、承認されていない利用がなかったか確認します。多くのプロバイダーでは、盗まれたキーがAPI呼び出しに使われたかどうかを確認できる利用ログや支出アラートを提供しています。
import openai
import datetime
client = openai.OpenAI(api_key='YOUR_NEW_API_KEY')
# Check OpenAI usage for the past day
# (requires usage read permissions on the key)
def check_recent_usage():
# OpenAI billing/usage dashboard: platform.openai.com/usage
# Set up spending alerts: platform.openai.com/account/limits
# - 'Email alert' when monthly spend exceeds $X
print('Suspicious usage indicators to look for:')
print('1. Spikes in token usage outside business hours')
print('2. Requests from unexpected IP addresses')
print('3. Models or endpoints you do not use')
print('4. Unusual cost patterns')
print('\nAlways set spending limits and alerts on new API keys')
check_recent_usage()APIキーへの支出上限の設定
漏えいしたキーによる被害を抑えるため、APIキーに厳格な支出上限を設定します。誰かにキーを使われても、請求額が無制限に増えることを防げます。
# OpenAI spending limits:
# platform.openai.com/account/limits
# - Set 'Monthly budget' (hard limit — API stops when reached)
# - Set 'Email notification threshold' (soft alert)
# Best practice for agent keys:
# - Development key: $5-10/month hard limit
# - Staging key: $20-50/month hard limit
# - Production key: Based on expected usage + 2x buffer
# - CI/CD test key: $5/month hard limit (mocks should handle most tests)
# Anthropic:
# console.anthropic.com -> Settings -> Spending Limits
# Use separate keys per environment so limits are independent
print('Spending limits cap the blast radius of a compromised key')キーに対する最小権限の原則
各APIキーには、必要な権限だけを付与します。データの読み取りだけを行うキーに、書き込みや削除の権限を与えてはいけません。多くのプロバイダーでは、スコープを限定したキーや権限を制限したキーを利用できます。
# Principle of Least Privilege applied to agent API keys:
# OpenAI key scopes (if API allows scoped keys):
# - Read-only key: for logging/audit agents
# - Write key: for agents that create content
# - Admin key: NEVER use in agent code — only for management
# Tavily API:
# - Basic plan: limited search results
# - Research plan: more results, images
# Use the plan appropriate to the agent's needs
# AWS IAM for agents:
# Create a dedicated IAM role/user per agent with only the S3/DynamoDB
# paths it needs to read/write. No admin permissions.
# Rule: If the key is compromised, how much damage can be done?
# Minimize the answer through scoped permissions.
print('Least privilege limits blast radius of any single key compromise')キーのヘルスチェックの構築
エージェントの起動時に、APIキーがまだ有効かどうかを検証します。期限切れや失効したキーをすぐに検出すれば、エージェントがすでにリソースを消費した後、タスクの途中で失敗する事態を避けられます。
import openai
def check_openai_key_health(api_key: str) -> bool:
try:
client = openai.OpenAI(api_key=api_key)
# Make a minimal API call to verify the key
models = client.models.list()
print(f'OpenAI key valid. {len(list(models))} models available.')
return True
except openai.AuthenticationError:
print('ERROR: OpenAI API key is invalid or expired.')
return False
except openai.PermissionDeniedError:
print('ERROR: API key lacks required permissions.')
return False
# At agent startup:
# import os
# if not check_openai_key_health(os.environ['OPENAI_API_KEY']):
# raise SystemExit('Cannot start: invalid API key')理解度チェック:シークレットのローテーションとセキュリティ
シークレットのローテーションとセキュリティ対策について、理解度を確認します。
まとめ:シークレットのローテーションとセキュリティ
これで、本番環境のエージェントに対するシークレットセキュリティ戦略が一通り整いました。
- APIキーを、運用ルールとして60~90日ごとにローテーションする
- 本番環境ではAWS Secrets ManagerまたはHashiCorp Vaultを使用する
- リポジトリをオープンソース化する前に
truffleHogを実行する - 誤ったコミットを防ぐため、コミット前フックとして
git-secretsをインストールする - キーが漏えいした場合は、すぐに失効させてからローテーションし、利用状況を監査する
- 漏えいによる被害を抑えるため、すべてのAPIキーに支出上限を設定する
- 最小権限を適用し、各キーには必要な権限だけを付与する
よくある質問
「秘密情報のローテーションとセキュリティ」レッスンは無料ですか?
はい。「秘密情報のローテーションとセキュリティ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「秘密情報のローテーションとセキュリティ」で何を学びますか?
秘密情報の有効期限、ローテーション戦略、Vaultソリューション(AWS Secrets Manager)を学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「秘密情報のローテーションとセキュリティ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- エージェント向け環境変数
- .envファイルとpython-dotenv
- 秘密情報のローテーションとセキュリティ
- 開発環境と本番環境の設定プロファイル