GCP - KMS Privesc
KMS
关于KMS的信息:
GCP - KMS Enum请注意,在KMS中,权限不仅来自于组织、文件夹和项目,还来自于密钥环。
cloudkms.cryptoKeyVersions.useToDecrypt
cloudkms.cryptoKeyVersions.useToDecrypt
您可以使用此权限来使用您拥有此权限的密钥解密信息。
cloudkms.cryptoKeys.setIamPolicy
cloudkms.cryptoKeys.setIamPolicy
拥有这个权限的攻击者可以给自己授予权限以使用密钥解密信息。
cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
以下是这种委托如何工作的概念性分解:
服务账号 A 可以直接使用 KMS 中的特定密钥进行解密。
服务账号 B 被授予
useToDecryptViaDelegation
权限。这使其能够请求 KMS 代表服务账号 A 解密数据。
在进行解密请求时,KMS 服务检查权限的方式是隐式的。
当您使用 Google Cloud KMS API(使用 Python或其他语言)进行标准解密请求时,服务会检查请求的服务账号是否具有必要的权限。如果请求由具有**useToDecryptViaDelegation
权限的服务账号发出,KMS 将验证此账号是否被允许代表拥有密钥的实体请求解密**。
设置委托
定义自定义角色:创建一个 YAML 文件(例如
custom_role.yaml
),定义自定义角色。此文件应包括cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
权限。以下是此文件可能的示例:
使用 gcloud CLI 创建自定义角色:使用以下命令在您的 Google Cloud 项目中创建自定义角色:
将[YOUR_PROJECT_ID]
替换为您的Google Cloud项目ID。
授予自定义角色给服务账号:将您的自定义角色分配给将使用此权限的服务账号。使用以下命令:
替换[YOUR_PROJECT_ID]
和[SERVICE_ACCOUNT_EMAIL]
为您的项目ID和服务账号的电子邮件地址。
Last updated