2

https://dev.to/googlecloud/using-secrets-in-google-cloud-functions-5aemのように、KMS キーを使用して環境から他のサービスの認証トークンを復号化する Python Cloud Function があります。

関数を実行するたびに 403 Permission Denied が返されます。コンピューターでローカルに関数を呼び出すと、正常に動作します。「Cloud KMS CryptoKey Decrypter」ロールをデフォルトの Compute Engine サービス アカウントに追加しようとしましたが、うまくいきませんでした。

他のアイデアはありますか?

編集:これは私が何をしているのかを示すコードです。環境変数はenvironment.yamlファイルに保存されます。gcloud functions deploy

def decrypt_secret(key: str, secret: str):
    kms_client = kms.KeyManagementServiceClient()
    decrypted = kms_client.decrypt(key, base64.b64decode(secret))
    return decrypted.plaintext.decode("ascii")

def do_kms_stuff():
    key = os.environ["KMS_RESOURCE_NAME"]
    session = boto3.Session(
        profile_name="my-profile",
        aws_access_key_id=decrypt_secret(
            key, os.environ["AWS_ACCESS_KEY_ID_ENCRYPTED"]
        ),
        aws_secret_access_key=decrypt_secret(
            key, os.environ["AWS_SECRET_ACCESS_KEY_ENCRYPTED"]
        ),
    )
    # ...

Cloud Functions コンソールからのエラーは次のとおりです。

File "<string>", line 3, in raise_from: google.api_core.exceptions.PermissionDenied: 403 Permission 'cloudkms.cryptoKeyVersions.useToDecrypt' denied on resource 'projects/my-project/locations/my-location1/keyRings/my-keyring/cryptoKeys/my-key' (or it may not exist). at error_remapped_callable (/env/local/lib/python3.7/site-packages/google/api_core/grpc_helpers.py:59) at func_with_timeout (/env/local/lib/python3.7/site-packages/google/api_core/timeout.py:214) at retry_target (/env/local/lib/python3.7/site-packages/google/api_core/retry.py:182) at retry_wrapped_func (/env/local/lib/python3.7/site-packages/google/api_core/retry.py:277) at
__call__ (/env/local/lib/python3.7/site-packages/google/api_core/gapic_v1/method.py:143) at decrypt (/env/local/lib/python3.7/site-packages/google/cloud/kms_v1/gapic/key_management_service_client.py:1816) at decrypt_secret (/user_code/kms_stuff.py:17) at do_kms_stuff (/user_code/kms_stuff.py:48) at my_cloud_function (/user_code/main.py:46) at call_user_function (/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py:214) at invoke_user_function (/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py:217) at run_background_function (/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py:383)
4

1 に答える 1

2

@DazWilkin と @pessolato が言及したように、問題は、間違ったサービス アカウントを使用していたことです。デフォルトの AppSpot アカウントを使用するように変更すると、すべてがスムーズに機能しました。

于 2019-12-13T19:03:33.597 に答える