このページでは、Google Distributed Cloud(GDC)エアギャップ プロジェクト内のストレージ バケットへのアクセスを管理し、適切なユーザーに適切な権限を付与する方法について説明します。ロール バインディングと事前定義ロールを使用してユーザーとサービス アカウントのアクセス権を取得して付与するための前提条件と手順について説明します。この情報により、ストレージ リソースへのアクセスを効果的に制御し、セキュリティと運用効率の両方を維持できます。
このページは、GDC エアギャップ環境でストレージ バケットのアクセス設定を管理するインフラストラクチャ オペレーター グループの IT 管理者や、アプリケーション オペレーター グループのデベロッパーなどを対象としています。詳細については、GDC エアギャップ ドキュメントの対象読者をご覧ください。
始める前に
プロジェクトの名前空間は、Management API サーバーのバケット リソースを管理します。バケットとオブジェクトを操作するには、プロジェクトが必要です。
バケットへのアクセス権を付与する
S3 API リソース(バケットやバケット内のオブジェクトなど)へのアクセス権を User サブジェクトと ServiceAccount サブジェクトに付与するには、Management API サーバーの事前定義ロールを参照する RoleBinding を作成して適用します。
事前定義ロール
project-bucket-object-viewer: このロールを付与されたユーザーは、プロジェクト内のすべてのバケットの一覧表示、それらのバケット内のオブジェクトの一覧表示、オブジェクトとオブジェクト メタデータの読み取りを行うことができます。オブジェクトに対する書き込みオペレーションは実行できません。たとえば、アップロード、上書き、削除などです。組織とそのプロジェクト内のデュアルゾーン バケットに対する読み取り専用アクセス権と、それらのバケット内のオブジェクトに対する読み取り専用アクセス権。
project-bucket-object-admin: ユーザーは、プロジェクト内のすべてのバケットを一覧表示し、オブジェクトに対する書き込みオペレーションと読み取りオペレーションを実行できます。たとえば、アップロード、上書き、削除などです。組織とそのプロジェクト内のデュアルゾーン バケットに対する読み取り専用権限と、それらのバケット内のオブジェクトに対する読み取り / 書き込み権限。
project-bucket-admin: ユーザーは、指定された Namespace 内のすべてのバケットと、それらのバケット内のすべてのオブジェクトを管理できます。組織とそのプロジェクト内のデュアルゾーン バケットに対する読み取り専用権限と、それらのバケット内のオブジェクトに対する読み取り / 書き込み権限。
上記のロールに付与されている権限の完全なリストについては、事前定義ロールの権限セクションをご覧ください。
プロジェクトでロール バインディングを作成するには、そのプロジェクトの 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: PROJECT_NAMESPACE name: readwrite-all-buckets roleRef: kind: Role name: project-bucket-object-admin apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount namespace: PROJECT_NAMESPACE name: SA_NAME - kind: User namespace: PROJECT_NAMESPACE name: bob@example.com apiGroup: rbac.authorization.k8s.io # Could be bob or bob@example.com based on your organization settings.次のように置き換えます。
PROJECT_NAMESPACE: プロジェクトの名前空間の名前SA_NAME: サービス アカウントの名前
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 にあります。
次のコマンドを実行して、Secret 名を確認します。
kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"次のような出力が表示されます。
secrets [] [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]対応する Secret の内容を取得して、
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 を構成するの手順に沿って操作します。
サービス アカウントへのアクセス権を取得する
S3 シークレット認証情報は、プロジェクトの名前空間にバケットが存在する場合にのみ作成され、取得できます。
サービス アカウント(SA)サブジェクトの場合は、ユーザー クラスタから Secret 名を見つけます。
Standard Storage クラスの場合は、次のコマンドを実行して Secret 名を取得します。
kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'一覧表示された Secret 名を手動で確認するか、
grepを使用してobject-storage-key-(std|nl)を見つけます。kubectl get -n=PROJECT_NAME \ serviceaccount SA_NAME \ -o=jsonpath='{.secrets}{"\n"}' | grep -E 'object-storage-key-(std|nl)'次のように置き換えます。
PROJECT_NAME: プロジェクトの名前。SA_NAME: サービス アカウントの名前。
プリセット ロールの権限
グローバル API サーバーでは、デュアルゾーン バケットへの管理アクセスと運用アクセスに事前定義ロールを使用できます。これらのロールは、RoleBinding リソースまたは ClusterRoleBinding リソースではなく IAMRoleBinding リソースが使用されている場合にのみ、ゾーンバケットへのアクセス権も付与します。ロール バインディングの詳細については、アクセス権の付与と取り消しをご覧ください。
project-bucket-object-viewer 権限
このロールは、バケット内のオブジェクトとオブジェクトのメタデータを取得して一覧表示する権限を付与します。
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 のすべての権限も付与されます。
Role が付与する追加のオブジェクト ストレージ権限のリストは次のとおりです。
S3 オブジェクト ストレージの権限:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
project-bucket-admin 権限
このロールは、プロジェクトの名前空間で Bucket リソースを作成、更新、削除する権限を付与します。また、project-bucket-object-admin のすべての権限も付与されます。
Role が付与する追加の権限は次のとおりです。
バケット API の権限:
- 作成
- 更新
- 削除