この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon CloudWatch Logsで、機密情報を保護できるようになりました。
本記事では、CloudFormationでデータ保護を設定してみました。
おすすめの方
- Amazon CloudWatch Logsのデータ保護機能をCloudFormationで利用したい方
CloudFormationテンプレート
適当なロググループと動作確認用のIAMロールを作成します。
動作確認用のIAMロールには、logs:Unmask
権限がありません。
なお、指定するARNは次のドキュメントを参照してください。
logs.yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
LambdaLogGroupNamePrefix:
Type: String
Default: /aws/lambda
Resources:
TestFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub ${LambdaLogGroupNamePrefix}/test-2022-12
DataProtectionPolicy:
Name: test-2022-12-data-protection-policy
Version: 2021-06-01
Statement:
- DataIdentifier:
- arn:aws:dataprotection::aws:data-identifier/EmailAddress
# 監査結果の送信は設定しない
Operation:
Audit:
FindingsDestination: {}
- DataIdentifier:
- arn:aws:dataprotection::aws:data-identifier/EmailAddress
# 監査結果の送信は設定しない
Operation:
Deidentify:
MaskConfig: {}
# 動作確認用のIAMロール
CloudWatchReadOnlyMaskRole:
Type: AWS::IAM::Role
Properties:
RoleName: cloudwatch-read-only-mask-role
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
AWS:
- !Sub ${AWS::AccountId} # 実際には最小限なAssumeRole元を指定してください。
Policies:
- PolicyName: cloudwatch-read-only-mask-policy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- logs:DescribeLogGroups
- logs:DescribeLogStreams
- logs:GetLogEvents
# - logs:Unmask 設定しない
Resource: "*"
デプロイ
aws cloudformation deploy \
--template-file logs.yaml \
--stack-name CloudWatch-Data-Protection-Test-Stack \
--capabilities CAPABILITY_NAMED_IAM \
--no-fail-on-empty-changeset
メールアドレスをロググループに送信し、マスク表示を確認する
CloudWatchに対する全権限を持っているユーザ(IAMロール)で操作します。
作成したロググループに適当なログストリームを作成し、テスト用のログイベントを送信します。
メールアドレスがマスク表示されました。
動作確認
unmask権限がある場合、メールアドレスが表示される
「Temporarily unmask protected data」を選択します。
マスクが解除されて、メールアドレスが表示されました。
unmask権限がない場合、メールアドレスが表示されない
動作確認用のIAMロールに切り替えて、同様の操作をおこないます。
結果は表示されませんでした。
すべてがmaskされたログの場合は、一時的に表示が消えるみたいです。 再読み込み(リロード)すると「****」が表示されます。
さいごに
Amazon CloudWatch Logsの機密情報保護をCloudFormationで設定してみました。 実際に運用する場合に役立つと思います。