К основному содержанию
правило

amazon-s3 — правило для Cursor: что делает и как установить

Набор инструкций для Cursor по работе с Amazon S3. Помогает настроить шифрование объектов, отключить устаревшие ACL и организовать иерархию файлов.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/amazon-s3.mdc
Открыть на GitHub

Что делает amazon-s3

Правило задаёт стандарты проектирования и кода при работе с корзинами Amazon S3 через boto3 или Terraform. Файл действует для всех файлов проекта по маске **/*. В центре внимания находится безопасность хранилища: шифрование на стороне сервера (SSE-S3 или SSE-KMS) и отказ от ACL в пользу политик IAM.

В блоке организации данных правило вводит строгие шаблоны путей для data lake и ассетов с разделением по средам. Оно требует включать версионирование критичных корзин и размечать объекты тегами. Для экономии расходов на хранение предусмотрены правила жизненного цикла с переводом старых файлов в Standard-IA и Glacier.

Для файлов крупнее 100 МБ правило запрещает прямой метод put_object: загрузка должна идти через составную передачу multipart upload.

Какие задачи решает

  • настроить серверное шифрование SSE-S3 или SSE-KMS в вызовах boto3
  • заблокировать публичный доступ к корзинам и отключить списки ACL
  • выстроить иерархическую структуру ключей для data lake
  • настроить перевод объектов в Glacier через правила жизненного цикла
  • организовать multipart upload для файлов объёмом больше 100 МБ

Примеры запросов агенту

  • Напиши функцию boto3 для безопасной загрузки отчёта в S3 с шифрованием SSE-KMS
  • Создай конфигурацию Terraform для бакета с версионированием и переходом данных в Glacier
  • Организуй multipart upload через boto3 для видеофайла размером 500 МБ

Как установить amazon-s3

Вручную: положить файлы

.cursor/rules/amazon-s3.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о amazon-s3

Как установить amazon-s3 в Cursor?

Создайте файл .cursor/rules/amazon-s3.mdc в корне вашего проекта и поместите в него содержимое правила.

Что делает правило amazon-s3?

Оно направляет ИИ-ассистента в Cursor генерировать безопасный код для Amazon S3. Правило запрещает использование ACL, требует шифрование SSE-S3 или KMS и задаёт шаблоны путей к файлам.

Почему правило рекомендует отключить ACL?

Управление доступом через списки ACL признано устаревшим подходом. Правило предписывает использовать режим Bucket owner enforced и разграничивать права исключительно через IAM и Bucket Policy.

Исходный текст

amazon-s3.mdc · CC0-1.0
---
description: This guide provides definitive best practices for interacting with Amazon S3, focusing on security, performance, cost optimization, and maintainable code in modern AWS applications.
globs: **/*
---
# amazon-s3 Best Practices

Amazon S3 is the backbone of object storage in AWS. Adhering to these guidelines ensures your S3 implementations are secure, performant, cost-effective, and maintainable.

## 1. Security First

Security is paramount. Always assume your S3 buckets contain sensitive data and configure them defensively.

### 1.1. Encryption at Rest

Always encrypt objects at rest. Default to AWS-managed keys (SSE-S3) or KMS (SSE-KMS) for stronger control.

❌ **BAD: Unencrypted objects or relying on client-side encryption without server-side enforcement.**
```python
import boto3

s3 = boto3.client('s3')
s3.put_object(Bucket='my-unencrypted-bucket', Key='data.txt', Body=b'sensitive data')
# Data is stored unencrypted by default if bucket policy doesn't enforce it.
```

✅ **GOOD: Enforce server-side encryption (SSE-S3 or SSE-KMS).**
```python
import boto3

s3 = boto3.client('s3')
# Option 1: SSE-S3 (AWS-managed keys)
s3.put_object(
    Bucket='my-secure-bucket',
    Key='data.txt',
    Body=b'sensitive data',
    ServerSideEncryption='AES256' # SSE-S3
)

# Option 2: SSE-KMS (Customer Master Key)
# Ensure 'my-kms-key-id' exists and bucket has permissions.
s3.put_object(
    Bucket='my-secure-bucket',
    Key='more-data.txt',
    Body=b'more sensitive data',
    ServerSideEncryption='aws:kms',
    SSEKMSKeyId='arn:aws:kms:us-east-1:123456789012:key/my-kms-key-id'
)
```
> **Note on SSE-C:** As of April 2026, SSE-C is disabled for new buckets by default. Only enable it via `PutBucketEncryption` API *after* bucket creation if explicitly required for legacy or specific compliance needs. Prefer SSE-S3 or SSE-KMS.

### 1.2. Access Control: Policies over ACLs

Manage access exclusively through IAM and Bucket Policies. Disable ACLs for simplified, auditable permissions.

❌ **BAD: Relying on ACLs for granular object access.**
```python
# Avoid this pattern. ACLs are disabled by default for new buckets.
s3.put_object_acl(
    Bucket='my-bucket',
    Key='object.txt',
    GrantRead='id="some-aws-account-id"'
)
```

✅ **GOOD: Disable ACLs and use IAM/Bucket Policies.**
```python
# Ensure S3 Object Ownership is set to "Bucket owner enforced" to disable ACLs.
# This is the default for new buckets.
# Example Bucket Policy (IaC recommended):
# This policy grants read-only access to a specific IAM role for a specific prefix.
bucket_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/MyReadOnlyRole"
            },
            "Action": ["s3:GetObject"],
            "Resource": ["arn:aws:s3:::my-secure-bucket/data/*"]
        }
    ]
}
# Apply this via IaC (e.g., Terraform, CloudFormation) or boto3.put_bucket_policy
```

### 1.3. Block Public Access

Always enable S3 Block Public Access at the account or organization level. Buckets should never be public unless explicitly required for static website hosting (and even then, use CloudFront with OAC).

✅ **GOOD: Enable S3 Block Public Access.**
```python
# This is typically configured via AWS Console, AWS CLI, or IaC at the account level.
# Example for a specific bucket (via boto3, but IaC is preferred):
s3.put_public_access_block(
    Bucket='my-secure-bucket',
    PublicAccessBlockConfiguration={
        'BlockPublicAcls': True,
        'IgnorePublicAcls': True,
        'BlockPublicPolicy': True,
        'RestrictPublicBuckets': True
    }
)
```

## 2. Code Organization & Data Governance

Structured naming, versioning, and lifecycle rules are crucial for manageability and cost control.

### 2.1. Bucket & Object Naming

Adopt clear, hierarchical naming conventions, especially for data lakes. This simplifies governance and policy application.

❌ **BAD: Generic or flat naming.**
```
my-app-bucket/customerdata_20230101.csv
my-app-bucket/logs_server1_access.log
```

✅ **GOOD: Hierarchical, environment-aware naming.**
```
# Bucket name (globally unique, often includes org/env/purpose)
# e.g., myorg-prod-datalake-raw-us-east-1

# Object keys (within the bucket)
# For data lakes:
# <environment>/<layer>/<source>/<dataset>/<year>/<month>/<day>/<file>
# e.g., prod/raw/ecommerce/orders/2025/01/15/order_batch_1.json
# e.g., dev/curated/analytics/user_sessions/2025/01/15/session_summary.parquet

# For application assets:
# <environment>/<application>/<asset_type>/<id>/<file>
# e.g., prod/webapp/images/user-123/profile.jpg
# e.g., dev/backend/configs/service-a/config.yaml
```

### 2.2. Versioning & Tagging

Enable versioning on all critical buckets. Use object tags for cost allocation, lifecycle management, and audit trails.

❌ **BAD: No versioning, untagged objects.**
```python
# Accidental deletion or overwrite means data loss.
s3.delete_object(Bucket='my-bucket', Key='important-report.csv')
# Oops, gone forever.
```

✅ **GOOD: Enable versioning and tag objects.**
```python
# Terraform example for bucket versioning:
# resource "aws_s3_bucket" "my_bucket" {
#   bucket = "myorg-prod-data"
#   versioning {
#     enabled = true
#   }
#   # ... other configurations
# }

# Python example for tagging an object:
s3.put_object(
    Bucket='myorg-prod-data',
    Key='reports/monthly/sales-2025-01.csv',
    Body=b'sales data',
    Tagging='department=finance&project=sales-reporting'
)
```

### 2.3. Lifecycle Management

Automate object transitions to cheaper storage classes (e.g., Glacier, Intelligent-Tiering) or deletion based on access patterns. Use S3 Inventory to gain insights.

✅ **GOOD: Define lifecycle rules.**
```python
# Terraform example for a lifecycle rule:
# resource "aws_s3_bucket_lifecycle_configuration" "my_bucket_lifecycle" {
#   bucket = aws_s3_bucket.my_bucket.id
#
#   rule {
#     id     = "archive_old_logs"
#     status = "Enabled"
#
#     filter {
#       prefix = "logs/"
#     }
#
#     transition {
#       days          = 30
#       storage_class = "STANDARD_IA" # Infrequent Access
#     }
#     transition {
#       days          = 90
#       storage_class = "GLACIER_FLEXIBLE_RETRIEVAL"
#     }
#     expiration {
#       days = 365
#     }
#   }
#   # ... other rules
# }
```

## 3. Performance Optimization

Design your S3 interactions for maximum throughput and minimal latency.

### 3.1. Multipart Uploads

For files larger than 100MB, always use multipart uploads. This improves upload speed, resilience, and allows for parallelization.

❌ **BAD: Uploading large files in a single PUT operation.**
```python
# This can be slow and prone to failure for large files.
s3.put_object(Bucket='my-bucket', Key='large-video.mp4', Body=open('large-video.mp4', 'rb'))
```

✅ **GOOD: Use `transfer_manager` or `upload_fileobj` for multipart uploads.**
```python
import boto3
from boto3.s3.transfer import TransferConfig

s3 = boto3.client('s3')
config = TransferConfig(multipart_threshold=1024 * 25, max_concurrency=10, multipart_chunksize=1024 * 25) # 25MB parts

with open('large-video.mp4', 'rb') as data:
    s3.upload_fileobj(data, 'my-bucket', 'large-video.mp4', Config=config)
```

### 3.2. Request Rate & Prefixes

Distribute high-throughput workloads across multiple S3 prefixes. S3 scales performance based on prefixes. Aim for at least 3-4 x 10^4 requests per second per prefix.

❌ **BAD: Concentrating all high-volume reads/writes on a single prefix.**
```
my-bucket/logs/all_access_logs_YYYY-MM-DD.log # Single hot prefix
```

✅ **GOOD: Spread workloads across multiple prefixes.**
```
my-bucket/logs/webserver1/access_logs_YYYY-MM-DD.log
my-bucket/logs/webserver2/access_logs_YYYY-MM-DD.log
my-bucket/logs/appserver1/access_logs_YYYY-MM-DD.log
# Or use hash-based prefixes for even distribution:
# my-bucket/data/hash_prefix_A/object_id.json
# my-bucket/data/hash_prefix_B/object_id.json
```

## 4. Infrastructure as Code (IaC) with Terraform

When using S3 as a Terraform backend, follow these critical best practices.

❌ **BAD: Using local state or deprecated DynamoDB locking.**
```terraform
# backend "s3" {
#   bucket = "myorg-tf-states"
#   key    = "myapp/prod.tfstate"
#   region = "us-east-1"
#   # Missing versioning, encryption, and using deprecated DynamoDB for locking
#   dynamodb_table = "terraform-locks" # DEPRECATED!
# }
```

✅ **GOOD: Enable versioning, encryption, and S3 native locking.**
```terraform
terraform {
  backend "s3" {
    bucket         = "myorg-tf-states"
    key            = "myapp/prod.tfstate"
    region         = "us-east-1"
    encrypt        = true             # Always encrypt state file
    versioning_enabled = true         # Critical for state recovery
    use_lockfile   = true             # RECOMMENDED: S3 native locking (Terraform 1.10+)
  }
}
```

## 5. Testing Approaches

Thoroughly test your S3 interactions, especially security and data integrity.

### 5.1. Local Integration Testing

Use tools like LocalStack to simulate S3 locally, allowing for rapid integration testing without incurring AWS costs or affecting production resources.

✅ **GOOD: Use LocalStack for local S3 emulation.**
```python
# Example with boto3 and LocalStack (ensure LocalStack is running)
s3_local = boto3.client(
    's3',
    endpoint_url='http://localhost:4566',
    aws_access_key_id='test',
    aws_secret_access_key='test',
    region_name='us-east-1'
)
s3_local.create_bucket(Bucket='test-bucket')
s3_local.put_object(Bucket='test-bucket', Key='test-object.txt', Body=b'hello')
```

### 5.2. Policy Validation

Programmatically validate IAM and bucket policies to ensure least privilege and prevent unintended access.

✅ **GOOD: Use AWS IAM Policy Simulator or `boto3` for validation.**
```python
# Example: Check if an IAM role can perform a specific S3 action
iam_client = boto3.client('iam')
response = iam_client.simulate_principal_policy(
    PolicySourceArn='arn:aws:iam::123456789012:role/MyReadOnlyRole',
    ActionNames=['s3:GetObject'],
    ResourceArns=['arn:aws:s3:::my-secure-bucket/data/report.csv']
)
# Assert that 'Effect' is 'Allow' for the action.
```

© sanjeed5 · CC0-1.0 · sanjeed5/awesome-cursor-rules-mdc

Похожие правила IDE

Все правила IDE по теме «Облака: AWS, Azure, GCP» →
django-storages-s3 https://github.com/awais786 Скилл настраивает хранение статики и медиафайлов Django в AWS S3 через django-storages и boto3: словарь STORAGES, presigned-ссылки, CloudFront, IAM. CX Codex +1 900установок ministack-aws-emulator reason-machines Скилл помогает агенту поднять MiniStack — локальный эмулятор AWS для тестов с S3, SQS, DynamoDB и другими сервисами. CX Codex +1 790установок amazon-bedrock aws Скилл помогает настраивать Amazon Bedrock, от вызовов Converse API и RAG в Knowledge Bases до развёртывания агентов в AgentCore Harness. CX Codex +1 8 500установок managing-amazon-kinesis-data-streams aws Скилл для работы с Amazon Kinesis Data Streams: настраивает доставку данных из потока в Iceberg-таблицы на S3 Tables или в обычные S3-бакеты. CX Codex +1 1 800установок iac-terraform-data-engineering reason-machines Скилл для Claude и других ИИ-агентов: помогает описывать инфраструктуру AWS под данные в Terraform — бакеты S3, инстансы EC2, роли IAM. CX Codex +1 1 800установок hf-cloud-python-env-setup huggingface Скилл разворачивает изолированное окружение Python для работы с AWS и SageMaker. Он помогает избежать сбоев из-за несовместимых версий Python и устаревшего SDK boto3. CX Codex +1 548установок

Из того же набора240

Весь набор →
anyio Правило задаёт рекомендации для асинхронного Python-кода на AnyIO: использовать структурированную конкурентность и выбирать backend явно. Оно применяется к файлам *.py. ★ 3 580звёзд репо ant-design Правило задаёт агенту стандарты работы с Ant Design v6.x: тему через токены, сетку, доступность компонентов. Пригодится, если проект на React и Ant Design. ★ 3 580звёзд репо ansible Задаёт стандарты написания Ansible-кода для ИИ: форматирование YAML, деление на роли, идемпотентность задач и управление переменными. ★ 3 580звёзд репо angular Правило задаёт соглашения для Angular-кода: от структуры файлов до состояния компонентов. Cursor сможет применять их при работе с файлами TypeScript и HTML. ★ 3 580звёзд репо android-sdk Правило задаёт Cursor стандарты разработки Android на Java: MVVM, Jetpack, Hilt, Room и навигация. Пригодится, когда агент пишет код для Android-проекта. ★ 3 580звёзд репо amazon-ec2 Правило для Cursor с рекомендациями по настройке Amazon EC2 через CloudFormation. Помогает проверять права IAM, сетевой доступ, шифрование дисков и конфигурацию инстансов. ★ 3 580звёзд репо aiohttp Правило для Cursor задаёт, как писать асинхронный HTTP-клиент на aiohttp: одна сессия на приложение, таймауты, обработка ошибок. ★ 3 580звёзд репо actix-web Набор инструкций для Cursor по разработке веб-сервисов на Rust с Actix-web 4. Помогает выстроить модульную структуру и безопасно управлять общим состоянием. ★ 3 580звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой