diff --git a/changelog/16959.txt b/changelog/16959.txt
new file mode 100644
index 0000000000..aabfac3cae
--- /dev/null
+++ b/changelog/16959.txt
@@ -0,0 +1,3 @@
+```release-note:feature
+ui: adds HCP link status banner
+```
\ No newline at end of file
diff --git a/ui/app/components/link-status.js b/ui/app/components/link-status.js
new file mode 100644
index 0000000000..46e8020c2a
--- /dev/null
+++ b/ui/app/components/link-status.js
@@ -0,0 +1,29 @@
+import Component from '@glimmer/component';
+import { inject as service } from '@ember/service';
+
+/**
+ * @module LinkStatus
+ * LinkStatus components are used to indicate link status to the hashicorp cloud platform
+ *
+ * @example
+ * ```js
+ *
+ * ```
+ *
+ * @param {string} status - cluster.hcpLinkStatus value from currentCluster service
+ */
+
+export default class LinkStatus extends Component {
+ @service store;
+ @service version;
+
+ get showBanner() {
+ // enterprise only feature at this time but will expand to OSS in future release
+ // there are plans to handle connection failure states -- only alert if connected until further states are returned
+ return this.version.isEnterprise && this.args.status === 'connected';
+ }
+
+ get bannerClass() {
+ return this.args.status === 'connected' ? 'connected' : 'warning';
+ }
+}
diff --git a/ui/app/components/nav-header.js b/ui/app/components/nav-header.js
index 7697c6fc1a..7f67b8f258 100644
--- a/ui/app/components/nav-header.js
+++ b/ui/app/components/nav-header.js
@@ -4,6 +4,7 @@ import { computed } from '@ember/object';
export default Component.extend({
router: service(),
+ currentCluster: service(),
'data-test-navheader': true,
attributeBindings: ['data-test-navheader'],
classNameBindings: 'consoleFullscreen:panel-fullscreen',
diff --git a/ui/app/models/cluster.js b/ui/app/models/cluster.js
index 07e259a284..1f24ca9dc8 100644
--- a/ui/app/models/cluster.js
+++ b/ui/app/models/cluster.js
@@ -43,6 +43,7 @@ export default Model.extend({
sealProgress: alias('leaderNode.progress'),
sealType: alias('leaderNode.type'),
storageType: alias('leaderNode.storageType'),
+ hcpLinkStatus: alias('leaderNode.hcpLinkStatus'),
hasProgress: gte('sealProgress', 1),
usingRaft: equal('storageType', 'raft'),
diff --git a/ui/app/models/node.js b/ui/app/models/node.js
index 2acd3a05e2..efc9bd60a9 100644
--- a/ui/app/models/node.js
+++ b/ui/app/models/node.js
@@ -24,6 +24,7 @@ export default Model.extend({
version: attr('string'),
type: attr('string'),
storageType: attr('string'),
+ hcpLinkStatus: attr('string'),
//https://www.vaultproject.io/docs/http/sys-leader.html
haEnabled: attr('boolean'),
diff --git a/ui/app/styles/core/navbar.scss b/ui/app/styles/core/navbar.scss
index a981fcf12b..48d9cc7d1f 100644
--- a/ui/app/styles/core/navbar.scss
+++ b/ui/app/styles/core/navbar.scss
@@ -1,13 +1,45 @@
.navbar {
+ left: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+ @include from($mobile) {
+ display: block;
+ }
+}
+
+.navbar-status {
+ height: 40px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: $size-7;
+ font-weight: $font-weight-semibold;
+
+ &.connected {
+ background-color: $ui-gray-800;
+ color: #c2c5cb;
+
+ a {
+ color: #c2c5cb;
+ }
+ }
+ &.warning {
+ background-color: #fcf6ea;
+ color: #975b06;
+
+ a {
+ color: #975b06;
+ }
+ }
+}
+
+.navbar-actions {
background-color: $black;
display: flex;
height: $header-height;
justify-content: flex-start;
- left: 0;
padding: $spacing-xs $spacing-s $spacing-xs 0;
- position: fixed;
- right: 0;
- top: 0;
}
.navbar-brand {
diff --git a/ui/app/templates/components/link-status.hbs b/ui/app/templates/components/link-status.hbs
new file mode 100644
index 0000000000..1fbe0ea142
--- /dev/null
+++ b/ui/app/templates/components/link-status.hbs
@@ -0,0 +1,22 @@
+{{#if this.showBanner}}
+
+
+
+ {{#if (eq @status "connected")}}
+ This self-managed Vault is linked to the
+
+ HashiCorp Cloud Platform.
+
+ {{else if (eq @status "401")}}
+ {{! roughing in 401 and 500 connection statuses -- update strings once they are exposed by the API }}
+ Vault can’t connect to HashiCorp Cloud Portal. Check your config file to ensure that credentials are correct.
+ {{else if (eq @status "500")}}
+ Vault’s connection to HashiCorp Cloud Portal is down. Check
+
+ the status page
+
+ for details.
+ {{/if}}
+
+
+{{/if}}
\ No newline at end of file
diff --git a/ui/app/templates/components/nav-header.hbs b/ui/app/templates/components/nav-header.hbs
index b7c138967a..ba37e51b97 100644
--- a/ui/app/templates/components/nav-header.hbs
+++ b/ui/app/templates/components/nav-header.hbs
@@ -1,38 +1,42 @@