CloudWatch LogsへVPC/サブネット/ENIのVPCフローログを送る設定
AWSでCloudWatch LogsへVPCフローログを送ることが出来るAWSリソースは以下の3種。
- VPC
- サブネット
- ENI(Elasic Network interface)
上記3種AWSリソースからCloudWatch LogsにVPCフローログAWSかENIを個々に設定することも出来ます。
VPC別に環境やプロジェクトを別けていたら、CLoudWatchLogsのVPCフローログのロググループもVPC別に作るといいです。
ENIはEC2の(仮想)ネットワークインターフェイスでいわゆるNIC(ネットワークインターフェイスカード)です。ENIは基本的にEC2インスタンスに1個以上付きます。
フローログの設定は、IAMポリシーを作り、IAMロールを作り、CloudWatchでロググループを作り、VPCフローログを作るとなります。
以下、一連の作業はIAMポリシーのAdministratorAccessをアタッチしたIAMグループに所属するAdministratorsグループのユーザーで行っています。
IAMポリシー作成
CloudWatch Logsへロググループを作り、ログストリームを作り、ログイベントを送り、ログを記載する というアクション達を許可する以下JSONのIAMポリシーを作る。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
- IAMへ
- IAMポリシーへ
- ポリシーの作成へ
- JSONを選ぶ
- 上記JSONを貼り付け
- ポリシーの確認
- 名前を入力 EX)Send_to_CloudWatch_Logs
- ポリシーの作成
IAMポリシーをIAMロールに設定
- IAMへ
- ロールへ
- ロールの作成へ
- 「信頼されたエンティティの種類を選択」で「AWSサービス」を選ぶ
- 「ユースケースの選択」は、EC2を選ぶ
- 「次のステップ:アクセス権限」へ
- 「ポリシーのフィルタ」で「ユーザーによる管理」を選択
- 「Send_to_CloudWatch_Logs」ポリシーにチェックを入れる
- 「次のステップ:タグ」
- 「次のステップ:確認」
- 「ロール名」を入力 EX)Flow-Logs-Role-to-cloudwatch-logs-from-ec2-eni
- 「ロールの作成」
IAMロールでロールとVPCフローログの信頼関係を設定
Flow-Logs-Role-to-cloudwatch-logs-from-ec2-eni のIAMロールで以下JSONの信頼関係を作成
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "vpc-flow-logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- IAMへ
- ロールへ
- 「Flow-Logs-Role-to-cloudwatch-logs-from-ec2-eni」をクリック
- 「信頼関係」のタブをクリック
- 「信頼関係の編集」をクリック
- 上記JSONを貼り付け
- 「信頼ポリシーの更新」をクリック
※AWSのAdministratorユーザーではないユーザーがこれらのIAM設定をしている場合、そのユーザーは以下JSONの iam:PassRole アクションを使用するアクセス許可 が必要です。account-idにはアカウントIDを調べて変更してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": "arn:aws:iam::account-id:role/Flow-Logs-Role-to-cloudwatch-logs-from-ec2-eni"
}
]
}
フローログのIAM設定詳細は、AWS公式ドキュメントCloudWatch Logs へのフローログの発行を参照ください。
CloudWatchでロググループを作る
CloudWatchロググループでENIフローログをつくると仮定します。
- CloudWatchへ
- ロググループへ
- 「ロググループを作成」へ
- 「ロググループ名」を入力 EX)「/aws/プロジェクト名/vpc/eniリソース名/flowlogs」
- 「作成」
※必要に応じて作成したロググループの「保持設定」を「アクション」→「保持設定を編集」で変更してください。
フローログを作る
CloudWatchロググループでENIフローログをつくると仮定します。
- EC2ダッシュボードへ
- 左サイドバーのネットワークインターフェイスへ
- 該当するネットワークインターフェイスをチェックする
- タブのフローログをクリック
- 「フローログの作成」をクリック
- filterを選ぶ
- DestinationはCloudWatch Logsを選択
- ロググループでは上記で作ったロググループを選択
- IAMロールで「Flow-Logs-Role-to-cloudwatch-logs-from-ec2-eni」を選ぶ
- タグを入力(任意)
- 「Create」
VPCとサブネットのフローログの削除について
VPCとサブネットのフローログは、EC2のENI(ネットワークインターフェイス)では削除できません。VPC、もしくはVPCのサブネットで削除しなければならない。ENIのフローログはENIで削除できます。要は、フローログを作ったリソースでないとフローログを削除できないです。
また、フローログの削除後、IAMポリシーやIAMロールで削除できるものがあるかどうか、確認することもお勧めします。