はじめに
数ヶ月前に、awslogsdeliveryのアカウントIDを取得する関数のgetLogDeliveryCanonicalUserId
が使えるようになりました。これで、CloudFrontのログをS3に出力する権限の設定が読みやすくなります!
使い方
使い方はかんたんです。
上記のサイトからまるまる引用してきます。
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
+const exampleLogDeliveryCanonicalUserId = aws.cloudfront.getLogDeliveryCanonicalUserId({});
const exampleBucket = new aws.s3.Bucket("exampleBucket", {grants: [{
+ id: exampleLogDeliveryCanonicalUserId.then(exampleLogDeliveryCanonicalUserId => exampleLogDeliveryCanonicalUserId.id),
type: "CanonicalUser",
permissions: ["FULL_CONTROL"],
}]});
今までは、以下のようにIDをベタで書いていた方が多いと思います。
const awslogsdeliveryAccountId =
"c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0";
const exampleBucket = new aws.s3.Bucket("exampleBucket", {
grants: [
{
id: awslogsdeliveryAccountId,
type: "CanonicalUser",
permissions: ["FULL_CONTROL"],
},
],
});
このコードを後から見た時に、この文字列が何なのかが分からなくなるなという方が多かったのではないかと思います。
awslogsdelivery とは?
CloudFrontからS3にログ出力をするときに使われるアカウントです。
ログの出力先のS3に対して、awslogsdelivery
アカウントにFULL_CONTROL権限を付与することで、バケットへの書き込みができるようになります。先程出てきたc4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0
という文字列は、このアカウントのcanonical IDになります。
Terraformでももちろん使える
Terraformではaws_cloudfront_log_delivery_canonical_user_id
のData Sourceにありましたので、Terraformをお使いの方も利用できます。
最後に
getLogDeliveryCanonicalUserId は地味ながら個人的には嬉しい機能だと思います!