SJ blog
security
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

Amazon Macie — S3の機密データ検出・分類・コンプライアンス対応

Amazon MacieによるS3バケット内の機密データ(PII、クレジットカード、認証情報)の自動検出、カスタムデータ識別子、検出ジョブ、マルチアカウント管理、GDPRやPCI DSS対応を解説。

一言結論

MacieはS3専用のAI駆動型機密データ検出サービスで、GDPR・HIPAA・PCI DSSへのコンプライアンス対応の第一歩として「どのバケットに機密データが存在するか」を自動で可視化するために欠かせない。

Amazon Macieとは

Amazon MacieはAI/MLを使ってAmazon S3のデータを自動的にスキャンし、個人情報(PII)、クレジットカード番号、パスワード、APIキーなどの機密データを検出するサービスだ。GDPR、HIPAA、PCI DSSなどの規制対応に活用される。

自動的に検出できるデータの種類

個人を特定できる情報(PII):
  氏名、住所、生年月日
  マイナンバー(日本)、SSN(米国)
  パスポート番号、運転免許証番号
  電話番号、メールアドレス

金融情報:
  クレジットカード番号(VISA, Mastercard等)
  銀行口座番号

医療情報:
  処方箋番号、医療記録番号

認証情報:
  AWSシークレットアクセスキー
  プライベートキー(RSA, EC)
  パスワード(平文)
  OAuth トークン

ネットワーク情報:
  IPアドレス
  URLと認証情報を含むURL

カスタムデータ識別子

既定のパターン以外に、独自の正規表現を使った機密データ識別子を作成できる。

# 日本の電話番号パターンのカスタムデータ識別子
aws macie2 create-custom-data-identifier \
  --name "JP-PhoneNumber" \
  --regex "0\\d{1,4}-\\d{1,4}-\\d{4}" \
  --maximum-match-distance 50 \
  --keywords '["電話", "TEL", "連絡先"]' \
  --description "日本の電話番号パターン"

# 社内従業員IDのカスタム識別子
aws macie2 create-custom-data-identifier \
  --name "EmployeeID" \
  --regex "EMP-[0-9]{6}" \
  --description "社内従業員ID"

検出ジョブの設定

# 特定バケットの定期スキャンジョブ
aws macie2 create-classification-job \
  --job-type SCHEDULED \
  --name "monthly-pii-scan" \
  --s3-job-definition '{
    "bucketDefinitions": [
      {
        "accountId": "123456789012",
        "buckets": ["customer-data-bucket", "hr-records-bucket"]
      }
    ]
  }' \
  --schedule-frequency '{
    "monthlySchedule": {"dayOfMonth": 1}
  }' \
  --sampling-percentage 100

# バケット全体をスキャン(一回限り)
aws macie2 create-classification-job \
  --job-type ONE_TIME \
  --name "initial-baseline-scan" \
  --s3-job-definition '{
    "bucketCriteria": {
      "includes": {
        "and": []
      }
    }
  }'

バケットの自動検出と継続的監視

自動検出(Automated Data Discovery):
  すべてのS3バケットを定期的にサンプリングしてスキャン
  コストを最小化しながら機密データの存在を継続的に監視
  → 詳細スキャンが必要なバケットを特定してから詳細ジョブを実行する

バケットインベントリ:
  全バケットのアクセス設定(パブリックか否か)
  暗号化状況
  レプリケーション設定
  推定機密データの有無

Findingとアラート

# EventBridgeでMacieのFindingをリアルタイム通知
{
  "source": ["aws.macie"],
  "detail-type": ["Macie Finding"]
}

# Lambda関数でFindingを処理
def handler(event, context):
    finding = event['detail']
    finding_type = finding['type']
    bucket = finding['resourcesAffected']['s3Bucket']['name']
    
    # S3バケットに機密データが見つかった場合
    if 'SensitiveData' in finding_type:
        # 1. セキュリティチームに通知
        notify_security_team(finding)
        
        # 2. バケットのパブリックアクセスをブロック(予防措置)
        if finding['severity']['description'] == 'High':
            block_public_access(bucket)
        
        # 3. S3タグで機密データあることをマーク
        s3 = boto3.client('s3')
        s3.put_bucket_tagging(
            Bucket=bucket,
            Tagging={'TagSet': [
                {'Key': 'ContainsSensitiveData', 'Value': 'true'},
                {'Key': 'MacieFindingId', 'Value': finding['id']}
            ]}
        )

マルチアカウント管理

# Organizations連携(委任管理者アカウントから)
aws macie2 enable-organization-admin-account \
  --admin-account-id 123456789012

# 全メンバーアカウントのバケットをスキャン
aws macie2 update-organization-configuration \
  --auto-enable

コスト最適化

料金:
  バケット評価: $0.10/バケット/月
  機密データ検出(詳細スキャン): $1.00/GB(最初の50TB)
  自動検出(サンプリング): バケット評価に含まれる

コスト削減策:
  1. 自動検出でまず全体像を把握(サンプリングのみ)
  2. 高リスクバケットのみ詳細スキャンジョブを実行
  3. 機密データがないと判明したバケットを除外リストに追加
  4. スキャン対象をS3プレフィックスで絞り込む

GDPR/HIPAA対応での活用

GDPR対応:
  EU市民の個人データを含むS3バケットを特定
  不要なPIIが保存されていないかチェック
  データ転送先(クロスリージョンコピー)の監視

HIPAA対応:
  PHI(保護対象医療情報)を含むS3バケットを特定
  暗号化されていないPHIを検出

PCI DSS対応:
  クレジットカード番号を含むS3バケットを特定
  スコープ内/外のシステムを分類

試験頻出ポイント

  • MacieはS3専用のデータ分類サービス(EC2等は対象外)
  • カスタムデータ識別子で独自パターンを追加可能
  • 自動検出はサンプリングベースでコスト効率的
  • Findingは Security Hub に集約できる
  • マルチアカウント管理はOrganizations委任管理者から

まとめ

MacieはS3内の機密データを継続的に発見・監視するためのサービスだ。規制対応(GDPR、HIPAA、PCI DSS)では「機密データがどのS3バケットに存在するか」を把握することが出発点であり、MacieはそのインベントリとアラートをAIベースで自動化する。