GCP - KMS Privesc
KMS
KMSに関する情報:
GCP - KMS EnumKMSでは、権限が組織、フォルダ、プロジェクトからだけでなく、キーリングからも継承されることに注意してください。
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