1

我正在使用命令:

put-key-policy --key-id <keyid> --policy-name <default> --policy <value>

我得到错误

MalformedPolicyDocumentException

我认为是因为我不了解 value–policy参数的含义。我可以参考任何链接吗?

4

1 回答 1

4

我自己也遇到过同样的事情,我希望这会有所帮助。这是在 FreeBSD 服务器上完成的,因此 Windows 用户必须进行适当的调整。如果你运行类似的东西:

$ aws kms put-key-policy --generate-cli-skeleton 

您将获得 cli 正在寻找的输入内容的骨架:

{
   "KeyId": "", 
   "PolicyName": "", 
   "Policy": "", 
   "BypassPolicyLockoutSafetyCheck": true
}

这意味着允许的输入是一段 JSON,最多有 4 个可能的参数。在这种情况下,我们希望创建一个新策略,因此我们真正需要的唯一一个是"Policy". 需要的是字符串形式的 JSON 策略。使用以下示例:

{
 "Version" : "2012-10-17",
 "Id" : "key-consolepolicy-3"
}

首先转义双引号,给出:

{
 \"Version\" : \"2012-10-17\",
 \"Id\" : \"key-consolepolicy-3\"
}

然后用字符替换换行符\n,给出:

{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"key-consolepolicy-3\"\n }

然后我们把它放在双引号中:

"{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"key-consolepolicy-3\"\n }"

最后我们的文件如下所示:

{
  "Policy" : "{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"key-consolepolicy-3\"\n }"
}

如果您已经有一个带有您想要使用的策略的密钥,那么您可以简单地检索它:

$ aws kms get-key-policy --policy-name default --key-id XXXXXXXXX > policy

无论您以哪种方式创建它,您都可以使用文件中的策略来更新新密钥的策略:

$ aws kms put-key-policy --key-id YYYYYYYY --policy-name default --cli-input-json file://policy

在 Windows 上,“ file://policy”将类似于:“ file://C:\path\to\policyfile.json

如果您要使用--policy命令行参数而不是文件中的策略,--policy则还要寻找字符串形式的 JSON 策略,因此您需要

$ aws kms put-key-policy --key-id YYYYYYYY --policy-name default --policy "{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"key-consolepolicy-3\"\n }"
于 2018-07-06T14:56:49.390 回答