错误描述
嗨!我想使用 CloudSQL 代理在本地以服务帐户身份向 Google Cloud SQL 进行身份验证。这是通过 Kubernetes sidecar 容器模式完成的,其中安装了服务帐户 JSON 凭据,并在 GKE 中使用工作负载身份功能。但是,每当我通过应用程序的代理连接到我的 Cloud SQL postgresql 服务器时,它仍然会要求输入用户名和密码?
我的服务帐号具有以下角色:roles/cloudsql.client
和roles/cloudsql.instanceUser
。roles/cloudsql.connect
我的 Cloud SQL 数据库已启用 IAM 权限标志。
以下操作不起作用并导致以下psycopg2
错误:
fe_sendauth: no password supplied
例如在Python中:
def getDBConnection(self, dbHost: str, dbPort: int, dbName: str, dbUser: str):
dbConn = None
try:
dbConn = psycopg2.connect(host=dbHost, port=dbPort, database=dbName, user=dbUser)
dbConn.execute('SELECT 1')
except Exception as e:
...
return dbConn
我也尝试过不用user
。
示例代码(或命令)
imagePullPolicy: Always
image: gcr.io/cloudsql-docker/gce-proxy:latest
name: cloudsql-proxy
command: ['/cloud_sql_proxy', '-instances=xxx:europe-west1:yyy=tcp:3126']
livenessProbe:
tcpSocket:
host: '127.0.0.1'
port: 3126
failureThreshold: 5
initialDelaySeconds: 5
periodSeconds: 3
env:
-
name: GOOGLE_APPLICATION_CREDENTIALS
value: /sa.json
volumeMounts:
-
mountPath: /sa.json
name: sajson
readOnly: true
resources:
requests:
cpu: 0.5
memory: 0.5Gi
limits:
cpu: 0.5
memory: 0.5Gi
securityContext:
readOnlyRootFilesystem: true
privileged: false
runAsNonRoot: true
allowPrivilegeEscalation: false
capabilities:
drop: [all]
seccompProfile:
type: RuntimeDefault
我应该如何通过分配给我的 Pod 的 IAM 服务帐号向 Cloud SQL 进行身份验证?我看到了使用username
和password
身份验证的示例,但这违背了 Workload Identity 和 IAM 服务帐号身份验证的要点?
答案1
您可以使用 Cloud SQL 的IAM 数据库身份验证功能可创建仅可由特定 IAM 身份访问的数据库帐号。它与 Cloud SQL Auth 代理兼容,因此您可以修改现有设置以将其与 Workload Identity 一起使用。