將 setIamPolicy 動作替換為支援的資源類型

動作功能是 Alpha 版功能,可擴展 Deployment Manager 可呼叫的 API 方法範圍。由於這項功能不受支援,建議您將現有的 Actions 用法遷移至支援的替代方案。常用的 Action storage.buckets.setIamPolicy 對應至現有的 Deployment Manager 資源類型 virtual.buckets.iamMemberBinding,可用於取代該類型。

將部署作業從 storage.buckets.setIamPolicy 遷移至 virtual.buckets.iamMemberBinding

virtual.buckets.iamMemberBinding 資源是虛擬資源,代表 Identity and Access Management (IAM) 政策繫結。完整類型為 gcp-types/storage-v1:virtual.buckets.iamMemberBinding

virtual.buckets.iamMemberBinding 具有建立、讀取、更新和刪除 (CRUD) 作業的自訂實作項目,來自 Deployment Manager 後端。這個方法會呼叫與 Action storage.buckets.setIamPolicy 呼叫的方法類似的方法,但會以一般資源而非 Action 建模,並遵循與一般資源類型相同的生命週期。

如要遷移部署作業,請在所有部署作業設定檔中,將 Action storage.buckets.setIamPolicy 的用法替換為資源 virtual.buckets.iamMemberBinding。如果您有多個繫結,可能需要多個資源,才能在這些繫結中實作相同的邏輯。虛擬型別不會取代資源上的任何現有繫結,但會修補新的繫結。

手動遷移的使用範例

如要手動完成遷移作業,請參閱下列使用範例。在某些情況下 (例如套用多個 IAM 繫結),您可能需要在 iamMemberBinding 資源中新增 metadata.dependsOn 或其他資源的參照,以避免競爭狀況等問題。

YAML + Jinja

以下範例說明如何在 YAML 設定檔中使用 setIamPolicy 動作。系統不支援這種做法,請改用 iamMemberBinding 虛擬資源:

- name: patch-iam-policy
  action: gcp-types/storage-v1:storage.buckets.setIamPolicy
  properties:
    bucket:
    policy: # existing policy, e.g. from a getIamPolicyAction
    gcpIamPolicyPatch:
      add:

下列範例顯示 YAML 和 Jinja 範本中 iamMemberBinding 虛擬資源的建議用法:

{% set BUCKETNAME = "bucket-" + env["deployment"] %}

resources:
- type: gcp-types/storage-v1:buckets
  name: {{ BUCKETNAME }}
  properties:
  location: US
    storageClass: STANDARD
- type: gcp-types/storage-v1:virtual.buckets.iamMemberBinding
  name: test-bucket-iam
  properties:
    bucket: $(ref.{{ BUCKETNAME }}.name)
    member: projectEditor:{{ env["project"] }}
    role: roles/storage.admin

Python

以下範例說明如何在 Python 範本中使用 setIamPolicy 動作。這種做法不受支援,請改用 iamMemberBinding 虛擬資源:

resources.append({
        'name': 'add-iam-policy',
        'action': 'gcp-types/storage-v1:storage.buckets.setIamPolicy',
        'properties': {
            'bucket': gcs_bucket,
            'userProject': project,
            'policy': '$(ref.get-iam-policy)',
            'gcpIamPolicyPatch': {
                'add': [{
                    'roles':
                        'roles/storage.objectViewer',
                    'members': [
                        'serviceAccount:$(ref.%s.serviceAccount)' % tpu_name
                    ]
                }]
            }
        }
    })

下列範例顯示在 Python 範本中,建議如何使用 iamMemberBinding 虛擬資源:

iam_policy_resource = {
    'name': policy_name,
    'type': 'gcp-types/storage-v1:virtual.buckets.iamMemberBinding',
    'properties':
        {
           'bucket': '$(ref.{}.name)'.format(context.env['name']),
           'role': role['role'],
           'member': member,
         }
}

如要查看與 gcs-bucket.py 範本相關的其他範例,請前往 GitHub 的 cloud-foundation-toolkit 存放區。如要詳細瞭解如何將 gcs-bucket.py 範本從使用動作 setIamPolicy 轉換為使用虛擬資源 iamMemberBinding,請參閱轉換範例。您也可以查看轉換後範本的使用範例