【问题标题】:Terraform AWS CMK script throws a Not Authorized ErrorTerraform AWS CMK 脚本引发未授权错误
【发布时间】:2021-11-18 23:25:36
【问题描述】:

我正在尝试为我的 SQS 队列创建 CMK,以允许将加密的 SNS 消息发送到我的加密队列。创建 cmk 后,我会将其设置为队列中的“kms_master_key_id”。

resource "aws_kms_key" "mycmk" {
  description             = "KMS Key"
  deletion_window_in_days = 10

  policy = <<POLICY
{
   "Version": "2012-10-17",
      "Statement": [{
         "Effect": "Allow",
         "Principal": {
            "Service": "sns.amazonaws.com"
         },
         "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
         ],
         "Resource": "*"
       }]
}
POLICY
}

这是抛出一个错误: my_role_arn is not authorized to perform: kms:CreateKey on resource: * 我已经仔细检查以确保允许该操作并且它是允许的。 我需要更新政策中的“资源”吗?如果是的话怎么办?

我用来运行它的角色具有以下权限:

 Effect = "Allow"
          Action = [
            "kms:CreateAlias",
            "kms:CreateGrant",
            "kms:CreateKey",
            "kms:DeleteAlias",
            "kms:DisableKey",
            "kms:EnableKey",
            "kms:PutKeyPolicy",
            "kms:RevokeGrant",
            "kms:ScheduleKeyDeletion",
            "kms:TagResource",
            "kms:UntagResource",
            "kms:UpdateAlias",
            "kms:UpdateKeyDescription"
          ]
          Resource = [
            "arn:aws:kms:${local.aws_region}:${var.aws_account_id}:key/*",
            "arn:aws:kms:${local.aws_region}:${var.aws_account_id}:alias/*"
          ]

【问题讨论】:

  • 您用于运行 terraform 的用户无权创建与显示的策略无关的密钥。您使用的是什么用户/角色,他们有什么权限?
  • 我用我拥有的权限更新了问题
  • 我认为您需要资源 * 而不是特定的 CreateKey。
  • 抱歉,还在学习 AWS。你能详细说明你的评论吗?

标签: amazon-web-services terraform


【解决方案1】:

正如其他人所建议的,您用于运行 Terraform 的凭据似乎没有正确的权限。

CreateKey 明确仅适用于“*”资源,因此将策略更改为:

data "aws_iam_policy_document" "key_Access" {
  statement {
    actions = [
      "kms:CreateAlias",      
      "kms:CreateGrant",
      "kms:DeleteAlias",
      "kms:DisableKey",
      "kms:EnableKey",
      "kms:PutKeyPolicy",
      "kms:RevokeGrant",
      "kms:ScheduleKeyDeletion",
      "kms:TagResource",
      "kms:UntagResource",
      "kms:UpdateAlias",
      "kms:UpdateKeyDescription"
    ]

    resources = [
      "arn:aws:kms:${local.aws_region}:${var.aws_account_id}:key/*",
      "arn:aws:kms:${local.aws_region}:${var.aws_account_id}:alias/*"
    ]
  }

  statement {
    actions = ["kms:CreateKey"]
    resources = ["*"]
  }
}

话虽如此,也许不要制定自己的政策。只需将现有策略 arn:aws:iam::aws:policy/AWSKeyManagementServicePowerUser 分配给该角色。这提供了以下权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateAlias",
                "kms:CreateKey",
                "kms:DeleteAlias",
                "kms:Describe*",
                "kms:GenerateRandom",
                "kms:Get*",
                "kms:List*",
                "kms:TagResource",
                "kms:UntagResource",
                "iam:ListGroups",
                "iam:ListRoles",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2017-01-19
    • 1970-01-01
    • 2014-01-14
    • 2021-10-29
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多