1

我試圖使用ember-cli-deploy和ember-cli-deploy-cloudfront將一個ember應用部署到AWS CloudFront。AccessDenied:用戶未被授權執行:cloudfront:CreateInvalidation

我在AWS中設置了我的存儲區和用戶,給了我的用戶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> 

config/default.js看起來是這樣的:

/* 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-deployember-cli-deploy-cloudfrontember install ember-cli-deploy-aws-pack

當我運行ember deploy production

我得到這個錯誤:

AccessDenied: User: arn:aws:iam::299188948670:user/Flybrary is not authorized to perform: cloudfront:CreateInvalidation

這是我的理解是ember-cli-deploy-cloudfront手柄爲您創造廢票,但是當我看到這個錯誤,我走進AWS IAM控制檯和我自己創建了一個失效。當我嘗試運行ember deploy production時,仍然收到相同的錯誤。

+0

只是一個想法:Y您將因雲端物體無效而被起訴。也許這是您帳戶的問題? – nxrd

+0

*「給我的用戶AmazonS3FullAccess策略。」*您是否也授予CloudFront權限? –

+0

您好@ michael-sqlbot,我確實設置了我的雲端分佈和無效訪問,但我從來沒有提示付費(我知道它可能會自動爲我的帳戶收費?)。我很可能沒有給我的用戶雲端權限。 AWS控制檯中的任何東西似乎都不是一種明確的方式。你能爲我指出正確的方向嗎? –

回答

1

IAM策略不允許限制對特定CloudFront分配的訪問。解決方案是爲資源使用通配符,而不是僅引用特定的CloudFront資源。將此添加到您的IAM策略將解決您遇到的問題。

這裏是一個在工作IAM策略的示例:

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

文檔:

相關問題