claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🏥aws-health-check

プラグイン
aws-dev-toolkit

説明

現在のAWSアカウントに対して、素早くヘルスチェックを実施します。 セキュリティの状態、コストの無駄、信頼性のギャップ、および運用上の準備状況を確認します。 フルのWell-Architectedレビューより軽量です。

原文を表示

Quick health check on the current AWS account — security posture, cost waste, reliability gaps, and operational readiness. Lighter than a full Well-Architected review.

ユースケース

  • AWSアカウントのセキュリティ状態を確認したい
  • コストの無駄がないか調査する
  • 信頼性のギャップを把握する
  • 運用上の準備状況を確認する
  • 軽量なヘルスチェックを実施する

本文(日本語訳)

AWSアカウントの簡易ヘルスアセスメントを実行します。これはフルのWell-Architectedレビューではなく、5分間のスキャンです — シグナル値の高いチェックに絞って実施します。

プロセス

  1. ID確認: aws sts get-caller-identity
  2. スコープ決定: リージョンには $ARGUMENTS を使用、指定がなければ設定済みリージョンをデフォルトとする
  3. 以下のチェックを順番に実行
  4. サマリーレポートを作成

クイックチェック

セキュリティ(最重要 — 最初にチェック)

# GuardDuty は有効か?
aws guardduty list-detectors --region $REGION

# CloudTrail はマルチリージョン設定か?
aws cloudtrail describe-trails --query 'trailList[].{Name:Name,Multi:IsMultiRegionTrail}'

# パブリックな S3 バケットはあるか?
for bucket in $(aws s3api list-buckets --query 'Buckets[].Name' --output text); do
  status=$(aws s3api get-public-access-block --bucket $bucket 2>/dev/null | grep -c "true" || echo "0")
  [ "$status" -lt 4 ] && echo "WARNING: $bucket may have public access"
done

# HTTP(S)以外のポートに 0.0.0.0/0 を許可しているセキュリティグループ
aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]]]' \
  --output json | jq -r '.[] | select(.IpPermissions[] | select(.FromPort != 80 and .FromPort != 443 and .FromPort != null)) | .GroupId + " " + .GroupName'

# パブリックアクセス可能な RDS インスタンス
aws rds describe-db-instances --query 'DBInstances[?PubliclyAccessible==`true`].{ID:DBInstanceIdentifier,Engine:Engine}'

# IMDSv2 の強制適用状況
aws ec2 describe-instances --query 'Reservations[].Instances[?MetadataOptions.HttpTokens!=`required`].{ID:InstanceId,Name:Tags[?Key==`Name`].Value|[0],IMDS:MetadataOptions.HttpTokens}'

コストの無駄

# アタッチされていない EBS ボリューム
aws ec2 describe-volumes --filters "Name=status,Values=available" --query 'Volumes[].{ID:VolumeId,Size:Size,Type:VolumeType}'

# 関連付けられていない Elastic IP(アイドル時にも課金される)
aws ec2 describe-addresses --query 'Addresses[?AssociationId==null].{IP:PublicIp}'

# 停止中だが EBS 料金が発生し続けているインスタンス
aws ec2 describe-instances --filters "Name=instance-state-name,Values=stopped" --query 'Reservations[].Instances[].{ID:InstanceId,Name:Tags[?Key==`Name`].Value|[0],Type:InstanceType}'

信頼性

# シングル AZ 構成の RDS(本番環境ではリスクあり)
aws rds describe-db-instances --query 'DBInstances[?MultiAZ==`false`].{ID:DBInstanceIdentifier,Engine:Engine}'

# Auto Scaling グループなし(静的キャパシティ)
aws autoscaling describe-auto-scaling-groups --query 'AutoScalingGroups[?MinSize==MaxSize].{Name:AutoScalingGroupName,Size:MinSize}'

出力フォーマット

# AWS アカウント ヘルスチェック
**アカウント**: [ID] | **リージョン**: [リージョン名] | **日付**: [本日の日付]

## スコア: [X/10]

## 検出事項

### Critical(今すぐ対応)
- ...

### Warning(早めに対応)
- ...

### Good(このまま継続)
- ...

## すぐに対処できる改善点
1. [最も簡単で効果の高い修正]
2. [次に簡単なもの]
3. [...]

## SCP のギャップ
[SCP が検出されない場合、CLAUDE.md に基づくベースラインのガードレール導入を推奨]

ルール

  • すべての検出事項は実際の CLI コマンド出力に基づくこと。推測は禁止。
  • 開発・サンドボックスアカウントでは過剰にアラートを出さないこと — 先にアカウントの用途を確認する。
  • 簡潔にまとめること — これはクイックチェックであり、50ページの監査レポートではない。
原文(English)を表示

You are running a quick AWS account health assessment. This is a 5-minute scan, not a full Well-Architected review — focus on the highest-signal checks.

Process

  1. Confirm identity: aws sts get-caller-identity
  2. Determine scope: use $ARGUMENTS for region, or default to the configured region
  3. Run the checks below in order
  4. Produce a summary report

Quick Checks

Security (Critical — check first)

# GuardDuty enabled?
aws guardduty list-detectors --region $REGION

# CloudTrail multi-region?
aws cloudtrail describe-trails --query 'trailList[].{Name:Name,Multi:IsMultiRegionTrail}'

# Public S3 buckets?
for bucket in $(aws s3api list-buckets --query 'Buckets[].Name' --output text); do
  status=$(aws s3api get-public-access-block --bucket $bucket 2>/dev/null | grep -c "true" || echo "0")
  [ "$status" -lt 4 ] && echo "WARNING: $bucket may have public access"
done

# Security groups with 0.0.0.0/0 on non-HTTP ports
aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]]]' \
  --output json | jq -r '.[] | select(.IpPermissions[] | select(.FromPort != 80 and .FromPort != 443 and .FromPort != null)) | .GroupId + " " + .GroupName'

# Public RDS instances
aws rds describe-db-instances --query 'DBInstances[?PubliclyAccessible==`true`].{ID:DBInstanceIdentifier,Engine:Engine}'

# IMDSv2 enforcement
aws ec2 describe-instances --query 'Reservations[].Instances[?MetadataOptions.HttpTokens!=`required`].{ID:InstanceId,Name:Tags[?Key==`Name`].Value|[0],IMDS:MetadataOptions.HttpTokens}'

Cost Waste

# Unattached EBS volumes
aws ec2 describe-volumes --filters "Name=status,Values=available" --query 'Volumes[].{ID:VolumeId,Size:Size,Type:VolumeType}'

# Unassociated Elastic IPs (charged when idle)
aws ec2 describe-addresses --query 'Addresses[?AssociationId==null].{IP:PublicIp}'

# Stopped instances still incurring EBS charges
aws ec2 describe-instances --filters "Name=instance-state-name,Values=stopped" --query 'Reservations[].Instances[].{ID:InstanceId,Name:Tags[?Key==`Name`].Value|[0],Type:InstanceType}'

Reliability

# Single-AZ RDS (risky for production)
aws rds describe-db-instances --query 'DBInstances[?MultiAZ==`false`].{ID:DBInstanceIdentifier,Engine:Engine}'

# No auto-scaling groups (static capacity)
aws autoscaling describe-auto-scaling-groups --query 'AutoScalingGroups[?MinSize==MaxSize].{Name:AutoScalingGroupName,Size:MinSize}'

Output Format

# AWS Account Health Check
**Account**: [ID] | **Region**: [region] | **Date**: [today]

## Score: [X/10]

## Findings

### Critical (fix now)
- ...

### Warning (fix soon)
- ...

### Good (keep doing this)
- ...

## Quick Wins
1. [Easiest high-impact fix]
2. [Next easiest]
3. [...]

## SCP Gaps
[If no SCPs detected, recommend baseline guardrails per CLAUDE.md]

Rules

  • Every finding must come from an actual CLI command output. Never guess.
  • Don't alarm on dev/sandbox accounts — ask about the account purpose first.
  • Keep it concise — this is a quick check, not a 50-page audit.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。