Atlassian Cloud Hardening Guide
Platform-wide security hardening for Atlassian Cloud — the Common Controls hub (organization authentication, Atlassian Guard, Marketplace app governance, data security policies, org audit logging) shared by the Jira Cloud and Bitbucket product guides.
Overview
Atlassian serves 300,000+ customers with the Atlassian Marketplace hosting 6,000+ apps. OAuth 2.0, Connect (JWT), and Forge app frameworks create multiple attack vectors. Critical RCE vulnerabilities (CVE-2023-22515, CVSS 10.0; CVE-2022-26134, CVSS 9.8) demonstrated server-side risks. Cloud instances face OAuth token and AppLinks impersonation attacks from compromised Marketplace apps.
Intended Audience
- Security engineers managing Atlassian products
- IT administrators configuring Jira and Confluence
- GRC professionals assessing collaboration tool security
- Third-party risk managers evaluating Marketplace apps
How to Use This Guide
- L1 (Crawl): Essential controls for all organizations
- L2 (Walk): Enhanced controls for security-sensitive environments
- L3 (Run): Strictest controls for regulated industries
Scope
This guide is the Common Controls hub for the Atlassian platform. It covers the organization-wide Atlassian Cloud (and, where noted, Data Center) configurations that apply across every Atlassian product: authentication and Atlassian Guard, Marketplace app governance, API and integration security, data residency and data security policies, and organization audit logging. Product-specific hardening lives in the product guides listed below.
Confluence has no separate product guide yet, so Confluence-specific settings (space permissions, anonymous access) remain in this hub.
A Note on Licensing: Atlassian Guard
Many of the controls below are delivered by Atlassian Guard, the identity and data-security add-on that was previously named Atlassian Access. The product was renamed and split into two subscription levels, so older documentation and console screenshots referring to “Access” describe what is now Guard:
- Guard Standard — SSO enforcement, SCIM user provisioning and deprovisioning, mobile app policies, API token controls, and the organization-wide audit log.
- Guard Premium — everything in Standard plus data classification, anomalous activity detection, content scanning, and SIEM webhook forwarding.
Guard is licensed per unique billable user across the organization and is independent of the Jira or Confluence product edition, so a Premium product plan alone does not grant these capabilities. Source: Atlassian Guard pricing
Table of Contents
- Authentication & Access Controls
- Marketplace App Security
- API & Integration Security
- Data Security
- Monitoring & Detection
- Vulnerability Management
- Compliance Quick Reference
Products in This Platform
Atlassian is a multi-product platform. This guide is the Common Controls hub — the organization-wide controls configured once at admin.atlassian.com and inherited by every Atlassian product. Product-specific controls live in their own guides:
| Product | Guide | Covers |
|---|---|---|
| Common Controls (this guide) | — | Organization authentication & Atlassian Guard, IP allowlisting, Marketplace app governance, API tokens & OAuth, data residency & data security policies, organization audit log and anomaly detection |
| Jira Cloud | Jira Cloud guide | Permission schemes, work item security schemes, global permissions, public/anonymous space exposure, guest access, automation rule egress |
| Bitbucket | Bitbucket guide | Workspace membership & invitations, project permissions, workspace app access rules, forking, branch restrictions & merge checks, signed commits, Pipelines secrets and deployments |
| Confluence | — | No product guide yet — Confluence space permissions and anonymous access are covered in this hub (§1.2) |
Moved controls: organization-level controls that previously appeared in the product guides now live here and are not duplicated. From the former Jira Cloud guide: SAML SSO (§1.1), authentication policies (§1.1), two-step verification (§1.1), SAML JIT/SCIM provisioning (§1.1), domain verification (§1.1), Atlassian Guard licensing (§1.1 and A Note on Licensing above), organization admin roles (§1.2), third-party app access (§2.1, §3.3), audit logging (§5.1), and security alerting (§5.2). From the former Bitbucket guide: two-step verification and SAML SSO (§1.1), IP allowlisting (§1.4), and organization audit logging (§5.1).
1. Authentication & Access Controls
1.1 Enforce SSO with MFA
Profile Level: L1 (Crawl) CIS Controls: 6.3, 6.5 NIST 800-53: IA-2(1)
Description
Require SAML SSO with MFA for all Atlassian Cloud access, eliminating local password authentication. SAML configuration and enforced authentication policies are Atlassian Guard Standard capabilities (formerly sold as Atlassian Access) and are not tied to the Jira or Confluence product edition. Source: Atlassian Guard pricing
Prerequisites
- Atlassian organization with at least one verified domain
- Atlassian Guard Standard subscription (SAML SSO and enforced authentication policies are Guard capabilities, not product-edition features)
- Organization admin access
- SAML 2.0 compatible identity provider
Rationale
Why This Matters:
- Centralizing Atlassian authentication in your corporate IdP means MFA, conditional access, and session policy are enforced on every login to every Atlassian product, instead of product by product
- Configuring SSO alone does not force anyone to use it — without an authentication policy, a managed user can still sign in with a local Atlassian password and bypass every IdP control
- Domain verification is the prerequisite that turns accounts on your domain into managed accounts; unclaimed accounts are shadow identities that sit outside your authentication policy and your offboarding process
- Jira holds vulnerability tickets, roadmaps, and customer issues, and Confluence holds architecture documentation and credentials pasted into pages, so one compromised login exposes a great deal
- SSO plus directory provisioning gives one place to revoke access instantly when someone leaves, eliminating standing access through local credentials
Attack Prevented: Credential stuffing, phishing, password reuse, SSO bypass via local passwords, shadow accounts on your own domain, offboarding gaps
ClickOps Implementation (Atlassian Cloud)
Step 1: Verify Your Domains
- Navigate to: admin.atlassian.com → Directory → Domains
- Add each domain your organization owns and complete DNS verification
- Claim the existing Atlassian accounts on those domains into organization management — until an account is claimed, no authentication policy applies to it
- Repeat for every domain and subdomain in use, including domains acquired through mergers, which are the ones most often missed
Step 2: Configure SAML SSO
- Navigate to: admin.atlassian.com → Security → SAML single sign-on
- Click Add SAML configuration
- Configure:
- Identity provider: Your IdP (Okta, Entra ID, etc.)
- Entity ID: From IdP
- SSO URL: IdP login endpoint
- Upload IdP certificate
Step 3: Enforce SSO with an Authentication Policy
- Navigate to: Security → Authentication policies
- Create policy:
- Name: “SSO Required”
- Members: All managed users from verified domains
- Settings:
- Require SSO: Enabled
- Allow local passwords: Disabled
- Create a separate break-glass policy covering two or three dedicated organization-admin accounts that are exempt from SSO enforcement, so an IdP outage or misconfiguration cannot lock every administrator out. Protect those accounts with their own strong two-step verification and monitor every use of them in the audit log (§5.1)
Step 4: Configure Two-Step Verification
- Navigate to: Security → Two-step verification
- Enable: Require two-step verification for all users
- Configure:
- Enforcement: Required
- Grace period: None (L2)
- Where the IdP is authoritative, enforce phishing-resistant factors (FIDO2 security keys or passkeys) there for administrators rather than relying on TOTP alone
Step 5: Automate Provisioning and Deprovisioning
- Connect a directory and enable SCIM user provisioning so accounts, group membership, and — critically — deactivation flow from the IdP automatically
- Where SCIM is not available for a given IdP, enable SAML Just-In-Time (JIT) provisioning so accounts are created from authoritative IdP attributes on first SSO login rather than by hand
- Map IdP attributes and groups to Atlassian groups, then verify that the mapped groups are the same ones your product access grants and permission schemes rely on
- Test the full lifecycle end to end: create a test identity in the IdP, confirm it appears and receives the right product access, then disable it in the IdP and confirm Atlassian access is revoked
JIT is not deprovisioning. JIT provisioning only creates accounts at login; it never removes them. An organization relying on JIT alone accumulates active accounts for departed employees. Use SCIM where the IdP supports it, and where it does not, pair JIT with a scheduled manual deactivation review.
Validation & Testing
- From a browser with no existing session, sign in as a managed user and confirm you are redirected to the IdP and cannot reach a local Atlassian password prompt
- Attempt a password reset for a managed user and confirm the flow is unavailable or has no effect on access
- Confirm every verified domain lists zero unclaimed accounts under Directory → Managed accounts
- Deactivate a test identity in the IdP and confirm the corresponding Atlassian account loses access without any admin action
- Confirm the break-glass policy contains only the intended accounts and that every sign-in using it appears in the organization audit log
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| SOC 2 | CC6.1 | Logical access controls |
| NIST 800-53 | IA-2(1) | MFA for network access |
1.2 Implement Granular Product Access and Limit Organization Admins
Profile Level: L1 (Crawl) NIST 800-53: AC-3, AC-6, AC-6(1)
Description
Configure who receives access to each Atlassian product at the organization level, and hold the organization administrator role to the smallest workable set of accounts. Product access is granted at admin.atlassian.com → Products; administrator roles are managed at admin.atlassian.com → Directory → Administrators. Within-product authorization (Jira permission schemes, Bitbucket workspace and project permissions) is configured in each product and is covered in the product guides.
Rationale
Why This Matters:
- Default-open product access lets every licensed user reach every Jira space and Confluence space, far beyond what their role requires
- Organization admins can change SSO configuration, authentication policies, product access grants, and billing across every Atlassian product, which makes the role the single highest-value target in the tenant — an attacker who phishes one org admin owns everything downstream
- Product admins can perform most day-to-day administration without organization-wide authority, so most people currently holding org admin almost certainly do not need it
- Disabling anonymous Confluence access prevents unauthenticated readers from harvesting internal documentation, architecture diagrams, and secrets pasted into pages
- Reviewing admin rosters on a cadence stops the privilege accumulation that follows reorganizations and offboarding gaps
Attack Prevented: Lateral movement, privilege creep, organization-admin account takeover, excessive standing privilege, insider data harvesting, anonymous information disclosure
ClickOps Implementation
Step 1: Configure Product Access
- Navigate to: admin.atlassian.com → Products
- For each product, configure:
- Default access: Disabled (users must be granted access)
- User access: Specific groups only
- Grant access through IdP-synced groups rather than to individuals, so access follows the joiner/mover/leaver process automatically
Step 2: Limit Organization Administrators
- Navigate to: admin.atlassian.com → Directory → Administrators
- Record every account holding the organization admin role and the business reason for each
- Reduce the roster to the minimum that still supports coverage — two or three accounts is typical, and those should be dedicated admin identities rather than the everyday accounts of the same people
- Move anyone whose work is confined to one product to a product admin role instead
- Re-review the roster on a fixed cadence and alert on organization admin role grants in the audit log (§5.1), since a self-granted admin role is a hallmark of an in-progress compromise
Step 3: Configure Confluence Space Permissions
- Navigate to: Confluence → Space settings → Permissions
- Configure:
- Anonymous access: Disabled
- Group permissions: Specific groups per space
- Default permissions: View only for most users
Within-product authorization lives in the product guides. Jira permission schemes, work item security schemes, and global permissions are covered in the Jira Cloud guide. Bitbucket workspace membership, project permissions, and branch restrictions are covered in the Bitbucket guide. Grant product access here first; scope it inside the product there.
1.3 Configure API Token Policies
Profile Level: L1 (Crawl) NIST 800-53: IA-5
Description
Control API token creation and set an organization expiration policy that is shorter than the platform ceiling. Since 15 December 2024, every newly created Atlassian account API token must carry an expiry date between 1 day and 1 year, and tokens created before that date without an expiry were force-expired in batches between March and May 2026. The platform therefore guarantees only a one-year maximum lifetime — a shorter organizational standard is a policy decision you still have to make and enforce. Source: Manage API tokens for your Atlassian account
Rationale
Why This Matters:
- API tokens authenticate as the user and bypass interactive SSO and MFA, so an exposed token is a standing credential carrying the full access of its owner
- The mandatory-expiry change removes the worst case of a token that never dies, but a token living the full one-year platform maximum still gives an attacker a very long window of persistent access
- Long-lived tokens linger in scripts, CI systems, and developer laptops, and a one-year rotation cadence rarely matches the pace at which contractors leave and repositories get forked
- Restricting who can mint tokens and setting a shorter internal expiration standard shrinks the window an exfiltrated token remains valid
- Auditing and revoking unused tokens removes forgotten credentials that attackers routinely find in code repositories and config files
- Tokens that silently expire on the platform’s schedule can break production integrations, so tracking expiry dates is an availability concern as much as a security one
Attack Prevented: Token theft, MFA bypass, persistent unauthorized access, credential sprawl
ClickOps Implementation
Step 1: Configure Token Settings
- Navigate to: admin.atlassian.com → Security → API tokens
- Configure:
- Allow users to create API tokens: Controlled (requires Atlassian Guard)
- Token expiration: Choose the shortest interval your integrations tolerate. Atlassian accepts 1 day to 1 year; a 90-day organizational standard is a policy choice well inside that ceiling, not the platform maximum
Step 2: Audit Existing Tokens
- Navigate to: Security → API tokens → Token controls
- Review active tokens, recording the expiry date on each one
- Revoke unused or suspicious tokens
- Flag any token whose expiry sits near the one-year ceiling for early rotation and for migration to a scoped OAuth 2.0 integration where one exists
Step 3: Plan for Forced Expiry
- Inventory every automation, CI job, and script that authenticates with a personal API token
- Assign each an owner responsible for rotation ahead of the expiry date
- Alert on authentication failures from service integrations so an expired token surfaces as a tracked incident rather than a silent outage
1.4 Restrict Product Access with IP Allowlisting
Profile Level: L3 (Run)
| Framework | Control ID |
|---|---|
| CIS Controls | 12.7, 13.4 |
| NIST 800-53 | AC-3, AC-17, SC-7 |
| ISO 27001:2022 | A.8.20, A.8.21 |
Description
Restrict browser and REST API access to Jira, Jira Service Management, and Confluence so that only requests originating from approved IP ranges — corporate egress, VPN concentrators, or managed CI runners — are accepted. IP allowlisting is configured per product under Product settings → Security → IP allowlist and is available on Premium and Enterprise product plans. Source: What is the scope of IP allowlists in Atlassian Cloud?
Rationale
Why This Matters:
- A stolen password or session cookie is useless from an attacker’s own infrastructure if the product rejects the connection before authentication is evaluated
- The allowlist applies to both interactive site login and REST API calls, so it constrains scripted data harvesting with a leaked API token as effectively as it constrains browser logins
- Network-level filtering runs independently of the identity provider, giving a second, non-credential control that survives an IdP compromise or an MFA-fatigue attack
- Bulk exfiltration campaigns typically run from cloud hosting or residential proxy ranges that never appear in a corporate egress allowlist, so the restriction cuts off the exfiltration path even after account takeover
Important scope limitation: the product IP allowlist does not cover admin.atlassian.com. Organization administration — user management, authentication policies, product access grants, and billing — remains reachable from any IP address. Treat administrator accounts as still fully internet-exposed and protect them with phishing-resistant MFA and dedicated authentication policies rather than assuming the allowlist covers them. The allowlist also does not filter mobile app traffic in the same way as browser traffic, so validate mobile access before enforcing.
Attack Prevented: Credential-stuffing from attacker infrastructure, session hijacking replayed off-network, API-token-driven bulk export, unmanaged-device access
ClickOps Implementation
Step 1: Inventory Legitimate Source Ranges
- Collect corporate office egress IPs, VPN concentrator IPs, and the static egress ranges of any CI/CD system, integration platform, or monitoring tool that calls the Atlassian REST API
- Confirm each range is static — dynamic residential or auto-scaling cloud IPs will break access unpredictably
- Document the business owner for every range so stale entries can be removed later
Step 2: Configure the Allowlist per Product
- Navigate to: Product settings → Security → IP allowlist for Jira
- Add each approved IP address or CIDR range with a description identifying its owner
- Repeat for Jira Service Management and Confluence — the allowlist is configured separately for each product and is not inherited across them
- Review whether customer-facing Jira Service Management portals need to remain publicly reachable before enforcing on that product
Step 3: Compensate for the Admin Console Gap
- Apply a dedicated authentication policy to organization administrators requiring phishing-resistant MFA
- Keep the count of organization admins minimal and review it on a fixed cadence
- Alert on any administrative action in the audit log originating from an IP outside the allowlist, since the console itself will not block it
Validation & Testing
- From an approved network, log in to each product and confirm normal access
- From an unapproved network — a mobile hotspot or a cloud VM — attempt to load the same site and confirm the request is refused
- From the unapproved network, issue an authenticated REST API call with a valid API token and confirm it is also refused, proving the allowlist covers the API surface and not just the browser
- From the unapproved network, load
admin.atlassian.comand confirm it is reachable, documenting this as an accepted residual risk with its compensating controls - Verify every allowlisted integration still functions after enforcement, particularly CI jobs that run on a schedule rather than on demand
- Re-run the external-network test after each allowlist change to confirm no entry silently widened the perimeter
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| SOC 2 | CC6.1 | Logical access controls restrict access to authorized sources |
| SOC 2 | CC6.6 | Boundary protection for external access points |
| NIST 800-53 | AC-17 | Remote access restrictions and monitoring |
| NIST 800-53 | SC-7 | Boundary protection |
| ISO 27001:2022 | A.8.20 | Network security controls |
| CIS Controls | 12.7 | Manage network infrastructure access |
2. Marketplace App Security
2.1 Implement App Approval Workflow
Profile Level: L1 (Crawl) - CRITICAL NIST 800-53: CM-7
Description
Require admin approval for Marketplace app installation. Apps have broad access to Jira/Confluence data.
Rationale
Why This Matters:
- 6,000+ Marketplace apps with varying security postures
- Apps access project data, user information, and configurations
- Compromised or malicious apps enable data exfiltration
- The app framework matters as much as the vendor: Connect apps run on vendor-controlled infrastructure and hold broad JWT-scoped access, while Forge apps run on Atlassian-hosted infrastructure with tighter, declared permission scoping
- Connect is being retired on a published timeline, so approving a new Connect app today buys a dependency with a known end date
Attack Prevented: Malicious app installation, data exfiltration through over-scoped integrations, supply-chain compromise via unmaintained vendor infrastructure
ClickOps Implementation
Step 1: Configure App Installation Policy
- Navigate to: admin.atlassian.com → Security → App policies
- Configure:
- Who can install apps: Admins only
- User install requests: Require approval
- App block list: Add prohibited apps
Step 2: Review Existing Apps
- Navigate to: admin.atlassian.com → Apps
- For each app, review:
- Permissions/scopes requested
- Last updated date
- Security certifications
- User count and reviews
- Remove unused or suspicious apps
Step 3: Create App Evaluation Checklist Before approving any app:
- Review requested permissions (OAuth scopes)
- Check vendor security certifications (SOC 2, ISO 27001)
- Review app update frequency
- Check for known vulnerabilities
- Evaluate data access requirements
- Confirm which framework the app is built on — prefer Forge, and treat Connect as legacy (see below)
- Document business justification
Connect Framework Sunset — Prefer Forge
Atlassian has published an end-of-support timeline for the Connect app framework, and it changes how new app approvals should be evaluated:
| Milestone | Date | Effect |
|---|---|---|
| No new Connect listings | September 2025 | New Connect apps can no longer be published to the Marketplace |
| Descriptor updates stop | March 2026 | Existing Connect apps can no longer change their descriptor, freezing scopes and endpoints |
| End of support | 31 January 2027 | Connect apps cease to be supported on the platform |
Source: Announcing Connect end of support timeline and next steps
What this means for app governance:
- Treat any Connect-based app as a legacy dependency with a hard expiry, not a durable integration, and require a documented migration or replacement plan before approving it
- Prefer Forge apps, which run on Atlassian-hosted infrastructure with declared, granular permission scopes and no vendor-operated servers holding your data in transit
- Because Connect descriptors freeze in March 2026, a Connect app cannot narrow its own scopes or repoint its endpoints after that date — any scope concern you have with it becomes permanent
- Inventory your installed Connect apps now and track vendor migration commitments; apps whose vendors have not announced a Forge migration path should be scheduled for removal rather than carried toward the 2027 deadline
- Frozen, unmaintained apps still holding live tokens against your instance are an attractive supply-chain target, so shrink that inventory ahead of end-of-support rather than at it
Marketplace App Risk Assessment
| Permission | Risk Level | Questions to Ask |
|---|---|---|
| Read Jira issues | Medium | Which projects? |
| Write Jira issues | High | Can it delete? |
| Read Confluence content | Medium | Which spaces? |
| Admin access | Critical | Why needed? |
| User management | Critical | Business justification? |
| Act on behalf of users | High | What actions? |
2.2 Monitor App Activity
Profile Level: L2 (Walk) NIST 800-53: AU-6
Description
Monitor Marketplace app API calls and data access.
Rationale
Why This Matters:
- Installed apps run with broad delegated scopes and can read or move large volumes of Jira and Confluence data without a human in the loop
- A compromised or malicious app behaves like a legitimate integration, so its abuse is invisible without monitoring API call patterns
- Baselining normal app data-access volume surfaces sudden bulk reads or exports that indicate exfiltration in progress
- Activity logs give responders the evidence to scope and revoke a rogue app before it drains an entire instance
Attack Prevented: Malicious app data exfiltration, supply-chain abuse, undetected bulk export
Code Implementation
Code Pack: API Script
# Get app audit events
curl -X GET "https://api.atlassian.com/admin/v1/orgs/${ORG_ID}/audit-events?filter=app" \
-H "Authorization: Bearer ${API_TOKEN}"
3. API & Integration Security
3.1 Secure AppLinks Configuration
Profile Level: L2 (Walk) NIST 800-53: SC-8
Description
Harden AppLinks between Atlassian products to prevent impersonation attacks.
Rationale
Why This Matters:
- AppLinks establish trust between Atlassian products, and a misconfigured link lets one application impersonate users on another
- OAuth 1.0a and unverified trust directions allow an attacker who controls one linked system to forge requests the trusting system accepts as authenticated
- Auditing and removing stale AppLinks eliminates standing trust relationships to systems that are no longer maintained or have changed ownership
- Restricting AppLink creation to administrators prevents an attacker or insider from quietly establishing a trusted impersonation channel
Attack Prevented: User impersonation, cross-product request forgery, trust-relationship abuse
ClickOps Implementation (Data Center)
Step 1: Audit Existing AppLinks
- Navigate to: Administration → Application links
- Review all configured links
- Verify each link is still needed
Step 2: Configure OAuth 2.0 for AppLinks
- For each AppLink, configure:
- Authentication type: OAuth 2.0 (not OAuth 1.0a)
- Incoming/Outgoing trust: Verify both directions
Step 3: Restrict AppLinks Creation
- Limit AppLinks creation to administrators only
- Document approved integration patterns
3.2 Configure Webhook Security
Profile Level: L2 (Walk) NIST 800-53: SC-8
Description
Secure webhook configurations to prevent data leakage.
Rationale
Why This Matters:
- Webhooks push issue and page data to external URLs automatically, so a hostile or hijacked endpoint receives a continuous feed of internal content
- Without HTTPS, webhook payloads traverse the network in cleartext and can be intercepted in transit
- Missing signature validation lets an attacker spoof webhook calls to downstream services or replay captured payloads
- Scoping events with JQL filters limits each webhook to the minimum data it needs, reducing what leaks if the destination is compromised
Attack Prevented: Data leakage, payload interception, webhook spoofing, over-broad data exposure
ClickOps Implementation
Step 1: Audit Webhooks
- Navigate to: System → Webhooks (Jira)
- Review all configured webhooks:
- Destination URLs (should be internal or verified services)
- Events subscribed
- JQL filters (limit scope)
Step 2: Secure Webhook Endpoints
- Require HTTPS for all webhook URLs
- Implement webhook signature validation
- Limit events to necessary minimum
Code Pack: SDK Script
import hmac
import hashlib
def validate_webhook(request, secret):
signature = request.headers.get('X-Hub-Signature')
payload = request.body
expected = 'sha256=' + hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
3.3 OAuth Token Management
Profile Level: L1 (Crawl) NIST 800-53: IA-5(13)
Description
Manage OAuth tokens for third-party integrations.
Rationale
Why This Matters:
- OAuth grants let third-party applications act on a user’s behalf, and forgotten authorizations remain valid until explicitly revoked
- Over-scoped grants give an integration far more access than it needs, so its compromise exposes data well beyond its function
- Requiring admin approval for new apps and sensitive scopes stops users from authorizing risky integrations that bypass procurement and security review
- Periodically reviewing and revoking connected apps removes dormant grants that attackers exploit through compromised third-party vendors
Attack Prevented: OAuth grant abuse, over-privileged integrations, third-party compromise, consent phishing
ClickOps Implementation
Step 1: Review Authorized Applications
- Navigate to: Profile → Security → Connected apps
- Review apps with OAuth access
- Revoke unnecessary authorizations
Step 2: Configure OAuth App Policies
- Navigate to: admin.atlassian.com → Security → External apps
- Configure:
- App approval: Required for new apps
- Scope review: Admin approval for sensitive scopes
4. Data Security
4.1 Configure Data Residency
Profile Level: L2 (Walk) NIST 800-53: SC-28
Description
Configure data residency for compliance with data localization requirements.
Rationale
Why This Matters:
- Regulations such as GDPR and various data-sovereignty laws require certain data to remain within specific geographic boundaries
- Pinning Atlassian data to an approved realm prevents inadvertent cross-border storage that creates legal and contractual exposure
- Documented residency controls provide the evidence auditors and customers require to demonstrate localization compliance
- Controlling where data lives also limits which jurisdictions’ legal processes can compel access to it
Attack Prevented: Compliance violations, unauthorized cross-border data transfer, jurisdictional overreach
ClickOps Implementation (Enterprise)
Step 1: Configure Data Residency
- Navigate to: admin.atlassian.com → Data residency
- Select realm for data storage:
- US
- EU
- Australia
- Apply to products
4.2 Implement Data Classification
Profile Level: L2 (Walk) NIST 800-53: AC-3
Description
Use data classification to restrict access to sensitive content.
Rationale
Why This Matters:
- Without classification, all content is treated the same and sensitive material is protected no better than routine notes
- Labeling spaces and projects by sensitivity drives access decisions so confidential and restricted content is gated to the right audiences
- Classification gives users a clear signal not to paste secrets or regulated data into low-sensitivity, broadly readable spaces
- Consistent labels enable automated policy and DLP enforcement and provide auditable evidence of how sensitive data is handled
Attack Prevented: Sensitive data exposure, over-sharing, mishandling of regulated content
ClickOps Implementation
Step 1: Enable Classification (Atlassian Guard Premium)
- Navigate to: admin.atlassian.com → Data classification
- Create classification levels:
- Public
- Internal
- Confidential
- Restricted
Step 2: Apply to Spaces/Projects
- Classify Confluence spaces
- Classify Jira projects
- Configure access based on classification
4.3 Enforce Data Security Policies
Profile Level: L2 (Walk)
| Framework | Control ID |
|---|---|
| CIS Controls | 3.3, 3.12, 14.4 |
| NIST 800-53 | AC-3, AC-4, AC-21, SC-7(10) |
| ISO 27001:2022 | A.5.14, A.8.12 |
Description
Data security policies are organization-level rules that constrain what can be done with content in covered Jira projects and Confluence spaces, regardless of the permissions individual users hold. A policy can block content export, block Confluence public link sharing, restrict anonymous and external access, and restrict which apps may reach covered content. Policies are configured at admin.atlassian.com → Security → Data security policies and scope to specific spaces and projects or to a data classification level. Source: What is a data security policy?
Rationale
Why This Matters:
- Permission schemes control who can read content, but they do not control what a legitimate reader can then do with it — export, public link, or app-mediated extraction all remain available to anyone with view access
- Blocking export closes the single highest-volume exfiltration path, turning a one-click full-space download into a page-by-page manual effort that is slow, noisy, and visible in audit logs
- Confluence public links bypass authentication entirely, and a single link shared from an internal space silently publishes that page to anyone who receives the URL — including anyone who finds it indexed
- Restricting app access by space, project, or classification means a compromised or over-scoped Marketplace app cannot reach your most sensitive content even though it holds an org-wide grant, which directly limits Marketplace supply-chain blast radius
- Binding policies to classification levels rather than to individual spaces makes the control scale: newly created content inherits protection from its label instead of waiting for an admin to remember to add it
- Policies are enforced organization-wide and cannot be overridden by a space or project administrator, so they hold even when local permissions drift
Attack Prevented: Bulk data exfiltration via export, unauthenticated disclosure through public links, third-party app data harvesting, insider mass download, over-sharing with external collaborators
ClickOps Implementation
Step 1: Create a Baseline Policy
- Navigate to: admin.atlassian.com → Security → Data security policies
- Select Create policy and give it a name that states its intent, such as “Restricted Content — No Export, No Public Links”
- Choose coverage: specific Confluence spaces and Jira projects, or — if data classification is in use — a classification level so coverage follows the label
Step 2: Select the Rules
- Block export: prevents downloading covered content as PDF, Word, CSV, XML, or via bulk space export
- Block public links: prevents Confluence pages in scope from being shared through anonymous, unauthenticated URLs
- Restrict anonymous and external access: blocks anonymous viewing and limits guest or external collaborator reach into covered spaces
- Restrict app access: choose whether covered content is reachable by all apps, by an approved subset, or by none — this is the control that contains a compromised Marketplace app
Step 3: Stage the Rollout
- Start with the highest-sensitivity spaces and projects — security, legal, HR, finance, and anything holding regulated data
- Communicate the change before enforcing; export blocking will visibly break existing reporting and offboarding workflows
- Identify legitimate export use cases and route them to an approved alternative such as a scoped API integration rather than granting broad exemptions
- Extend coverage outward once the first policy is stable, and prefer classification-based scoping so new content is covered automatically
Step 4: Review on a Cadence
- Re-review policy coverage quarterly against the current space and project inventory
- Confirm no high-sensitivity area was created outside every policy’s scope
- Re-verify the app allowance list after each new app approval
Validation & Testing
- As a user with full view permission on a covered space, attempt a PDF and a space export and confirm both are refused
- Attempt to create a public link on a covered Confluence page and confirm the option is unavailable or blocked
- Attempt to access a covered space anonymously in a logged-out browser session and confirm access is refused
- Using an app that is not on the allowance list, attempt to read covered content through its integration and confirm the request fails
- Repeat the export test on an uncovered space to confirm the policy is scoped as intended and has not silently blocked more than planned
- If policies are scoped by classification, apply the classification label to a new test space and confirm the restrictions take effect without any further admin action
- Review the audit log to confirm policy creation and modification events are recorded and attributable
Compliance Mappings
| Framework | Control ID | Control Description |
|---|---|---|
| SOC 2 | CC6.1 | Logical access controls over protected information |
| SOC 2 | CC6.7 | Restrictions on transmission and movement of information |
| NIST 800-53 | AC-4 | Information flow enforcement |
| NIST 800-53 | AC-21 | Information sharing restrictions |
| ISO 27001:2022 | A.5.14 | Information transfer controls |
| ISO 27001:2022 | A.8.12 | Data leakage prevention |
| CIS Controls | 3.3 | Configure data access control lists |
5. Monitoring & Detection
5.1 Enable Audit Logging
Profile Level: L1 (Crawl) NIST 800-53: AU-2, AU-3
Description
Configure and monitor Atlassian audit logs.
Rationale
Why This Matters:
- Audit logs are the primary record of authentication, permission changes, app installs, and data exports needed to detect and investigate abuse
- Without centralized logging, malicious activity such as a quiet permission escalation or bulk export goes unnoticed until damage is done
- Streaming logs to a SIEM preserves evidence beyond the platform’s retention window and correlates Atlassian events with the rest of the environment
- Reliable audit trails are required for incident response and for SOC 2, ISO 27001, and similar compliance attestations
Attack Prevented: Undetected intrusion, repudiation, delayed incident response, tampering concealment
ClickOps Implementation
Step 1: Access Audit Logs
- Navigate to: admin.atlassian.com → Security → Audit log
- Review events:
- Authentication events
- Permission changes
- App installations
- Data exports
Step 2: Configure SIEM Export
- Navigate to: Settings → Audit log streaming (SIEM webhook forwarding requires Atlassian Guard Premium)
- Configure destination:
- Splunk
- Sumo Logic
- Custom webhook
Step 3: Correlate with Product-Level Logs
- The organization audit log records identity, policy, app, and product-access events across the whole tenant — it is the authoritative record for the controls in this hub
- Individual products keep their own narrower logs (the Bitbucket workspace audit log, the Jira automation audit log) that record activity the organization log does not. Forward those alongside the organization log rather than in place of it — see the Bitbucket guide §5.1 and the Jira Cloud guide §3.1
- Confirm your SIEM retention exceeds each source’s native retention, since product-level logs expire far sooner than an investigation timeline
5.2 Configure Anomaly Detection
Profile Level: L2 (Walk)
Description
Enable anomalous activity detection, which is delivered by Atlassian Guard Premium (the product formerly sold as Atlassian Access). It is a Guard subscription capability rather than a Jira or Confluence product-edition feature, so a Premium or Enterprise product plan alone does not enable it. Source: Atlassian Guard pricing
Rationale
Why This Matters:
- Anomaly detection flags behavior that static rules miss, such as impossible-travel logins or atypical bulk data access
- Account takeover and insider abuse often look like ordinary activity until viewed against the user’s established baseline
- Automated alerts shrink dwell time by surfacing suspicious events in near real time rather than during a periodic log review
- Early warning on permission changes catches an attacker escalating privileges before they reach sensitive projects
Attack Prevented: Account takeover, insider abuse, credential stuffing, stealthy privilege escalation
ClickOps Implementation
- Navigate to: admin.atlassian.com → Security → Anomaly detection
- Enable detection for:
- Unusual login locations
- Bulk data access
- Permission changes
- Configure alert recipients
6. Vulnerability Management
6.1 Critical CVE Response
Profile Level: L1 (Crawl)
Description
Recent critical vulnerabilities require immediate attention.
Rationale
Why This Matters:
- Critical Confluence and Jira vulnerabilities have included broken access control and OGNL injection enabling unauthenticated remote code execution and rogue admin account creation
- These flaws are weaponized and actively exploited within days of disclosure, so unpatched Data Center and Server instances are high-value targets
- Prompt patching plus log review for exploitation attempts and unauthorized admin accounts limits both initial compromise and attacker persistence
- A defined CVE response process ensures advisories are acted on immediately instead of waiting for the next maintenance window
Attack Prevented: Remote code execution, authentication bypass, unauthorized admin creation, data destruction
Recent Critical CVEs
| CVE | CVSS | Product | Description |
|---|---|---|---|
| CVE-2023-22515 | 10.0 | Confluence DC/Server | Broken access control, admin account creation |
| CVE-2023-22518 | 9.8 | Confluence DC/Server | Auth bypass, data destruction |
| CVE-2022-26134 | 9.8 | Confluence Server/DC | OGNL injection RCE |
| CVE-2021-26084 | 9.8 | Confluence Server/DC | OGNL injection RCE |
Response Actions
For Data Center/Server:
- Apply patches immediately
- Review access logs for exploitation attempts
- Check for unauthorized admin accounts
- Consider migration to Cloud
For Cloud:
- Atlassian manages patching
- Monitor Atlassian security advisories
- Review audit logs for suspicious activity
7. Compliance Quick Reference
SOC 2 Mapping
| Control ID | Atlassian Control | Guide Section |
|---|---|---|
| CC6.1 | SSO enforcement, domain verification, 2SV | 1.1 |
| CC6.2 | Product access and organization admin roles | 1.2 |
| CC6.3 | SCIM/JIT provisioning and deprovisioning | 1.1 |
| CC6.6 | IP allowlisting | 1.4 |
| CC6.7 | Data security policies | 4.3 |
| CC7.2 | Audit logging | 5.1 |
NIST 800-53 Mapping
| Control | Atlassian Control | Guide Section |
|---|---|---|
| IA-2(1) | SSO with MFA | 1.1 |
| AC-2 | SCIM/JIT provisioning and deprovisioning | 1.1 |
| AC-6(1) | Organization admin role limitation | 1.2 |
| AC-17 | IP allowlisting | 1.4 |
| CM-7 | App approval workflow | 2.1 |
| AU-2 | Audit logging | 5.1 |
Appendix A: Edition Compatibility
Atlassian licensing splits across two independent axes, and conflating them is a common planning error. The product edition (Free, Standard, Premium, Enterprise) governs Jira and Confluence features. Atlassian Guard — formerly Atlassian Access — is a separate per-user subscription that governs identity and data-security capabilities across the whole organization. Buying Jira Premium does not grant Guard capabilities, and buying Guard does not grant product-edition features.
Product Edition Capabilities
| Control | Free | Standard | Premium | Enterprise |
|---|---|---|---|---|
| MFA (individual two-step verification) | ✅ | ✅ | ✅ | ✅ |
| Project/space permission schemes | ✅ | ✅ | ✅ | ✅ |
| Basic product audit log | Basic | Basic | ✅ | ✅ |
| IP allowlisting (1.4) | ❌ | ❌ | ✅ | ✅ |
| Data residency (4.1) | ❌ | ❌ | ✅ | ✅ |
Atlassian Guard Capabilities
| Control | No Guard | Guard Standard | Guard Premium |
|---|---|---|---|
| SAML SSO enforcement (1.1) | ❌ | ✅ | ✅ |
| Enforced authentication policies (1.1) | ❌ | ✅ | ✅ |
| SCIM user provisioning and deprovisioning | ❌ | ✅ | ✅ |
| Mobile app policies | ❌ | ✅ | ✅ |
| API token controls (1.3) | ❌ | ✅ | ✅ |
| Organization audit log (5.1) | ❌ | ✅ | ✅ |
| Data classification (4.2) | ❌ | ❌ | ✅ |
| Data security policies (4.3) | ❌ | Limited | ✅ |
| Anomalous activity detection (5.2) | ❌ | ❌ | ✅ |
| Content scanning | ❌ | ❌ | ✅ |
| SIEM webhook forwarding (5.1) | ❌ | ❌ | ✅ |
Source: Atlassian Guard pricing
Appendix B: References
Official Atlassian Documentation:
-
Trust Center Customer Trust Center (powered by Conveyor) - Atlassian Support
- Security Best Practices
- Security Practices
- Security Measures
- Vulnerability Disclosure
- Security Advisories
- Atlassian Guard Pricing and Capabilities (product formerly named Atlassian Access)
- Manage API Tokens for Your Atlassian Account (mandatory token expiry, 1 day to 1 year)
- What Is a Data Security Policy?
- Scope of IP Allowlists in Atlassian Cloud
API & Developer Tools:
- Atlassian Developer Portal
- Jira Cloud REST API
- Confluence Cloud REST API
- Forge App Framework (SOC 2 and ISO 27001 compliant; preferred over Connect)
- Connect End-of-Support Timeline (descriptor freeze March 2026, end of support 31 January 2027)
- API Security Guide
- GitHub Organization
Compliance Frameworks:
- SOC 2 Type II (individual product audits on a regular basis) — via SOC 2 Compliance
- ISO/IEC 27001:2022 (Atlassian Trust Management System) — via ISO 27001 Compliance
- SOX compliance, PCI DSS
-
Compliance Resource Center Compliance FAQ
Security Incidents:
- 2023 — Critical Confluence CVEs: CVE-2023-22515 (CVSS 10.0) and CVE-2023-22518 (CVSS 9.8) affected Confluence Data Center/Server with broken access control and auth bypass vulnerabilities. Actively exploited in the wild. Cloud instances were not affected. (Security Advisories)
- February 2023 — Employee Data Leak via Envoy: Hackers leaked Atlassian employee records and office floorplans obtained through a breach of third-party workplace platform Envoy. No customer data was affected. (SecurityWeek Report)
Changelog
| Date | Version | Maturity | Changes | Author |
|---|---|---|---|---|
| 2026-08-08 | 0.4.0 | draft | Convert to the Atlassian platform Common Controls hub: add platform/platform_slug/product frontmatter, add “Products in This Platform” section and moved-controls callout. Merge org-level controls in from the product guides — domain verification, SSO enforcement policy with break-glass, and SCIM/JIT provisioning into §1.1; organization admin role limitation into §1.2. Point Jira project permissions at the Jira Cloud guide and note product-level log correlation in §5.1; remove empty Detection Queries heading |
Claude Code (Opus 5) |
| 2026-08-03 | 0.3.0 | draft | Rename Atlassian Access to Atlassian Guard and split edition table into product vs Guard tiers; correct API token expiry to the 1-day-to-1-year platform ceiling with forced expiry of legacy tokens; add 1.4 IP allowlisting; add 4.3 data security policies; flag Connect framework end-of-support and prefer Forge | Claude Code (Sonnet 5) |
| 2026-06-29 | 0.2.1 | draft | Add cheat-sheet Description and Rationale for all controls | Claude Code (Opus 4.8) |
| 2025-12-14 | 0.1.0 | draft | Initial Atlassian hardening guide | Claude Code (Opus 4.5) |
| 2026-02-19 | 0.2.0 | draft | Extract inline code to Code Packs (api, sdk) | Claude Code (Opus 4.6) |
Contributing
Found an issue or want to improve this guide?
- Report outdated information: Open an issue with tag
content-outdated - Propose new controls: Open an issue with tag
new-control - Submit improvements: See Contributing Guide