Memo/AmazonWebServices/CloudTrail

https://dexlab.net:443/pukiwiki/index.php?Memo/AmazonWebServices/CloudTrail
 

CloudTrail

CloudTrail: APIのログをS3に記録するサービス。

  • Q: AWS Management ConsoleでCloudTrailのログに「user name=root」だが、存在しないAccessKeyIDが表示される。
  • A: AWSサポートの回答: AccessKeyID が「ASIA*** 」から始まる場合、AWS Management Consoleでrootユーザでログインした操作ログ。一時的なIDが利用されるため。

SwitchRole(AssumeRole)したユーザを調べる

問題:

  • アカウントA(111111111111), アカウントB(222222222222)があるとする
  • AからBにSwitchRoleしてリソースを作成した場合、アカウントBのCloudTrailにはuserIdentity.arnに、セッション名やrole名くらいしか書いて無い。
    "arn": "arn:aws:sts::222222222222:assumed-role/some-role/botocore-session-1234567890",
  • role名は複数ユーザで同じだし、セッション名は任意の名前が付くためユーザを特定できない。awscliの場合は「botocore-session-1234567890」のような値

例: アカウントB上のリソースを作成した、アカウントAのユーザを調べる

  1. アカウントBで、調べたいリソースのリージョンに移動する。
    • グローバルリソース(IAM, route53, 他)の場合は、us-east-1
  2. アカウントBのCloudTrailでリソース名(RDSならRDS ID)、イベント名(EC2ならRunInstance、RDSならCreateDBInstance)等で検索する
  3. ヒットしたら、イベントのJSON中にaccessKeyIdがあるのでメモする
  4. アカウントAで、Bと同じリージョンのCloudTrailで、リソース名に調べたaccessKeyIdの値を入れる。ユーザ名にSwitchRole元のユーザ名が表示されるはず。
    • アカウントBのリージョンと異なると表示されない。
    • リソース作成直後だと、アカウントAのCloudTrailのログにはヒットしなかったが、10分程度待つとヒットした。

AWSCLIのprofileを使う場合、セッション名を変更できるようになった。


グローバルリソースの操作履歴を確認する

  • IAM/Route53等のグローバルリソースの確認は、us-east-1を指定する。

CloudTrailのログをAthena で検索する


CloudTrail Insights: 異常なAPIアクティビティを検出

例えば不正利用でEC2「RunInstances」の頻度が通常より多くなったら検出等。
基本的には有効にしたい。


awscli: lookup-events で過去90日以内のログから検索

  • TerminateInstancesのイベントを探す
    profile="default"
    region=ap-northeast-1
    start_date="2019-09-01T00:00:00Z"
    end_date="2019-09-30T23:59:59Z"
    event_name=TerminateInstances
    
    aws cloudtrail lookup-events \
      --lookup-attributes "AttributeKey=EventName,AttributeValue=${event_name}" \
      --start-time $start_date \
      --end-time $end_date \
      --profile $profile \
      --region $region \

awscli: ログからtsvを生成

  • s3 bucketから1ヶ月分をダウンロードして、tsvを生成
    profile=default
    region=ap-northeast-1
    date=2019/09
    s3_path=s3://<bucket>/AWSLogs/<aws account id>/CloudTrail/$region/$date
    out_file=out.tsv
    
    aws s3 sync ${s3_path} log --profile $profile --quiet
    
    echo -e 'eventTime\tawsRegion\teventSource\teventName\tuserName\tsourceIPAddress\tuserAgent\trequestParameters' > ${out_file}
    find ./log -name "*.json.gz" | xargs gunzip -c | jq ".Records[]" | \
      jq -r '"\(.eventTime)\t\(.awsRegion)\t\(.eventSource)\t\(.eventName)\t\(.userIdentity.userName)\t\(.sourceIPAddress)\t\(.userAgent)\t\(.requestParameters)"' >> ${out_file}

EC2のイベントを検索する


Organizationsでの利用

複数アカウントがあり、全アカウントを対象にCloudTrailのログを保存できる。

  • 組織の証跡の作成 - AWS CloudTrail
    • OrganizationsのAWSにs3 bucketが一つでき、その中に全てのOrganizationsのログが貯まる。
    • OrganizationsにAWSアカウントが追加されても、自動で追加される。

put-event-selectors: イベントの記録対象の選択等

  • 書き込みイベントのみ記録する場合
    aws cloudtrail put-event-selectors
    --profile example
    --region ap-northeast-1
    --trail-name detault
    --event-selectors '[{"ReadWriteType": "WriteOnly"}]'

有効化


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-11-27 (金) 19:07:46 (61d)