Google Deployment Manager在项目中分配IAM策略

San*_*hra 1 google-deployment-manager

我正在使用IAM策略更新项目。在GCP Deployment Manager的模板中,它们使用的是python Jinja文件,但是我想添加IAM策略(为用户/服务帐户分配一些角色)。有人可以修改Jinja /配置文件并指出如何修改吗?

https://github.com/GoogleCloudPlatform/deploymentmanager-samples/blob/master/examples/v2/project_creation/config.yaml

https://github.com/GoogleCloudPlatform/deploymentmanager-samples/blob/master/examples/v2/project_creation/project.py

小智 8

请按照Adam Ocsvari的示例分配 IAM 策略。旧方法是获取所有 IAM 绑定策略,添加一些角色 -> 成员绑定,然后设置所有绑定。他提供了一种使用'type': 'gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding'. 我使用他提供的链接之一来查找分配 IAM 策略绑定的 Python 模板。那里的代码有一个嵌套循环。我只需要创建一个服务帐户并分配 1 个绑定:

服务帐户.py

def GenerateConfig(context):
    project_id = context.env['project']
    service_account = context.properties['service-account']

    resources = [
        {
            'name': service_account,
            'type': 'iam.v1.serviceAccount',
            'properties': {
                'accountId': service_account,
                'displayName': service_account,
                'projectId': project_id
            }
        },
        {
            'name': 'bind-iam-policy',
            'type': 'gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding',
            'properties': {
                'resource': project_id,
                'role': 'roles/dataflow.admin',
                'member': 'serviceAccount:$(ref.' + service_account + '.email)'
            },
            'metadata': {
                'dependsOn': [service_account]
            }
        }
    ]

    return {'resources': resources}
Run Code Online (Sandbox Code Playgroud)

服务帐户.yaml

imports:
  - path: service-accounts.py

resources:
  - name: service-accounts
    type: service-accounts.py
    properties:
      project: [*YOUR_PROJECT_ID*]
      service-account: k8s-service-account
Run Code Online (Sandbox Code Playgroud)

此示例创建一个 k8s-service-account 并为其分配 Dataflow 管理员角色。在开始之前,请确保您授予 Deployment Manager 设置 IAM 策略的权限


小智 6

这是一个jinja片段,它创建一个新的服务帐户并将其作为所有者添加到现有项目中。这要求为Deployment Manager分配适当的访问权限,以管理项目的IAM。

{% set deployment = env['deployment'] %}
{% set project = env['project'] %}

resources:
- name: {{ deployment }}-svc-account
  type: iam.v1.serviceAccount
  properties:
    accountId: {{ deployment }}-svc-account
    displayName: {{ deployment }}-svc-account

- name: get-iam-policy
  action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.getIamPolicy
  properties:
    resource: {{ project }}
  metadata:
    runtimePolicy:
    - 'UPDATE_ALWAYS'

- name: patch-iam-policy
  action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.setIamPolicy
  properties:
    resource: {{ project }}
    policy: $(ref.get-iam-policy)
    gcpIamPolicyPatch:
      add:
      - role: roles/owner
        members:
        - serviceAccount:$(ref.{{ deployment }}-svc-account.email)
Run Code Online (Sandbox Code Playgroud)