Реалізація Data Processing Agreement (DPA) для SaaS-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація Data Processing Agreement (DPA) для SaaS-застосунку
Середня
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація Data Processing Agreement (DPA) для SaaS-приложення

Data Processing Agreement (DPA) — договір між контролером даних (клієнт SaaS) та обробником даних (SaaS-провайдер), обов'язковий за GDPR. Без DPA клієнт не може законно передавати персональні дані своїх користувачів SaaS-платформі.

Кому потрібен DPA від кого

Сценарій 1: Ваш SaaS обробляє дані користувачів клієнта Клієнт = контролер, ви = обробник. Клієнт запрошує у вас DPA.

Сценарій 2: Ваш SaaS використовує сторонні сервіси (AWS, Stripe, Mailgun) Ви = контролер або обробник, сторонній сервіс = субобробник. Потрібен DPA з кожним.

Що повинен містити DPA

1. Предмет і тривалість обробки
2. Природа та мета обробки
3. Тип персональних даних
4. Категорії суб'єктів даних
5. Зобов'язання та права контролера

Зобов'язання обробника (ст. 28 GDPR):
- Обробляти дані тільки по документованим інструкціям
- Гарантувати конфіденційність персоналу
- Прийняти технічні та організаційні заходи (TOM)
- Не залучати субобробників без згоди контролера
- Сприяти реалізації прав суб'єктів
- Видалити або повернути дані по закінченні договору
- Надати докази відповідності по запиту

Реалізація DPA-процесу в SaaS

class DPAManager:
    def generate_dpa(self, customer_id: int) -> str:
        """Генерувати DPA для конкретного клієнта"""
        customer = db.get_customer(customer_id)

        dpa_variables = {
            'customer_name': customer.legal_name,
            'customer_address': customer.registered_address,
            'customer_country': customer.country,
            'saas_name': 'Our SaaS Company LLC',
            'saas_address': '...',
            'data_types': customer.data_types,  # які дані обробляємо
            'purposes': customer.processing_purposes,
            'subprocessors': self.get_current_subprocessors(),
            'date': datetime.now().strftime('%d.%m.%Y'),
            'signature_placeholder': '__________'
        }

        template = self.load_template('dpa_template.md')
        return template.format(**dpa_variables)

    def get_current_subprocessors(self) -> list:
        """Актуальний список субобробників"""
        return [
            {'name': 'Amazon Web Services', 'purpose': 'Hosting', 'country': 'US',
             'transfer_mechanism': 'SCCs'},
            {'name': 'Stripe', 'purpose': 'Payment processing', 'country': 'US',
             'transfer_mechanism': 'SCCs'},
            {'name': 'SendGrid', 'purpose': 'Transactional email', 'country': 'US',
             'transfer_mechanism': 'SCCs'},
            {'name': 'Cloudflare', 'purpose': 'CDN and security', 'country': 'US',
             'transfer_mechanism': 'SCCs'},
        ]

Підписання DPA через DocuSign/HelloSign

@app.route('/api/dpa/sign', methods=['POST'])
@require_admin
def initiate_dpa_signing():
    customer_id = current_user.customer_id
    dpa_content = dpa_manager.generate_dpa(customer_id)

    # Створити підписний конверт
    envelope = docusign_client.create_envelope(
        document_content=dpa_content,
        signers=[{
            'email': request.json['signatory_email'],
            'name': request.json['signatory_name'],
            'role': 'Customer Signatory'
        }, {
            'email': DPA_INTERNAL_SIGNER_EMAIL,
            'name': 'Our Legal Representative',
            'role': 'Company Signatory'
        }],
        subject='Data Processing Agreement - Our SaaS',
        message='Please review and sign the DPA.'
    )

    db.save_dpa_record(customer_id, envelope['envelope_id'], 'pending')

    return jsonify({'envelope_id': envelope['envelope_id']})


@app.route('/webhooks/docusign', methods=['POST'])
def docusign_webhook():
    event = request.json
    if event['event'] == 'envelope-completed':
        envelope_id = event['envelopeId']
        dpa_record = db.get_dpa_by_envelope(envelope_id)

        # Скачати підписаний PDF
        pdf = docusign_client.get_document(envelope_id)
        storage.upload(f"dpa/{dpa_record.customer_id}/dpa-signed.pdf", pdf)

        db.update_dpa_record(envelope_id, status='signed',
                            signed_at=datetime.utcnow())

        # Уведомити клієнта
        send_email(dpa_record.customer_email,
                   subject='DPA підписан',
                   template='dpa_signed_confirmation')

Сторінка субобробників

GDPR вимагає уведомляти клієнтів про зміни списку субобробників:

class SubprocessorManager:
    def add_subprocessor(self, name, purpose, country, transfer_mechanism):
        # Зберегти новий субобробник
        db.add_subprocessor(name, purpose, country, transfer_mechanism)

        # Уведомити всіх клієнтів з активним DPA
        customers_with_dpa = db.get_customers_with_signed_dpa()

        for customer in customers_with_dpa:
            send_email(
                to=customer.dpa_contact_email,
                subject=f'Зміна списку субобробників: додан {name}',
                template='subprocessor_change',
                vars={
                    'new_subprocessor': name,
                    'purpose': purpose,
                    'country': country,
                    'effective_date': (datetime.now() + timedelta(days=30)).strftime('%d.%m.%Y'),
                    'subprocessors_url': 'https://saas.com/legal/subprocessors'
                }
            )

        # Клієнт має право возразити в течение 30 днів

Публічна сторінка субобробників

# Субобробники даних

Останнє оновлення: 01.03.2024

| Назва | Мета | Країна | Основання передачі |
|---|---|---|---|
| Amazon Web Services | Хостинг | США | SCC |
| Stripe | Платежі | США | SCC |
| SendGrid | Email | США | SCC |
| Cloudflare | CDN, безопасность | США | SCC |

SCC = Standard Contractual Clauses (Стандартні договірні положення ЄС)

Срок выполнения

Реалізація DPA-процесу з генерацією, підписанням та управлінням субобробниками — 3–5 робочих днів.