更改 Google 容器引擎集群的权限
Changing Permissions of Google Container Engine Cluster
我已经能够在开发人员控制台中成功创建一个 Google 容器集群并将我的应用程序部署到它。一切正常,但我发现我无法连接到云 SQL,我明白了;
"Error: Handshake inactivity timeout"
经过一番挖掘,我在从 App Engine 或我的本地计算机连接到数据库时没有遇到任何问题,所以我觉得这有点奇怪。就在那时我注意到集群权限...
当我 select 我的集群时,我看到以下内容;
Permissions
User info Disabled
Compute Read Write
Storage Read Only
Task queue Disabled
BigQuery Disabled
Cloud SQL Disabled
Cloud Datastore Disabled
Cloud Logging Write Only
Cloud Platform Disabled
我真的希望在我的容器引擎节点中同时使用云存储和云 SQL。我已经允许在我的项目设置中访问这些 API 中的每一个,并且我的云 SQL 实例正在接受来自任何 IP 的连接(我已经 运行 托管虚拟机中的节点App Engine 之前),所以我的想法是 Google 明确禁用了这些 API。
所以我的两部分问题是;
- 有什么方法可以修改这些权限吗?
- 禁用这些 API 有什么充分的理由吗? (我想一定有)
非常感谢任何帮助!
权限由集群创建期间附加到节点 VM 的服务帐户定义(服务帐户在 VM 实例化后无法更改,因此这是您唯一可以选择权限的时间)。
如果您使用云控制台,请在创建集群页面上单击 "More" link,您将看到可以添加到集群中节点的权限列表(所有默认设置关闭)。切换任何你想要的,你应该在你的集群创建后看到适当的权限。
如果您使用命令行创建集群,请将 --scopes
命令传递给 gcloud container clusters create
以在您的节点 VM 上设置适当的服务帐户范围。
使用节点池,您可以通过创建具有所需范围的新节点池(然后删除旧的一):
gcloud container node-pools create np1 --cluster $CLUSTER --scopes $SCOPES
gcloud container node-pools delete default-pool --cluster $CLUSTER
对于 cloudsql
,可以从指定代理的容器连接,如此处所述https://cloud.google.com/sql/docs/postgres/connect-container-engine
嗯,我发现了一些可能会感兴趣的东西:
权限属于一个服务账号(所谓Compute Engine default service account
,看起来像12345566788-compute@developer.gserviceaccount.com
)
默认情况下任何 VM 都可以使用此服务帐户。而且它的权限不让我们Cloud SQL
,buckets等等。但是...
但是您可以使用具有正确权限的另一个服务帐户来更改此行为。只需手动创建它并只设置需要的权限。使用 gcloud auth activate-service-account --key-file=/new-service-account-cred.json
将其关闭
就是这样。
我已经能够在开发人员控制台中成功创建一个 Google 容器集群并将我的应用程序部署到它。一切正常,但我发现我无法连接到云 SQL,我明白了;
"Error: Handshake inactivity timeout"
经过一番挖掘,我在从 App Engine 或我的本地计算机连接到数据库时没有遇到任何问题,所以我觉得这有点奇怪。就在那时我注意到集群权限...
当我 select 我的集群时,我看到以下内容;
Permissions
User info Disabled
Compute Read Write
Storage Read Only
Task queue Disabled
BigQuery Disabled
Cloud SQL Disabled
Cloud Datastore Disabled
Cloud Logging Write Only
Cloud Platform Disabled
我真的希望在我的容器引擎节点中同时使用云存储和云 SQL。我已经允许在我的项目设置中访问这些 API 中的每一个,并且我的云 SQL 实例正在接受来自任何 IP 的连接(我已经 运行 托管虚拟机中的节点App Engine 之前),所以我的想法是 Google 明确禁用了这些 API。
所以我的两部分问题是;
- 有什么方法可以修改这些权限吗?
- 禁用这些 API 有什么充分的理由吗? (我想一定有)
非常感谢任何帮助!
权限由集群创建期间附加到节点 VM 的服务帐户定义(服务帐户在 VM 实例化后无法更改,因此这是您唯一可以选择权限的时间)。
如果您使用云控制台,请在创建集群页面上单击 "More" link,您将看到可以添加到集群中节点的权限列表(所有默认设置关闭)。切换任何你想要的,你应该在你的集群创建后看到适当的权限。
如果您使用命令行创建集群,请将 --scopes
命令传递给 gcloud container clusters create
以在您的节点 VM 上设置适当的服务帐户范围。
使用节点池,您可以通过创建具有所需范围的新节点池(然后删除旧的一):
gcloud container node-pools create np1 --cluster $CLUSTER --scopes $SCOPES
gcloud container node-pools delete default-pool --cluster $CLUSTER
对于 cloudsql
,可以从指定代理的容器连接,如此处所述https://cloud.google.com/sql/docs/postgres/connect-container-engine
嗯,我发现了一些可能会感兴趣的东西:
权限属于一个服务账号(所谓
Compute Engine default service account
,看起来像12345566788-compute@developer.gserviceaccount.com
)默认情况下任何 VM 都可以使用此服务帐户。而且它的权限不让我们
Cloud SQL
,buckets等等。但是...但是您可以使用具有正确权限的另一个服务帐户来更改此行为。只需手动创建它并只设置需要的权限。使用
gcloud auth activate-service-account --key-file=/new-service-account-cred.json
将其关闭
就是这样。