跳至内容

如何使用CDK将S3的访问权限授予Cloudfront?

0

【以下的问题经过翻译处理】 我在CDK中对于如何在S3存储桶上设置仅限CloudFront的权限感到困惑。我已经创建了该存储桶,并设置publicReadAccess: false,现在正尝试授予类似以下的CloudFormation权限:

import * as s3 from "aws-cdk-lib/aws-s3"; import * as cf from "aws-cdk-lib/aws-cloudfront"; import * as iam from "aws-cdk-lib/aws-iam";

export function grantCloudFrontAccessToBucket(stack: cdk.Stack, cfInstance: cf.CloudFrontWebDistribution, bucket: s3.Bucket) { const bucketObjects = ${bucket.bucketArn}:*; const cfArn =arn:aws:cloudfront::${stack.account}:distribution/${cfInstance.distributionId};

const policy = new iam.PolicyStatement({
        actions: ["s3:GetObject"],
        resources: [bucketObjects],
        principals: [
            new iam.ServicePrincipal('cloudfront.amazonaws.com')
        ],
        conditions: [
            {
                "StringEquals": {
                    "AWS:SourceArn": cfArn
                }
            }
        ]
    });

bucket.addToResourcePolicy(policy);

}

它报错说是无效的条件类型,但我认为StringEquals应该没问题的,我唯一能想到的就是我构建了错误的ARN?

更新:我找到了这篇文章,它解释了如何使用OIN来实现我之前尝试的操作。但是,控制台的帮助似乎暗示OAC更好。您能否在CDK中以类似的方式使用OAC呢?

专家

已提问 3 年前81 查看次数

1 回答
0

【以下的回答经过翻译处理】 目前我暂时关闭此问题。我决定先继续使用旧的方式,直到CDK跟上进度。

const oin = new OriginAccessIdentity(stack, 'washnet-cf-origin-access-identity'); sourceBucket.grantRead(oin);

然后在Cloudfront上配置:

s3OriginSource: { s3BucketSource: source, originAccessIdentity: oin },

目前看来,足够好了。

专家

已回答 3 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。