1

我正在尝试通过部署管理器将自定义 IAM 角色分配给 GCP 项目中的用户(谷歌帐户),但收到 403 错误代码。我遵循了 Google Cloud Platform 存储库中提供的示例: https ://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/master/community/cloud-foundation/templates/iam_member

基本上我创建了一个包含以下内容的配置 YAML 文件:

  - path: ../iam_member.py
    name: iam_member.py

resources:
  - name: iam-member-oval-unity-test-0
    type: iam_member.py
    properties:
      projectId: oval-unity-88908
      type: string
      roles:
        - role: roles/GARawDataViewer
          members:
            - user:<USER_EMAIL>

GARawDataViewer 是在项目oval-unity-88908 中创建的自定义角色,是我尝试为其分配自定义IAM 角色的用户电子邮件地址的值。

最后,我部署运行以下命令:

gcloud deployment-manager deployments create deployment-oval-unity-member-test --config examples/oval_unity_member.yaml

运行 gcloud 部署管理器后,我收到以下错误消息:

- code: CONDITION_NOT_MET
  location: /deployments/deployment-oval-unity-member-test/resources/get-iam-policy-iam-member-oval-unity-test-0-0-0->$.properties->$.policy
  message: |-
    InputMapping for field [policy] for method [setIamPolicy] could not be set from input, mapping was: [$.gcpIamMemberBinding($.intent, $.inputs.policy.response, $.resource.properties)], and evaluation context was:
    {
      "deployment" : {
        "id" : 4858392305054927640,
        "name" : "deployment-oval-unity-member-test"
      },
      "extensions" : {
        "EnableAdditionalJsonPathFunctions" : true,
        "EnableGoogleTypeProviderFunctionsExperiment" : true
      },
      "inputs" : {
        "policy" : {
          "error" : {
            "code" : "403",
            "message" : "{\"code\":403,\"message\":\"The caller does not have permission\",\"status\":\"PERMISSION_DENIED\",\"statusMessage\":\"Forbidden\",\"requestPath\":\"https://cloudresourcemanager.googleapis.com/v1/projects/oval-unity-88908:getIamPolicy\",\"httpMethod\":\"POST\"}"
          }
        }
      },
      "intent" : "CREATE",
      "matches" : [ ],
      "project" : "dm-creation-project-0",
      "requestId" : "f3c7f0c4-1ff7-3e26-a060-b0adc068866d",
      "resource" : {
        "name" : "get-iam-policy-iam-member-oval-unity-test-0-0-0",
        "previous" : { },
        "properties" : {
          "member" : "<USER_EMAIL_ADDRESS!>",
          "resource" : "oval-unity-88908",
          "role" : "roles/GARawDataViewer"
        },
        "self" : { }
      }
    }
    Error was:
    Parameter for gcpIamMemberBinding at position 1 is not of type map, value was [null]

有趣的是,我已经能够成功部署分配预定义角色,如“编辑器”:角色/编辑器,但使用自定义角色失败。

我什至尝试使用自定义角色的完整路径:projects/oval-unity-88908/roles/GARawDataViewer,但仍然显示相同的错误。

你知道我该如何解决这个问题吗?提前致谢!

4

1 回答 1

0

问题可能是,您没有为部署管理器使用的服务帐户授予处理 IAM 事物的适当权限。如此处所述您可以通过完成以下步骤来解决此问题:

  1. 转到项目的 GCP 控制台中的 IAM 页面。
  2. 如果出现提示,请从列表中选择您的项目。
  3. 查找具有以下格式的电子邮件地址的 Google API 服务帐户:[PROJECT_NUMBER]@cloudservices.gserviceaccount.com.
  4. 授予 API 服务帐户角色/所有者角色

如果您需要进一步的帮助,请告诉我!

于 2019-05-28T13:02:31.210 回答