Introduction
Thank you for always reading our articles!
When developing in-house, you may need to check the operation of a web browser. In addition, you may want to set up authentication while taking security into consideration, but you may not want to implement it in a cumbersome way.
I wanted to implement a web browser with authentication functionality in my own in-house development with minimal configuration. I realized that by using AWS Cognito + CloudFront, I could implement a web browser with authentication functionality that would be satisfactory for in-house testing.
I think I'll have a chance to use it in the future, so I'd like to leave this article here.
Target Audience
- For those who want to easily implement a web browser with authentication functionality.
- Those looking for a way to manage web browsers for in-house testing.
- Those who want to catch up on service integration.
Composition
Tried Actions
In order to build this site, I created a test page in advance.
- Sample Code
</span>
lang="en">
charset="UTF-8">
name="viewport" content="width=device-width, initial-scale=1.0">
Shark Inc. | FinOps Shark - Innovative Financial Solutions
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Helvetica Neue', Arial, 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif;
line-height: 1.6;
color: #333;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Header */
header {
background: linear-gradient(135deg, #1a237e, #283593);
color: white;
padding: 1rem 0;
position: fixed;
width: 100%;
top: 0;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
nav {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
font-size: 1.8rem;
font-weight: bold;
display: flex;
align-items: center;
}
.logo-icon {
width: 40px;
height: 40px;
margin-right: 10px;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path d="M50 15 L80 40 L80 70 L50 85 L20 70 L20 40 Z" fill="%233949ab" stroke="white" stroke-width="3"/><path d="M40 50 L60 30 L60 70 Z" fill="white"/></svg>') no-repeat center;
background-size: contain;
}
.nav-links {
display: flex;
list-style: none;
}
.nav-links li {
margin-left: 2rem;
}
.nav-links a {
color: white;
text-decoration: none;
transition: opacity 0.3s;
}
.nav-links a:hover {
opacity: 0.8;
}
/* Hero Section */
.hero {
background: linear-gradient(135deg, #283593, #3949ab);
color: white;
padding: 8rem 0 4rem;
margin-top: 5rem;
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"><path fill="%23ffffff" fill-opacity="0.1" d="M0,192L48,197.3C96,203,192,213,288,229.3C384,245,480,267,576,250.7C672,235,768,181,864,181.3C960,181,1056,235,1152,234.7C1248,235,1344,181,1392,154.7L1440,128L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path></svg>') no-repeat bottom;
background-size: cover;
}
.hero-content {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
z-index: 1;
}
.hero-text {
flex: 1;
max-width: 600px;
}
.hero h1 {
font-size: 3.5rem;
margin-bottom: 1rem;
line-height: 1.2;
}
.hero p {
font-size: 1.3rem;
margin-bottom: 2rem;
opacity: 0.9;
}
.cta-button {
display: inline-block;
padding: 1rem 2.5rem;
background: #00bcd4;
color: white;
text-decoration: none;
border-radius: 30px;
font-weight: bold;
transition: transform 0.3s, box-shadow 0.3s;
}
.cta-button:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0,188,212,0.3);
}
.hero-image {
flex: 1;
text-align: center;
}
.shark-animation {
width: 400px;
height: 300px;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300"><path d="M50 150 Q200 80 350 150 Q200 220 50 150" fill="%231e88e5" stroke="white" stroke-width="3"/><circle cx="100" cy="130" r="8" fill="white"/><path d="M350 150 L380 130 L380 170 Z" fill="%231e88e5" stroke="white" stroke-width="2"/></svg>') no-repeat center;
background-size: contain;
animation: swim 3s ease-in-out infinite;
}
@keyframes swim {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-20px); }
}
/* Features Section */
.features {
padding: 5rem 0;
background: #f8f9fa;
}
.section-title {
text-align: center;
font-size: 2.5rem;
margin-bottom: 3rem;
color: #283593;
}
.features-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
.feature-card {
background: white;
padding: 2rem;
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
text-align: center;
transition: transform 0.3s;
}
.feature-card:hover {
transform: translateY(-5px);
}
.feature-icon {
font-size: 3rem;
margin-bottom: 1rem;
color: #00bcd4;
}
.feature-card h3 {
color: #283593;
margin-bottom: 1rem;
}
/* Services Section */
.services {
padding: 5rem 0;
}
.services-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 2rem;
margin-top: 3rem;
}
.service-item {
display: flex;
align-items: center;
padding: 2rem;
background: #f8f9fa;
border-radius: 10px;
transition: background 0.3s;
}
.service-item:hover {
background: #eceff1;
}
.service-icon {
font-size: 2.5rem;
margin-right: 1.5rem;
color: #283593;
}
/* Stats Section */
.stats {
background: linear-gradient(135deg, #283593, #3949ab);
color: white;
padding: 4rem 0;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
text-align: center;
}
.stat-item h3 {
font-size: 3rem;
margin-bottom: 0.5rem;
}
/* CTA Section */
.cta-section {
background: #00bcd4;
color: white;
padding: 4rem 0;
text-align: center;
}
.cta-section h2 {
font-size: 2.5rem;
margin-bottom: 1rem;
}
.cta-section p {
font-size: 1.2rem;
margin-bottom: 2rem;
}
.cta-secondary {
background: white;
color: #00bcd4;
padding: 1rem 2.5rem;
border-radius: 30px;
text-decoration: none;
font-weight: bold;
transition: transform 0.3s;
}
.cta-secondary:hover {
transform: translateY(-2px);
}
/* Footer */
footer {
background: #1a237e;
color: white;
padding: 3rem 0 1rem;
}
.footer-content {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
margin-bottom: 2rem;
}
.footer-section h4 {
margin-bottom: 1rem;
font-size: 1.2rem;
}
.footer-section ul {
list-style: none;
}
.footer-section ul li {
margin-bottom: 0.5rem;
}
.footer-section ul li a {
color: #ccc;
text-decoration: none;
transition: color 0.3s;
}
.footer-section ul li a:hover {
color: white;
}
.footer-bottom {
text-align: center;
padding-top: 2rem;
border-top: 1px solid #283593;
color: #ccc;
}
/* Responsive Design */
@media (max-width: 768px) {
.hero h1 {
font-size: 2.5rem;
}
.hero-content {
flex-direction: column;
text-align: center;
}
.shark-animation {
width: 300px;
height: 200px;
margin-top: 2rem;
}
.features-grid,
.services-grid {
grid-template-columns: 1fr;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
.footer-content {
grid-template-columns: repeat(2, 1fr);
}
}
class="container">
class="logo">
class="logo-icon">
Shark Inc.
class="nav-links">
href="#services">Services
href="#features">Features
href="#about">About Us
href="#contact">Contact
class="hero">
class="container">
class="hero-content">
class="hero-text">
FinOps Shark
Financial solutions with speed and precision.Sharply accelerate your business growth.
href="#contact" class="cta-button">Request Free Consultation
class="hero-image">
class="shark-animation">
class="features" id="features">
class="container">
class="section-title">Shark Features
class="features-grid">
class="feature-card">
class="feature-icon">⚡
High-Speed Processing
AI-powered high-speed data processing provides real-time financial insights, supporting quick decision-making.
class="feature-card">
class="feature-icon">🔒
Security
Bank-level security thoroughly protects your valuable data, ensuring worry-free usage.
class="feature-card">
class="feature-icon">📈
Growth Support
Data-driven precise advice powerfully backs up your business growth.
class="services" id="services">
class="container">
class="section-title">Our Services
class="services-grid">
class="service-item">
class="service-icon">💰
Financial Consulting
Expert financial analysis and optimization proposals to achieve improved profitability.
class="service-item">
class="service-icon">🔄
Automation Solutions
Accounting process automation significantly improves operational efficiency.
class="service-item">
class="service-icon">📊
Real-time Analytics
Constantly monitor the latest financial situation, enabling quick management decisions.
class="service-item">
class="service-icon">🎯
Strategy Planning Support
Data-based strategy planning supports certain growth.
class="stats">
class="container">
class="stats-grid">
class="stat-item">
500+
Client Companies
class="stat-item">
35%
Average Cost Reduction
class="stat-item">
24/7
Support System
class="stat-item">
99.9%
System Uptime
class="cta-section" id="contact">
class="container">
Ready to experience FinOps Shark?
Request a free consultation and we'll propose the optimal solution for your company.
href="#" class="cta-secondary">Request Free Consultation
class="container">
class="footer-content">
class="footer-section">
Shark Inc.
Accelerating business growthwith innovative financial solutions
class="footer-section">
Services
href="#">Financial Consulting
href="#">Automation Solutions
href="#">Real-time Analytics
href="#">Strategy Planning Support
class="footer-section">
Company Information
href="#">About Us
href="#">Careers
href="#">News
href="#">Contact Us
class="footer-section">
Legal Information
href="#">Terms of Service
href="#">Privacy Policy
href="#">Legal Notices
class="footer-bottom">
© 2025 Shark Inc. All Rights Reserved.
Enter fullscreen mode
Exit fullscreen mode
Image
Amazon S3 Settings
Prepare an S3 bucket with website hosting enabled.
Store a test page in the bucket.
(All other settings are default.)
CloudFront Settings
Set it up so that it links to the S3 bucket you created earlier.
For security reasons, we'll also set up OAC.
Warning
After configuring OAC, you must update the S3 bucket policy.
Notice
Unless you select Redirect HTTP to HTTPS as the viewer protocol policy, the HTTPS connection will not be established.
Warning
The actual access path is distribution domain name/index.html.
Cognito Settings
Configure the user pool and login user.Clicking the Show login page button will display the login screen.
All you have to do is enter your login information and a web browser will appear.
Impressions
If you are using it in a testing environment, I think S3 + CloudFront + Cognito is easy to use. On top of that, you can combine it in a wide range of ways, such as pipeline settings and code signing with Signer.Thank you for reading the article to the end.