在 AWS CLI 上调用 CreateInvalidation 操作时访问被拒绝

在 AWS CLI 上调用 CreateInvalidation 操作时访问被拒绝

我正在尝试创建一个命令,在推出新代码时使 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。

相关内容