스토리지 버킷 액세스 권한 부여 및 획득

이 페이지에서는 적절한 권한을 가진 사용자가 Google Distributed Cloud (GDC) 오프라인 프로젝트 내의 스토리지 버킷에 액세스할 수 있도록 액세스 권한을 관리하는 방법을 안내합니다. 여기에서는 역할 바인딩 및 사전 정의된 역할을 사용하여 사용자 및 서비스 계정 액세스 권한을 획득하고 부여하기 위한 기본 요건과 단계를 설명합니다. 이 정보를 통해 스토리지 리소스에 대한 액세스를 효과적으로 제어하고 보안과 운영 효율성을 모두 유지할 수 있습니다.

이 페이지는 GDC 오프라인 환경에서 스토리지 버킷의 액세스 설정을 관리하는 인프라 운영자 그룹의 IT 관리자 또는 애플리케이션 운영자 그룹의 개발자와 같은 사용자를 대상으로 합니다. 자세한 내용은 GDC 오프라인 문서 대상을 참고하세요.

시작하기 전에

프로젝트 네임스페이스는 관리 API 서버에서 버킷 리소스를 관리합니다. 버킷 및 객체로 작업하려면 프로젝트가 있어야 합니다.

버킷 액세스 권한 부여

관리 API 서버에서 사전 정의된 역할로 RoleBinding을 만들어 적용하면 다른 사용자나 서비스 계정에 버킷 액세스 권한을 제공할 수 있습니다.

사전 정의된 역할

  • project-bucket-object-viewer: 사용자가 프로젝트의 모든 버킷을 나열하고, 해당 버킷의 객체를 나열하고, 객체와 객체 메타데이터를 읽을 수 있습니다. 객체에 대한 쓰기 작업은 허용되지 않습니다. 예: 업로드, 덮어쓰기, 삭제 조직 및 해당 프로젝트 내의 이중 영역 버킷에 대한 읽기 전용 액세스 권한과 해당 버킷의 객체에 대한 읽기 전용 액세스 권한이 있습니다.

  • project-bucket-object-admin: 사용자가 프로젝트의 모든 버킷을 나열하고 객체에 대한 쓰기 및 읽기 작업을 실행할 수 있습니다. 예: 업로드, 덮어쓰기, 삭제 조직 및 해당 프로젝트 내의 이중 영역 버킷에 대한 읽기 전용 액세스 권한과 해당 버킷의 객체에 대한 읽기-쓰기 액세스 권한이 있습니다.

  • project-bucket-admin: 사용자가 지정된 네임스페이스의 모든 버킷과 해당 버킷의 모든 객체를 관리할 수 있습니다. 조직 및 해당 프로젝트 내의 이중 영역 버킷에 대한 읽기 전용 액세스 권한과 해당 버킷의 객체에 대한 읽기-쓰기 액세스 권한이 있습니다.

이전 역할에 부여된 권한의 전체 목록을 보려면 사전 설정된 역할 권한 섹션을 참고하세요.

프로젝트 IAM 관리자에게 RoleBinding을 만들 권한을 부여해 달라고 요청하세요. 다음은 사용자 및 서비스 계정에 대한 액세스 권한을 부여하기 위해 RoleBinding을 만드는 예시입니다.

  1. 시스템에 rolebinding-object-admin-all-buckets.yaml과 같은 YAML 파일을 만듭니다.

    # Example file name:
    # rolebinding-object-admin-all-buckets.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: NAMESPACE_NAME
      name: readwrite-all-buckets
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: NAMESPACE_NAME
      name: SA_NAME
    - kind: User
      namespace: NAMESPACE_NAME
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
      # Could be bob or bob@example.com based on your organization settings.
    
  2. YAML 파일을 적용합니다.

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

버킷 액세스 사용자 인증 정보 가져오기

버킷에 대한 액세스 권한을 부여하면 보안 비밀에 액세스 사용자 인증 정보가 생성됩니다.

보안 비밀 이름의 형식은 object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH입니다.

  • STORAGE_CLASS의 값은 다음과 같습니다.
    • Standard 스토리지 클래스의 std
  • SUBJECT_TYPE의 값은 다음과 같습니다.
    • user(사용자)
    • 서비스 계정의 sa
  • SUBJECT_HASH은 주제 이름의 base32 인코딩 SHA256 해시입니다.

예를 들어 사용자 bob@foo.com에게 다음과 같은 보안 비밀이 있습니다.

object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama

사용자 액세스 사용자 인증 정보 가져오기

사용자 주체의 경우 Secret은 관리 API 서버의 object-storage-access-keys 네임스페이스에 있습니다.

  1. 다음 명령어를 실행하여 object-storage-access-keys 네임스페이스에서 볼 수 있는 권한이 있는 Secret 리소스를 나열합니다.

    kubectl auth can-i --list --namespace object-storage-access-keys
    
    • 참고: 모든 Secret 리소스를 볼 권한이 있거나 다른 사용자를 가장할 권한이 있는 관리자는 다음 명령어 중 하나를 실행하여 지정된 사용자의 Secret 이름을 찾을 수 있습니다.

      지정된 사용자에 속하는 모든 보안 비밀을 나열합니다.

      export USER_NAME=bob@example.com
      kubectl get secrets --namespace object-storage-access-keys -o json | jq  -r --arg USER_NAME "${USER_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
      

      사용자를 가장하여 사용자가 볼 수 있는 보안 비밀을 확인합니다.

      export USER_NAME=bob@example.com
      kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
      

    이 네임스페이스에서 보안 비밀을 볼 수 있다면 다음과 비슷한 보안 비밀 이름이 포함된 출력이 표시됩니다.

    object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
    
  2. 해당 보안 비밀의 콘텐츠를 가져옵니다.

    kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
    

    다음과 비슷한 출력이 표시됩니다.

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. 액세스 키 ID와 보안 비밀을 디코딩합니다.

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

    다음과 비슷한 출력이 표시됩니다.

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. 결과 정보를 사용하여 gdcloud CLI 구성 섹션을 따릅니다.

서비스 계정 액세스 권한 획득

서비스 계정 (SA) 주체의 경우 보안 비밀이 서비스 계정과 동일한 네임스페이스에 생성됩니다.

다음 명령어를 실행하여 네임스페이스에서 보안 비밀 리소스를 가져오고 나열할 수 있는지 확인합니다. 그렇지 않은 경우 관리자에게 문의하세요.

export SA_NAMESPACE=NAMESPACE_NAME
kubectl auth can-i --list --namespace $SA_NAMESPACE

보안 비밀 이름을 찾으려면 다음을 실행합니다.

export SA_NAME=SA_NAME
kubectl get secrets --namespace $SA_NAMESPACE  -o json | jq  -r --arg USER_NAME "${SA_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'

다음과 비슷한 출력이 표시됩니다.

object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq

포드에서 보안 비밀을 환경 변수 또는 파일로 참조할 수 있습니다.

사전 설정된 역할 권한

사전 정의된 역할은 이중 영역 버킷에 대한 관리 및 운영 액세스를 위해 전역 API 서버에서도 사용할 수 있습니다.

project-bucket-object-viewer 권한

이 역할은 버킷에서 객체와 객체의 메타데이터를 가져오고 나열할 수 있는 권한을 부여합니다.

프로젝트-버킷-객체-뷰어 동사가 부여하는 모든 객체 스토리지 권한 목록은 다음과 같습니다.

  • 버킷 API 권한:

    1. get
    2. list
    3. watch
  • S3 객체 스토리지 권한:

    1. GetBucketVersioning
    2. GetObject
    3. GetObjectAcl
    4. GetObjectLegalHold
    5. GetObjectRetention
    6. GetObjectTagging
    7. GetObjectVersion
    8. GetObjectVersionTagging
    9. ListBucket
    10. ListBucketVersions
    11. ListBucketMultipartUploads
    12. ListMultipartUploadParts

project-bucket-object-admin 권한

이 역할은 버킷에 객체, 객체 버전, 태그를 배치하고 삭제할 수 있는 권한을 부여합니다. 또한 project-bucket-object-viewer의 모든 권한도 부여합니다.

역할이 부여하는 모든 추가 객체 스토리지 권한 목록은 다음과 같습니다.

  • S3 객체 스토리지 권한:

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. RestoreObject

project-bucket-admin 권한

이 역할은 프로젝트 네임스페이스에서 버킷 리소스를 생성, 업데이트 또는 삭제할 권한을 부여합니다. 또한 project-bucket-object-admin의 모든 권한도 부여합니다.

역할이 부여하는 추가 권한 목록은 다음과 같습니다.

  • 버킷 API 권한:

    1. 만들기
    2. 업데이트
    3. 삭제