![](/img/trans.png)
[英]Create a Cloudfront Distribution that Origin is an S3 bucket using ansible playbook
[英]terraform cloudfront distribution origin - how to update s3 bucket policy
在通过 aws 控制台创建云端分发时,我们可以选择源访问身份,还可以让它更新存储桶策略。
我正在尝试在 terraform 中寻找类似的选项,这样我就不必手动管理云端原始访问身份的 s3 存储桶读取权限。
我已经检查了https://www.terraform.io/docs/providers/aws/r/cloudfront_distribution.html但找不到对此类选项的任何引用。
如果我错过了检查页面上的某些内容,请告诉我。
我认为您没有错过该页面上的任何内容。 但是,您还需要查看此页面:
https://www.terraform.io/docs/providers/aws/r/s3_bucket.html 。
此页面包含有关设置 S3 存储桶的更多详细信息。 请注意静态网站托管部分中的策略行。 您可以添加一行
policy = "${file("policy.json")}"
然后您可以将所需的任何策略写入policy.json文件中,然后将其包含在内,从而使您无需在控制台中手动配置权限。
在阅读了这里的回复并在我的端做了一些阅读和测试后,我发现以下达到了我们想要的效果。 假设您已经在某处拥有 Cloudfront 发行版:
resource "aws_s3_bucket" "my-cdn-s3" {
bucket = "my-cdn"
}
resource "aws_cloudfront_origin_access_identity" "my-oai" {
comment = "my-oai"
}
resource "aws_s3_bucket_policy" "cdn-cf-policy" {
bucket = aws_s3_bucket.my-cdn-s3.id
policy = data.aws_iam_policy_document.my-cdn-cf-policy.json
}
data "aws_iam_policy_document" "my-cdn-cf-policy" {
statement {
sid = "1"
principals {
type = "AWS"
identifiers = [aws_cloudfront_origin_access_identity.my-cdn-oai.iam_arn]
}
actions = [
"s3:GetObject"
]
resources = [
"${aws_s3_bucket.my-cdn-s3arn}/*"
]
}
}
然后,我们将在存储桶的策略中获取此信息,该策略是我从 CF 和 S3 的非 Terraform 创建中复制的。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-cdn/*"
}
]
}
如果我遗漏了什么,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.