皆様、お世話になっております。鈴木と申します。
今回はAWS Cloudformationを使用してS3を作成し、そのS3にALBアクセスログとVPCフローログを収集するようにしていきたいと思います。
1.目次
2.要件
- S3バケットを作成してVPCフローログ・ALBアクセスログをそれぞれ別で収集できるようにする。
3.S3について
Amazon S3は、オブジェクトストレージサービスで、スケーラブルで高可用性のストレージを提供します。データを「バケット」に保存し、オブジェクト単位で管理することができます。
特徴 | 説明 |
---|---|
ストレージタイプ | オブジェクトストレージ |
データ管理 | – バケット: データを保存するコンテナ – オブジェクト: データ本体とメタデータを含むファイル |
スケーラビリティ | 無制限のストレージ容量。データの追加や削除に制限なし |
データの耐久性 | 99.999999999%(11 9’s)耐久性。データは複数のアベイラビリティゾーンに自動的に複製されます。 |
データの可用性 | 高い可用性を提供。通常99.99%の月間可用性を保証 |
セキュリティ | – アクセス制御: IAMポリシー、バケットポリシー、ACLでの細かいアクセス管理 – 暗号化: データの転送と静止時の暗号化 |
データ管理機能 | – バージョニング: オブジェクトの履歴管理 – ライフサイクルポリシー: データの自動アーカイブや削除 |
データの取得 | – 標準: 高速なデータアクセス – 低頻度アクセス(IA): コスト削減のためのアクセス頻度が低いデータ向け – アーカイブ(Glacier): 長期保存用 |
主な用途として下記が挙げられます。
- バックアップとアーカイブ: データの安全な保管と長期保存。
- コンテンツ配信: 静的ウェブサイトやメディアファイルのホスティング。
- データ分析: 大量データの収集と処理。
- データレイク: 大規模なデータ分析基盤の構築。
Amazon S3は高い耐久性とスケーラビリティを提供し、企業のデータストレージニーズに応える強力なサービスです。用途に応じて、適切なストレージクラスやセキュリティ機能を選択することができます。
4.構成図
ALBのアクセスログとVPCフローログをS3にて収集します。
5.S3作成用ソースコード全体および詳細
YAML形式にて記述しております。
まずはS3を作成します。
※ファイルを分ける場合で、VPCフローログを設定する場合は先にS3を作成しておくとスムーズです。
5-1S3バケット作成
使用するオプション | 設定値 | 説明 |
---|---|---|
Type | AWS::S3::Bucket | デフォルトの定義 |
BucketName | !Ref ALBS3BucketName | バケット名を指定 |
AccessControl | Private | アクセスコントロールを指定 |
BlockPublicAcls | true | パブリックアクセスコントロールリスト(ACL)をブロック |
BlockPublicPolicy | true | バケットポリシーでのパブリックアクセスをブロック |
IgnorePublicAcls | true | すべてのパブリックACLを無視 |
RestrictPublicBuckets | true | バケットへのパブリックアクセスを制限 |
VersioningConfiguration: Status: |
true | バージョニングを有効化 |
5-2.ALBバケットポリシー
使用するオプション | 設定値 | 説明 |
---|---|---|
Type | AWS::S3::BucketPolicy | バケットポリシーを定義するリソースタイプ |
BucketName | !Ref ALBAccessLogsBucket | バケット名を指定 |
Statement: Sid |
AllowALBLogsAccessFromSpecificAccount | アクセスコントロールの識別子 |
Effect | Allow | アクションを許可する |
Principal | arn:aws:iam::リージョンID:root | 特定のリージョンを対象にする |
Action | s3:PutObject, s3:GetBucketAcl, s3:GetObject, s3:ListBucket | アクションの許可リスト |
Resource | arn:aws:s3:::${ALBS3BucketName}, arn:aws:s3:::${ALBS3BucketName}/${ALBS3LogKeyPrefix}* | 対象リソースのARN |
5-3.VPCバケットポリシー
使用するオプション | 設定値 | 説明 |
---|---|---|
Type | AWS::S3::BucketPolicy | バケットポリシーを定義するリソースタイプ |
BucketName | !Ref VPCFlowLogsBucket | バケット名を指定 |
Statement: Sid |
AllowVPCFlowLogsAccess | VPCフローログのアクセスを許可するルールの識別子 |
Effect | Allow | アクションを許可する |
Principal | arn:aws:iam::アカウントID:root | VPCフローログを生成するアカウントID |
Action | s3:PutObject, s3:GetBucketAcl, s3:GetObject, s3:ListBucket | アクションの許可リスト |
Resource | arn:aws:s3:::${VPCS3BucketName}, arn:aws:s3:::${VPCS3BucketName}/${VPCS3LogKeyPrefix}* | 対象リソースのARN |
Statement: Sid |
AWSLogDeliveryWrite | AWSログ配信サービスのログ書き込みを許可するルールの識別子 |
Principal | delivery.logs.amazonaws.com | AWSログ配信サービス |
Action | s3:PutObject | ログの書き込みを許可 |
Resource | arn:aws:s3:::${VPCS3BucketName}/${VPCS3LogKeyPrefix}AWSLogs/アカウントID/* | 特定のプレフィックス(AWSLogs)に対するアクセス |
Condition: StringEquals |
aws:SourceAccount: アカウントID, s3:x-amz-acl: bucket-owner-full-control | 指定アカウントとフルコントロール権限の条件 |
Condition: ArnLike |
aws:SourceArn: arn:aws:logs:リージョン:アカウントID:* | 指定リージョンとアカウントIDのログサービスからのアクセス |
Statement: Sid |
AWSLogDeliveryAclCheck | バケットのACL確認を許可するルールの識別子 |
Principal | delivery.logs.amazonaws.com | AWSログ配信サービス |
Action | s3:GetBucketAcl | バケットのACL取得を許可 |
Resource | arn:aws:s3:::${VPCS3BucketName} | バケット全体に対するアクセス |
Condition: StringEquals |
aws:SourceAccount: アカウントID | 指定アカウントからのアクセスのみ許可 |
Condition: ArnLike |
aws:SourceArn: arn:aws:logs:リージョン:アカウントID:* | 指定リージョンとアカウントIDのログサービスからのアクセス |
5-4.ソースコード
AWSTemplateFormatVersion: '2010-09-09'
Description:
Resources:
# ALB用 S3 バケット作成
ALBAccessLogsBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref ALBS3BucketName
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
VersioningConfiguration:
Status: Enabled
# ALB用 バケットポリシー
ALBAccessLogsBucketPolicy:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref ALBAccessLogsBucket
PolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: "AllowALBLogsAccessFromSpecificAccount"
Effect: Allow
Principal:
AWS: "arn:aws:iam::リージョンID:root"
Action:
- "s3:PutObject"
- "s3:GetBucketAcl"
- "s3:GetObject"
- "s3:ListBucket"
Resource:
- !Sub "arn:aws:s3:::${ALBS3BucketName}"
- !Sub "arn:aws:s3:::${ALBS3BucketName}/${ALBS3LogKeyPrefix}*"
# VPC用 S3 バケット作成
VPCFlowLogsBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref VPCS3BucketName
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
VersioningConfiguration:
Status: Enabled
# VPC用 バケットポリシー
VPCFlowLogsBucketPolicy:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref VPCFlowLogsBucket
PolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: "AllowVPCFlowLogsAccess"
Effect: Allow
Principal:
AWS: "arn:aws:iam::アカウントID:root"
Action:
- "s3:PutObject"
- "s3:GetBucketAcl"
- "s3:GetObject"
- "s3:ListBucket"
Resource:
- !Sub "arn:aws:s3:::${VPCS3BucketName}"
- !Sub "arn:aws:s3:::${VPCS3BucketName}/${VPCS3LogKeyPrefix}*"
- Sid: "AWSLogDeliveryWrite"
Effect: Allow
Principal:
Service: "delivery.logs.amazonaws.com"
Action: "s3:PutObject"
Resource: !Sub "arn:aws:s3:::${VPCS3BucketName}/${VPCS3LogKeyPrefix}AWSLogs/アカウントID/*"
Condition:
StringEquals:
aws:SourceAccount: "アカウントID"
s3:x-amz-acl: "bucket-owner-full-control"
ArnLike:
aws:SourceArn: "arn:aws:logs:リージョン:アカウントID:*"
- Sid: "AWSLogDeliveryAclCheck"
Effect: Allow
Principal:
Service: "delivery.logs.amazonaws.com"
Action: "s3:GetBucketAcl"
Resource: !Sub "arn:aws:s3:::${VPCS3BucketName}"
Condition:
StringEquals:
aws:SourceAccount: "アカウントID"
ArnLike:
aws:SourceArn: "arn:aws:logs:リージョン:アカウントID:*"
Outputs:
ALBS3BucketName:
Description: "The name of the S3 bucket for ALB access logs"
Value: !Ref ALBAccessLogsBucket
VPCS3BucketName:
Description: "The name of the S3 bucket for VPC flow logs"
Value: !Ref VPCFlowLogsBucket
6.ALBアクセスログ用ソースコード全体および詳細
こちらはALB作成時に設定しておく必要があります。
設定する際はS3と併せて、または先にS3を作成しておきましょう。
また前回の【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_ALBにて作成しておりますのでソースコードは同じ内容になります。
使用するオプション | 設定値 | 説明 |
---|---|---|
Type | AWS::CertificateManager::Certificate | デフォルトの定義 |
DomainName | !Sub "${SubdomainName}" | サブドメインを指定 |
ValidationMethod | DNS | 検証方法をDNSで指定 |
DomainValidationOptions DomainName |
!Sub "${SubdomainName}" | 検証サブドメインを指定 |
DomainValidationOptions ValidationDomain |
!Sub "ホストドメイン名" | サブドメインのホストゾーンであるドメインを指定 |
Tags | Key: ‘Name’ Value: ‘naoki-acm’ |
タグのキーと値を設定 |
LoadBalancerAttributes | Key: "access_logs.s3.enabled "Value: "true" |
アクセスログを有効化 |
LoadBalancerAttributes | Key: "access_logs.s3.bucket" Value: !Ref S3BucketName |
保管先S3を指定 |
LoadBalancerAttributes | Key: "access_logs.s3.prefix" Value: "alb-logs" |
S3のプレフィックスを指定 |
# ALB 作成
LoadBalancerResource:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Name: "naoki-alb"
Scheme: "internet-facing"
Type: "application"
Subnets:
- !Ref Subnet1Id
- !Ref Subnet2Id
SecurityGroups:
- !Ref SecurityGroupId
IpAddressType: "ipv4"
Tags:
- Key: "Name"
Value: "naoki-alb"
LoadBalancerAttributes:
- Key: "access_logs.s3.enabled"
Value: "true"
- Key: "access_logs.s3.bucket"
Value: !Ref S3BucketName
- Key: "access_logs.s3.prefix"
Value: "alb-logs"
7.VPCフローログ作成
VPCフローログの場合は別ファイルでも作成可能です。
使用するオプション | 設定値 | 説明 |
---|---|---|
Type | AWS::EC2::FlowLog | フローログ設定を定義するリソースタイプ |
LogDestination | !Sub "arn:aws:s3:::${S3BucketName}" | フローログを送信するS3バケットのARN |
LogDestinationType | s3 | ログの送信先タイプ(この場合はS3バケット) |
ResourceId | !Ref VPCId | フローログを収集するVPCのID |
ResourceType | VPC | フローログを収集するリソースタイプ(この場合はVPC) |
TrafficType | ALL | 収集するトラフィックのタイプ(すべてのトラフィック) |
MaxAggregationInterval | 600 | ログの集計間隔(秒単位、ここでは10分) |
Tags | Key: "Name", Value: "naoki-vpc-flowlog" | リソースに関連付けられるタグ |
AWSTemplateFormatVersion: '2010-09-09'
Description: VPC Flow Log to existing S3 bucket
Resources:
# VPC フローログ
VPCFlowLog:
Type: "AWS::EC2::FlowLog"
Properties:
LogDestination: !Sub "arn:aws:s3:::${S3BucketName}"
LogDestinationType: "s3"
ResourceId: !Ref VPCId
ResourceType: "VPC"
TrafficType: "ALL"
MaxAggregationInterval: 600
Tags:
- Key: "Name"
Value: "naoki-vpc-flowlog"
Outputs:
FlowLogId:
Description: "The ID of the VPC Flow Log"
Value: !Ref VPCFlowLog
8.確認
実際にログが保存されているか確認します。
まずはS3が作成されていることを確認します。
ALBのほうを確認するとログが取得できていることを確認できました。
VPCのほうもログが取得できていることを確認できました。
9.感想
ファイルを分けて作成する場合は先にS3を作成するということに注意して実践して見てください。
次回はEC2のバックアップ設定を実施していきたいと思います。