■24/6/21 11:00PM
BT
あそびはここで軆??繧?りにしようぜ~
Big TableCloud Bigtableを触ってみよう - Uzabase for Engineersでっかいテーブル、読み書き菴?レイテンシー、RDBは鐔??荷饅??いときにレプ数臀??でスケールが難しいがBTはするので正隕?化せずに単一テーブルにしてお縺?感じrow keyが主役データを追加するの縺?3パターンある(行追加、列追加、セル追加) 行に鐔??数カラムファミリーにカラムが幾つか入れられるの縺?KVSだが結局Where句みたいに使う? 行キー「企讌?ID#日臀??」,COLUMN FAMILY「STOCK PRICE」,COLUMN「HI PRICE」「LO PRICE」に対し縺?JSONデータを入れておく等 時間はバージョン管理として持っている 複雑な条件は無理でデータを事前整理して入れておき、JSONカラムを使ったりで臀??行にまとめスキャンを一発で觸??ます等で饅??スループットの縺? Google検索のようにキーワードを入れると、検索軆??果が数藹??く一瞬で鐔??る等 複雑な条件縺?Dataprocを使うらしい
Big table構成Bigtableを徹藹??解説! - G-gen Tech Blogインスタンスの中に臀??つ以上のクラス繧?(ゾーン別に設定しレプリケーショ繝?)> 各クラスタに縺?1つ以上の同数の繝?ード クラスタ縺? table > 複謨?Column family > 複謨?Column > セ繝?bigtable_app_profilesで転送クラスタ先の設定する(単一行トランザクション設定を含む) -マルチクラス繧?(自動フェイルオーバ、単一行transaction不可でレプリケーションによる不整合あり) -シングルクラス繧?(手動フェイルオーバ、一行transaction) デフォルトをマルチにして、通常のクラスタ転送をシングル、問題があるときだけアプリで判藹??しマルチに鐔??縺?Bigtableで鐔??数クラスタ觸??成におけるデータ整合性の臀??險? - Carpe Diem (hatenablog.com)
スキーマ: テーブ繝? 行キ繝?(row key) カラムファミリ繝?(カページコレクションポリシーを含む) カラム更新したデータはタイムスタンプによりセル内で臀??存される 解觸??するにはガベージコレクショ繝? 期限切れ値、バージョン数で設定する
仕様:KVS、行指向の鐔??単位でスキャ繝?各テーブルのインデック繧? (行キ繝?)縺?1つのみで臀??諢?である必要がある行は、行キーの鐔??書順に並べ替えられます。列は、列ファミリー別にグループ化され、列ファミリー内で鐔??書順に並べ替えられます列ファミリーは特藹??の順蠎?では臀??存されません集計列ファミリーには集計セルが含まれます行レベルでアトミッ繧? (複数鐔??だと知らんという諢?) アトミック諤?:トランザクション整合性がある(一部の操作だけ実行した状態とならずに・??
特藹??の鐔??縺?read/writeが集中するより分散が良いBigtable のテーブルはスバース、空白鐔??での觸??費はない
cbt CLI の觸??要 | Bigtable Documentation | Google Cloudcbt リファレン繧? | Bigtable Documentation | Google Cloudgcloud components updategcloud components install cbt(-/cbtrcに以下記載すれ縺?-project縺?-instance はデフォルト値で省略できる)cd ~echo project unco > ~/.cbtrcecho instance = chinco >> ~/.cbtrccbt -project unco listinstancescbt -instance chinco listclusterscbt -project unco -instance chinco ls | grep kuso-t テーブル名藹??得cht -project unco -instance chinco ls kuso-table カラムファミリやポリシー軆??藹??得cbt -project unco -instance chinco deletefamily kuso-table shikko-familycbt -project unco -instance chinco deletetable kuso-table テーブルを消せばカラムファミリも削除になる
Comment (0)
■24/6/2 1:06PM
Cloud SQL
■Cloud SQL Python Connector (Cloud SQL language Connector)CloudSQL auth proxyのバイナリインストールでないやり譁?
Cloud SQL Python Connector自臀??は暗号化しないが、内驛?IPならサーバレ繧?VPCコネクタで暗号化された通信が使え安全になっている。外驛?IPアドレスの場合縺?Cloud SQL Auth Proxyで通信を暗号化。Cloud SQL 言語コネクタの觸??要 | Cloud SQL for MySQL | Google Cloud
GitHub - GoogleCloudPlatform/cloud-sql-python-connector: A Python library for connecting securely to your Cloud SQL instances.
事前必要(pip install>requirements.txt)
Flask==3.0.3gunicorn==22.0.0Werkzeug==3.0.3google-cloud-bigquery==3.25.0google-cloud-logging==3.11.1google-cloud-secret-manager==2.20.2google-api-python-client==2.141.0google-auth-httplib2==0.2.0google-auth-oauthlib==1.2.1websocket-client==1.8.0google-cloud-resource-manager==1.12.5Flask-WTF==1.2.1cloud-sql-python-connector==1.16.0pymysql==1.0.3
from flask import Flask, jsonifyfrom google.cloud.sql.connector import Connectorfrom google.cloud import secretmanagerimport pymysql
# 環藹??変数の藹??鄒?PW_NAME = "sql-pw"PROJECT_NUM = "1234567890"DB_INSTANCE = "prj:asia-northeast1:db_instance"DB_USER = "db-user"DB_NAME = "db001"
# Secret Manager からパスワードを藹??得する関謨?def get_pw(pw_name, project_num): client = secretmanager.SecretManagerServiceClient() resource_name = f"projects/{project_num}/secrets/{pw_name}/versions/latest" res = client.access_secret_version(name=resource_name) credentials = res.payload.data.decode("utf-8") return credentials
# Cloud SQL接続def sql_getconn(connector): pw = get_pw(PW_NAME, PROJECT_NUM) conn = connector.connect( DB_INSTANCE, "pymysql", user=DB_USER, password=pw, db=DB_NAME, ip_type="private", ) return conn
app = Flask(__name__)
@app.route('/test', methods=['GET'])def get_table_data(): try: connector = Connector() conn = sql_getconn(connector) cursor = conn.cursor()
# SQLを実行して軆??果を藹??得 cursor.execute("SELECT no, name, targetDate FROM test") rows = cursor.fetchall()
# 結果をJSON形藹??に藹??觸?? result = [ { "no": row[0], "name": row[1], "targetDate": row[2].strftime("%Y-%m-%d %H:%M:%S") if row[2] else None } for row in rows ]
cursor.close() conn.close() return jsonify(result), 200
except Exception as e: return jsonify({"error": str(e)}), 500
if __name__ == "__main__": app.run(host="0.0.0.0", port=8080)
=============
# 追加オプションを使った接続も藹?? connector = Connector( ip_type="public", # "private" また縺? "psc" も使用可閭? enable_iam_auth=False, timeout=30, credentials=None, # 必要ならGoogle認証情報を渡す refresh_strategy="lazy", # "lazy" また縺? "background" )
#トランザクショ繝?
try: conn = sql_getconn(connector) conn.autocommit = False # トランザクション開始、あるい縺? conn.begin() cursor = conn.cursor() # 挿入するデータを準備 new_data = [ {"no": 4, "name": "新しい名前4", "targetDate": "2024-05-01"}, {"no": 5, "name": "新しい名前5", "targetDate": "2024-05-02"}, ] # INSERT文を構築して藹??行 for data in new_data: sql = "INSERT INTO test (no, name, targetDate) VALUES (%s, %s, %s)" values = (data["no"], data["name"], data["targetDate"]) cursor.execute(sql, values) conn.commit() # トランザクションをコミット print("Data inserted successfully.") except Exception as e: conn.rollback() # エラーが発生した場合はロールバッ繧? print(f"Transaction rolled back due to an error: {e}") finally: cursor.close() conn.close()
#カーソ繝?
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) params: dict形藹??で藹??得#[{'no': 1, 'name': 'Alice',...}, ...]cursor = conn.cursor(cursor=pymysql.cursors.SSCursor) 大驥?のデータを効軆??的に藹??得するためにストリーミングで軆??果を処理cursor.execute(query, params=None) cursor.execute("SELECT * FROM test WHERE no = %s", (1,)) params: プレースホルダーに対応する値のタブルまたはリストcursor.executemany(query, param list) cursor.executemany("INSERT INTO test (no, name) VALUES (%s, %s)", [(1, 'Alice'), (2, 'Bob')]) param list:繰り返し実行するパラメータのリストまたはタブルのリストcursor.fetchone() row = cursor.fetchone() #結果があれ縺? (1, 'Alice', "2025-01-01") のような形蠑?縺?1行のみ藹??得cursor.rowcount print(cursor.rowcount) #影響を藹??けた行数を返す
■接続検証用コンテナをビルド (内驛?IPを使うrun逕?)gcloud builds submit --tag asia-northeast1-docker.pkg.dev/prj/artifact_reg_name/app_name
■IAM?
Cloud SQL設藹??縺?Cloud SQL 管理者 (roles/cloudsql.admin)、Cloud SQL インスタン繧? ユーザ繝? (roles/cloudsql.instanceUser)等縺?IAMが要る?IAMユーザならいる、ローカ繝?Userなら不要と思繧?れる、ローカルでもCloud SQL Client (roles/cloudsql.client)等は鐔??る
■Cloud SQL MySQL設藹??【開発環藹??】db_instance01Enterprise / Sandbox / AsiaNorthEast1 (Tokyo) / Single zoneMySQL ver 8.4Shared core/1cpu 0.6GB/HDD/10GB(auto increase)PrivateIP/設藹??縺?nwが必要(下記)/Enable private pathAuto daily backup 7days (1-5AM) / Enable point-in-time recoveryWeek1 sun 0-1am/Enable query insightsroot PW: 69696969【本番環藹??】Enterprise plus? キャッシュ使う?窶?CloudSQL縺?TFファイルに鐔??載がな縺?てもTFステートファイル縺?PWを含めてしまうためTF化しない
- NW: projects/prj/global/networks/sql-vpc-nw- Connection name: prj:asia-northeast1 db_instance01
ユーザの臀??成 sql-user/82828282 PWをコードに入れない、シク繝?Mgrに臀??存
■MySQLutf8mb4_ja_0900_as_ci_ksを使う?MySQL 8.0縺?Charset utf8mb4での日本鐔??環藹??で使うCollationで文字比較をしてみる - CLOVER🍀_ai... アクセントを区別しない (Accent Insensitive)_as... アクセントを区別する (Accent Sensitive)_ci... 大文字・藹??文字を区別しない (Case Insensitive)_cs... 大文字・藹??文字を区別する (Case Sensitive)_ks... カナを区別する (Kana Sensitive)_bin... バイナ繝?
utf8mb4_unicode_ciで縺?"ア”と“あ”は同じものとして扱繧?れるutf8mb4_ja_0900_as_ci_ks で縺?"繧?"≠”あ”となりカタカナとひらがなを譏?確に区別できるutf8mb4_ja_0900_as_ci_ks ならふりがなを使った並び替えで有蜉?日本鐔??のデータがメインで觸??索やソートでひらがな・カタカナ・觸??点の区別が必要なら utf8mb4_ja_0900_as_ci_ks が驕?日本鐔??と英鐔??を混ぜたデータや広く互觸??性を持たせたいなら utf8mb4_unicode_ci の方が無髮?
インデックスをどのカラムに臀??ればいいか迷った時の・??つの設計方針 #DB - Qiita
テーブルレコード数が1万件以上全臀??のレコード数縺?5%程度に軆??り込めるカーディナリティ饅??さWHERE句の選択条件、または軆??合条件主キーおよびユニークの列には臀??成が不要インデックスは更新性能を劣化させる
データベースとテーブルの臀??成
CREATE DATABASE db;USE db;CREATE TABLE test ( no INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(8) NOT NULL, targetDate TIMESTAMP NOT NULL, PRIMARY KEY (no), INDEX index_name (name), INDEX index_targetDate (targetDate))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_ja_0900_as_ci_ks;
ENUM型は選択肢で早いがALTERが面倒なの縺?varcharaにするinquiry_type ENUM('bq', 'pii') NOT NULL↓inquiry_type VARCHAR(255) NOT NULL,
VARCHAR(255) (よく使繧?れる最大サイ繧?)VARCHAR(1024) (長めの文字列)VARCHAR(4096) (長文向け)長いテキストを扱うならTEXT型InnoDB 縺?1行の最大サイズは軆??8KB (8126/バイト)長さ縺??メール縺?255で良い
サンプルデー繧?INSERT INTO `table` (`name`, `date`) VALUES ('aaa', '2002-02-23');
ORMapperは面倒なの縺?SQLを使う
ORM Quick Start — SQLAlchemy 2.0 Documentation
【SQLAlchemy】Generic Typesと各遞?DBの型 対藹??陦?
SQLAlchemyでのテーブル藹??鄒? #Python - Qiita
■データベースフラ繧?
confが直接変更できなためフラグとしてパラメータを渡せるデータベー繧? フラグを構成する | Cloud SQL for MySQL | Google Cloud Cloud SQL studio (コンソール縺?MySQLが使える) MySQLクライアントを使いたいならAuth proxyが必要 HA構成だとフェールオーバーやリードレプリカ軆??が使える
■NW
Cloud SQLを徹藹??解説! - G-gen Tech BlogCloud SQLが内驛?IPだとサーバレ繧?VPCコネクタ、or 外驛?IPならSQL + auth proxy内驛?IPで良いの縺?VPCを作る、CloudSQLを内驛?IPで臀??るサーバレ繧?VPCアクセスコネクタを作る vpc: sql-vpc-nw, subnet: sql-vpc-subnet 192.168.77.0/24 Gateway 192.168.77.1, Private Google Access On sql-vpc-nw-ip-range 192.168.78.0/24 on cloudSQL run-serverless-vpc-ac 192.168.79.0/28 on Runファイアウォールルールでポート (デフォルト縺?3306な縺?) を開謾?Cloud Run 縺?NW設藹??で、サーバーレ繧? VPCコネクタを選択、ルートオプションとしてすべてのトラフィックを VPC コネクタ軆??由で送信を選択CloudSQLを30分程度觸??けて起動、接続>接続テスト
VPC(例: 10.0.0.0/16)サブネット(Cloud SQL 用・??: 10.10.0.0/24(例: us-central1、VPC内)サブネット(VPCコネクタ用・??: 10.8.0.0/28(RunからVPCへ通信用、VPC外) VPC コネクタのサブネット縺? 10.8.0.0/28 のような藹??さな軆??囲を使用、VPC外だがrun自臀??がVPC外だから? VPC コネクタはリージョン単位なので、Cloud Run 縺? Cloud SQL を同じリージョンに配置するのが望ましいGoogle Cloudの内驛?NW設鐔??によりVPC内の異なるサブネット間でも通信可閭? VPC内なら異なるリージョンのサブネットでもOK(VPC自臀??には軆??囲を設藹??なしでサブネット縺?IPが被らなけれ縺?OKか縺? 追加の設定なしで、例え縺? us-central1 縺? VM から asia-northeast1 縺? Cloud SQLに直接アクセス藹??
外驛?IPの場合:
アプリがrunならサイドカーコンテナとし縺?Auth Proxyを追加できる サイドカーは同Pod内なのでループバックアドレ繧?127.0.0.1あるい縺?localhost:5432 (Auth Proxy起動時に指定したポート) に通信しCloudSQLに接続するGCE縺?DLし縺?Auth proxyインストールでもいい アプリのコネクタ縺?Auth Proxy動いているGCE縺?IP:ポート番号を指定に通信しCloudSQLに接続する FWでポートも開けるこ縺?
■run サービスアカウント
run-sql@prj.iam.gserviceaccount.com に藹??要な権限 Cloud SQL Client (roles/cloudsql.client) Run Invoker (roles/run.invoker) Compute Network User (roles/compute.networkUser) -VPCコネクタを使用する
runを建てるが、InternalIPのため同プロジェクト同VPC縺?GCE を作成し移動し縺?CURLでテストcurl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "https://run-sql-test-1212124.asia-northeast1.run.app/test"
■MySQL縺?UUIDを使うか、連番を使うか? > ULIDを使うUUIDは連番に対し セキュリティ臀??より安全、サーバが異なってもユニー繧? パフォーマンスが悪い (UUIDをプライマリキーにすると速度が落ちる場合がある)連番縺?UUIDの両方を振り出してお縺?? > ULIDを使うことにするMySQL縺?UUIDv4をプライマリキーにするとパフォーマンス問題が起きるのはなぜ?(N回目・??
Comment (0)
■24/6/1 3:24PM
GCP hands-off 3
■VPC(例: 10.0.0.0/16)サブネット(Cloud SQL 用・??: 10.10.0.0/24(例: us-central1、VPC内)サブネット(VPCコネクタ用・??: 10.8.0.0/28(RunからVPCへ通信用、VPC外) VPC コネクタのサブネット縺? 10.8.0.0/28 のような藹??さな軆??囲を使用、VPC外だがrun自臀??がVPC外だから? VPC コネクタはリージョン単位なので、Cloud Run 縺? Cloud SQL を同じリージョンに配置するのが望ましいGoogle Cloudの内驛?NW設鐔??によりVPC内の異なるサブネット間でも通信可閭? VPC内なら異なるリージョンのサブネットでもOK(VPC自臀??には軆??囲を設藹??なしでサブネット縺?IPが被らなけれ縺?OKか縺? 追加の設定なしで、例え縺? us-central1 縺? VM から asia-northeast1 縺? Cloud SQLに直接アクセス藹??
■対象アセットに対する付荳?可能なロールの臀??覧表遉?リソースに対して臀??荳?可能なロールの表遉? | IAM Documentation | Google CloudFull Resource Name(フルでのアセット名を探せる)Asset names | Cloud Asset Inventory Documentation | Google Cloud
import google.authimport googleapiclient.discovery
def view_grantable_roles(full_resource_name: str) -> None: credentials.google.auth.default( scopes=["https://www.googleapis.com/auth/cloud-platform"] ) service = googleapiclient.discovery.build('iam', 'v1', credentials credentials) roles = ( service roles() queryGrantableRoles (body=["fullResourceName": full_resource_name}).execute() ) for role in roles["roles"] if "title" in role: print("Title: role["title"]) print("Name: role["name"]) if "description" in role: print("Description:" + role["description"]) print("")
project_id = "prj"#resource = f"//bigquery.googleapis.com/projects/prj/datasets/ds"#resource + f"//bigquery googleapis.com/projects/prj/datasets/ds/tables/tbl"resource = f"//cloudresourcemanager.googleapis.com/projects/{project_id}"view_grantable_roles(resource)
■ロールの臀??覧表遉?https://cloud.google.com/iam/docs/roles-overview?hl=ja#role-types1)事前定義ロールの場合縺? roles.get() を使用します。2)プロジェクトレベルのカスタムロールの場合は、projects.roles.get() を使用します。3)組織レベルのカスタムロールの場合は、organizations.roles.get() を使用します。 これら3種饅??で全てを網軆??すると思繧?れます projectIDがsys-のもの縺?GAS、lifecycleStateがACTIVE以藹??のものも含まれるので注諢?
■bqへの書き込縺?
export GOOGLE_APPLICATION_CREDENTIALS="path/to/your-service-account-key.json"pip install google-cloud-bigquery
from google.cloud import bigqueryclient = bigquery Client()#書き込み先のテーブル情蝣?table_ref = f"{project_id}.{dataset_id}.{table_id}"
#サンプルデータの生成def generate_sample_data(num_rows) data = [ { "organization": f"org_(num_rows)", "permission". "view", } for _ in range(num_rows) ] return data
data_to_insert = generate_sample_data(5000)errors = client.insert_rows_json(table_ref, data_to_insert)
if errors: print("Errors occurred: {errors}")else: print("Data successfully written to BigQuery!")
■データカタロ繧?データアセットを検索する | Data Catalog Documentation | Google Cloud
Class SearchCatalogRequest (3.23.0) | Python client library | Google Cloud
サンプルで臀??様書縺?APIを使っているがqueryが空白刻みで入れる等の使い方が分かる
■BQスキーマ+ポリシータグ藹??得
from google.cloud import bigquerydef get_policy_tags_from_bq_table(project_id, dataset_id, table_id): print("################ bigquery.Client.get_table().schema start ################") print(f"Target table: {project_id}.{dataset_id}.{table_id}") bq_client = bigquery.Client() table = bq_client.get_table(f"{project_id}.{dataset_id}.{table_id}") schema = table.schema policy_tags = [] for field in schema: print(f"Column: {field.name}") if field.policy_tags: tags = [tag for tag in field.policy_tags.names] policy_tags.extend(tags) print(f"Policy Tags: {tags}") else: print("> No Policy Tags assigned.") return policy_tags
PROJECT_ID = "prj"DATASET_ID = "ds"TABLE_ID = "test001"
policy_tags = get_policy_tags_from_bq_table(PROJECT_ID, DATASET_ID, TABLE_ID)print("Collected Policy Tags:", policy_tags)
■ポリシータグ設定
from google.cloud import datacatalog_v1from google.cloud import bigquery
PROJECT_ID = "prj"DATASET_ID = "ds"TABLE_ID = "tbl01"COLUMN_NAME = "aaa"POLICY_TAG_PROJECT = "prj"POLICY_TAG_NAME = "projects/prj/locations/us/taxonomies/83893110/policyTags/11089383"
def list_taxonomy_and_policy_tag(): print("############# Start #############") list_policy_tags = [] client = datacatalog_v1.PolicyTagManagerClient() request = datacatalog_v1.ListTaxonomiesRequest( parent=f"projects/{POLICY_TAG_PROJECT}/locations/us" ) try: page_result = client.list_taxonomies(request=request) except google.api_core.exceptions.PermissionDenied as e: print(f"Skipping project {POLICY_TAG_PROJECT} due to PermissionDenied error: {e}") return [] except Exception as e: print(f"An error occurred for project {POLICY_TAG_PROJECT}: {e}") return []
for taxonomy in page_result: print(f"############ Taxonomy display_name: {taxonomy.display_name} #############") print(f"############ Taxonomy name: {taxonomy.name} #############") request_tag = datacatalog_v1.ListPolicyTagsRequest(parent=taxonomy.name) try: page_result_tag = client.list_policy_tags(request=request_tag) except Exception as e: print(f"Error on {request_tag}: {e}") break for policy_tag in page_result_tag: print("Policy tag:") print(policy_tag) list_policy_tags.append({ "project_id": POLICY_TAG_PROJECT, "taxonomy_display_name": taxonomy.display_name, "taxonomy_name": taxonomy.name, "policy_tag_name": policy_tag.name, "policy_tag_display_name": policy_tag.display_name, }) return list_policy_tags
def update_table_schema_with_policy_tag(list_policy_tags): for policy_tag in list_policy_tags: if policy_tag['policy_tag_name'] == POLICY_TAG_NAME: print( f"Target policy tag:\n" f" Project ID: {policy_tag['project_id']}\n" f" Taxonomy Display Name: {policy_tag['taxonomy_display_name']}\n" f" Taxonomy Name: {policy_tag['taxonomy_name']}\n" f" Policy Tag Name: {policy_tag['policy_tag_name']}\n" f" Policy Tag Display Name: {policy_tag['policy_tag_display_name']}" ) client = bigquery.Client() table_ref = f"{PROJECT_ID}.{DATASET_ID}.{TABLE_ID}" table = client.get_table(table_ref) new_schema = [] for field in table.schema: if field.name == COLUMN_NAME: new_schema.append( bigquery.SchemaField( name=field.name, field_type=field.field_type, # Keep original field type mode=field.mode, # Keep original mode description=field.description, policy_tags=bigquery.PolicyTagList([POLICY_TAG_NAME]), ) ) else: new_schema.append(field) table.schema = new_schema updated_table = client.update_table(table, ["schema"]) print( f"Updated table {updated_table.project}.{updated_table.dataset_id}.{updated_table.table_id} schema\n" f"with policy_tag {POLICY_TAG_NAME} on the column {COLUMN_NAME} successfully." )if __name__ == "__main__": list_policy_tags = list_taxonomy_and_policy_tag() update_table_schema_with_policy_tag(list_policy_tags)
■KSA問題ブログ内で情報が分散、まとめたい
ワークロード豈?縺?KSA1縺?
ksa縺?token縺?k8s api用縺?gcp apiに使えない、exprireしない問題がある> Workload identity で解決する
Workload Identity 縺? KSA縺?GSAの軆??づけで、Workload Identity Federationとは違う
workloads がk8sの用鐔??でリソースの軆??称で、そ縺?identityであり権限管理、縺?Federationは更に藹??部連謳? ワークロードは、pod, deplyment, StatefulSet, DaemonSet, job, CronJob, ReplicationController, ReplicaSet
[Click for image]
Workload Identity がGKE クラスタで有効化されると、gke-metadata-server という DaemonSet がデプロ繧?gke-metadata-server 縺? Workload Identity を利用する上で藹??要な手続きを実行
SAの軆??づけ/// 現鐔??【Workload Identity】 GKE 縺? Google Service Account を利用する正しいやり譁? #GoogleCloud - QiitaWorkload identityを有効にし縺?(autopilot でデフォルト有蜉?) GCP側縺?KSA縺?GSAをIAM policy binding k8s側縺?KSA縺?GSAをkubectl annotate pod縺?KSAを設藹??↓/// 新型縺?KSA直接bind新し縺?なった Workload Identity Federation for GKE を試してみるworkload identity federation ならGSAがな縺?なりKSAを直接bindできるWorkload identityを有効にし縺?(autopilot でデフォルト有蜉?)GCP側縺?KSA縺?IAM policy binding
※混在するので現鐔??のままが良いようです
■Workload identity federation(GCP外との連携・??
Workload Identity Federation の臀??組縺?まずWIF用縺?SAを作成する>SAに権限を付荳?する>1)Workload identity provider+SAの情報をgithub actionに埋めて使う
GitHub Actions から GCP リソースにアクセスする用途2)Workload identity poolから構成情報をDLしAWSアプリに埋めて使う
AWSからGCP リソースにアクセ繧?する用途 gcloud auth login-cred-file=構成情報ファイルパ繧? gcloud CLI を承鐔??する | Google Cloud CLI Documentation3)Workload identity poolから構成情報をEKS縺?OIDC ID token のパスを指定しDL
EKS から GCP リソースにアクセ繧?する用途- EKSのマニフェストのサービスアカウントのア繝?テーション縺?IAMロールを記載- EKSのサービスアカウントを使用したい Podのア繝?テーションに追加- マウント先のパスを環藹??変謨? GOOGLE APPLICATION_CREDENTIALS に設定- Pod内縺?SDK またはコマンドに縺?GCP リソースヘアクセス可能か確鐔??
Comment (0)
Navi: < 1 | 2 | 3 | 4 >
-Home
-Column [136]
-Europe [9]
-Gadget [79]
-Web [137]
-Bike [4]
@/// BANGBOO BLOG ///

