<?xml version="1.0"?>
<rss version="2.0"><channel><title>My Articles: My Articles</title><link>https://beta.jimiwikman.se/resources/my-articles/atlassian/atlassian-general/atlassian-management/?d=3</link><description>My Articles: My Articles</description><language>en</language><item><title>How do you secure your API for Jira Data Center to control what data flows in and out of it?</title><link>https://beta.jimiwikman.se/resources/my-articles/atlassian/atlassian-general/atlassian-management/how-do-you-secure-your-api-for-jira-data-center-to-control-what-data-flows-in-and-out-of-it-r250/</link><description><![CDATA[
<p><img src="https://ipsjwse.s3.eu-north-1.amazonaws.com/monthly_2024_10/1719063504174.jpg.6ef6807e90e60412d355b46537577422.jpg" /></p>
<p class="ember-view reader-text-block__paragraph" id="ember9198">
	If you are serious about keeping your Data Center secure and high performing, then making sure your API is not being hammered and that data is not moving in and out of the API without your control.
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<strong><em>Sharing is caring, but only when done responsibly.</em></strong>
		</p>
	</div>
</blockquote>

<blockquote class="ember-view reader-text-block__blockquote" id="ember9200">
	 
</blockquote>

<p class="ember-view reader-text-block__paragraph" id="ember9202">
	In Data Center, we can control what is happening in our API in several areas:
</p>

<ol>
	<li>
		<strong>Account</strong><span class="white-space-pre"> </span>- allow us to control what accounts have product access and can create tokens to be used to connect with the API
	</li>
	<li>
		<strong>Rate Limiting</strong><span class="white-space-pre"> </span>- allow us to define what connections we allow and how many calls they can make before they get throttled.
	</li>
	<li>
		<strong>Allow list</strong><span class="white-space-pre"> </span>- allow us to control from where we will allow connections.
	</li>
	<li>
		 
	</li>
</ol>

<h3 class="ember-view reader-text-block__heading-3" id="ember9205">
	Account<span class="white-space-pre"> </span>
</h3>

<p class="ember-view reader-text-block__paragraph" id="ember9206">
	The first thing you want to do is make sure that you control the accounts used to connect to your API. You do this by creating local accounts following a special standard, so you set the account name and email. This will ensure that you are in control of the account and no one can access it or reset the password to gain access.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9207">
	<strong>Example</strong><span>:</span>
</p>

<ul>
	<li>
		Username: SAINT001
	</li>
	<li>
		Full Name: SAINT001
	</li>
	<li>
		Email:<span class="white-space-pre"> </span><a class="app-aware-link " data-test-app-aware-link="" href="mailto:SAINT001@yourcompany.com" target="_self" rel="">SAINT001@yourcompany.com</a>
	</li>
</ul>

<p class="ember-view reader-text-block__paragraph" id="ember9209">
	Once the account has been created, you log in as that user using the Switch user function in the User Admin section. Go to Profile ⇾ Personal access tokens and create a token for that user. Make sure it expires in 6 months, or a year. The length depends on how often you want to set up the review of all integrations to make sure the integrations are still active and the documentation of the integration is up to speed.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9210">
	 
</p>

<h3 class="ember-view reader-text-block__heading-3" id="ember9211">
	Rate Limiting
</h3>

<p class="ember-view reader-text-block__paragraph" id="ember9212">
	Rate Limiting have two purposes in our setup: limit the amount of requests that integrations can make to prevent performance issues and to control what accounts can access the API.
</p>

<div class="reader-image-block reader-image-block--full-width">
	<figure class="reader-image-block__figure">
		<div class="ivm-image-view-model   ">
			<div class="ivm-view-attr__img-wrapper&#13;
        &#13;
        ">
				<img alt="1719061131216?e=1735171200&amp;v=beta&amp;t=L3Sz" class="ivm-view-attr__img--centered  reader-image-block__img evi-image lazy-image ember-view" data-ratio="72.45" id="ember9213" loading="lazy" width="1060" data-src="https://media.licdn.com/dms/image/v2/D4D12AQED1HRLWAQa2w/article-inline_image-shrink_1500_2232/article-inline_image-shrink_1500_2232/0/1719061131216?e=1735171200&amp;v=beta&amp;t=L3SzDAEe6pFWeLCe9VisVqAXiuhtFtwS6bw7Yhq1tyY" src="https://beta.jimiwikman.se/applications/core/interface/js/spacer.png">
			</div>
		</div>
	</figure>
</div>

<p class="ember-view reader-text-block__paragraph" id="ember9214">
	Enable Rate Limiting and set it to Block all requests. If you have an old Jira with a lot of unknown integrations, or if people are treating it is a playground, then first set it to Limit Requests. This way you can turn down the number of requests, so people notice that something is happening, so they contact you about it.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9215">
	This is assuming their integration actually has been built with response management and rate limiting support, which they should if they know what they are doing. If they don't, then they actually pose a danger to your Jira, and they should not connect to it anyway.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9216">
	Once you have activated this, and it is blocking all requests, then no one can access the API. This is not what we want, so we add all our integration accounts to the Exemptions list. This will allow those accounts to connect to the API again.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9217">
	Set the rate limiting to whatever limit makes sense in general, depending on the configuration of your hosting hardware and perceived impact from the number of integrations you have. If you see that an integration account show up in the List of limited accounts repeatedly, then talk to the integration owner and see if there is a problem, or if that integration need a more generous rate limit.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9218">
	 
</p>

<h3 class="ember-view reader-text-block__heading-3" id="ember9219">
	Allow list
</h3>

<p class="ember-view reader-text-block__paragraph" id="ember9220">
	The Allow list will give you the ability to further control access to your API by preventing access from any source that does not match what you have defined. This prevents someone from gaining access to one of the integration account to connect from outside what you have defined.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9221">
	It also prevents users to share their integration account and token with other groups in your organization, which you should absolutely not allow.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9222">
	The Allow list should be activated, and the settings should be set to allow authenticated users. You can then add domain names, exact matches, wildcard expressions and regular expressions. Be careful when adding wildcard expressions since users will often request whole networks and that will reduce the effectiveness of your allow list.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9223">
	Always be as specific as possible. This means that it is far better to add a dozen specific endpoints than adding a wildcard for a full subnet.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9224">
	 
</p>

<h2 class="ember-view reader-text-block__heading-2" id="ember9225">
	Access to data
</h2>

<p class="ember-view reader-text-block__paragraph" id="ember9226">
	As a Jira administrator, you should have no involvement when it comes to managing access in Jira. All licenses should be managed by your AD, even if you are a small company, and all project access should be managed by the teams that work in those projects.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9227">
	This is very important because if you are responsible for licenses and project access, then you are also legally responsible for how the integrations handle the data they have access to.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9228">
	 
</p>

<h3 class="ember-view reader-text-block__heading-3" id="ember9229">
	Make sure that all Jira projects are hidden by default!
</h3>

<p class="ember-view reader-text-block__paragraph" id="ember9230">
	I know that sharing is caring, but oversharing is not something you want to spend time in jail for. Make sure that all projects have the same settings for this, and that is that all Jira projects are hidden unless you have a role in that project.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9231">
	This ensures that integrations also can only access the data that they have access through by the teams manually giving that account a role in their project.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9232">
	If you absolutely must have everything open to everyone in the organization, but still want to restrict the integration accounts only, then that can be done with AD groups. Just assign all employees in the organization an AD group, and then use that in your permission settings to give all employees access to every project.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9233">
	Since the integration accounts are local, they will not have that group (unless you stupidly add it of course, but that kind of defeats the purpose of having it...). This way those accounts still need to be assigned a role, and you are able to control the data they have access to.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9234">
	 
</p>

<h2 class="ember-view reader-text-block__heading-2" id="ember9235">
	Secure, Compliant and responsible
</h2>

<p class="ember-view reader-text-block__paragraph" id="ember9236">
	These three simple words should always be your mantra when you are working as an administrator in Jira and for integrations they are extra important.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9237">
	If you do not control your API's, then you not only risk exposing things that should not be exposed. This can be secret projects or god forbid information about your internal infrastructure or customers that a malicious hacker can exploit.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9238">
	You also risk legal actions based on how the information your Jira provide to other systems, should they use them incorrectly. While Jira in itself do not handle a lot of sensitive data, the tickets themselves can have a lot of this, especially if your users have requested custom fields that hold this kind of information.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9239">
	And finally, I think everyone can see that if anyone in your organization can connect to your API and do whatever they want, there is only a matter of time before this will start impacting performance.
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9240">
	<strong><em>At the end of the day, it is your job to make sure your Jira is Secure, Compliant and that you configure it responsibly.</em></strong>
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9241">
	 
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9242">
	--
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9243">
	These are very small steps you can take to secure your API access, and there are other ways as well. Do you have additional steps on how to secure Jira API, or do you think this is not the way to do it?<span class="white-space-pre"> </span>
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9244">
	<strong>Sign off in the comments!</strong>
</p>

<p class="ember-view reader-text-block__paragraph" id="ember9245">
	 
</p>
]]></description><guid isPermaLink="false">250</guid><pubDate>Wed, 23 Oct 2024 05:00:44 +0000</pubDate></item></channel></rss>
