策略包含具有一个或多个无效主体的语句-AWS Cloudformation错误

时间:2019-12-19 02:39:58

标签: aws-lambda amazon-cloudformation aws-serverless aws-kms

我有一个如下所示的CF模板

GTMPlatformKMSKey

创建资源CREATE_FAILED时出现错误。它失败,并显示Policy contains a statement with one or more invalid principals. (Service: AWSKMS; Status Code: 400; Error Code: MalformedPolicyDocumentException; Request ID: 5673456f-b458-45c6-854b-9ed63c737772) 和错误消息

Allow use of the key

如果我从Allow attachment of persistent resources删除Sid GTMPlatformKMSKeySystemUserAccount,则模板运行正常。不知道我在这里想念的是什么。任何帮助都非常感激

P.S。 -环境中已经存在资源DeploymentRoleNametry: os.remove(r'C:\test') except WindowsError as e: if e.winerror == 5: # maybe we tried to remove a directory, so os.rmdir(r'C:\test') else: raise # we just re-raise whatever the exception was.

编辑-按照建议,将模板缩小为仅包含失败的资源

4 个答案:

答案 0 :(得分:2)

就我而言,我试图部署一个 CdkPipeline 堆栈,该堆栈具有多个帐户的阶段。我需要在部署我的堆栈的每个帐户和区域上运行 cdk bootstrap ${account}/${region}

cdk bootstrap 123456789012/us-west-2
cdk bootstrap 123456789012/us-east-1
cdk bootstrap 987654321098/us-east-1

我还必须以 per this link 的身份授予第二个帐户权限。

  1. 转到 IAM 中的角色
  2. 选择信任关系选项卡...
  3. 然后编辑信任关系以包含 codepipeline
  4. 同时添加其他账户的root的arn
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codepipeline.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:root",
          "arn:aws:iam::987654321098:root"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

答案 1 :(得分:0)

您需要确认您要为其分配资源的所有主要信息在您的AWS账户中均可用,或者已被正确引用,或者它们在模板中具有正确的拼写。这些就是我所经历的。

答案 2 :(得分:0)

请检查云形成模板中提到的KMS用户。这可能是原因之一。

答案 3 :(得分:0)

您可以使用 cdk bootstrap 调用中的标志从 cli 设置信任关系:

npx cdk bootstrap \
--profile PROFILE2 \
--trust ACCOUNT1 \
--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess aws://ACCOUNT2/us-east-1

Reference article