CloudTrailとは
CloudTrailは、AWS アカウントの ガバナンス、コンプライアンス、運用監査、リスク監査を行うためのサービス。AWSマネージメントコンソールやAWS CLI、SDK、APIで実行されたアクションを、ログに記録する。API アクティビティに特化した機能であり、パフォーマンスのモニタリングとシステムの正常性をモニタリングできるCloudWatchとは用途が異なる。
CloudTrailは、AWSアカウントを作成した際に自動的に有効になる。イベントとして記録された証跡と呼ばれるこれらのデータは、過去90日分を表示、検索、ダウンロード、アーカイブ、分析等を行うことができる。
証跡はサーバサイド暗号化を使用してS3バケットへ配信、およびAmazon CloudWatch Logs 、Amazon CloudWatch Eventsなどを用いて配信や分析を行うことができる。ログは、 1時間に複数回、約5分ごとに発行され、イベント発生から15分以内に配信される。CloudTrailには、設定変更などを含む管理イベントと情報の取得などを含むデータイベントの2つの種類のイベントが保存できるが、標準では管理イベントのみが保存される。設定により、S3およびLambdaのデータイベントを証跡に含ませることができる。なお、CloudTrailは全てのリージョンに適用可能であるが、イベントをログに記録するリージョンのみで表示することができる。
セキュリティ
以下の手段を用いることで、CloudTrailが生成した証跡を適切に保全し、インシデント発生時のフォレンジックを正常に遂行することができる。
データ保護
- 診断ログに機密情報が残ることを避けるため、名前フィールドなどに機密情報を載せることはしない。
検出
- 全てのリージョンで証跡を有効化する
- 証跡を保存するS3バケットは、サーバサード暗号化を行う
- CloudWatch Logsとの統合を行い、イベントの監視を行う
予防
- 証跡を保存するS3バケットは、専用のAWSアカウントに保存する
- 証跡を保存するS3バケットには、最低限のアクセス権限のみ付与する。
- 証跡を保存するS3バケットに対して、MFA Deleteを有効化する
AWS CloudTrail のセットアップ
CloudRrailはCloudFormationに対応しているため、CloudFormation経由でCloudTrailをセットアップすることができる。
IAM Roleの有効化
CloudTrailにCloudWatch Logsへのアクセス権限を付与する。
Resources:
IAMRoleForCloudTrail:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: cloudtrail.amazonaws.com
Action: 'sts:AssumeRole'
Description: A role required for CloudTrail to access CloudWatch Logs.
Policies:
- PolicyName: !Sub '${AWS::StackName}-AWSCloudTrailCloudWatchLogsPolicy-${AWS::Region}'
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- 'logs:PutLogEvents'
- 'logs:CreateLogStream'
Resource:
- !GetAtt CloudWatchLogsGroupForCloudTrail.Arn
RoleName: !Sub '${AWS::StackName}-CloudTrail-${AWS::Region}'
S3バケットの作成
証跡を保存するS3バケット
と、CloudTrailからS3バケットへのアクセスを許可する、バケットポリシー
を作成する。適切なバケットポリシーを設定しないと、 InsufficientS3BucketPolicyException
エラーが発生する。
Resouces:
S3ForCloudTrail:
Type: 'AWS::S3::Bucket'
DeletionPolicy: Retain
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: aws:kms
BucketName: !Sub defaultsecuritysettings-cloudtrail-${AWS::Region}-${AWS::AccountId}
LifecycleConfiguration:
Rules:
- Id: ExpirationInDays
ExpirationInDays: 60
Status: Enabled
LoggingConfiguration:
DestinationBucketName: !Ref LogBacketName
LogFilePrefix: CloudTrail/
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
S3BucketPolicyForCloudTrail:
Type: 'AWS::S3::BucketPolicy'
Properties:
Bucket: !Ref S3ForCloudTrail
PolicyDocument:
Version: 2012-10-17
Id: !Ref S3ForCloudTrail
Statement:
- Effect: Allow
Principal:
Service: cloudtrail.amazonaws.com
Action:
- 's3:GetBucketAcl'
Resource:
- !GetAtt S3ForCloudTrail.Arn
- Effect: Allow
Principal:
Service: cloudtrail.amazonaws.com
Action:
- 's3:PutObject'
Resource:
- !Join
- ''
- - !GetAtt S3ForCloudTrail.Arn
- /AWSLogs/
- !Sub ${AWS::AccountId}
- /*
Condition:
StringEquals:
s3:x-amz-acl: bucket-owner-full-control
CloudWatch Logsの作成
CloudWatch Logs の Log Group
を作成する。
Resources:
CloudWatchLogsGroupForCloudTrail:
Type: 'AWS::Logs::LogGroup'
Properties:
LogGroupName: !Sub '/aws/cloudtrail/${AWS::StackName}'
RetentionInDays: 365
CloudTrailの有効化
CloudTrail
を有効化する。先ほど作成したS3バケットとCloudWatch Logsを証跡の出力先に指定する。通常は、データイベントの保存は行わないが、以下のテンプレートでは、S3とLambdaのデータイベントも保存している。
Resources:
CloudTrail:
DependsOn:
- S3BucketPolicyForCloudTrail
Condition: CreateCentralizedResources
Type: 'AWS::CloudTrail::Trail'
Properties:
CloudWatchLogsLogGroupArn: !GetAtt CloudWatchLogsGroupForCloudTrail.Arn
CloudWatchLogsRoleArn: !GetAtt IAMRoleForCloudTrail.Arn
EnableLogFileValidation: true
EventSelectors:
- DataResources:
# All S3 buckets
- Type: AWS::S3::Object
Values:
- arn:aws:s3
# All Lambda functions
- Type: AWS::Lambda::Function
Values:
- arn:aws:lambda
IncludeGlobalServiceEvents: true
IsLogging: true
IsMultiRegionTrail: true
S3BucketName: !Ref S3ForCloudTrail
SnsTopicName: !Ref SnsTopicName
TrailName: !Sub ${AWS::StackName}
CloudFormation Launch Stack URL
以下のボタンから上のCloudFormationテンプレートを実行することが可能である。ソースコードは、aws-cloudformation-templates/security – GitHub にて公開。
作成されるAWSサービス | CloudFormationテンプレート |
---|---|
セキュリティサービス全般 | |
CloudTrailのみ |