![在 AWS CLI 上调用 CreateInvalidation 操作时访问被拒绝](https://linux22.com/image/670685/%E5%9C%A8%20AWS%20CLI%20%E4%B8%8A%E8%B0%83%E7%94%A8%20CreateInvalidation%20%E6%93%8D%E4%BD%9C%E6%97%B6%E8%AE%BF%E9%97%AE%E8%A2%AB%E6%8B%92%E7%BB%9D.png)
我正在尝试创建一个命令,在推出新代码时使 CloudFront 分发无效。这是为了解决推出的新 HTML 需要 24 小时才能出现在我的 Web 应用程序上的问题。这个想法来自这个AWS CLI 命令参考
命令如下:
aws cloudfront create-invalidation --distribution-id XXXXXXXXXXXXXX --invalidation-batch file://invbatch.json
这是我运行命令时得到的响应:
调用 CreateInvalidation 操作时发生客户端错误 (AccessDenied):用户:arn:aws:iam::XXXXXXXXXXXXXX:user/cats-kittens-beanstalk-user 无权执行:cloudfront:CreateInvalidation
知道为什么会这样吗?我知道 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": "*"
}
]
}
文档:
答案2
您遇到的错误消息“用户无权执行:cloudfront:CreateInvalidation”,表明您使用的 IAM 用户或角色没有为 CloudFront 分发创建无效所需的权限。
要解决此问题,您需要更新附加到 IAM 用户或角色的 IAM 策略,以包含 cloudfront:CreateInvalidation 操作的权限。具体操作如下:
确定 IAM 策略:找到附加到 IAM 用户或角色的 IAM 策略(在本例中为 cats-kittens-beanstalk-user)。此策略应授予与 CloudFront 操作相关的权限。
编辑 IAM 策略:将 cloudfront:CreateInvalidation 操作的权限添加到 IAM 策略中。您可以将其添加到现有策略中,也可以专门为 CloudFront 失效创建新策略。
以下是授予必要权限的 IAM 策略代码片段示例:
{ “版本”:“2012-10-17”, “声明”:[ { “效果”:“允许”, “操作”:“cloudfront:CreateInvalidation”, “资源”:“arn:aws:cloudfront::XXXXXXXXXXXXXXX:distribution/XXXXXXXXXXXXXX” } ] }
确保将 XXXXXXXXXXXXXX 替换为您的实际 AWS 账户 ID 和 CloudFront 分发 ID。