Amazon web services AccessDenied:用户无权执行:cloudfront:CreateInvalization

Amazon web services AccessDenied:用户无权执行:cloudfront:CreateInvalization,amazon-web-services,amazon-s3,deployment,amazon-cloudfront,amazon-policy,Amazon Web Services,Amazon S3,Deployment,Amazon Cloudfront,Amazon Policy,我正在尝试使用ember cli deploy和ember cli deploy CloudFront将ember应用程序部署到AWS CloudFront 我在AWS中设置了我的bucket和用户,给了我的用户AmazonS3FullAccess策略 将我的.env.deploy.production文件设置为如下所示: AWS_KEY=<my key> AWS_SECRET=<my secret> PRODUCTION_BUCKET=<app.<my do

我正在尝试使用ember cli deploy和ember cli deploy CloudFront将ember应用程序部署到AWS CloudFront

我在AWS中设置了我的bucket和用户,给了我的用户AmazonS3FullAccess策略

将我的
.env.deploy.production
文件设置为如下所示:

AWS_KEY=<my key>
AWS_SECRET=<my secret>
PRODUCTION_BUCKET=<app.<my domain>.com
PRODUCTION_REGION=us-east-1
PRODUCTION_DISTRIBUTION=<my cloudfront distribution id>
/* jshint node: true */

module.exports = function(deployTarget) {
  var ENV = {
    build: {},
    pipeline: {
      activateOnDeploy: true
    },
    s3: {
      accessKeyId: process.env.AWS_KEY,
      secretAccessKey: process.env.AWS_SECRET,
      filePattern: "*"
    },
    cloudfront: {
      accessKeyId: process.env.AWS_KEY,
      secretAccessKey: process.env.AWS_SECRET
    }
  };

  if (deployTarget === 'staging') {
    ENV.build.environment = 'production';
    ENV.s3.bucket = process.env.STAGING_BUCKET;
    ENV.s3.region = process.env.STAGING_REGION;
    ENV.cloudfront.distribution = process.env.STAGING_DISTRIBUTION;
  }

  if (deployTarget === 'production') {
    ENV.build.environment = 'production';
    ENV.s3.bucket = process.env.PRODUCTION_BUCKET;
    ENV.s3.region = process.env.PRODUCTION_REGION;
    ENV.cloudfront.distribution = process.env.PRODUCTION_DISTRIBUTION;
  }

  return ENV;
};
我安装了
ember-cli-deploy
ember-cli-deploy-cloudfront
ember-install-ember-cli-deploy-aws-pack

当我运行
ember部署生产时

我得到这个错误:

AccessDenied:User:arn:aws:iam::299188948670:User/Flybrary无权执行:cloudfront:createinvalization


据我所知,
ember cli deploy cloudfront
为您处理创建失效的操作,但当我看到此错误时,我进入AWS IAM控制台,自己创建了一个失效。当我尝试运行
ember部署生产时,仍然会遇到相同的错误

IAM策略不允许限制对特定CloudFront发行版的访问。解决方法是对资源使用通配符,而不是只引用特定的CloudFront资源。将其添加到您的IAM策略将解决您面临的问题

以下是工作IAM策略中的一个示例:

{
  "Statement": [  
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudfront:CreateInvalidation",
        "cloudfront:GetInvalidation",
        "cloudfront:ListInvalidations"
      ],
      "Resource": "*"
    }
  ]
}
文件:


只是一个想法:你会因为使云端对象无效而被起诉。也许这是你的帐户有问题?”给了我的用户AmazonS3FullAccess策略。“你也给了它CloudFront权限吗?嗨@michael sqlbot,我确实设置了CloudFront分发和失效访问权限,但从未提示我付款(据我所知,它可能只是自动向我的帐户收费?)。很可能我没有给我的用户cloudfront权限。不过,AWS控制台中的任何内容似乎都不是一种明确的方法。你能给我指一下正确的方向吗?看。一般来说,每个权限在被允许之前都会被拒绝,IAM是权限的集中管理器。此外,几乎所有的AWS服务都会在没有进一步提示的情况下向您的AWS帐户计费(您可以想象,在大型部署中,这可能会多么烦人)。许多服务,如CloudFront,只对实际使用情况免费提供/设置。每月前1000次失效是免费的。类似的:我认为他们现在增加了对它的支持。IAM服务概述显示CloudFront支持基于资源的策略。虽然我不能让它工作。