setIamPolicy 작업을 지원되는 리소스 유형으로 바꾸기

작업 기능은 Deployment Manager가 호출할 수 있는 API 메서드의 범위를 확장하는 알파 기능입니다. 이 기능은 지원되지 않으므로 지원되는 대안으로 작업의 기존 사용을 마이그레이션하는 것이 좋습니다. 일반적으로 사용되는 작업 storage.buckets.setIamPolicy는 기존 Deployment Manager 리소스 유형인 virtual.buckets.iamMemberBinding에 해당하며 이 리소스 유형을 사용하여 작업을 대체할 수 있습니다.

storage.buckets.setIamPolicy에서 virtual.buckets.iamMemberBinding으로 배포 마이그레이션

virtual.buckets.iamMemberBinding 리소스는 Identity and Access Management(IAM) 정책 binding을 나타내는 가상 리소스입니다. 전체 유형은 gcp-types/storage-v1:virtual.buckets.iamMemberBinding입니다.

virtual.buckets.iamMemberBinding에는 Deployment Manager 백엔드에서 생성, 읽기, 업데이트, 삭제(CRUD) 작업의 커스텀 구현이 있습니다. 이는 작업 storage.buckets.setIamPolicy에서 호출한 메서드와 유사한 메서드를 호출하지만 작업 대신 일반 리소스로 모델링되며 일반 리소스 유형과 동일한 수명 주기를 따릅니다.

배포를 마이그레이션하려면 모든 배포 구성 파일에서 storage.buckets.setIamPolicy 작업의 사용을 virtual.buckets.iamMemberBinding 리소스로 대체합니다. binding이 여러 개 있는 경우 binding마다 동일한 로직을 구현하기 위해 여러 리소스가 필요할 수 있습니다. 가상 유형은 리소스의 기존 binding을 대체하지 않지만 새 binding을 패치합니다.

수동 마이그레이션 사용 예시

수동으로 마이그레이션을 완료하려면 다음 사용 예시를 참조하세요. 여러 IAM binding 적용과 같은 특정 상황에서는 경합 상태와 같은 상황을 방지하기 위해 metadata.dependsOn 또는 다른 리소스에 대한 참조를 iamMemberBinding 리소스에 추가해야 할 수 있습니다.

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,
         }
}

GitHub의 cloud-foundation-toolkit 저장소에서 gcs-bucket.py 템플릿과 관련된 추가 샘플을 찾을 수 있습니다. setIamPolicy 작업 사용에서 iamMemberBinding 가상 리소스 사용으로 gcs-bucket.py 템플릿을 변환하는 과정에 대한 자세한 내용은 변환 예시를 참조하세요. 변환된 템플릿의 사용 예시도 찾을 수 있습니다.