fluentd で S3, Kinesis Streams にログを送るための最低限の IAMポリシー

Written by @ryysud

Nov 12, 2017 20:46 · 628 words · 2 minutes read #AWS #fluentd

はじめに

アプリケーションから Amazon S3 と Amazon Kinesis Streams へログを送るために fluetnd の plugin を利用していたのですが、不要な Policy が付与された IAM User の aws key を使い続けてしまっていた(FullAccess のポリシーが付与された IAM User)ため、必要な IAMポリシー のみを付与した IAM User を作成してみました。という記事です。

使用しているプラグインはこちら

fluent-plugin-s3 で S3 へ書き込むために必要な権限を付与した IAMポリシー

my-s3bucket は自身の環境のものに変更して下さい

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3bucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3bucket/*"
        }
    ]
}

fluent-plugin-s3 で Kinesis Streams へ書き込むために必要な権限を付与した IAMポリシー

region, account-id, stream-name は自身の環境のものに変更して下さい

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:ListStreams",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:region:account-id:stream/stream-name"
            ]
        }
    ]
}

さいごに

もろもろ検証しながら進めてきましたが、基本的には List と Put のポリシーを付与すれば良いみたいでした。 参考資料に記載したページでの議論を見てみると td-agent.conf の内容によっては S3 Bucket を作成する権限や他の権限も必要みたいですが、基本的には上記の IAMポリシー で(少なくとも自分の環境では)良いかなと思いました。

AWS 初心者ですが今後も勉強続けていきたいと思います ✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌

余談ですが、せっかくなので fluent-plugin-s3 にプルリクエストも投げてみました。 https://github.com/fluent/fluent-plugin-s3/pull/216

参考資料