本页面介绍了如何将工作负载配置为使用工作负载身份联合以及直接资源访问权限或服务账号模拟来访问 Google Cloud 资源。
您可以在有关 AWS 和 Azure、Active Directory、GitHub、GitLab 和其他部署流水线以及 Kubernetes 的配置指南中找到特定于应用场景的端到端说明。
允许外部工作负载访问 Google Cloud 资源
如需为您的工作负载提供对 Google Cloud 资源的访问权限,我们建议您向主账号授予直接资源访问权限。在这种情况下,主账号是联合用户。某些 Google Cloud 产品存在 Google Cloud API 限制。如果您的工作负载调用存在限制的 API 端点,您可以改用服务账号模拟。在这种情况下,主账号是充当身份的 Google Cloud 服务账号。您可以向此服务账号授予资源的访问权限。
直接资源访问权限
您可以使用 Google Cloud 控制台或 gcloud CLI 向联合身份授予直接对资源的访问权限。
控制台
如需使用 Google Cloud 控制台授予直接对某个资源的 IAM 角色,您必须进入该资源的页面,然后授予该角色。以下示例展示了如何进入 Cloud Storage 页面,然后向联合身份授予直接对 Cloud Storage 存储桶的 Storage Object Viewer (roles/storage.objectViewer
) 角色。
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击您要针对其授予角色的存储桶的名称。
选择页面顶部附近的权限标签。
点击 add_box 授予访问权限按钮。
系统会显示“添加主账号”对话框。
在新主账号字段中,输入需要访问您存储桶的一个或多个身份。
按主体
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
替换以下内容:
PROJECT_NUMBER
:项目编号POOL_ID
:工作负载池 IDSUBJECT
:从您的 IdP 映射的单个主体,例如administrator@example.com
按群组
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
替换以下内容:
PROJECT_NUMBER
:项目编号WORKLOAD_POOL_ID
:工作负载池 IDGROUP
:从您的 IdP 映射的群组,例如:administrator-group@example.com
按特性
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
替换以下内容:
PROJECT_NUMBER
:项目编号WORKLOAD_POOL_ID
:工作负载池 IDATTRIBUTE_NAME
:从您的 IdP 映射的属性之一ATTRIBUTE_VALUE
:属性的值
从选择角色下拉菜单中选择一个或多个角色。 您选择的角色将显示在窗格中,其中包含对角色授予的权限的简短说明。
点击保存。
gcloud
如需使用 gcloud CLI 针对项目中的资源授予 IAM 角色,请执行以下操作:
获取在其中定义了资源的项目的编号。
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
授予对该资源的访问权限。
如需使用 gcloud CLI 向符合特定条件的外部身份授予 Workload Identity User 角色 (
roles/iam.workloadIdentityUser
),请运行以下命令。按主体
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
按群组
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
按属性
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
替换以下内容:
BUCKET_ID
:要针对其授予访问权限的存储桶PROJECT_NUMBER
:包含工作负载身份池的项目的编号POOL_ID
:工作负载身份池的池 IDSUBJECT
:已映射到google.subject
的特性的预期值GROUP
:已映射到google.groups
的特性的预期值ATTRIBUTE_NAME
:特性映射中的自定义特性的名称ATTRIBUTE_VALUE
:属性映射中的自定义属性的值
您可以针对支持 IAM 允许政策的任何 Google Cloud 资源授予角色。
服务账号模拟
如需为外部工作负载创建服务账号,请执行以下操作:
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
创建一个服务账号以代表工作负载。最好为每个工作负载使用专用服务账号。
该服务账号不需要与工作负载身份池位于同一项目中。
向服务账号授予 Workload Identity User 角色 (
roles/iam.workloadIdentityUser
)。创建一个服务账号以代表工作负载。我们建议您为每个工作负载使用专用服务账号。
该服务账号不需要与工作负载身份池位于同一项目中,但您必须引用包含该服务账号的项目。
如需使用 Google Cloud 控制台或 gcloud CLI 通过服务账号模拟向联合身份授予访问权限,请执行以下操作:
控制台
如需使用 Google Cloud 控制台向具有服务账号的联合身份授予 IAM 角色,请执行以下操作:
执行以下操作,创建一个充当要模拟的身份的服务账号:
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
创建一个代表工作负载的身份的服务账号。我们建议您为每个工作负载使用专用服务账号。
该服务账号不需要与工作负载身份池位于同一项目中,但在授予 IAM 访问权限时,您必须引用包含该服务账号的项目。
如需使用服务账号模拟授予访问权限,请执行以下操作。
进入工作负载身份池页面。
选择授予访问权限。
在向服务账号授予访问权限对话框中,选择使用服务账号模拟授予访问权限。
在服务账号列表中,选择要模拟的外部身份的服务账号,然后执行以下操作:
如需选择池中的哪些身份可以模拟服务账号,请执行以下操作之一:
如需仅允许工作负载身份池的特定身份模拟服务账号,请选择仅限与过滤条件匹配的身份。
在属性名称列表中,选择您要作为过滤依据的属性。
在属性值字段中,输入属性的预期值;例如,如果您使用属性映射
google.subject=assertion.sub
,请将属性名称设置为subject
,并将属性值设置为外部身份提供方颁发的令牌中sub
声明的值。
如需保存配置,请点击保存,然后点击关闭。
gcloud
如需使用 gcloud CLI 向符合特定条件的外部身份授予 Workload Identity User 角色 (
roles/iam.workloadIdentityUser
),请运行以下命令。按主体
gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
按群组
gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
按属性
gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
替换以下内容:
下载配置
如需让您的工作负载访问客户端库,您必须先执行以下操作来下载并配置应用默认凭据 (ADC):
-
在 Google Cloud 控制台中,转到 Workload Identity 池页面。
转到“工作负载身份池” -
在表中,选择池以进入池的详情页面。
-
点击授予访问权限。
-
选择使用联合身份授予访问权限(推荐)。
-
如需下载应用默认凭据 (ADC) 以便您的工作负载可以访问客户端库,请执行以下操作:
-
点击下载配置。
-
在配置您的应用对话框中,执行以下操作:
-
在提供方下拉列表中,选择您的提供方。
-
在 OIDC token path 或 SAML assertion path 中,输入此令牌或断言所在的路径。
在格式类型下拉列表中,选择格式。
-
-
点击下载配置,然后记下保存该文件的路径。
-