이 페이지에서는 Google Distributed Cloud (GDC) 에어 갭 어플라이언스 프로젝트 내에서 스토리지 버킷에 대한 액세스를 관리하여 적절한 사용자에게 적절한 권한을 부여하는 방법을 안내합니다. 여기에서는 역할 바인딩 및 사전 정의된 역할을 사용하여 사용자 및 서비스 계정 액세스 권한을 획득하고 부여하기 위한 필수 요건과 단계를 설명합니다. 이 정보를 통해 스토리지 리소스에 대한 액세스를 효과적으로 제어하고 보안과 운영 효율성을 모두 유지할 수 있습니다.
이 페이지는 GDC 오프라인 환경에서 스토리지 버킷의 액세스 설정을 관리하는 인프라 운영자 그룹의 IT 관리자 또는 애플리케이션 운영자 그룹의 개발자와 같은 사용자를 대상으로 합니다.
시작하기 전에
프로젝트 네임스페이스는 관리 API 서버에서 버킷 리소스를 관리합니다. 버킷 및 객체를 사용하려면 프로젝트가 있어야 합니다.
버킷 액세스 권한 부여
사전 정의된 역할을 사용하여 RoleBinding을 만들고 적용하면 다른 사용자나 서비스 계정에 버킷 액세스 권한을 부여할 수 있습니다.
사전 정의된 역할
project-bucket-object-viewer: 이 역할을 통해 사용자는 프로젝트의 모든 버킷을 나열하고, 해당 버킷의 객체를 나열하고, 객체 및 객체 메타데이터를 읽을 수 있습니다. 이 역할로는 객체에 대한 쓰기 작업(예: 업로드, 덮어쓰기, 삭제)을 할 수 없습니다.
project-bucket-object-admin: 이 역할을 사용하면 사용자가 프로젝트의 모든 버킷을 나열하고 객체에 대한 쓰기 및 읽기 작업을 실행할 수 있습니다(예: 업로드, 덮어쓰기, 삭제).
project-bucket-admin: 이 역할을 통해 사용자는 지정된 네임스페이스의 모든 버킷과 해당 버킷의 모든 객체를 관리할 수 있습니다.
이러한 역할에 부여된 권한의 전체 목록을 보려면 사전 설정된 역할 권한 섹션을 참고하세요.
프로젝트 역할 바인딩을 만드는 데 필요한 권한을 얻으려면 프로젝트 IAM 관리자에게 프로젝트 IAM 관리자(project-iam-admin
) 역할을 부여해 달라고 요청하세요.
다음은 사용자 및 서비스 계정에 대한 액세스 권한을 부여하기 위해 RoleBinding
를 만드는 예시입니다.
시스템에
rolebinding-object-admin-all-buckets.yaml
과 같은 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 # Could be bob or bob@example.com based on your organization settings. apiGroup: rbac.authorization.k8s.io ```
YAML 파일을 적용합니다.
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
버킷 액세스 사용자 인증 정보 가져오기
버킷에 대한 액세스 권한을 부여하면 액세스 사용자 인증 정보가 보안 비밀에 생성됩니다.
보안 비밀 이름의 형식은 object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH
입니다.
SUBJECT_TYPE
값은 다음과 같습니다.user
: 사용자입니다.sa
:ServiceAccount
SUBJECT_HASH
은 주제 이름의 base32 인코딩 SHA256 해시입니다.
예를 들어 사용자 bob@foo.com
에는 다음과 같은 보안 비밀이 있습니다.
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
사용자 보안 비밀번호에 액세스
사용자 주체의 경우 보안 비밀은 관리 API 서버의 object-storage-access-keys
네임스페이스에 있습니다.
보안 비밀 이름을 찾습니다.
kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-std
다음과 비슷한 출력이 표시됩니다.
secrets [] [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]
버킷에 액세스하려면 해당 보안 비밀의 콘텐츠를 가져옵니다.
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
다음과 비슷한 출력이 표시됩니다.
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
액세스 키 ID와 보안 비밀을 디코딩합니다.
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
다음과 비슷한 출력이 표시됩니다.
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
결과 정보를 사용하여 s3cmd 구성 섹션을 따릅니다.
서비스 계정 보안 비밀 액세스
서비스 계정 (SA) 주체의 경우 보안 비밀이 서비스 계정과 동일한 네임스페이스에 생성됩니다. 이름을 찾으려면 다음을 실행합니다.
kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
'{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_NAME")].metadata.name}'
다음과 비슷한 출력이 표시됩니다.
object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq
포드에서 보안 비밀을 환경 변수 (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) 또는 파일 (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod)로 참조할 수 있습니다.
사전 설정된 역할 권한
객체 스토리지를 사용할 때는 다음 역할을 요청해야 할 수 있습니다.
project-bucket-object-viewer 권한
이 역할은 버킷에서 객체와 객체의 메타데이터를 가져오고 나열할 수 있는 권한을 부여합니다.
project-bucket-object-viewer
역할에는 다음과 같은 권한이 있습니다.
버킷 API 권한:
- 가져오기
- 목록
- Watch
S3 객체 스토리지 권한:
GetObject
GetObjectAcl
GetObjectVersion
ListBucket
ListBucketVersions
ListBucketMultipartUploads
ListMultipartUploadParts
project-bucket-object-admin 권한
이 역할은 버킷에 객체, 객체 버전, 태그를 배치하고 삭제할 수 있는 권한을 부여합니다. 또한 project-bucket-object-viewer
의 모든 권한도 부여합니다.
project-bucket-object-admin
역할에는 다음과 같은 객체 스토리지 권한이 있습니다.
S3 객체 스토리지 권한:
AbortMultipartUpload
DeleteObject
PutObject
project-bucket-admin 권한
이 역할은 프로젝트 네임스페이스에서 Bucket
리소스를 생성, 업데이트 또는 삭제할 권한을 부여합니다. 또한 project-bucket-object-admin
의 모든 권한도 부여합니다.
project-bucket-object-admin
역할에는 다음과 같은 권한이 있습니다.
버킷 API 권한:
- 만들기
- 업데이트
- 삭제