# Attribute-Based Access Control (ABAC) for Genomic Data Repositories

By the end of this guide you will be able to design an attribute-based access control model for a [genomic data repository](/knowledge/bioinformatics/genomic-data-repositories-navigating-public-databases-for-research), write and test enforceable policies with Open Policy Agent (OPA), connect those policies to your identity provider and storage layer, log every access decision for later review, and avoid the failure modes that break ABAC deployments in real bioinformatics [data management](/blog/guides/data-management-basics-principles-processes-and-best-practices) settings.

You need a Linux host or container with administrator rights, the OPA binary (version 0.60 or later), a JSON Web Token (JWT) issuing identity provider such as Keycloak, and an object store such as Amazon S3 or MinIO for genomics data storage. No programming beyond shell commands and one policy language is required.

## Why Genomic Repositories Need Attribute-Based Access Control

A genome is a biometric identifier. Variants reveal potentially private facts about individuals and their relatives, so any repository holding them must control who reads what, under which agreement, for which purpose [1]. Unlike a credit card number, a genome cannot be reissued after a breach. That single property drives most of the policy design in this article.

Traditional role-based access control assigns permissions to job titles. A "researcher" role gets read access. That model breaks down for genomic data for three reasons.

First, the same dataset carries different rules for different users. A clinician at the depositing hospital, an external collaborator under a data access agreement, and a metagenomics researcher at another institution all hold the same job title but deserve different answers. Second, consent varies per sample. One donor may consent to general research use while another consents only to oncology studies, and those restrictions travel with the data, not with the user role. Third, regulation pushes repositories toward federated architectures. GDPR requirements have prompted a shift from centralized controlled-access archives to federated models in which a central node supports discovery while distributed nodes handle access requests, sign agreements, and serve the data themselves [2]. In a federation, a local administrator cannot maintain a global role list, so decisions must be computed from attributes that travel with the request.

Attribute-based access control solves this by making the decision a function of four sets of attributes: who the requester is, what the data is, what they want to do, and the context of the request. The policy logic lives outside application code, so data stewards can revise it without redeploys.

The stakes are practical, not theoretical. Controlled access processes are resource intensive, and research institutions joining sharing federations often lack the staff to run them manually. Open-source middleware such as DS-PACK, in production at the ELIXIR Luxembourg data hosting platform, centralizes access control management while distributing enforcement to the nodes that hold the data [2]. That split, central policy authoring with local enforcement, is exactly the pattern ABAC supports.

Individual-level sharing raises the same questions from the other direction. Initiatives where people upload their own genotypes and health records to public platforms ask each participant to personally balance the risks and benefits of sharing, and the resulting challenges around awareness, control, and downstream use are well documented [3]. An ABAC layer gives a repository a technical place to encode those individual choices instead of treating consent as a PDF in a drawer.

## ABAC Compared With Role-Based Access Control

Many operating repositories today use layered role systems. A large population study described a Central Data Management system handling capture, integration, storage, refinement, and transfer, protected by a multi-layered role and right system for access control plus de-identification of identifying data, running on a high-availability Oracle database cluster that captured roughly 5 terabytes over eighteen months without critical incidents [4]. That architecture works when the user population is stable and consent is uniform.

ABAC generalizes the same idea. A role becomes just one attribute among many. The table below summarizes the difference.

| Dimension | Role-based control | Attribute-based control |
|--|--|--|
| Decision input | User role only | Subject, resource, action, and environment attributes |
| Consent handling | Manual, tracked outside the system | Encoded as resource attributes matched against subject scope |
| Federated sharing | Requires shared role registry | Requires shared attribute schema and policy |
| Policy change | Add or remove role assignments | Edit policy file, no data re-permissioning |
| Typical failure | Role explosion, over-provisioning | Stale or wrong attribute values |
| Audit granularity | Who with which role accessed | Which exact attributes justified the decision |

The audit line matters. When a decision is computed from attributes, the log records the full justification. Blockchain-based ledgering of genome dataset access addresses the single-point-of-failure problem of traditional log stores, and a MultiChain storage protocol using data streams won the iDASH Secure [Genome Analysis](/blog/guides/genome-analysis) Competition task on logging and querying user activity across multiple sites [1]. ABAC decisions feed that kind of ledger naturally because each decision already carries structured context.

## The Four Attribute Categories

Every ABAC decision evaluates attributes in four categories. Getting the schema right at this stage determines whether the deployment survives its first external collaboration.

**Subject attributes** describe the requester: institution, employment status, training completions, data access agreement status, approval date, and consent scope the requester is permitted to work under.

**Resource attributes** describe the data: data class (open, controlled, highly sensitive), consent code of the donor, disease area, file type (BAM, VCF, CRAM), embargo date, and the depositing institution. In bioinformatics data management practice, these attributes must be attached at ingestion, because reconstructing them later across terabytes of sequencing output is expensive and error prone.

**Action attributes** describe the operation: read, download, compute, export results, or delete. A compute-only permission lets a collaborator run analysis inside a secure environment without exporting raw reads, the pattern used in secure computing environments built for sensitive data analysis at academic medical centers [5].

**Environment attributes** describe context: source network, time of day, device security posture, and whether the request arrives through the internal analysis environment or the public API.

Data stewardship reviews of AI-based genomics consistently list governance, privacy measures, access control, accountability, and traceability as the core requirements for maintaining data integrity and accessibility, which maps directly onto these four categories [6].

## Step-by-Step: Building ABAC for a Genomic Data Repository

This walkthrough builds a working policy decision point with OPA, wires it to an identity provider, enforces decisions against an object store, and produces auditable logs. Every command shown runs as written on a standard Linux host with OPA installed.

### Step 1: Inventory and Classify Your Data

List every dataset in the repository and record, for each one, its data class, consent code, depositing institution, and file types. A simple tab-separated inventory works:

```
dataset_id   data_class   consent_code      disease_area   depositing_institution   file_type
DS-A-0142    controlled   GRU               cardiology     midwest_genomics         VCF
DS-A-0143    controlled   DS-oncology       oncology       midwest_genomics         BAM
DS-B-0071    open         GRU               infectious     coastal_pathogens        FASTQ
DS-A-0155    sensitive    POA_cardiology    cardiology     midwest_genomics         CRAM
```

Consent codes here follow the common research-use vocabulary: GRU stands for general research use, DS marks disease-specific restrictions, and POA marks permission required for any additional use. Assign one code per sample before ingestion. If a dataset mixes donors with different consent terms, split it. Mixing is the root cause of most consent enforcement failures later.

For dual-use concerns, classification extends beyond human data. Pathogen sequence data can enable malicious engineering or reconstruction of the organism, and proposed safeguards include obfuscating raw reads by pooling sequences from multiple samples of the same organism, which preserves most genomic information while preventing full reconstruction of any individual sample [7]. If your repository stores pathogen isolates, add a `dual_use` resource attribute and restrict raw-read downloads accordingly, serving analysis-ready pooled or processed data instead.

### Step 2: Define the Attribute Schema

Write the schema down as a document before writing any policy. For each attribute, record its category, data type, source system, and owner. A workable starting schema:

| Attribute | Category | Type | Source |
|--|--|--|--|
| institution | subject | string | identity provider |
| data_access_agreement | subject | boolean | agreements database |
| agreement_expiry | subject | date | agreements database |
| training_complete | subject | boolean | learning system |
| consent_scope | subject | array of strings | project approval record |
| data_class | resource | string | ingestion pipeline |
| consent_code | resource | string | sample manifest |
| depositing_institution | resource | string | sample manifest |
| embargo_date | resource | date | deposition record |
| action | action | string | request |
| network_zone | environment | string | gateway |

Two rules keep this schema healthy. Every attribute must have exactly one authoritative source. Every attribute must be delivered automatically at request time. An attribute that a human types into a spreadsheet is an attribute that will be wrong within a month.

### Step 3: Deploy a Policy Decision Point With OPA

Download and start OPA as a decision service:

```bash
curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64_static
chmod 755 opa
./opa run --server --addr localhost:8181 policy.rego
```

Expected startup output:

```
{"level":"info","msg":"Initializing server.","addr":"localhost:8181"}
```

OPA now answers POST requests at `/v1/data/<policy path>` with a JSON decision. Your applications, gateways, and pipelines all ask this one endpoint. Centralizing the decision while distributing enforcement mirrors the DS-PACK design pattern for controlled-access federations [2].

### Step 4: Write Your First Policies

Create a file named `policy.rego`:

```rego
package genomic.authz

default allow = false

default deny_reason = "no matching policy"

# Open data is readable by any authenticated user
allow {
    input.action == "READ"
    input.resource.data_class == "open"
    input.subject.authenticated == true
}

# Controlled data requires an active agreement with the depositing institution
allow {
    input.action == "READ"
    input.resource.data_class == "controlled"
    input.subject.institution == input.resource.depositing_institution
    input.subject.data_access_agreement == true
}

# External collaborators may read controlled data under an approved consent scope
allow {
    input.action == "READ"
    input.resource.data_class == "controlled"
    input.subject.consent_scope[_] == input.resource.consent_code
    input.subject.data_access_agreement == true
    input.subject.agreement_expiry > time.now_ns() / 1000000000
}

# Sensitive data is compute-only inside the analysis environment
allow {
    input.action == "COMPUTE"
    input.resource.data_class == "sensitive"
    input.subject.training_complete == true
    input.environment.network_zone == "analysis"
}

# Raw read downloads of dual-use data are blocked everywhere
deny {
    input.action == "DOWNLOAD"
    input.resource.dual_use == true
}
```

The `time.now_ns()` comparison enforces agreement expiry. Dividing nanoseconds by one billion yields Unix seconds, which you compare against the expiry stored as a Unix timestamp integer. That single rule prevents the most common controlled-access lapse, the collaborator whose agreement expired six months ago but who still holds a working credential.

### Step 5: Test the Policy With a Worked Example

Create `input.json` representing a collaborator from an outside institution requesting a controlled oncology dataset under an approved scope:

```json
{
  "subject": {
    "authenticated": true,
    "institution": "east_coast_university",
    "data_access_agreement": true,
    "agreement_expiry": 1900000000,
    "training_complete": true,
    "consent_scope": ["DS-oncology"]
  },
  "resource": {
    "data_class": "controlled",
    "consent_code": "DS-oncology",
    "depositing_institution": "midwest_genomics",
    "file_type": "BAM"
  },
  "action": "READ",
  "environment": {
    "network_zone": "public_api"
  }
}
```

Evaluate it:

```bash
./opa eval -d policy.rego -i input.json "data.genomic.authz.allow"
```

Expected output:

```json
{
  "result": [
    {
      "expressions": [
        {
          "text": "data.genomic.authz.allow",
          "location": {
            "col": 11,
            "file": "policy.rego",
            "row": 1
          },
          "value": true
        }
      ]
    }
  ]
}
```

Now change `consent_scope` to `["GRU"]` and rerun. The value flips to `false`, because the collaborator's approved scope does not cover a disease-specific consent code. This is the behavior that role-based access control cannot express: two users with identical job titles, identical agreements, and different allowed datasets.

To rule out silent policy misses, also evaluate the deny reason:

```bash
./opa eval -d policy.rego -i input.json --format pretty "data.genomic.authz"
```

A result of `undefined` means no rule fired at all, which usually signals a typo in the input path or a missing attribute rather than a deliberate denial. Treat every `undefined` as a bug.

### Step 6: Connect Attributes to Your Identity Provider

Attributes must arrive with the request, not be looked up afterward by the application. Configure your identity provider to embed subject attributes as JWT claims at login. A decoded token for the collaborator above contains:

```json
{
  "sub": "u-4471",
  "institution": "east_coast_university",
  "data_access_agreement": true,
  "agreement_expiry": 1900000000,
  "training_complete": true,
  "consent_scope": ["DS-oncology"]
}
```

Your API gateway extracts the claims, merges in resource attributes from the catalog, adds environment attributes, and posts the assembled request to OPA. Keycloak, the reference identity provider used here, maps these values through its client scope and protocol mapper settings. The critical configuration check is that `consent_scope` is sourced from the project approval record and synced automatically. If it is typed by hand during onboarding, the policy is only as good as whoever typed it.

Attributes about the individual donor are also subject attributes in the broad sense of the system, and they deserve the same rigor. The PROMISE system, piloted with nineteen cardiomyopathy patients, lets the patient grant selective access to defined parts of their genetic information using single base-pair resolution cryptography, and in the pilot 79 percent of participants rated the safety of their genetic data as very important, with most reporting changed attitudes toward data handling after roughly four months of app use [8]. Whether your donor-controlled attributes live in a cryptographic envelope or a claims database, the design principle is identical: the donor's choice is a first-class attribute in every decision.

### Step 7: Enforce Decisions at the Storage Layer

The storage layer must treat the OPA decision as the only path to data. Two enforcement patterns cover most repositories.

**Gateway enforcement.** All reads pass through a reverse proxy that calls OPA and forwards or rejects the request. The gateway call:

```bash
curl -s -X POST localhost:8181/v1/data/genomic/authz \
     -H "Content-Type: application/json" \
     -d @request.json
```

Expected response body:

```json
{"result": true}
```

On `false` or `undefined`, the gateway returns HTTP 403 with a logged reason and never touches the storage backend.

**Storage-native enforcement.** Tag each object with its resource attributes at upload and let bucket policy do a coarse pre-filter, with OPA handling the fine-grained rules. A bucket policy that blocks untagged objects from public retrieval:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::genomics-repository-controlled/*",
      "Condition": {
        "StringNotEquals": {
          "s3:ExistingObjectTag/data_class": ["open"]
        }
      }
    }
  ]
}
```

Apply it with:

```bash
aws s3api put-bucket-policy --bucket genomics-repository-controlled --policy file://bucket-policy.json
```

Verify with a retrieval attempt against a controlled object from an unauthenticated context. The expected failure is:

```
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
```

The two layers are complementary, not redundant. The bucket policy survives a misconfigured gateway. The OPA layer catches what coarse tags cannot, such as consent-code matching and agreement expiry.

### Step 8: Log Every Decision

Write one structured log record per decision, containing the full attribute set, the decision, and the matched rule:

```json
{
  "ts": "2026-11-11T14:22:03Z",
  "decision": "allow",
  "matched_rule": "controlled_external_consent_scope",
  "subject": {"institution": "east_coast_university", "consent_scope": ["DS-oncology"]},
  "resource": {"dataset_id": "DS-A-0143", "consent_code": "DS-oncology"},
  "action": "READ",
  "environment": {"network_zone": "public_api"}
}
```

For tamper-resistant audit trails, chain these records into an append-only ledger. The MultiChain-based approach demonstrated in the iDASH competition stores access log entries in blockchain data streams and supports efficient later query, addressing the single-point-of-failure weakness of conventional log servers [1]. Even if you do not adopt a ledger, adopt the schema. Every incident review starts with the question of which attributes justified the access, and unstructured logs cannot answer it.

### Step 9: Verify the Result

Run three checks before declaring the deployment live.

First, a positive test. Request a controlled dataset with a valid matching consent scope and confirm an allow decision with the expected `matched_rule`.

Second, a negative test with expiry. Set `agreement_expiry` to a past timestamp and confirm denial. This catches the common failure where the expiry comparison was written against the wrong unit, comparing nanoseconds against seconds and always evaluating true.

Third, an undefined test. Send a request missing the `consent_scope` claim entirely and confirm the system denies rather than allowing. An ABAC stack that fails open is worse than no ABAC stack, because the deny path exists to catch malformed requests too.

Then review the log stream for one day and confirm every real access has a decision record with a matched rule. If gateway traffic exceeds logged decisions, some path is bypassing the policy engine, and you must close it before any external sharing begins.

## Common Errors and Fixes

![Triage path for OPA results: undefined means a bug, false means a real denial, and allowed requests rejected by storage point to gateway credentials.](/article-images/illustrations/attribute-based-access-control-genomic-data-undefined-decision-triage.webp)

**`rego_parse_error: line N: ...`** on OPA startup. The policy file has a syntax error, typically a missing closing brace or an operator typo. OPA prints the file, line, and column. Fix the indicated line and rerun.

**OPA returns `undefined` instead of `false`.** No rule body matched, usually because an input attribute name differs between the gateway and the policy. Print the full input with `./opa eval -i request.json "input"` and compare key names character by character. Rego is case sensitive.

**`An error occurred (AccessDenied)` from S3 on requests OPA allowed.** The gateway is forwarding the original requester credentials instead of its own authorized role, so storage-level policy rejects the read. Configure the gateway to assume a service role and carry the OPA decision in a signed header instead.

**`invalid claim` or missing attributes in the decoded JWT.** The identity provider protocol mapper for that attribute is disabled or scoped to the wrong client. Enable the mapper, reissue the token, and re-decode it to confirm the claim appears.

**All requests denied after a policy edit in production.** A `default deny` block plus a typo produces total lockout. Keep the previous policy version in version control, and stage policy changes by evaluating a day of replayed real requests against the new policy before deploying it.

## Attribute-Based Encryption: ABAC in the Cryptographic Layer

Policy engines control who calls your repository. Attribute-based encryption pushes control into the data itself, so that ciphertext stays protected even if storage is exposed. In key-policy attribute-based encryption, data is encrypted against a set of attributes, and a user's key encodes a policy over attributes, meaning decryption is possible only when the key's policy matches the data's attributes. The P2GT scheme applies this to genomic data in the cloud with unbounded attributes, and adds an equality-test algorithm that matches digitized single nucleotide polymorphisms directly on users' ciphertext without decrypting, supporting personalized medicine tests. Its enhanced version, P2GT+, supports privacy-preserving paternity testing, genetic compatibility testing, and disease susceptibility testing over encrypted SNPs, and both schemes were validated on the 1000 Genomes dataset with results showing practical, scalable performance [9].

This matters for repository design in one specific way. If your threat model includes the storage provider or a future data export, cryptographically binding access policy to the ciphertext gives you a guarantee that a policy engine alone cannot. The tradeoffs are operational, since key management and revocation add real overhead. For most institutional repositories, the pragmatic sequence is policy-engine ABAC first, with attribute-based encryption evaluated for the most sensitive subsets or for donor-held control in the style demonstrated by PROMISE [8].

## Common Mistakes and Limitations

**Copying roles and calling it ABAC.** If your policies read `input.subject.role == "researcher"`, you have relocated role-based access control, not replaced it. The value appears when resource and consent attributes enter the decision.

**Attaching consent attributes late.** Consent codes assigned after ingestion, by hand, drift from reality. Enforce consent metadata as a required field in the ingestion pipeline, and reject submissions without it. Reviews of data stewardship in AI-based genomics flag exactly this gap between governance intent and curation practice [6].

**Failing open on undefined decisions.** Any system path that returns data when OPA is unreachable or returns `undefined` defeats the model. Deny by default, everywhere, including batch pipelines that bypass the API gateway.

**Ignoring attribute provenance.** An attribute is only as trustworthy as its source. Record where each value came from and how recently it was refreshed. Stale training status and expired agreements are the two most common sources of silent over-permission.

**Treating open data as harmless.** Personal genomic data sharing initiatives have documented the challenges that arise when individuals upload and redistribute their own genotypes and health records, including limited awareness of downstream implications [3]. Even open tiers should carry attribution requirements and provenance metadata so that redistribution can be traced.

**Assuming de-identification settles the ethics.** Genotype and pedigree data can identify individuals or families even after identifiers are stripped, which is why controlled access for such data requires careful design in any population, with documented concerns around privacy protection and community trust in specific research contexts such as H3Africa sequencing initiatives [10]. Individual clinical cases also need qualified medical and institutional oversight, which no access-control system substitutes for.

**Skipping cross-institution policy review.** In federated sharing, your policy decides access to another institution's donors. Agree on the shared attribute vocabulary and deny semantics with partner sites before the first data transfer, because policy disputes discovered mid-transfer stall collaborations for months.

**Forgetting dual-use classification.** Repositories holding pathogen isolates need a dual-use flag and download restrictions on raw reads, with pooled or processed data offered where full sample reconstruction is not required [7].

**One more structural note.** Secure environments and layered controls are complementary. Academic medical centers running sensitive-data analysis environments combine user access controls, data controls, hardware segregation, auditing, and even published tooling on GitHub, supporting hundreds of users across dozens of projects while balancing access with privacy and security [5]. ABAC is the decision brain inside that stack, not a substitute for the rest of it.

## Frequently Asked Questions

### How is attribute-based access control different from role-based access control for genomic data?

Role-based access grants permissions by job title, while ABAC computes each decision from subject, resource, action, and environment attributes. For genomic repositories the practical difference is that ABAC can enforce per-sample consent codes and per-agreement expiry, which roles cannot express without exploding into dozens of narrow roles.

### Do I need attribute-based encryption like key-policy ABE for my repository?

Not to start. A policy engine with deny-by-default enforcement covers institutional repositories, while attribute-based encryption adds protection that survives storage exposure and suits highly sensitive subsets or donor-controlled sharing, as demonstrated by schemes validated on the 1000 Genomes dataset [9].

### Which attributes should I define first?

Start with data class, consent code, depositing institution, data access agreement status, agreement expiry, and consent scope. These six attributes express the decisions that cover most controlled-access scenarios, and you can extend the schema as new sharing scenarios appear.

### How does ABAC work in federated data sharing under GDPR?

In a federation, the central node manages policy and discovery while each distributed node enforces decisions on the data it holds, and open-source middleware such as DS-PACK operationalizes this split in production at ELIXIR Luxembourg [2]. ABAC fits this model because partners exchange a schema and policies rather than global role lists.

### Can ABAC enforce donor consent restrictions technically?

Yes, when consent codes are stored as resource attributes and matched against the requester's approved consent scope at decision time. The harder work is upstream, keeping consent metadata accurate at ingestion and splitting datasets where donors' terms differ.

### How do I audit access to genomic datasets reliably?

Log every decision with the full attribute set and matched rule in structured form, and consider an append-only ledger for tamper resistance. Blockchain data streams have been used successfully for cross-site genome access logging in the iDASH competition setting [1].

### What happens when an attribute value is wrong or stale?

Whatever the policy computes becomes wrong, so an expired agreement attribute that was never updated grants ongoing access. This is the top operational risk in ABAC, and the mitigations are single authoritative sources per attribute, automatic synchronization, expiry comparisons inside the policy, and periodic access reviews against the logs.

### Is ABAC alone enough to protect re-identifiable genomic data?

No. ABAC controls who requests data from your repository, but re-identification risk also requires de-identification practice, controlled publication of aggregate results, secure analysis environments for compute-only access, and review of dual-use considerations for pathogen data [7]. Treat ABAC as the policy core of a layered defense.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How is attribute-based access control different from role-based access control for genomic data?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Role-based access grants permissions by job title, while ABAC computes each decision from subject, resource, action, and environment attributes. For genomic repositories the practical difference is that ABAC can enforce per-sample consent codes and per-agreement expiry, which roles cannot express without exploding into dozens of narrow roles."
      }
    },
    {
      "@type": "Question",
      "name": "Do I need attribute-based encryption like key-policy ABE for my repository?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Not to start. A policy engine with deny-by-default enforcement covers institutional repositories, while attribute-based encryption adds protection that survives storage exposure and suits highly sensitive subsets or donor-controlled sharing, as demonstrated by schemes validated on the 1000 Genomes dataset."
      }
    },
    {
      "@type": "Question",
      "name": "Which attributes should I define first?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Start with data class, consent code, depositing institution, data access agreement status, agreement expiry, and consent scope. These six attributes express the decisions that cover most controlled-access scenarios, and you can extend the schema as new sharing scenarios appear."
      }
    },
    {
      "@type": "Question",
      "name": "How does ABAC work in federated data sharing under GDPR?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "In a federation, the central node manages policy and discovery while each distributed node enforces decisions on the data it holds, and open-source middleware such as DS-PACK operationalizes this split in production at ELIXIR Luxembourg. ABAC fits this model because partners exchange a schema and policies rather than global role lists."
      }
    },
    {
      "@type": "Question",
      "name": "Can ABAC enforce donor consent restrictions technically?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, when consent codes are stored as resource attributes and matched against the requester's approved consent scope at decision time. The harder work is upstream, keeping consent metadata accurate at ingestion and splitting datasets where donors' terms differ."
      }
    },
    {
      "@type": "Question",
      "name": "How do I audit access to genomic datasets reliably?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Log every decision with the full attribute set and matched rule in structured form, and consider an append-only ledger for tamper resistance. Blockchain data streams have been used successfully for cross-site genome access logging in the iDASH competition setting."
      }
    },
    {
      "@type": "Question",
      "name": "What happens when an attribute value is wrong or stale?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Whatever the policy computes becomes wrong, so an expired agreement attribute that was never updated grants ongoing access. This is the top operational risk in ABAC, and the mitigations are single authoritative sources per attribute, automatic synchronization, expiry comparisons inside the policy, and periodic access reviews against the logs."
      }
    },
    {
      "@type": "Question",
      "name": "Is ABAC alone enough to protect re-identifiable genomic data?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. ABAC controls who requests data from your repository, but re-identification risk also requires de-identification practice, controlled publication of aggregate results, secure analysis environments for compute-only access, and review of dual-use considerations for pathogen data. Treat ABAC as the policy core of a layered defense."
      }
    }
  ]
}
</script>

## Sources

1. [Using blockchain to log genome dataset access: efficient storage and query.](https://pubmed.ncbi.nlm.nih.gov/32693796/)
2. [DS-PACK: Tool assembly for the end-to-end support of controlled access human data sharing.](https://pubmed.ncbi.nlm.nih.gov/38750048/)
3. [Challenges of web-based personal genomic data sharing.](https://pubmed.ncbi.nlm.nih.gov/26085313/)
4. [Efficient data management in a large-scale epidemiology research project.](https://pubmed.ncbi.nlm.nih.gov/21256617/)
5. [Design and Implementation of a Secure Computing Environment for Analysis of Sensitive Data at an Academic Medical Center.](https://pubmed.ncbi.nlm.nih.gov/30815128/)
6. [Data stewardship and curation practices in AI-based genomics and automated microscopy image analysis for high-throughput screening studies: promoting robust and ethical AI applications.](https://pubmed.ncbi.nlm.nih.gov/39988670/)
7. [Methods for safely sharing dual-use genetic data.](https://pubmed.ncbi.nlm.nih.gov/41756120/)
8. [Controlling my genome with my smartphone: first clinical experiences of the PROMISE system.](https://pubmed.ncbi.nlm.nih.gov/34694434/)
9. [P2GT: Fine-Grained Genomic Data Access Control With Privacy-Preserving Testing in Cloud Computing.](https://pubmed.ncbi.nlm.nih.gov/33656996/)
10. [Ethical and legal implications of whole genome and whole exome sequencing in African populations.](https://pubmed.ncbi.nlm.nih.gov/23714101/)