Code Lib / 代码库
更新于 a month ago

secrets-manager

Iitsmostafa
1.0k
itsmostafa/aws-agent-skills/skills/secrets-manager
78
Agent 评分

💡 摘要

一个用于与 AWS Secrets Manager 交互以安全存储、检索和轮换密钥的综合指南和代码库。

🎯 适合人群

管理应用程序密钥的云工程师自动化凭证轮换的 DevOps 工程师与 AWS 服务集成的应用程序开发人员审计密钥访问的安全工程师

🤖 AI 吐槽:这本质上是一份写得不错的 AWS 手册,被重新包装成了'技能',提供的功能几乎没有超出官方文档的范围。

安全分析中风险

该技能涉及处理高敏感度密钥。风险包括:如果示例被误用,密钥可能暴露在应用程序日志或代码中;以及依赖底层 AWS SDK (`boto3`) 及其供应链的安全性。缓解措施:强制执行具有最小权限的严格 IAM 策略,切勿在客户端应用程序中硬编码密钥检索逻辑,并审计所有依赖项。


name: secrets-manager description: AWS Secrets Manager for secure secret storage and rotation. Use when storing credentials, configuring automatic rotation, managing secret versions, retrieving secrets in applications, or integrating with RDS. last_updated: "2026-01-07" doc_source: https://docs.aws.amazon.com/secretsmanager/latest/userguide/

AWS Secrets Manager

AWS Secrets Manager helps protect access to applications, services, and IT resources. Store, retrieve, and automatically rotate credentials, API keys, and other secrets.

Table of Contents

Core Concepts

Secrets

Encrypted data stored in Secrets Manager. Can contain:

  • Database credentials
  • API keys
  • OAuth tokens
  • Any key-value pairs (up to 64 KB)

Versions

Each secret can have multiple versions:

  • AWSCURRENT: Current active version
  • AWSPENDING: Version being rotated to
  • AWSPREVIOUS: Previous version

Rotation

Automatic credential rotation using Lambda functions. Built-in support for:

  • Amazon RDS
  • Amazon Redshift
  • Amazon DocumentDB
  • Custom secrets

Common Patterns

Create a Secret

AWS CLI:

# Create secret with JSON aws secretsmanager create-secret \ --name prod/myapp/database \ --description "Production database credentials" \ --secret-string '{"username":"admin","password":"MySecurePassword123!","host":"mydb.cluster-xyz.us-east-1.rds.amazonaws.com","port":5432,"database":"myapp"}' # Create secret with binary data aws secretsmanager create-secret \ --name prod/myapp/certificate \ --secret-binary fileb://certificate.pem

boto3:

import boto3 import json secrets = boto3.client('secretsmanager') response = secrets.create_secret( Name='prod/myapp/database', Description='Production database credentials', SecretString=json.dumps({ 'username': 'admin', 'password': 'MySecurePassword123!', 'host': 'mydb.cluster-xyz.us-east-1.rds.amazonaws.com', 'port': 5432, 'database': 'myapp' }), Tags=[ {'Key': 'Environment', 'Value': 'production'}, {'Key': 'Application', 'Value': 'myapp'} ] )

Retrieve a Secret

import boto3 import json secrets = boto3.client('secretsmanager') def get_secret(secret_name): response = secrets.get_secret_value(SecretId=secret_name) if 'SecretString' in response: return json.loads(response['SecretString']) else: import base64 return base64.b64decode(response['SecretBinary']) # Usage credentials = get_secret('prod/myapp/database') db_password = credentials['password']

Caching Secrets

from aws_secretsmanager_caching import SecretCache, SecretCacheConfig # Configure cache cache_config = SecretCacheConfig( max_cache_size=100, secret_refresh_interval=3600, secret_version_stage_refresh_interval=3600 ) cache = SecretCache(config=cache_config) def get_cached_secret(secret_name): secret = cache.get_secret_string(secret_name) return json.loads(secret)

Update a Secret

# Update secret value aws secretsmanager update-secret \ --secret-id prod/myapp/database \ --secret-string '{"username":"admin","password":"NewPassword456!"}' # Put new version with staging labels aws secretsmanager put-secret-value \ --secret-id prod/myapp/database \ --secret-string '{"username":"admin","password":"NewPassword456!"}' \ --version-stages AWSCURRENT

Enable Rotation for RDS

aws secretsmanager rotate-secret \ --secret-id prod/myapp/database \ --rotation-lambda-arn arn:aws:lambda:us-east-1:123456789012:function:SecretsManagerRDSPostgreSQLRotation \ --rotation-rules AutomaticallyAfterDays=30

Create Secret with Rotation

# Use CloudFormation for RDS secret with rotation aws cloudformation deploy \ --template-file rds-secret.yaml \ --stack-name rds-secret
# rds-secret.yaml AWSTemplateFormatVersion: '2010-09-09' Resources: DBSecret: Type: AWS::SecretsManager::Secret Properties: Name: prod/myapp/database GenerateSecretString: SecretStringTemplate: '{"username": "admin"}' GenerateStringKey: password PasswordLength: 32 ExcludeCharacters: '"@/\' DBSecretRotation: Type: AWS::SecretsManager::RotationSchedule Properties: SecretId: !Ref DBSecret RotationLambdaARN: !GetAtt RotationLambda.Arn RotationRules: AutomaticallyAfterDays: 30

Use in Lambda with Extension

import json import urllib.request def handler(event, context): # Use AWS Parameters and Secrets Lambda Extension secrets_port = 2773 secret_name = 'prod/myapp/database' url = f'http://localhost:{secrets_port}/secretsmanager/get?secretId={secret_name}' headers = {'X-Aws-Parameters-Secrets-Token': os.environ['AWS_SESSION_TOKEN']} request = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(request) secret = json.loads(response.read())['SecretString'] credentials = json.loads(secret) return credentials

CLI Reference

Secret Management

| Command | Description | |---------|-------------| | aws secretsmanager create-secret | Create secret | | aws secretsmanager describe-secret | Get secret metadata | | aws secretsmanager get-secret-value | Retrieve secret value | | aws secretsmanager update-secret | Update secret | | aws secretsmanager delete-secret | Delete secret | | aws secretsmanager restore-secret | Restore deleted secret | | aws secretsmanager list-secrets | List secrets |

Versions

| Command | Description | |---------|-------------| | aws secretsmanager put-secret-value | Add new version | | aws secretsmanager list-secret-version-ids | List versions | | aws secretsmanager update-secret-version-stage | Move staging labels |

Rotation

| Command | Description | |---------|-------------| | aws secretsmanager rotate-secret | Configure/trigger rotation | | aws secretsmanager cancel-rotate-secret | Cancel rotation |

Best Practices

Secret Organization

  • Use hierarchical names: environment/application/secret-type
  • Tag secrets for organization and cost allocation
  • Separate by environment (dev, staging, prod)

Security

  • Use resource policies to control access
  • Enable encryption with customer-managed KMS keys
  • Rotate secrets regularly (30-90 days)
  • Audit access with CloudTrail
  • Use VPC endpoints for private access

Access Control

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/Environment": "production" } } } ] }

Application Integration

  • Cache secrets to reduce API calls
  • Handle rotation gracefully (retry with new credentials)
  • Use Lambda extension for faster access
  • Never log secrets

Troubleshooting

AccessDeniedException

Causes:

  • IAM policy missing secretsmanager:GetSecretValue
  • Resource policy denying access
  • KMS key policy missing permissions

Debug:

# Check secret resource policy aws secretsmanager get-resource-policy --secret-id my-secret # Check IAM permissions aws iam simulate-principal-policy \ --policy-source-arn arn:aws:iam::123456789012:role/my-role \ --action-names secretsmanager:GetSecretValue \ --resource-arns arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret

Rotation Failed

Debug:

# Check rotation status aws secretsmanager describe-secret --secret-id my-secret # Check Lambda logs aws logs filter-log-events \ --log-group-name /aws/lambda/SecretsManagerRotation \ --filter-pattern "ERROR"

Common causes:

  • Lambda timeout (increase to 30+ seconds)
  • Network connectivity (VPC configuration)
  • Database connection issues
  • Wrong secret format

Secret Not Found

# List secrets to find correct name aws secretsmanager list-secrets \ --filters Key=name,Values=myapp # Check if deleted (within recovery window) aws secretsmanager list-secrets \ --include-planned-deletion

References

五维分析
清晰度9/10
创新性3/10
实用性10/10
完整性9/10
可维护性8/10
优缺点分析

优点

  • 为常见操作提供了广泛、实用的代码示例。
  • 涵盖了缓存、轮换和 Lambda 集成等高级主题。
  • 包含清晰的 CLI 参考和故障排除指南。

缺点

  • 缺乏独特的'智能体技能'接口;本质上是一个文档/代码片段集合。
  • 新颖性低,因为它只是包装了现有的 AWS 服务,没有独特的抽象。
  • 假设用户具备大量 AWS 先验知识,限制了初学者的可访问性。

相关技能

pytorch

S
toolCode Lib / 代码库
92/ 100

“它是深度学习的瑞士军刀,但祝你好运能从47种安装方法里找到那个不会搞崩你系统的那一个。”

agno

S
toolCode Lib / 代码库
90/ 100

“它承诺成为智能体领域的Kubernetes,但得看开发者有没有耐心学习又一个编排层。”

nuxt-skills

S
toolCo-Pilot / 辅助式
90/ 100

“这本质上是一份组织良好的小抄,能把你的 AI 助手变成一只 Nuxt 框架的复读机。”

免责声明:本内容来源于 GitHub 开源项目,仅供展示和评分分析使用。

版权归原作者所有 itsmostafa.