このページでは、Google Distributed Cloud(GDC)のエアギャップ プロジェクト内のストレージ バケットへのアクセスを管理して、適切なユーザーに適切な権限を付与する方法について説明します。ロール バインディングと事前定義ロールを使用してユーザーとサービス アカウントのアクセス権を取得して付与するための前提条件と手順について説明します。この情報を使用すると、ストレージ リソースへのアクセスを効果的に制御し、セキュリティと運用効率の両方を維持できます。
このページは、インフラストラクチャ オペレーター グループの IT 管理者や、GDC のエアギャップ環境でストレージ バケットのアクセス設定を管理するアプリケーション オペレーター グループの開発者など、さまざまなユーザーを対象としています。詳細については、GDC エアギャップの対象読者に関するドキュメントをご覧ください。
始める前に
プロジェクトの Namespace は、Management API サーバーのバケット リソースを管理します。バケットとオブジェクトを操作するには、プロジェクトが必要です。
バケットへのアクセス権を付与する
Management API サーバーで事前定義されたロールを使用して RoleBinding を作成して適用することで、他のユーザーまたはサービス アカウントにバケット アクセス権を付与できます。
事前定義ロール
- project-bucket-object-viewer: これにより、ユーザーはプロジェクト内のすべてのバケットの一覧表示、それらのバケット内のオブジェクトの一覧表示、オブジェクトとオブジェクトのメタデータの読み取りを行うことができます。オブジェクトに対する書き込みオペレーションは許可されません。たとえば、アップロード、上書き、削除などです。組織とそのプロジェクト内のデュアルゾーン バケットに対する読み取り専用アクセス権と、それらのバケット内のオブジェクトに対する読み取り専用アクセス権を持ちます。 
- project-bucket-object-admin: これにより、ユーザーはプロジェクト内のすべてのバケットを一覧表示し、オブジェクトに対する書き込みオペレーションと読み取りオペレーションを実行できます。たとえば、アップロード、上書き、削除などです。組織とそのプロジェクト内のデュアルゾーン バケットに対する読み取り専用権限と、それらのバケット内のオブジェクトに対する読み取り / 書き込み権限を持ちます。 
- project-bucket-admin: これにより、ユーザーは指定された Namespace 内のすべてのバケットと、それらのバケット内のすべてのオブジェクトを管理できます。組織とそのプロジェクト内のデュアルゾーン バケットに対する読み取り専用権限と、それらのバケット内のオブジェクトに対する読み取り / 書き込み権限を持ちます。 
上記のロールに付与される権限の一覧については、事前設定されたロールの権限セクションをご覧ください。
RoleBinding を作成する権限を付与するよう、プロジェクト IAM 管理者に依頼します。次の例は、ユーザーとサービス アカウントにアクセス権を付与する RoleBinding を作成する例です。
- システムに YAML ファイル( - rolebinding-object-admin-all-buckets.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.
- YAML ファイルを適用します。 - kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
バケットのアクセス認証情報を取得する
バケットへのアクセス権を付与すると、Secret にアクセス認証情報が作成されます。
シークレット名の形式は object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH です。
- STORAGE_CLASSの値は次のとおりです。- Standardストレージ クラスの- std。
 
- SUBJECT_TYPEの値は次のとおりです。- ユーザーの user。
- ServiceAccount の sa。
 
- ユーザーの 
- SUBJECT_HASHは、サブジェクト名の base32 でエンコードされた SHA256 ハッシュです。
たとえば、ユーザー bob@foo.com に次の 2 つのシークレットがあるとします。
- object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
ユーザー アクセスを取得する
ユーザー サブジェクトの場合、Secret は Management API サーバーの object-storage-access-keys Namespace にあります。
- 次のコマンドを実行して、シークレット名を確認します。 - kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-- 次のような出力が表示されます。 - secrets [] [object-storage-key-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]
- 対応するシークレットの内容を取得して、 - Standardストレージ クラスのバケットにアクセスします。- 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
- 結果の情報を基に、gdcloud CLI を構成するのセクションに沿って操作します。 
サービス アカウントのアクセス権を取得する
サービス アカウント(SA)サブジェクトの場合は、ユーザー クラスタからシークレット名を見つけます。
- 標準ストレージ クラスの場合は、次のコマンドを実行してシークレット名を取得します。 - kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
- 次に、リストに表示されたシークレット名を手動で確認するか、 - grepを使用して- object-storage-key-(std|nl)を見つけます。後者のオプションの場合は、次のコマンドを実行します。- kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o=jsonpath='{.secrets}{"\n"}' | grep object-storage-key-(std|nl)
プリセット ロールの権限
事前定義ロールは、デュアルゾーン バケットへの管理アクセスと運用アクセス用にグローバル API サーバーで使用できます。これらのロールは、RoleBinding リソースまたは ClusterRoleBinding リソースではなく IAMRoleBinding リソースが使用されている場合にのみ、ゾーンバケットへのアクセス権も付与します。ロール バインディングの詳細については、アクセス権の付与と取り消しをご覧ください。
project-bucket-object-viewer 権限
このロールは、バケット内のオブジェクトとオブジェクトのメタデータを取得して一覧表示する権限を付与します。
プロジェクト バケット オブジェクト閲覧者 Role が付与するオブジェクト ストレージ権限のリストは次のとおりです。
- バケットの API 権限: - get
- list
- watch
 
- S3 オブジェクト ストレージの権限: - GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
 
project-bucket-object-admin 権限
このロールは、バケット内のオブジェクト、オブジェクト バージョン、タグの追加と削除を行う権限を付与します。また、project-bucket-object-viewer のすべての権限も付与します。
ロールが付与する追加のオブジェクト ストレージ権限のリストは次のとおりです。
- S3 オブジェクト ストレージの権限: - AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
 
global-project-bucket-object-viewer 権限
このロールは、デュアルゾーン バケット内のオブジェクトとオブジェクトのメタデータを取得して一覧表示する権限を付与します。
global-project-bucket-object-viewer Role が付与するすべてのオブジェクト ストレージ権限のリストは次のとおりです。
- バケットの API 権限: - get
- list
- watch
 
- S3 オブジェクト ストレージの権限: - GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
 
global-project-bucket-object-admin 権限
このロールは、デュアルゾーン バケット内のオブジェクト、オブジェクト バージョン、タグの追加と削除を行う権限を付与します。また、global-project-bucket-object-viewer のすべての権限も付与します。
Role が付与するオブジェクト ストレージの追加権限のリストは次のとおりです。
- S3 オブジェクト ストレージの権限: - AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
 
global-project-bucket-admin 権限
このロールは、デュアルゾーン バケットのプロジェクト名前空間で Bucket リソースを作成、更新、削除する権限を付与します。また、global-project-bucket-object-admin のすべての権限も付与します。
Role が付与する追加の権限のリストは次のとおりです。
- バケットの API 権限: - 作成
- 更新
- 削除
 
project-bucket-admin 権限
このロールは、プロジェクトの名前空間で Bucket リソースを作成、更新、削除する権限を付与します。また、project-bucket-object-admin のすべての権限も付与します。
ロールが付与する追加の権限は次のとおりです。
- バケットの API 権限: - 作成
- 更新
- 削除