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

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

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

virtual.buckets.iamMemberBinding 資源是虛擬資源,代表身分與存取權管理 (IAM) 政策繫結。完整類型為 gcp-types/storage-v1:virtual.buckets.iamMemberBinding

virtual.buckets.iamMemberBinding 具有 Deployment Manager 後端的建立、讀取、更新和刪除 (CRUD) 作業的自訂實作項目。這個方法會呼叫與 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,請參閱轉換範例。您也可以查看轉換後範本的使用範例