AWS Amplify Console Management
AWS Amplify Console Management
Amazon's trademarks and trade dress may not be used in connection with any product or service that is not
Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or
discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may
or may not be affiliated with, connected to, or sponsored by Amazon.
AWS Amplify Console User Guide
Table of Contents
What is the AWS Amplify Console? ...................................................................................................... 1
Amplify Console features ............................................................................................................ 1
Getting started .......................................................................................................................... 2
Getting started with hosting ............................................................................................... 2
Getting started with the Admin UI ....................................................................................... 2
Modern SPA web applications ...................................................................................................... 2
Getting started .................................................................................................................................. 3
Step 1: Connect repository .......................................................................................................... 4
Step 2a: Confirm build settings for the front end ........................................................................... 5
Step 2b: Confirm build settings for the backend ............................................................................ 6
Step 2c: Add environment variables (optional) ............................................................................... 7
Step 3: Save and deploy ............................................................................................................. 7
Next steps ................................................................................................................................. 8
Getting started with fullstack deployments ........................................................................................... 9
Step 1: Deploy a fullstack sample ................................................................................................ 9
Step 2: Explore the fullstack app ................................................................................................ 10
Step 3: Add a GraphQL backend ................................................................................................ 12
Next steps: Set up feature branch deployments ........................................................................... 13
Server-side rendering (SSR) ............................................................................................................... 14
What is server-side rendering .................................................................................................... 14
Amplify support for Next.js SSR ................................................................................................. 14
Pricing for Next.js SSR apps ............................................................................................... 15
Deploying a Next.js SSR app with Amplify ................................................................................... 15
Package.json file settings .................................................................................................. 15
Amplify build settings ....................................................................................................... 15
Adding SSR functionality to a static Next.js app ........................................................................... 16
Add a service role ............................................................................................................ 17
Update build settings ....................................................................................................... 17
Update the package.json file .............................................................................................. 17
Updating the Next.js version for an existing app .......................................................................... 18
Troubleshooting SSR deployment issues ...................................................................................... 18
Your output directory is overridden .................................................................................... 19
You get a 404 error after deploying your SSR site ................................................................ 19
Your app is missing the rewrite rule for CloudFront SSR distributions ...................................... 19
Your app is too large to deploy .......................................................................................... 20
Your app has both SSR and SSG branches ........................................................................... 20
Your app stores static files in a folder with a reserved path .................................................... 20
Your app has reached a CloudFront limit ............................................................................. 20
Environment variables are not carried through to Lambda functions ....................................... 20
Lambda@Edge functions are created in the US East (N. Virginia) Region .................................. 21
Your Next.js app uses unsupported features ........................................................................ 21
Unsupported Regions ........................................................................................................ 21
Set up custom domains .................................................................................................................... 22
Understanding DNS terminology and concepts ............................................................................. 22
DNS terminology .............................................................................................................. 22
DNS verification ............................................................................................................... 23
Amplify Console custom domain setup ............................................................................... 23
Add a custom domain managed by Amazon Route 53 ................................................................... 24
Add a custom domain managed by a third-party DNS provider ...................................................... 26
Add a custom domain managed by GoDaddy ............................................................................... 28
Add a custom domain managed by Google Domains ..................................................................... 31
Manage subdomains ................................................................................................................. 32
To add a subdomain only .................................................................................................. 32
To add a multilevel subdomain .......................................................................................... 33
iii
AWS Amplify Console User Guide
iv
AWS Amplify Console User Guide
v
AWS Amplify Console User Guide
vi
AWS Amplify Console User Guide
Amplify Console features
A fullstack serverless web app consists of a backend built with cloud resources such as GraphQL or REST
APIs, file and data storage, and a frontend built with a single-page application (SPA) framework such as
React, Angular, Vue, or Gatsby. Amplify Console supports the common SPA frameworks, for example,
React, Angular, Vue.js, Ionic, and Ember, as well as static site generators like Gatsby, Eleventy, Hugo,
VuePress, and Jekyll. Amplify supports applications that use server-side rendering (SSR) that are created
using the Next.js framework.
• Manage production and staging environments for your frontend and backend by connecting new
branches. See feature branch deployments (p. 49).
• Connect your application to a custom domain. See Set up custom domains (p. 22).
• Deploy and host SSR web apps created using the Next.js. framework.
• Preview changes during code reviews by setting up pull request previews (p. 69).
• Improve your app quality with end to end tests. See End-to-end testing (p. 71).
• Password protect your web app so you can work on new features without making them publicly
accessible. See Restricting access (p. 80).
• Set up rewrites and redirects to maintain SEO rankings and route traffic based on your client app
requirements. See Using redirects (p. 74).
• Instant cache invalidations ensure your app is updated instantly on every code commit.
• Atomic deployments eliminate maintenance windows by ensuring that the web app is updated only
after the entire deployment finishes. This eliminates scenarios where files fail to upload properly.
• Get screen shots of your app rendered on different mobile devices to identify layout issues.
Admin UI features
• Visual data modeling enables you to focus on your domain-specific objects instead of cloud
infrastructure.
• Set up authentication for your app.
• Powerful and easy to understand authorization.
• Infrastructure-as-code configures all backend capabilities with AWS CloudFormation.
• Works with the Amplify Command Line Interface (CLI). All updates you make in the Admin UI can be
pulled into the CLI.
• Invite users via email to configure and manage the backend. These users will also be able to log in to
the Amplify CLI with their email.
1
AWS Amplify Console User Guide
Getting started
Getting started
Getting started with hosting
To get started with Amplify Console's hosting features, see the Getting started with existing
code (p. 3) tutorial. After completing the tutorial, you will be able to connect your git repository
(GitHub, BitBucket Cloud, GitLab, and AWS CodeCommit) to set up continuous deployment. Alternatively,
you can get started with one of the fullstack continuous deployment samples (p. 9).
A modern web application's functionality is often spread across multiple places, such as databases,
authentication services, frontend code running in the browser, and backend business logic, or AWS
Lambda functions, running in the cloud. This makes application deployments complex and time-
consuming as developers need to carefully coordinate deployments across the frontend and backend
to avoid partial or failed deployments. The Amplify Console simplifies deployment of the frontend and
backend in a single workflow.
2
AWS Amplify Console User Guide
To get started, log in to the Amplify Console. If you are starting from the AWS Amplify home page,
choose Get Started at the top of the page.
If you are starting from the All apps page, choose New app, Host web app in the upper right corner.
3
AWS Amplify Console User Guide
Step 1: Connect repository
After you connect the repository service provider, choose a repository, and then choose a corresponding
branch to build and deploy.
4
AWS Amplify Console User Guide
Step 2a: Confirm build settings for the front end
Important: Verify that the build commands and build output directory (that is, artifacts > baseDirectory)
is accurate. If you need to modify this information, choose Edit to open the YML editor. You can save
your build settings on our servers, or you can download the YML and add it to the root of your repo (for
monorepos, store the YML at the app’s root directory).
5
AWS Amplify Console User Guide
Step 2b: Confirm build settings for the backend
To deploy backend functionality using the Amplify CLI during your build, create or reuse an AWS Identity
and Access Management (IAM) service role. IAM roles are a secure way to grant the Amplify Console
permissions to act on resources in your account.
Note: The Amplify CLI won’t run without an IAM service role enabled.
6
AWS Amplify Console User Guide
Step 2c: Add environment variables (optional)
Access the build logs screen by selecting a progress indicator on the branch tile. A build has the following
stages:
1. Provision - Your build environment is set up using a Docker image on a host with 4 vCPU, 7GB
memory. Each build gets its own host instance, ensuring that all resources are securely isolated. The
contents of the Docker file are displayed to ensure that the default image supports your requirements.
2. Build - The build phase consists of three stages: setup (clones repository into container), deploy
backend (runs the Amplify CLI to deploy backend resources), and build front end (builds your front-
end artifacts).
3. Deploy - When the build is complete, all artifacts are deployed to a hosting environment managed
by Amplify. Every deployment is atomic - atomic deployments eliminate maintenance windows by
ensuring that the web app is only updated after the entire deployment has completed.
4. Verify - To verify that your app works correctly, Amplify renders screen shots of the index.html in
multiple device resolutions using Headless Chrome.
7
AWS Amplify Console User Guide
Next steps
Next steps
• Add a custom domain to your app (p. 22)
• Manage multiple environments (p. 49)
• Preview pull requests before merging (p. 69)
8
AWS Amplify Console User Guide
Step 1: Deploy a fullstack sample
In this tutorial, we are going to create and deploy a React app which implements a basic authentication
flow for signing up/signing in users as well as protected client side routing using Amplify.
9
AWS Amplify Console User Guide
Step 2: Explore the fullstack app
Choose the Authentication Starter and Deploy app. You will be asked to connect your GitHub account.
Connecting your GitHub acccount allows the Amplify Console to create a fork of the repository in
your account, deploy the AWS backend services, and build and deploy the frontend. In order to deploy
backend resources to AWS, you will need to create a service role (p. 103).
10
AWS Amplify Console User Guide
Step 2: Explore the fullstack app
At the end of the build, you will have one frontend environment (the main branch deployed at ‘https://
main.appid.amplifyapp.com’) and one backend environment named devX. To add a user to your app, you
can either register a user through the deployed frontend, or choose the Authentication tab which links
to the Amazon Cognito UserPool. Create a user and try logging in to your app.
11
AWS Amplify Console User Guide
Step 3: Add a GraphQL backend
2. From the Backend environments tab, choose Edit backend. As a pre-requisite, follow the instructions
to install and configure the Amplify CLI. The Amplify command line toolchain allows you to edit
the backend you just created to add more functionality such as GraphQL/REST APIs, analytics, and
storage. Once the Amplify CLI is configured, copy the amplify pull command to connect to this
backend from your local machine.
3. Add the GraphQL API using the default todo example. Learn more about modeling your backend with
the GraphQL transform.
12
AWS Amplify Console User Guide
Next steps: Set up feature branch deployments
amplify push
Current Environment: devw
5. Visit the Amplify Console to view the added API category. Choosing the API category will allow you to
navigate to the AppSync Console (to write queries or mutations performing CRUD operations), or the
DynamoDB Console (to view your Todo table).
6. Use the Amplify GraphQL client to write frontend code that lists and updates the todos. To deploy the
updates to your frontend, simply commit your code and a new build will be triggered in the Amplify
Console.
13
AWS Amplify Console User Guide
What is server-side rendering
To learn about how Amplify supports SSR, review the following topics.
Topics
• What is server-side rendering (p. 14)
• Amplify support for Next.js SSR (p. 14)
• Deploying a Next.js SSR app with Amplify (p. 15)
• Adding SSR functionality to a static Next.js app (p. 16)
• Updating the Next.js version for an existing app (p. 18)
• Troubleshooting SSR deployment issues (p. 18)
Amplify now supports web apps with server-side rendering (SSR). When a client sends a request to an
SSR page, the HTML for the page is created on the server on each request. SSR enables a developer to
customize a website per request and per user. In addition, SSR can improve performance and search
engine optimization (SEO) for a website.
Developers can use Next.js to combine static site generation (SSG), and SSR in a single project. SSG pages
are prerendered at build time, and SSR pages are prerendered at request time.
Prerendering can improve performance and search engine optimization. Because Next.js prerenders all
pages on the server, the HTML content of each page is ready when it reaches the client's browser. This
content can also load faster. Faster load times improve the end user's experience with a website and
positively impact the site's SEO ranking. Prerendering also improves SEO by enabling search engine bots
to find and crawl a website's HTML content easily.
14
AWS Amplify Console User Guide
Pricing for Next.js SSR apps
Next.js provides built-in analytics support for measuring various performance metrics, such as Time to
first byte (TTFB) and First contentful paint (FCP). For more information about Next.js, see Getting started
on the Next.js website.
• An Amazon Simple Storage Service (Amazon S3) bucket that stores the resources for your app's static
assets. For information about Amazon S3 charges, see Amazon S3 Pricing.
• An Amazon CloudFront distribution to serve the app. For information about CloudFront charges, see
Amazon CloudFront Pricing.
• A Lambda@Edge function to customize the content that CloudFront delivers.
When you use the Amplify Framework (Libraries, CLI, UI components), you pay only for the underlying
AWS services you use. For more information about Amplify deployment and hosting charges, see AWS
Amplify Pricing.
The following is an example of the build script for a Next.js SSR app. The build script "next build"
indicates that the app supports both SSG and SSR pages.
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},
The following is an example of the build script for a Next.js SSG app. The build script "next build &&
next export" indicates that the app supports only SSG pages.
"scripts": {
"dev": "next dev",
"build": "next build && next export",
"start": "next start"
},
15
AWS Amplify Console User Guide
Adding SSR functionality to a static Next.js app
or in an amplify.yml file in the root of your repository. For more information, see Configuring build
settings (p. 38).
If Amplify detects that you are deploying a Next.js SSR app, and no amplify.yml file is present, it
generates a buildspec for the app and sets baseDirectory to .next. If you are deploying an app where
an amplify.yml file is present, the build settings in the file override any build settings in the console.
Therefore, you must manually set the baseDirectory to .next in the file.
The following is an example of the build settings for an app where baseDirectory is set to .next. This
indicates that the build artifacts are for a Next.js app that supports SSG and SSR pages.
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
If Amplify detects that you are deploying an SSG app, it generates a buildspec for the app and sets
baseDirectory to out. If you are deploying an app where an amplify.yml file is present, you must
manually set the baseDirectory to out in the file.
The following is an example of the build settings for an app where baseDirectory is set to out. This
indicates that the build artifacts are for a Next.js app that supports only SSG pages.
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: out
files:
- '**/*'
cache:
paths:
- node_modules/**/*
16
AWS Amplify Console User Guide
Add a service role
1. Sign in to the AWS Management Console and open the Amplify console.
2. If you haven't already created a service role in your Amplify account, see create a service
role (p. 103) to complete this prerequisite step.
3. Choose the static Next.js app that you want to add a service role to.
4. In the navigation pane, choose App settings, General.
5. On the App details page, choose Edit
6. For Service role, choose the name of an existing service role or the name of the service role that you
created in step 2.
7. Choose Save.
The following is an example of the build settings for an app where baseDirectory is set to .next.
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
17
AWS Amplify Console User Guide
Updating the Next.js version for an existing app
},
Amplify detects the change to the package.json file in your repo and redeploys the app with SSR
functionality.
For an existing app, use the following instructions to change the version of Next.js that Amplify uses to
build the app.
1. Sign in to the AWS Management Console and open the Amplify console.
2. Choose the Next.js app that you want to update.
3. In the navigation pane, choose App settings, Build settings.
4. On the Build settings page, in the Build image settings section, choose Edit.
5. In the Edit build image settings dialog box, expand the Add package version override list, and
choose Next.js version.
6. For Version, do one of the following:
• Enter 9 for support up to Next.js version 9.4.x.
• Enter 10 for support for Next.js versions 9.4.x to 10.x.x.
• Enter latest, to always upgrade to the latest Next.js version that Amplify supports.
7. Choose Save. The next time the app builds, it can use the features supported by the Next.js version
you specified in step 6.
Topics
• Your output directory is overridden (p. 19)
• You get a 404 error after deploying your SSR site (p. 19)
• Your app is missing the rewrite rule for CloudFront SSR distributions (p. 19)
• Your app is too large to deploy (p. 20)
• Your app has both SSR and SSG branches (p. 20)
• Your app stores static files in a folder with a reserved path (p. 20)
• Your app has reached a CloudFront limit (p. 20)
• Environment variables are not carried through to Lambda functions (p. 20)
• Lambda@Edge functions are created in the US East (N. Virginia) Region (p. 21)
• Your Next.js app uses unsupported features (p. 21)
• Unsupported Regions (p. 21)
18
AWS Amplify Console User Guide
Your output directory is overridden
distDir: 'build'
Verify that the output directory is set to .next in your build settings. For information about viewing
your app's build settings, see Configuring build settings (p. 38).
The following is an example of the build settings for an app where baseDirectory is set to .next.
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
To view or edit an app's rewrite and redirect rules in the Amplify console, in the navigation pane, choose
App settings, then Rewrites and redirects. The following screenshot shows an example of the rewrite
rules that Amplify creates for you when you deploy an SSR app.
19
AWS Amplify Console User Guide
Your app is too large to deploy
The following is an example of code in the next.config.js file that performs cache cleanup.
module.exports = {
webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => {
config.optimization.splitChunks.cacheGroups = { }
config.optimization.minimize = true;
return config
},
}
1. Follow the Set environment variables (p. 82) instructions to add environment variables to your
app in the Amplify console.
2. Open the next.config.js file for your app. If this file doesn't exist, create it.
3. Update the next.config.js file with the environment variables that you added in step 1. For
example, if you created an environment variable named MY_ENV_VAR, add the following code to
your next.config.js file:
20
AWS Amplify Console User Guide
Lambda@Edge functions are created
in the US East (N. Virginia) Region
module.exports = {
env: {
MY_ENV_VAR: process.env.MY_ENV_VAR
}
};
4. Rebuild your app. You can now reference the environment variables you added, such as
process.env.MY_ENV_VAR, in the app's Lambda functions.
When you deploy a new Next.js app, Amplify uses the most recent supported version of Next.js by
default. If you have an existing Next.js app that you deployed to Amplify with an older version of Next.js,
you can edit the app's build settings to use a newer version. For instructions, see Updating the Next.js
version for an existing app (p. 18).
Unsupported Regions
Amplify doesn't support Next.js SSR app deployment in every AWS region where Amplify Console is
available. Currently, Next.js SSR isn't supported in the following Regions: Europe (Milan) eu-south-1,
Middle East (Bahrain) me-south-1, and Asia Pacific (Hong Kong) ap-east-1.
21
AWS Amplify Console User Guide
Understanding DNS terminology and concepts
When you deploy your web app with the Amplify Console, Amplify hosts it on a URL like the following
example:
https://branch-name.d1m7bkiki6tdw1.amplifyapp.com
When you connect a custom domain, users see that your app is hosted on a custom URL, such as the
following:
https://www.example.com
The Amplify Console issues an SSL/TLS certificate for all domains connected to your app so that all
traffic is secured through HTTPS/2. The certificate generated by AWS Certificate Manager (ACM) is valid
for 13 months and renews automatically as long as your app is hosted with Amplify. Note that Amplify
can't renew the certificate if the CNAME verification record has been modified or deleted in the DNS
settings with your domain provider. You must delete and add the domain again in the Amplify console.
Prior to connecting an app to a custom domain, the app must be deployed in Amplify. For more
information about completing this step, see Getting started with existing code (p. 3).
Connecting to a custom domain requires a basic knowledge of domains and DNS terminology. For more
information about domains and DNS, see Understanding DNS terminology and concepts (p. 22).
Topics
• Understanding DNS terminology and concepts (p. 22)
• Add a custom domain managed by Amazon Route 53 (p. 24)
• Add a custom domain managed by a third-party DNS provider (p. 26)
• Add a custom domain managed by GoDaddy (p. 28)
• Add a custom domain managed by Google Domains (p. 31)
• Manage subdomains (p. 32)
• Set up automatic subdomains for a Amazon Route 53 custom domain (p. 34)
• Troubleshooting custom domains (p. 34)
DNS terminology
The following are a list of terms common to DNS. They can help you understand the procedures for
adding custom domains.
22
AWS Amplify Console User Guide
DNS verification
CNAME
A Canonical Record Name (CNAME) is a type of DNS record that masks the domain for a set of
webpages and makes them appear as though they are located elsewhere. A CNAME points a
subdomain to a fully qualified domain name (FQDN). For example, you can create a new CNAME
record to map the subdomain www.example.com, where www is the subdomain, to the FQDN
domain branch-name.d1m7bkiki6tdw1.cloudfront.net assigned to your app in the Amplify
Console.
ANAME
An ANAME record is like a CNAME record, but at the root level. An ANAME points the root of your
domain to an FQDN. That FQDN points to an IP address.
Name server
A name server is a server on the internet that's specialized in handling queries regarding the location
of a domain name’s various services. If you set up your domain in Amazon Route 53, a list of name
servers are already assigned to your domain.
NS record
DNS verification
A Domain Name System (DNS) is like a phone book that translates human-readable domain names
into computer-friendly IP addresses. When you type https://google.com into a browser, a lookup
operation is performed in the DNS provider to find the IP Address of the server that hosts the website.
DNS providers contain records of domains and their corresponding IP Addresses. The most commonly
used DNS records are CNAME, ANAME, and NS records.
The Amplify Console uses a CNAME record to verify that you own your custom domain. If you host your
domain with Route 53, verification is done automatically on your behalf. However, if you host your
domain with a third-party provider such as GoDaddy or Google, you have to manually update your
domain’s DNS settings and add a new CNAME record provided by the Amplify Console.
23
AWS Amplify Console User Guide
Add a custom domain managed by Amazon Route 53
The following list describes each step in the domain set up process in detail.
SSL/TLS create
The AWS Amplify Console issues an SSL/TLS certificate for setting up a secure custom domain.
SSL/TLS configuration and verification
Before issuing a certificate, the Amplify Console verifies that you are the owner of the domain. For
domains managed by Amazon Route 53, Amplify automatically updates the DNS verification record.
For domains managed outside of Route 53, you need to manually add the DNS verification record
displayed by the Amplify console into your domain with a third-party DNS provider.
Domain activation
The domain is successfully verified. For domains managed outside of Route 53, you need to
manually add the CNAME records displayed by the Amplify console into your domain with a third-
party DNS provider.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose your app that you want to connect to a custom domain.
3. In the navigation pane, choose App Settings, Domain management.
4. On the Domain management page, choose Add domain.
5. For Domain, enter your root domain, choose the domain you want to use when it appears in the list,
and then choose Configure Domain.
As you start typing, any root domains that you already manage in Route 53 appear in the list. For
example, if the name of your domain is https://example.com, enter example.com for Domain.
24
AWS Amplify Console User Guide
Add a custom domain managed by Amazon Route 53
6. By default, the Amplify console automatically creates two subdomain entries for your domain.
For example, if your domain name is example.com, you will see the subdomains https://
www.example.com and https://example.com with a redirect set up from the root domain to the
www subdomain.
(Optional) You can modify the default configuration if you want to add subdomains only. To change
the default configuration, choose Rewrites and redirects from the navigation pane, configure your
domain, and then choose Save.
Note
It can take up to 24 hours for the DNS to propagate and to issue the certificate. For help
with resolving errors that occur, see Troubleshooting custom domains (p. 34).
25
AWS Amplify Console User Guide
Add a custom domain managed
by a third-party DNS provider
If you are using GoDaddy or Google Domains, see the section called “Add a custom domain managed by
GoDaddy” (p. 28) or the section called “Add a custom domain managed by Google Domains” (p. 31)
for procedures specific to these providers.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose your app that you want to add a custom domain to.
3. In the navigation pane, choose App Settings, Domain management.
4. On the Domain management page, choose Add domain.
5. For Domain, enter the name of your root domain, and then choose Configure domain. For example,
if the name of your domain is https://example.com, enter example.com.
If you don't already own the domain and it is available, you can purchase the domain in Amazon
Route 53.
6. By default, the Amplify console automatically creates two subdomain entries for your domain.
For example, if your domain name is example.com, you will see the subdomains https://
www.example.com and https://example.com with a redirect set up from the root domain to the
www subdomain.
(Optional) You can modify the default configuration if you want to add subdomains only. To change
the default configuration, choose Rewrites and redirects from the navigation pane, configure your
domain, and then choose Save.
• If you're using GoDaddy, go to Add a custom domain managed by GoDaddy (p. 28).
26
AWS Amplify Console User Guide
Add a custom domain managed
by a third-party DNS provider
9. Go to your DNS provider's website, log in to your account, and locate the DNS management settings
for your domain.
10. Configure a CNAME to point to the AWS validation server. For example, if the validation
server is _cjhwou20vhu2exampleuw20vuyb2ovb9.j9s73ucn9vy.acm-validations.aws, enter
_cjhwou20vhu2exampleuw20vuyb2ovb9.j9s73ucn9vy.acm-validations.aws. The Amplify Console
uses this information to verify ownership of your domain and generate an SSL/TLS certificate for
your domain. Once the Amplify Console validates ownership of your domain, all traffic will be served
using HTTPS/2.
Note
The certificate generated by AWS Certificate Manager (ACM) is valid for 13 months and
renews automatically as long as your app is hosted with Amplify. Amplify can't renew the
certificate if the CNAME verification record has been modified or deleted. You must delete
and add the domain again in the Amplify Console.
Important
It is important that you perform this step soon after adding your custom domain in the
Amplify Console. The AWS Certificate Manager (ACM) immediately starts attempting to
verify ownership. Over time, the checks become less frequent. If you add or update your
CNAME records a few hours after you create your app, this can cause your app to get stuck
in the pending verification state.
11. Configure a second CNAME record (for example, https://*.example.com), to point your subdomains
to the Amplify domain. If you have production traffic, we recommended you update this CNAME
record after your domain status shows as AVAILABLE in the Amplify console.
12. Configure the ANAME/ALIAS record to point to the root domain of your amplifyapp domain (for
example https://example.com). An ANAME record points the root of your domain to a hostname.
If you have production traffic, we recommended that you update your ANAME record after your
domain status shows as AVAILABLE in the console. For DNS providers that don't have ANAME/
ALIAS support, we strongly recommend migrating your DNS to Route 53. For more information, see
Configuring Amazon Route 53 as your DNS service.
Note
Verification of domain ownership and DNS propagation for third-party domains can take up to
48 hours. For help resolving errors that occur, see Troubleshooting custom domains (p. 34).
27
AWS Amplify Console User Guide
Add a custom domain managed by GoDaddy
1. Follow steps one through six of the procedure the section called “Add a custom domain managed by
a third-party DNS provider” (p. 26).
2. Log in to your GoDaddy account.
3. In your list of domains, find the domain to add and choose DNS. GoDaddy displays a list of records
for your domain. You need to add two new CNAME records.
4. Create the first CNAME record to point your subdomains to the Amplify domain.
a. For Host, enter only the subdomain. For example, if your subdomain is www.example.com,
enter www for Host.
b. For Points to, look at your DNS records in the Amplify console and then enter the value. If the
Amplify console displays the domain for your app as xxxxxxxxxxxxxx.cloudfront.net, enter
xxxxxxxxxxxxxx.cloudfront.net for Points to.
5. Create the second CNAME record to point to the AWS Certificate Manager (ACM) validation server. A
single validated ACM generates an SSL/TLS certificate for your domain.
For example, if the DNS record in the Amplify console for verifying ownership of
your subdomain is _c3e2d7eaf1e656b73f46cd6980fdc0e.example.com, enter only
_c3e2d7eaf1e656b73f46cd6980fdc0e for Host.
b. For Points to, enter the ACM validation certificate.
28
AWS Amplify Console User Guide
Add a custom domain managed by GoDaddy
Note
The certificate generated by AWS Certificate Manager (ACM) is valid for 13 months and
renews automatically as long as your app is hosted with Amplify. Amplify can't renew the
certificate if the CNAME verification record has been modified or deleted. You must delete
and add the domain again in the Amplify console.
6. This step is not required for subdomains. GoDaddy doesn’t support ANAME/ALIAS records. For DNS
providers that do not have ANAME/ALIAS support, we strongly recommend migrating your DNS to
Amazon Route 53. For more information, see Configuring Amazon Route 53 as your DNS service.
If you want to keep GoDaddy as your provider and update the root domain, add Forwarding and set
up a domain forward:
a. Scroll down to the bottom of the DNS Management page to find the Forwarding box.
b. For Forward to, choose http://, and then enter the name of your subdomain to foward to (for
example, www.example.com).
c. For Forward Type, choose Temporary (302).
d. For Settings, choose Forward only.
29
AWS Amplify Console User Guide
Add a custom domain managed by GoDaddy
30
AWS Amplify Console User Guide
Add a custom domain managed by Google Domains
1. Follow steps one through six of the procedure To add a custom domain managed by a third-party
DNS provider (p. 26).
2. Log in to your account at https://domains.google.com and choose DNS in the left navigation pane.
3. Scroll down the page to Custom resource records where you need to add two new CNAME records.
4. Create the first CNAME record to point all subdomains to the Amplify domain as follows:
a. For Name, enter only the subdomain name. For example, if your subdomain is
www.example.com, enter www for Name.
b. For Data, enter the value that's available in the Amplify console.
If the Amplify console displays the domain for your app as xxxxxxxxxxxxxx.cloudfront.net,
enter xxxxxxxxxxxxx.cloudfront.net for Data.
5. Create the second CNAME record to point to the AWS Certificate Manager (ACM) validation server. A
single validated ACM generates an /TLS certificate for your domain.
For example, if the DNS record in the Amplify console for verifying ownership of
your subdomain is _c3e2d7eaf1e656b73f46cd6980fdc0e.example.com, enter only
_c3e2d7eaf1e656b73f46cd6980fdc0e for Name.
b. For Data, enter the ACM validation certificate.
Note
The certificate generated by AWS Certificate Manager (ACM) is valid for 13 months and
renews automatically as long as your app is hosted with Amplify. Amplify can't renew the
certificate if the CNAME verification record has been modified or deleted. You must delete
and add the domain again in the Amplify console.
6. Google Domains doesn’t support ANAME/ALIAS records. For DNS providers that don't have
ANAME/ALIAS support, we strongly recommend migrating your DNS to Amazon Route 53. For
31
AWS Amplify Console User Guide
Manage subdomains
more information, see Configuring Amazon Route 53 as your DNS service. If you want to keep
Google Domains as your provider and update the root domain, set up a subdomain forward. Locate
the Synthetic records pane. For Subdomain, enter the @ symbol to specify the root domain. For
Destination URL, enter your subdomain to forward to.
Note
Updates to your DNS settings for a Google domain can take up to 48 hours to take effect. For
help with resolving errors that occur, see Troubleshooting custom domains (p. 34).
Manage subdomains
A subdomain is the part of your URL that appears before your domain name. For example, www is the
subdomain of www.amazon.com and aws is the subdomain of aws.amazon.com. If you already have a
production website, you might want to only connect a subdomain. Subdomains can also be multilevel,
for example beta.alpha.example.com has the multilevel subdomain beta.alpha.
32
AWS Amplify Console User Guide
To add a multilevel subdomain
For example, if you have a domain called alpha.example.com and you want to create a multilevel
subdoman beta.alpha.example.com, you would enter beta as the subdomain value, as shown in the
following screenshot.
33
AWS Amplify Console User Guide
To add or edit a subdomain
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose your app that you want to manage subdomains for.
3. In the navigation pane, choose App Settings, and then choose Domain management.
4. On the Domain management page, choose Manage subdomains.
5. In Edit domain, you can edit your existing subdomains as needed.
6. (Optional) To add a new subdomain, choose Add.
7. Choose Update to save your changes.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose an app that is connected to a custom domain managed in Route 53.
3. In the navigation pane, choose App Settings, and then choose Domain management.
4. On the Domain management page, choose Manage subdomains.
5. Select the Sub-domain auto-detection check box on the bottom left side.
Note
This feature is available only for root domains, for example, exampledomain.com. The
Amplify console doesn't display this check box if your domain is already a subdomain, such as
dev.exampledomain.com.
Topics
• How do I verify that my CNAME resolves? (p. 35)
• My domain hosted with a third-party is stuck in the Pending Verification state (p. 35)
34
AWS Amplify Console User Guide
How do I verify that my CNAME resolves?
• My domain hosted with Amazon Route 53 is stuck in the Pending Verification state (p. 36)
• I get a CNAMEAlreadyExistsException error (p. 36)
• I get an Additional Verification Required error (p. 37)
2. Choose Search, and whatsmydns.net displays the results for your CNAME. The following screenshot
is an example of a list of results that verify that the CNAME resolves correctly to a cloudfront.net
URL.
35
AWS Amplify Console User Guide
My domain hosted with Amazon Route 53
is stuck in the Pending Verification state
4. In the navigation pane, choose Registered domains. Verify that the name servers displayed on the
Registered domains section match the name server values that you recorded in the previous step
from the Hosted Zone Details section. If they do not match, edit the name server values to match
the values in your Hosted Zone. The following screenshot of the Route 53 console displays the
location of the name server values on the right side.
5. If this doesn't resolve the issue, see GitHub Issues and open a new issue if it doesn’t already exist.
1. Sign in to the Amazon CloudFront console and verify that you don't have this domain deployed to
any other distribution. A single CNAME record can be attached to one CloudFront distribution at a
time.
2. If you previously deployed the domain to a CloudFront distribution you must remove it.
36
AWS Amplify Console User Guide
I get an Additional Verification Required error
37
AWS Amplify Console User Guide
Build specification YAML syntax
• Save the build settings in the Amplify Console - The Amplify Console autodetects build settings and
saves them so that they can be accessed via the Amplify Console. Amplify applies these settings to all
of your branches unless there is an amplify.yml file stored in your repository.
• Save the build settings in your repository - Download the amplify.yml file and add it to the root of
your repository.
You can edit an app's build settings in the Amplify Console by choosing App settings, Build settings.
The build settings are applied to all the branches in your app, except for the branches that have an
amplify.yml file saved in the repository.
Note
Build settings is visible in the Amplify Console’s App settings menu only when an app is set up
for continuous deployment and connected to a git repository. For instructions on this type of
deployment, see Getting started with existing code (p. 3).
version: 1
env:
variables:
key: value
backend:
phases:
preBuild:
commands:
- *enter command*
build:
commands:
- *enter command*
postBuild:
commands:
- *enter command*
frontend:
phases:
preBuild:
commands:
- cd react-app
- npm ci
build:
commands:
- npm run build
artifacts:
files:
- location
- location
38
AWS Amplify Console User Guide
Branch-specific build settings
discard-paths: yes
baseDirectory: location
cache:
paths:
- path
- path
test:
phases:
preTest:
commands:
- *enter command*
test:
commands:
- *enter command*
postTest:
commands:
- *enter command*
artifacts:
files:
- location
- location
configFilePath: *location*
baseDirectory: *location*
frontend:
39
AWS Amplify Console User Guide
Navigating to a subfolder
phases:
build:
commands:
- if [ "${AWS_BRANCH}" = "main" ]; then echo "main branch"; fi
- if [ "${AWS_BRANCH}" = "dev" ]; then echo "dev branch"; fi
Navigating to a subfolder
For monorepos, users want to be able to cd into a folder to run the build. After you run the cd command,
it applies to all stages of your build so you don’t need to repeat the command in separate phases.
version: 1
env:
variables:
key: value
frontend:
phases:
preBuild:
commands:
- cd react-app
- npm ci
build:
commands:
- npm run build
version: 1
env:
variables:
key: value
backend:
phases:
build:
commands:
- amplifyPush --simple
frontend:
phases:
commands:
build:
- yarn run build
artifacts:
baseDirectory: public
40
AWS Amplify Console User Guide
Installing packages as part of a build
frontend:
phases:
build:
commands:
- npm install -g pkg-foo
- pkg-foo deploy
- yarn run build
artifacts:
baseDirectory: public
build:
phases:
preBuild:
commands:
- npm config set <key> <value>
- npm config set registry https://registry.npmjs.org
- npm config set always-auth true
- npm config set email [email protected]
- yarn install
Installing OS packages
You can install OS packages for missing dependencies.
build:
phases:
preBuild:
commands:
- yum install -y <package>
Example usage:
41
AWS Amplify Console User Guide
Skip build for a commit
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to configure diff based frontend build and deploy for.
3. In the navigation pane, choose App settings, Environment variables.
4. In the Environment variables section, choose Manage variables.
5. The procedure for configuring the environment variable varies depending on whether you are
enabling or disabling diff based frontend build and deploy.
• To enable diff based frontend build and deploy
Optionally, you can set the AMPLIFY_DIFF_DEPLOY_ROOT environment variable to override the default
path with a path relative to the root of your repo, such as dist.
42
AWS Amplify Console User Guide
Monorepo build settings
have an amplify folder in your repository, Amplify ignores the value of the AMPLIFY_DIFF_BACKEND
environment variable.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to configure diff based backend builds for.
3. In the navigation pane, choose App settings, Environment variables.
4. In the Environment variables section, choose Manage variables.
5. The procedure for configuring the environment variable varies depending on whether you are
enabling or disabling diff based backend builds.
• To enable diff based backend builds
You can save the build settings for a monorepo in the Amplify Console or you can download the
amplify.yml file and add it to the root of your repository. Amplify applies the settings saved in
the console to all of your branches unless it finds an amplify.yml file in your repository. When an
amplify.yml file is present, its settings override any build settings saved in the Amplify Console.
appRoot
The root, within the repository, that the application starts in. This key must exist, and have the
same value as the AMPLIFY_MONOREPO_APP_ROOT environment variable. For instructions on
setting this environment variable, see Setting the AMPLIFY_MONOREPO_APP_ROOT environment
variable (p. 45).
The following monorepo build specification example demonstrates how to declare multiple Amplify
applications in the same repo. The two apps, react-app, and angular-app are declared in the
applications list. The appRoot key for each app indicates that the app is located in the apps root
folder in the repo.
version: 1
applications:
43
AWS Amplify Console User Guide
Monorepo build specification YAML syntax
- appRoot: apps/react-app
env:
variables:
key: value
backend:
phases:
preBuild:
commands:
- *enter command*
build:
commands:
- *enter command*
postBuild:
commands:
- *enter command*
frontend:
phases:
preBuild:
commands:
- *enter command*
- *enter command*
build:
commands:
- *enter command*
artifacts:
files:
- location
- location
discard-paths: yes
baseDirectory: location
cache:
paths:
- path
- path
test:
phases:
preTest:
commands:
- *enter command*
test:
commands:
- *enter command*
postTest:
commands:
- *enter command*
artifacts:
files:
- location
- location
configFilePath: *location*
baseDirectory: *location*
- appRoot: apps/angular-app
env:
variables:
key: value
backend:
phases:
preBuild:
commands:
- *enter command*
build:
commands:
- *enter command*
postBuild:
commands:
- *enter command*
44
AWS Amplify Console User Guide
Setting the AMPLIFY_MONOREPO_APP_ROOT
environment variable
frontend:
phases:
preBuild:
commands:
- *enter command*
- *enter command*
build:
commands:
- *enter command*
artifacts:
files:
- location
- location
discard-paths: yes
baseDirectory: location
cache:
paths:
- path
- path
test:
phases:
preTest:
commands:
- *enter command*
test:
commands:
- *enter command*
postTest:
commands:
- *enter command*
artifacts:
files:
- location
- location
configFilePath: *location*
baseDirectory: *location*
ExampleMonorepo
apps
app1
app2
app3
In this example, the value of the AMPLIFY_MONOREPO_APP_ROOT environment variable for app1 is
apps/app1.
When you deploy a monorepo app using the Amplify console, the console automatically sets the
AMPLIFY_MONOREPO_APP_ROOT environment variable using the value that you specify for the path
to the app's root. However, if your monorepo app already exists in Amplify or is deployed using AWS
CloudFormation, you must manually set the AMPLIFY_MONOREPO_APP_ROOT environment variable in
the Environment variables section in the Amplify console.
45
AWS Amplify Console User Guide
Setting the AMPLIFY_MONOREPO_APP_ROOT
environment variable
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose New app, Host web app in the upper right corner.
3. On the Host your web app page, choose your Git provider, then choose Continue.
4. On the Add repository branch page, do the following:
a. Choose the name of your repository from the list of Recently updated repositories.
b. For Branch, choose the name of the branch to use.
c. Select Connecting a monorepo? Pick a folder.
d. Enter the path to your app in your monorepo, for example, apps/app1.
e. Choose Next.
5. On the Configure build settings page you can use the default settings or customize the build
settings for your app. In the following example screenshot, Amplify detects an amplify.yml file in
the repository to use for the build settings. In the Environment variables section, Amplify has set
AMPLIFY_MONOREPO_APP_ROOT to apps/app1, using the path you specified in step 4d.
46
AWS Amplify Console User Guide
Setting the AMPLIFY_MONOREPO_APP_ROOT
environment variable
6. Choose Next.
7. On the Review page, choose Save and deploy.
47
AWS Amplify Console User Guide
Setting the AMPLIFY_MONOREPO_APP_ROOT
environment variable
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the name of the app to set the environment variable for.
3. In the navigation pane, choose App Settings, and then choose Environment variables.
4. On the Environment variables page, choose Manage variables.
5. In the Manage variables section, do the following:
48
AWS Amplify Console User Guide
Your app now has two deployments available at https://main.appid.amplifyapp.com and https://
dev.appid.amplifyapp.com. This may vary from team-to-team, but typically the main branch (formerly
referred to as the master branch) tracks release code and is your production branch. The develop branch
is used as an integration branch to test new features. This way beta testers can test unreleased features
on the develop branch deployment, without affecting any of the production end users on the main
branch deployment.
Topics
• Team workflows with Amplify backend environments (p. 50)
• Pattern-based feature branch deployments (p. 57)
• Automatic build-time generation of Amplify config (p. 59)
• Conditional backend builds (p. 60)
• Use Amplify backends across apps (p. 60)
49
AWS Amplify Console User Guide
Team workflows with Amplify backend environments
You can use the Amplify Console to continuously deploy backend resources such as GraphQL APIs and
Lambda functions with your feature branch deployment. You can use the following models to deploy
your backend and frontend with the Amplify Console:
Topics
• Feature branch workflow (p. 50)
• GitFlow workflow (p. 55)
• Per-developer sandbox (p. 55)
50
AWS Amplify Console User Guide
Feature branch workflow
2. Initialize a prod backend environment for your project. If you don’t have a project, create one using
bootstrap tools like create-react-app or Gatsby.
create-react-app next-unicorn
cd next-unicorn
amplify init
? Do you want to use an existing environment? (Y/n): n
? Enter a name for the environment: prod
...
amplify push
4. Push code to a Git repository of your choice (in this example we’ll assume you pushed to main).
5. Visit the Amplify Console in the AWS Management Console to see your current backend environment.
Navigate a level up from the breadcrumb to view a list of all backend environments created in the
Backend environments tab.
51
AWS Amplify Console User Guide
Feature branch workflow
6. Switch to the Frontend environments tab and connect your repository provider and main branch.
52
AWS Amplify Console User Guide
Feature branch workflow
7. In the build settings screen, pick an existing backend environment to set up continuous deployment
with the main branch. Choose prod from the dropdown and grant the service role to Amplify Console.
Choose Save and deploy. After the build completes you will get a main branch deployment available
at https://main.appid.amplifyapp.com.
8. Connect develop branch in Amplify Console (assume develop and main branch are the same at this
point). Choose the test backend environment.
53
AWS Amplify Console User Guide
Feature branch workflow
9. The Amplify Console is now setup. You can start working on new features in a feature branch. Add
backend functionality by using the dev backend environment from your local workstation.
10.After you finish working on the feature, commit your code, create a pull request to review internally.
11.To preview what the changes will look like, go to the Console and connect your feature branch. Note:
If you have the AWS CLI installed on your system (Not the Amplify CLI), you can connect a branch
directly from your terminal. You can find your appid by going to App settings > General > AppARN:
arn:aws:amplify:<region>:<region>:apps/<appid>
13.This will kickoff a build that will update the backend as well as the frontend in the Amplify Console
with a branch deployment at https://dev.appid.amplifyapp.com. You can share this link with internal
stakeholders so they can review the new feature.
54
AWS Amplify Console User Guide
GitFlow workflow
14.Delete your feature branch from Git, Amplify Console, and remove the backend environment from
the cloud (you can always spin up a new one based on by running ‘amplify env checkout prod’ and
running ‘amplify env add’).
GitFlow workflow
GitFlow uses two branches to record the history of the project. The main branch (formerly referred to as
master branch) tracks release code only, and the develop branch is used as an integration branch for new
features. GitFlow simplifies parallel development by isolating new development from completed work.
New development (such as features and non-emergency bug fixes) is done in feature branches. When
the developer is satisfied that the code is ready for release, the feature branch is merged back into the
integration develop branch. The only commits to the main branch are merges from release branches and
hotfix branches (to fix emergency bugs).
The diagram below shows a recommended setup with GitFlow. You can follow the same process as
described in the feature branch workflow section above.
Per-developer sandbox
• Each developer in a team creates a sandbox environment in the cloud that is separate from their local
computer. This allows developers to work in isolation from each other without overwriting other team
members’ changes.
• Each branch in the Amplify Console has its own backend. This ensures that the Amplify Console uses
the Git repository as a single source of truth from which to deploy changes, rather than relying on
developers on the team to manually push their backend or front end to production from their local
computers.
55
AWS Amplify Console User Guide
Per-developer sandbox
2. Initialize a kita backend environment for your project. If you don’t have a project, create one using
bootstrap tools like create-react-app or Gatsby.
cd next-unicorn
amplify init
? Do you want to use an existing environment? (Y/n): n
? Enter a name for the environment: kita
...
amplify push
3. Push code to a Git repository of your choice (in this example we’ll assume you pushed to main
(formerly referred to as master).
56
AWS Amplify Console User Guide
Pattern-based feature branch deployments
5. The Amplify Console will detect backend environments created by the Amplify CLI. Choose Create
new environment from the dropdown and grant the service role to Amplify Console. Choose Save
and deploy. After the build completes you will get a main branch deployment available at https://
main.appid.amplifyapp.com with a new backend environment that is linked to the branch.
6. Connect develop branch in Amplify Console (assume develop and main branch are the same at this
point) and choose Create new environment. After the build completes you will get a develop branch
deployment available at https://develop.appid.amplifyapp.com with a new backend environment that
is linked to the branch.
57
AWS Amplify Console User Guide
Pattern-based feature branch deployments
58
AWS Amplify Console User Guide
Pattern-based feature branch deployments
for an app connected to a custom domain
• For instructions on setting up pattern-based feature branch deployments, see Set up automatic
subdomains for a Amazon Route 53 custom domain (p. 34)
• For instructions on connecting an Amplify app to a custom domain managed in Route 53, see Add a
custom domain managed by Amazon Route 53 (p. 24)
• For more information about using Route 53, see What is Amazon Route 53.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to edit.
3. Choose the Frontend environments tab.
4. Locate the branch to edit and choose Edit.
59
AWS Amplify Console User Guide
Conditional backend builds
5. On the Edit target background page, uncheck Enable full-stack continuous deployments (CI/CD)
to turn off full-stack CI/CD for this backend.
6. Select an existing service role to give Amplify the permissions it requires to make changes to your
app backend. If you need to create a service role, choose Create new role. For more information
about creating a service role, see Adding a service role to the Amplify Console when you connect an
app (p. 103).
7. Choose Save. The Amplify Console applies these changes the next time you build the app.
When you enable diff based backend builds, at the start of each build, Amplify attempts to run a diff
on the amplify folder in your repository. If Amplify doesn't find any differences, it skips the backend
build step, and doesn't update your backend resources. If your project doesn't have an amplify folder
in your repository, Amplify ignores the value of the AMPLIFY_DIFF_BACKEND environment variable. For
instructions on setting the AMPLIFY_DIFF_BACKEND environment variable, see Enable or disable diff
based backend builds (p. 42).
60
AWS Amplify Console User Guide
Reuse backends when creating a new app
1. Sign in to the AWS Management Console and open the Amplify Console.
2. To create a new backend to use for this example, do the following:
a. For App name, select the app to use for adding a backend environment. You can choose the
current app or any other app in the current region.
b. For Environment, select the name of the backend environment to add. You can use an existing
environment or create a new one.
c. Select an existing service role to give Amplify the permissions it requires to make changes
to your app backend. If you need to create a service role, choose Create new role. For more
information about creating a service role, see Adding a service role to the Amplify Console when
you connect an app (p. 103).
d. By default, full-stack CI/CD is enabled. Uncheck this option to turn off full-stack CI/CD for this
backend. Turning off full-stack CI/CD causes the app to run in pull only mode. At build time,
Amplify will automatically generate the aws-exports.js file only, without modifying your
backend environment.
e. Choose Next.
61
AWS Amplify Console User Guide
Reuse backends when connecting
a branch to an existing app
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to connect a new branch to.
3. In the navigation pane, choose App Settings, General.
4. In the Branches section, choose Connect a branch.
5. On the Add repository branch page, for Branch, select the branch from your repository to connect.
6. For App name, select the app to use for adding a backend environment. You can choose the current
app or any other app in the current region.
7. For Environment, select the name of the backend environment to add. You can use an existing
environment or create a new one.
8. If you need to set up a service role to give Amplify the permissions it requires to make changes
to your app backend, the console prompts you to perform this task. For more information about
creating a service role, see Adding a service role to the Amplify Console when you connect an
app (p. 103).
9. By default, full-stack CI/CD is enabled. Uncheck this option to turn off full-stack CI/CD for this
backend. Turning off full-stack CI/CD causes the app to run in pull only mode. At build time,
Amplify will automatically generate the aws-exports.js file only, without modifying the backend
environment.
10. Choose Next.
62
AWS Amplify Console User Guide
Edit an existing frontend to point to a different backend
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to edit the backend for.
3. Choose the Frontend environments tab.
4. Locate the branch to edit and choose Edit.
5. On the Edit target background page, for App name, select the app to use for adding a backend
environment. You can choose the current app or any other app in the current region.
6. For Environment, select the name of the backend environment to add.
7. By default, full-stack CI/CD is enabled. Uncheck this option to turn off full-stack CI/CD for this
backend. Turning off full-stack CI/CD causes the app to run in pull only mode. At build time,
63
AWS Amplify Console User Guide
Edit an existing frontend to point to a different backend
Amplify will automatically generate the aws-exports.js file only, without modifying the backend
environment.
8. Choose Save. The Amplify Console applies these changes the next time you build the app.
64
AWS Amplify Console User Guide
Drag and drop
Manual deploys
Manual deploys allows you to publish your web app to the Amplify Console without connecting a Git
provider. You can choose to drag and drop a folder from your desktop and host your site in seconds.
Alternatively, you can reference assets in an Amazon S3 bucket. You can also specify a public URL to the
location where your files are stored.
For Amazon S3, you can also set up AWS Lambda triggers to update your site each time new assets are
uploaded. This blog post describes the process for setting up a Lambda trigger to automatically deploy
changes to Amplify when updates are made to an Amazon S3 bucket.
Amplify does not support manual deploys for server-side rendered (SSR) apps. For more information, see
Deploy and host server-side rendered apps with Amplify (p. 14).
1. Sign in to the AWS Management Console and open the Amplify Console.
2. How you get to the Host your web app page depends on whether you are starting from the Amplify
home page or the All apps page.
• From the Amplify home page
• In the upper right corner, choose New app, Host web app
3. On the Host your web app page, choose Deploy without Git provider. Then, choose Continue.
4. In the Start a manual deployment section, for App name, enter the name of your app.
5. For Environment name, enter a meaningful name for the environment, such as development or
production.
6. For Method, choose Drag and drop.
7. Either drag and drop files from your desktop onto the drop zone or use Choose files to select the
files from your computer. The files that you drag and drop or select can be a folder or a zip file that
contains the root of your site.
8. Choose Save and deploy.
65
AWS Amplify Console User Guide
Amazon S3 or any URL
1. Sign in to the AWS Management Console and open the Amplify Console.
2. At the top of the page, choose Get started.
3. In the Deliver section, choose Get started.
4. On the Host your web app page, choose Deploy without Git provider. Then, choose Continue.
5. In the Start a manual deployment section, for App name, enter the name of your app.
6. For Environment name, enter a meaningful name for the environment, such as development or
production.
7. For Method, choose either Amazon S3 or Any URL.
8. The procedure for uploading your files depends on the upload method.
• Amazon S3
a. For Bucket, select the name of the bucket from the list.
b. For Zip file, select the name of the zip file to deploy.
• Any URL
• For Resource URL, enter the URL to the zipped file to deploy.
9. Choose Save and deploy.
Note
When you create the zip folder, make sure you zip the contents of your build output and not the
top level folder. For example, if your build output generates a folder named “build” or “public”,
first navigate into that folder, select all of the contents, and zip it from there. If you do not do
66
AWS Amplify Console User Guide
Amazon S3 or any URL
this, you will see an “Access Denied” error because the site's root directory will not be initialized
properly.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>4442587FB7D0A2F9</RequestId>
<HostId>...</HostId>
</Error>
67
AWS Amplify Console User Guide
Add ‘Deploy to Amplify Console’
button to your repository or blog
To add the button to a markdown file (e.g. your GitHub README.md), replace https://github.com/
username/repository with your repository name.
[](https://
console.aws.amazon.com/amplify/home✔/deploy?repo=https://github.com/username/repository)
To add the button to any HTML document, use the following html example:
<a href="https://console.aws.amazon.com/amplify/home✔/deploy?repo=https://github.com/
username/repository">
<img src="https://oneclick.amplifyapp.com/button.svg" alt="Deploy to Amplify Console">
</a>
68
AWS Amplify Console User Guide
Enable web previews
Web previews
Web previews offer development and quality assurance (QA) teams a way to preview changes from pull
requests (PRs) before merging code to a production or integration branch. Pull requests let you tell
others about changes you’ve pushed to a branch in a repository. After a pull request is opened, you can
discuss and review the potential changes with collaborators and add follow-up commits before your
changes are merged into the base branch.
A web preview deploys every pull request made to your GitHub repository to a unique preview URL
which is completely different from the URL your main site uses. For apps with backend environments
provisioned using the Amplify CLI, every pull request (private Git repositories only) spins up an
ephemeral backend that is deleted when the PR is closed.
Note
Previews is visible in the Amplify Console’s App settings menu only when an app is set up
for continuous deployment and connected to a git repository. For instructions on this type of
deployment, see Getting started with existing code (p. 3).
1. Choose App settings, Previews and then choose Enable previews. For GitHub repositories only, you
are required to install a GitHub app in your account to enable this feature. You can give the Amplify
Console permission to all repositories or the current repository only.
Important
For security purposes, previews only work with private repositories for fullstack apps using
the Amplify CLI.
2. After you enable previews, return to the Amplify Console to enable previews for specific branches.
Choose a branch from the list and choose Manage. For fullstack applications, you can choose
to create a new backend for every pull request, or point all pull requests to an existing backend
environment. By choosing the first option, you can test changes without impacting production.
69
AWS Amplify Console User Guide
Web preview access with subdomains
The next time you submit a pull request for the branch, the Amplify Console builds and deploys your PR
to a preview URL. For GitHub repositories only, you can view a preview of your URL directly from the pull
request.
After the pull request is closed, the preview URL is deleted, and any temporary backend environment
linked to the pull request is deleted.
70
AWS Amplify Console User Guide
Tutorial: Set up end-to-end tests with Cypress
71
AWS Amplify Console User Guide
Add tests to your existing Amplify app
test:
phases:
preTest:
commands:
- npm ci
- npm install wait-on
- npm install pm2
- npm install [email protected] mochawesome mochawesome-merge mochawesome-report-
generator
- npx pm2 start npm -- start
- 'npx wait-on http://localhost:3000'
test:
commands:
- 'npx cypress run --reporter mochawesome --reporter-options "reportDir=cypress/
report/mochawesome-report,overwrite=false,html=false,json=true,timestamp=mmddyyyy_HHMMss"'
postTest:
commands:
- npx mochawesome-merge cypress/report/mochawesome-report/mochawesome*.json >
cypress/report/mochawesome.json
- npx pm2 kill
artifacts:
baseDirectory: cypress
configFilePath: '**/mochawesome.json'
files:
- '**/*.png'
- '**/*.mp4'
• preTest - Install all the dependencies required to run Cypress tests. Amplify Console uses
mochaawesome to generate a report to view your test results and wait-on to set up the localhost
server during the build.
• test - Run cypress commands to execute tests using mochawesome.
• postTest - The mochawesome report is generated from the output JSON.
• artifacts>baseDirectory - The directory from which tests are run.
• artifacts>configFilePath - The generated test report data.
• artifacts>files - The generated artifacts (screenshots and videos) available for download.
Disabling tests
Once the “test” config has been added to your amplify.yml build settings, the test step will be executed
for every build, on every branch. If you would like to globally disable tests from running, or you would
only like tests to run for specific branches, you can use the “USER_DISABLE_TESTS” environment variable
to do so without modifying your build settings.
To globally disable tests for all branches, add the USER_DISABLE_TESTS environment variable with a
value of true for all branches, as shown below:
72
AWS Amplify Console User Guide
Disabling tests
To disable tests for a specific branch, add the USER_DISABLE_TESTS environment variable with a value
of false for all branches, and then add an override for each branch you would like to disable with a value
of true. In the following example, tests are disabled on the “main” branch, and enabled for every other
branch:
Disabling tests with this variable will cause the test step to be skipped altogether during a build. To re-
enable tests, set this value to false, or delete the environment variable.
73
AWS Amplify Console User Guide
Types of redirects
Using redirects
Redirects enable a web server to reroute navigation from one URL to another. Common reasons for
using redirects include: to customize the appearance of a URL, to avoid broken links, to move the hosting
location of an app or site without changing its address, and to change a requested URL to the form
needed by a web app.
Types of redirects
There are several types of redirects that support specific scenarios.
301 redirects are intended for lasting changes to the destination of a web address. Search engine ranking
history of the original address applies to the new destination address. Redirection occurs on the client-
side, so a browser navigation bar shows the destination address after redirection. Common reasons to
use 301 redirects include:
302 redirects are intended for temporary changes to the destination of a web address. Search engine
ranking history of the original address doesn’t apply to the new destination address. Redirection occurs
on the client-side, so a browser navigation bar shows the destination address after redirection. Common
reasons to use 302 redirects include:
Rewrite (200)
200 redirects (rewrites) are intended to show content from the destination address as if it were served
from the original address. Search engine ranking history continues to apply to the original address.
Redirection occurs on the server-side, so a browser navigation bar shows the original address after
redirection. Common reasons to use 200 redirects include:
• To redirect an entire site to a new hosting location without changing the address of the site.
• To redirect all traffic to a single page web app (SPA) to its index.html page for handling by a client-side
router function.
404 redirects occur when a request points to an address that doesn’t exist. The destination page of a 404
is displayed instead of the requested one. Common reasons a 404 redirect occurs include:
74
AWS Amplify Console User Guide
Parts of a redirect
Parts of a redirect
Redirects consist of the following:
To create and edit redirects, choose Rewrites and redirects settings in the left navigation pane.
Order of redirects
Redirects are executed from the top of the list down. Make sure that your ordering has the effect you
intend. For example, the following order of redirects causes all requests for a given path under /docs/ to
redirect to the same path under /documents/, except /docs/specific-filename.html which redirects to /
documents/different-filename.html:
/docs/<*> /documents/<*>
/docs/specific-filename.html /documents/different-filename.html 301
75
AWS Amplify Console User Guide
Simple redirects and rewrites
You can use the following example code to permanently redirect a specific page to a new address.
You can use the following example code to redirect any path under a folder to the same path under a
different folder.
You can use the following example code to redirect all traffic to index.html as a rewrite. In this scenario,
the rewrite makes it appear to the user that they have arrived at the original address.
You can use the following example code to use a rewrite to change the subdomain that appears to the
user.
You can use the following example code to redirect paths under a folder that can’t be found to a custom
404 page.
76
AWS Amplify Console User Guide
Redirects for single page web apps (SPA)
77
AWS Amplify Console User Guide
Placeholders
Placeholders
You can use the following example code to redirect paths in a folder structure to a matching structure in
another folder.
You can use the following example code to redirect all paths that can’t be found at a given level of a
folder structure to index.html in a specified folder.
Region-based redirects
You can use the following example code to redirect requests based on region.
78
AWS Amplify Console User Guide
Region-based redirects
79
AWS Amplify Console User Guide
Restricting access
If you are working on unreleased features, you can password protect feature branches that are not ready
to be accessed publicly.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app you want to set feature branch passwords on.
3. In the navigation pane, choose App settings, and then choose Access control.
4. In the Access control settings section, choose Manage access.
80
AWS Amplify Console User Guide
81
AWS Amplify Console User Guide
Set environment variables
Environment variables
Environment variables are key-value pairs that are available at build time. These configurations can be
anything, including the following:
As a best practice, you can use environment variables to expose these configurations. All environment
variables that you add are encrypted to prevent rogue access, so you can use them to store secret
information.
Note
Environment variables is visible in the Amplify Console’s App settings menu only when an app
is set up for continuous deployment and connected to a git repository. For instructions on this
type of deployment, see Getting started with existing code (p. 3).
1. Sign in to the AWS Management Console and open the Amplify Console.
2. In the Amplify Console, choose App Settings, and then choose Environment variables.
3. In the Environment variables section, choose Manage variables.
4. In the Manage variables section, under Variable, enter your key. For Value, enter your value. By
default, the Amplify console applies the environment variables across all branches, so you don’t
have to re-enter variables when you connect a new branch.
5. (Optional) To customize an environment variable specifically for a branch, add a branch override as
follows:
82
AWS Amplify Console User Guide
Access environment variables
6. Choose Save.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. In the Amplify Console, choose App Settings, then choose Build settings.
3. In the App build specification section, choose Edit.
4. Add the environment variable to your build command. You should now be able to access your
environment variable during your next build. This example changes the npm's behavior (BUILD_ENV)
and adds an API token (TWITCH_CLIENT_ID) for an external service to an environment file for later
use:
build:
commands:
- npm run build:$BUILD_ENV
- echo "TWITCH_CLIENT_ID=$TWITCH_CLIENT_ID" >> backend/.env
Each command in your build configuration is executed inside a Bash shell. For more information on
working with environment variables in Bash, see Shell Expansions in the GNU Bash Manual.
1. Sign in to the AWS Management Console and open the Amplify Console.
83
AWS Amplify Console User Guide
Frontend framework environment variables
2. The procedure for connecting a branch to an app varies depending on whether you are connecting a
branch to a new app or an existing app.
• Connecting a branch to a new app
a. When connecting a branch to a new app, in the Configure build settings step of the wizard,
choose Create new environment, and enter the name of your backend environment. The
following screenshot shows the Backend deployments section of the Amplify console with
backend entered for the backend environment name.
a. If you are connecting a new branch to an existing app, set the social sign-in environment
variables before connecting the branch. In the navigation pane, choose App Settings,
Environment variables.
b. In the Environment variables section, choose Manage variables.
c. In the Manage variables section, for Variable (key), enter your client ID. For Value, enter
your client secret. For the list of Amplify system environment variables that are available by
default, see the table in Amplify Console environment variables (p. 85).
84
AWS Amplify Console User Guide
Amplify Console environment variables
Storing sensitive values, such as API keys, inside these frontend framework prefixed environment
variables is not a best practice and is highly discouraged. For an example of using the Amplify Console's
build time environment variables for this purpose, see Access environment variables (p. 83).
AWS_BRANCH The branch name of the current main, develop, beta, v2.0
build
AMPLIFY_FACEBOOK_CLIENT_SECRET
The Facebook client secret example123456
AMPLIFY_AMAZON_CLIENT_SECRET
The Amazon client secret example123456
85
AWS Amplify Console User Guide
Amplify Console environment variables
86
AWS Amplify Console User Guide
Environment secrets
Note
The AMPLIFY_AMAZON_CLIENT_ID and AMPLIFY_AMAZON_CLIENT_SECRET environment
variables are OAuth tokens, not an AWS access key and secret key.
Environment secrets
Environment secrets are similar to environment variables, but they are AWS Systems Manager (SSM)
Parameter Store key value pairs that can be encrypted. Some values must be encrypted, such as the Sign
in with Apple private key for Amplify Console.
1. Sign in to the AWS Management Console and open the AWS Systems Manager console.
2. In the navigation pane, choose Application Management, then choose Parameter Store.
3. On the AWS Systems Manager Parameter Store page, choose Create parameter.
4. On the Create parameter page, in the Parameter details section, do the following:
Note
Amplify only has access to the keys under the /amplify/{your_app_id}/
{your_backend_environment_name} for the specific environment build. You must specify
the default AWS KMS key to allow Amplify to decrypt the value.
You can use the following environment secrets that are accessible by default within the Amplify Console.
87
AWS Amplify Console User Guide
Amplify Console environment secrets
88
AWS Amplify Console User Guide
Custom header YAML format
Custom headers
Custom HTTP headers enable you to specify headers for every HTTP response. Response headers can
be used for debugging, security, and informational purposes. You can specify headers in the AWS
Management Console, or by downloading and editing an app's customHttp.yml file and saving it in the
project's root directory. For detailed procedures, see Setting custom headers (p. 90).
Previously, custom HTTP headers were specified for an app either by editing the build specification
(buildspec) in the AWS Management Console or by downloading and updating the amplify.yml file
and saving it in the project's root directory. Custom headers specified in this way should be migrated out
of the buildspec and the amplify.yml file. For instructions, see Migrating custom headers (p. 91).
customHeaders:
- pattern: '*.json'
headers:
- key: 'custom-header-name-1'
value: 'custom-header-value-1'
- key: 'custom-header-name-2'
value: 'custom-header-value-2'
- pattern: '/path/*'
headers:
- key: 'custom-header-name-1'
value: 'custom-header-value-2'
applications:
- appRoot: app1
customHeaders:
- pattern: '**/*'
headers:
- key: 'custom-header-name-1'
value: 'custom-header-value-1'
- appRoot: app2
customHeaders:
- pattern: '/path/*.json'
headers:
- key: 'custom-header-name-2'
value: 'custom-header-value-2'
When you add custom headers to your app, you will specify your own values for the following:
pattern
Custom headers are applied all URL file paths that match the pattern.
headers
89
AWS Amplify Console User Guide
Setting custom headers
key
To learn more about HTTP headers, see Mozilla's list of HTTP Headers.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to set custom headers for.
3. In the navigation pane, choose App settings, Custom headers.
4. In the Custom header specification section, choose Edit.
5. In the Edit window, enter the information for your custom headers using the custom header YAML
format (p. 89).
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to set custom headers for.
3. In the navigation pane, choose App settings, Custom headers.
4. In the Custom header specification section, choose Download.
5. Open the downloaded customHttp.yml file in the code editor of your choice and enter the
information for your custom headers using the custom header YAML format (p. 89).
90
AWS Amplify Console User Guide
Migrating custom headers
• For a manual deploy app, deploy the app again in the Amplify Console and include the new
customHttp.yml file with the artifacts that you upload.
Note
Custom headers set in the customHttp.yml file and deployed in the app's root directory
will override custom headers defined in the Custom headers section in the AWS Management
Console.
Specify your custom headers in the Custom headers section of the AWS Management Console or by
downloading and editing the customHttp.yml file.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to perform the custom header migration on.
3. In the navigation pane, choose App settings, Build settings. In the App build specification section,
you can review your app's buildspec.
4. Choose Download to save a copy of your current buildspec. You can reference this copy later if you
need to recover any settings.
5. When the download is complete, choose Edit.
6. Take note of the custom header information in the file, as you will use it later in step 9. In the Edit
window, delete any custom headers from the file and choose Save.
7. In the navigation pane, choose App settings, Custom headers.
8. In the Custom header specification section, choose Edit.
9. In the Edit window, enter the information for your custom headers that you deleted in step 6.
10. Choose Save.
11. Redeploy any branch that you want the new custom headers to be applied to.
1. Navigate to the amplify.yml file currently deployed in your app's root directory.
2. Open amplify.yml in the code editor of your choice.
3. Take note of the custom header information in the file, as you will use it later in step 8. Delete the
custom headers in the file. Save and close the file.
4. Sign in to the AWS Management Console and open the Amplify Console.
5. Choose the app to set custom headers for.
6. In the navigation pane, choose App settings, Custom headers.
7. In the Custom header specification section, choose Download.
8. Open the downloaded customHttp.yml file in the code editor of your choice and enter the
information for your custom headers that you deleted from amplify.yml in step 3.
9. Save the edited customHttp.yml file in your project's root directory. If you are working with a
monorepo, save the file in the root of your repo.
91
AWS Amplify Console User Guide
Monorepo custom headers
Note
Custom headers set in the customHttp.yml file and deployed in the app's root directory will
override the custom headers defined in the Custom headers section of the AWS Management
Console.
• There is a specific YAML format for a monorepo. For the correct syntax, see Custom header YAML
format (p. 89).
• You can specify custom headers for an application in a monorepo using the Custom headers section of
the AWS Management Console. Note that you must redeploy your application to apply the new custom
headers.
• As an alternative to using the console, you can specify custom headers for an app in a monorepo
in a customHttp.yml file. You must save the customHttp.yml file in the root of your repo and
then redeploy the application to apply the new custom headers. Custom headers specified in the
customHttp.yml file override any custom headers specified using the Custom headers section of the
AWS Management Console.
customHeaders:
- pattern: '**/*'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: "default-src 'self'"
92
AWS Amplify Console User Guide
Incoming webhooks
Set up an incoming webhook in the Amplify Console to trigger a build without comitting code to your Git
repository. You can use webhook triggers with headless CMS tools (such as Contentful or GraphCMS) to
start a build whenever content changes, or to perform daily builds using services such as Zapier.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to create a webhook for.
3. In the navigation pane, choose Build settings.
4. On the Build settings page, scroll down to the Incoming webhooks section and choose Create
webhook.
93
AWS Amplify Console User Guide
94
AWS Amplify Console User Guide
Monitoring with CloudWatch
Monitoring
AWS Amplify emits metrics through Amazon CloudWatch and provides access logs with detailed
information about each request made to your app. Use the topics in this section to learn how to use
these metrics and logs to monitor your app.
Topics
• Monitoring with CloudWatch (p. 95)
• Access logs (p. 97)
Metrics
Amplify supports six CloudWatch metrics in the AWS/AmplifyHosting namespace for monitoring
traffic, errors, data transfer, and latency for your apps. These metrics are aggregated at one minute
intervals. CloudWatch monitoring metrics are free of charge and don't count against the CloudWatch
service quotas.
Not all available statistics are applicable for every metric. In the following table, the most relevant
statistics are listed in the description for each metric.
Metrics Description
95
AWS Amplify Console User Guide
Alarms
Metrics Description
Dimension Description
AWS Account Metric data is provided across all apps in the AWS
account.
You can access CloudWatch metrics in the AWS Management Console at https://
console.aws.amazon.com/cloudwatch/. Alternatively, you can access metrics in the Amplify Console
using the following procedure.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to view metrics for.
3. In the navigation pane, choose App Settings, Monitoring.
4. On the Monitoring page, choose Metrics.
Alarms
You can create CloudWatch alarms in the Amplify console that send notifications when specific criteria
are met. An alarm watches a single CloudWatch metric and sends an Amazon Simple Notification Service
notification when the metric breaches the threshold for a specified number of evaluation periods.
You can create more advanced alarms that use metric math expressions in the CloudWatch console
or using the CloudWatch APIs. For example, you can create an alarm that notifies you when the
percentage of 4XXErrors exceeds 15% for three consecutive periods. For more information, see Creating
a CloudWatch Alarm Based on a Metric Math Expression in the Amazon CloudWatch User Guide.
96
AWS Amplify Console User Guide
Access logs
Standard CloudWatch pricing applies to alarms. For more information, see Amazon CloudWatch pricing.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to set an alarm on.
3. In the navigation pane, choose App Settings, Monitoring.
4. On the Monitoring page, choose Alarms.
5. Choose Create alarm.
6. In the Create alarm window, configure your alarm as follows:
a. For Metric, choose the name of the metric to monitor from the list.
b. For Name of alarm, enter a meaningful name for the alarm. For example, if you are monitoring
Requests, you could name the alarm HighTraffic. The name must contain only ASCII
characters.
c. For Set up notifications, do one of the following:
• i. Choose New to set up a new Amazon SNS topic.
ii. For Email address, enter the email address for the recipient of the notifications.
iii. Choose Add new email address to add additional recipients.
• i. Choose Existing to reuse an Amazon SNS topic.
ii. For SNS topic, select the name of an existing Amazon SNS topic from the list.
d. For Whenever the Statistic of Metric, set the conditions for your alarm as follows:
i. Specify whether the metric must be greater than, less than, or equal to the threshold value.
ii. Specify the threshold value.
iii. Specify the number of consecutive evaluation periods that must be in the alarm state to
trigger the alarm.
iv. Specify the length of time of the evaluation period.
e. Choose Create alarm.
Note
Each Amazon SNS recipient that you specify receives a confirmation email from AWS
Notifications. The email contains a link that the recipient must follow to confirm their
subscription and receive notifications.
Access logs
Amplify stores access logs for all of the apps you host in Amplify Console. Access logs contain
information about all requests that are made to your hosted apps. You can retrieve these access logs for
any two week window that you specify.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to view access logs for.
3. In the navigation pane, choose App Settings, Monitoring.
4. On the Monitoring page, choose Access logs.
97
AWS Amplify Console User Guide
Analyzing access logs
98
AWS Amplify Console User Guide
Email notifications
Notifications
You can set up notifications for an AWS Amplify app to alert stakeholders or team members when a
build succeeds or fails. Amplify Console creates an Amazon Simple Notification Service (SNS) topic in
your account and uses it to configure email notifications. This Amazon SNS topic can be used to send
notifications to other tools such as Slack. Notifications can be configured to apply to all branches or
specific branches of an Amplify app.
Email notifications
Use the following procedures to set up email notifications for all branches or specific branches of an
Amplify app.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to set up email notifications for.
3. In the navigation pane, choose App settings, Notifications, and then in the Email notifications
section, choose Add notification.
4. Do one of the following in the Manage notifications section:
• To send notifications for a single branch, for Email, enter the email address to send notifications
to. For Branch, select the name of the branch to send notifications for.
• To send notifications for all connected branches, for Email, enter the email address to send
notifications to. For Branch, select All Branches.
5. Choose Save when you are finished.
99
AWS Amplify Console User Guide
Custom build images
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to configure a custom build image for.
3. In the navigation pane, choose App Settings, Build settings.
4. On the Build settings page, in the Build image settings section, choose Edit.
5. In the Edit build image settings dialog box, expand the Build image menu, and choose Build
image.
6. Enter the name of your build image. For example, if the name of your Docker Hub repo is
exampledockerrepo, and your image name is exampleimage you would enter exampledockerrepo/
exampleimage:latest.
7. Choose Save.
1. See Getting started in the Amazon ECR Public User guide to set up an Amazon ECR Public repository
with a Docker image.
2. Sign in to the AWS Management Console and open the Amplify Console.
3. Choose the app that you want to configure a custom build image for.
4. In the navigation pane, choose App Settings, Build settings.
100
AWS Amplify Console User Guide
Custom build image requirements
5. On the Build settings page, in the Build image settings section, choose Edit.
6. In the Edit build image settings dialog box, expand the Build image menu, and choose Build
image.
7. Enter the name of the Amazon ECR Public repo that you created in step one. This is where your
build image is hosted. For example, if the name of your repo is ecr-examplerepo, you would enter
public.ecr.aws/xxxxxxxx/ecr-examplerepo.
8. Choose Save.
1. cURL: When we launch your custom image, we download our build runner into your container, and
therefore we require cURL to be present. If this dependency is missing, the build will instantly fail
without any output as our build-runner was unable to produce any output.
2. Git: In order to clone your Git repository we require Git to be installed in the image. If this dependency
is missing, the ‘Cloning repository’ step will fail.
3. OpenSSH: In order to securely clone your repository we require OpenSSH to set up the SSH key
temporarily during the build, the OpenSSH package provides the commands that the build runner
requires to do this.
4. (NPM-based builds) Node.JS+NPM: Our build runner does not install Node, but instead relies on
Node and NPM being installed in the image. This is only required for builds that require NPM packages
or Node specific commands.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app that you want to configure live package updates for.
3. In the navigation pane, choose App Settings, Build settings.
4. On the Build settings page, in the Build image settings section, choose Edit.
5. In the Edit build image settings dialog box, expand the Add package version override list, and
choose the package you want to change.
101
AWS Amplify Console User Guide
Configuring live package updates
6. For Version, either keep the default latest or enter a specific version of the dependency. If you use
latest, the dependency will always be upgraded to the latest version available.
7. Choose Save.
102
AWS Amplify Console User Guide
Step 1: Sign in to the IAM console
If you already have an existing app, you can find the service role setting in App settings > General and
then choose Edit from the top right corner of the box. Pick the service role you just created from the
dropdown and choose Save.
103
AWS Amplify Console User Guide
Confused deputy prevention
Currently, the default trust policy for the Amplify-Backend Deployment service role enforces the
aws:SourceArn and aws:SourceAccount global context condition keys to prevent against confused
deputy. However, if you previously created an Amplify-Backend Deployment role in your account,
you can update the role's trust policy to add these conditions to protect against confused deputy.
Use the following example to restrict access to apps in your account. Replace the red italicized text in the
example with your own information.
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:amplify:us-east-1:123456789012:apps/*"
},
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
For instructions on editing the trust policy for a role using the AWS Management Console, see Modifying
a role (console) in the IAM User Guide.
104
AWS Amplify Console User Guide
Instant cache invalidation with instant deploys
For advanced users that require finer control over an app's performance, Amplify Console supports
performance mode. Performance mode optimizes for faster hosting performance by keeping content
cached at the content delivery network (CDN) edge for a longer interval. For more information, see the
section called “Performance mode” (p. 105).
For more information about how the Amplify Console handles cache invalidations, see the blog post
AWS Amplify Console supports instant cache invalidation and delta deployments on every code commit.
Performance mode
Amplify Console performance mode optimizes for faster hosting performance by keeping content
cached at the edge of the CDN for a longer interval. When performance mode is enabled, hosting
configuration or code changes can take up to 10 minutes to be deployed and available.
105
AWS Amplify Console User Guide
Using headers to control cache duration
Performance mode is intended for advanced customers that require finer control over an app's
performance. To optimize the balance between hosting performance and deployment availability, the
default the section called “Instant cache invalidation with instant deploys” (p. 105) hosting architecture
is recommended.
1. Sign in to the AWS Management Console and open the Amplify Console.
2. Choose the app to enable performance mode for.
3. In the navigation pane, choose App settings, General.
4. In the General pane, scroll down to the Branches section. Select the branch that you want to to
enable performance mode for.
5. Choose Action, Enable performance mode.
6. In the Enable performance mode dialog box, choose Enable performance mode.
You can manually adjust the s-maxage directive to have more control over the performance and
deployment availability of your app. For example, to increase the length of time that your content stays
cached at the edge, you can manually increase the time to live (TTL) by updating s-maxage to a value
longer than the default 600 seconds (10 minutes).
Note
When performance mode is enabled for an app, Amplify increases the maximum TTL, that you
can set for the app using a custom header, from 10 minutes (600 seconds) to one day (86,400
seconds). Amplify caps the s-maxage that you can set using a custom header at one day. For
example, if you set s-maxage to one week (604,800 seconds), Amplify uses the maximum TTL
of one day.
You can define custom headers for an app in the Custom headers section of the Amplify Console. For
more information, see Setting custom headers (p. 90). To specify a custom value for s-maxage, use the
following YAML format. This example keeps the associated content cached at the edge for 3600 seconds
(one hour).
customHeaders:
- pattern: '/img/*'
headers:
- key: 'Cache-Control'
value: 's-maxage=3600'
106
AWS Amplify Console User Guide
Amplify information in CloudTrail
To learn more about CloudTrail, see the AWS CloudTrail User Guide.
For an ongoing record of events in your AWS account, including events for Amplify, create a trail. A trail
enables CloudTrail to deliver log files to an Amazon S3 bucket. By default, when you create a trail in the
console, the trail applies to all AWS Regions. The trail logs events from all Regions in the AWS partition
and delivers the log files to the Amazon S3 bucket that you specify. Additionally, you can configure
other AWS services to further analyze and act upon the event data collected in CloudTrail logs. For more
information, see the following in the AWS CloudTrail User Guide:
All Amplify operations are logged by CloudTrail and are documented in the AWS Amplify Console
API Reference, and the AWS Amplify Admin UI API Reference. For example, calls to the CreateApp,
DeleteApp and DeleteBackendEnvironment operations generate entries in the CloudTrail log files.
Every event or log entry contains information about who generated the request. The identity
information helps you determine the following:
• Was the request made with root or AWS Identity and Access Management (IAM) user credentials.
• Was the request made with temporary security credentials for a role or federated user.
• Was the request made by another AWS service.
For more information, see the CloudTrail userIdentity element in the AWS CloudTrail User Guide.
107
AWS Amplify Console User Guide
Understanding Amplify log file entries
The following example shows a CloudTrail log entry that demonstrates the Amplify Console API
Reference DeleteBackendEnvironment operation.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDACKCEVSQ6C2EXAMPLE",
"arn": "arn:aws:iam::444455556666:user/Mary_Major",
"accountId": "444455556666",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AIDACKCEVSQ6C2EXAMPLE",
"arn": "arn:aws:iam::444455556666:user/Mary_Major",
"accountId": "444455556666",
"userName": "Mary_Major"
},
"webIdFederationData": {},
"attributes": {
"mfaAuthenticated": "false",
"creationDate": "2021-01-12T00:28:50Z"
}
},
"invokedBy": "apigateway.amazonaws.com"
},
"eventTime": "2021-01-12T00:31:08Z",
"eventSource": "amplify.amazonaws.com",
"eventName": "DeleteBackendEnvironment",
"awsRegion": "us-west-2",
"sourceIPAddress": "apigateway.amazonaws.com",
"userAgent": "apigateway.amazonaws.com",
"requestParameters": {
"environmentName": "staging",
"appId": "d3lap6vexample"
},
"responseElements": {
"backendEnvironment": {
"backendEnvironmentArn": "arn:aws:amplify:us-west-2:444455556666:apps/
d3lap6vexample/backendenvironments/staging",
"createTime": 1610086829.109,
"deploymentArtifacts": "amplify-amplify9b7cd3example-staging-62027-deployment",
"environmentName": "staging",
"stackName": "amplify-amplify9b7cd3example-staging-62027",
"updateTime": 1610086829.109
}
},
"requestID": "1135382e-f832-45ba-ae53-f7ffbexample",
"eventID": "cebab152-deb6-42e1-bd1f-d05b6example",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"eventCategory": "Management",
"recipientAccountId": "444455556666"
108
AWS Amplify Console User Guide
Understanding Amplify log file entries
The following example shows a CloudTrail log entry that demonstrates the AWS Amplify Console API
Reference ListApps operation.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDACKCEVSQ6C2EXAMPLE",
"arn": "arn:aws:iam::444455556666:user/Mary_Major",
"accountId": "444455556666",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "Mary_Major",
"sessionContext": {
"sessionIssuer": {},
"webIdFederationData": {},
"attributes": {
"mfaAuthenticated": "false",
"creationDate": "2021-01-12T05:48:10Z"
}
}
},
"eventTime": "2021-01-12T06:47:29Z",
"eventSource": "amplify.amazonaws.com",
"eventName": "ListApps",
"awsRegion": "us-west-2",
"sourceIPAddress": "192.0.2.255",
"userAgent": "aws-internal/3 aws-sdk-java/1.11.898
Linux/4.9.230-0.1.ac.223.84.332.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.275-b01
java/1.8.0_275 vendor/Oracle_Corporation",
"requestParameters": {
"maxResults": "100"
},
"responseElements": null,
"requestID": "1c026d0b-3397-405a-95aa-aa43aexample",
"eventID": "c5fca3fb-d148-4fa1-ba22-5fa63example",
"readOnly": true,
"eventType": "AwsApiCall",
"managementEvent": true,
"eventCategory": "Management",
"recipientAccountId": "444455556666"
}
The following example shows a CloudTrail log entry that demonstrates the AWS Amplify Admin UI API
Reference ListBackendJobs operation.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDACKCEVSQ6C2EXAMPLE",
"arn": "arn:aws:iam::444455556666:user/Mary_Major",
"accountId": "444455556666",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "Mary_Major",
"sessionContext": {
"sessionIssuer": {},
"webIdFederationData": {},
"attributes": {
"mfaAuthenticated": "false",
"creationDate": "2021-01-13T00:47:25Z"
}
109
AWS Amplify Console User Guide
Understanding Amplify log file entries
}
},
"eventTime": "2021-01-13T01:15:43Z",
"eventSource": "amplifybackend.amazonaws.com",
"eventName": "ListBackendJobs",
"awsRegion": "us-west-2",
"sourceIPAddress": "192.0.2.255",
"userAgent": "aws-internal/3 aws-sdk-java/1.11.898
Linux/4.9.230-0.1.ac.223.84.332.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.275-b01
java/1.8.0_275 vendor/Oracle_Corporation",
"requestParameters": {
"appId": "d23mv2oexample",
"backendEnvironmentName": "staging"
},
"responseElements": {
"jobs": [
{
"appId": "d23mv2oexample",
"backendEnvironmentName": "staging",
"jobId": "ed63e9b2-dd1b-4bf2-895b-3d5dcexample",
"operation": "CreateBackendAuth",
"status": "COMPLETED",
"createTime": "1610499932490",
"updateTime": "1610500140053"
},
{
"appId": "d23mv2oexample",
"backendEnvironmentName": "staging",
"jobId": "06904b10-a795-49c1-92b7-185dfexample",
"operation": "CreateBackend",
"status": "COMPLETED",
"createTime": "1610499657938",
"updateTime": "1610499704458"
}
],
"appId": "d23mv2oexample",
"backendEnvironmentName": "staging"
},
"requestID": "7adfabd6-98d5-4b11-bd39-c7deaexample",
"eventID": "68769310-c96c-4789-a6bb-68b52example",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"eventCategory": "Management",
"recipientAccountId": "444455556666"
}
110
AWS Amplify Console User Guide
Identity and Access Management
Security in Amplify
Cloud security at AWS is the highest priority. As an AWS customer, you benefit from data centers
and network architectures that are built to meet the requirements of the most security-sensitive
organizations.
Security is a shared responsibility between AWS and you. The shared responsibility model describes this
as security of the cloud and security in the cloud:
• Security of the cloud – AWS is responsible for protecting the infrastructure that runs AWS services in
the AWS Cloud. AWS also provides you with services that you can use securely. Third-party auditors
regularly test and verify the effectiveness of our security as part of the AWS Compliance Programs.
To learn about the compliance programs that apply to AWS Amplify, see AWS Services in Scope by
Compliance Program.
• Security in the cloud – Your responsibility is determined by the AWS service that you use. You are also
responsible for other factors including the sensitivity of your data, your company’s requirements, and
applicable laws and regulations.
This documentation helps you understand how to apply the shared responsibility model when using
Amplify. The following topics show you how to configure Amplify to meet your security and compliance
objectives. You also learn how to use other AWS services that help you monitor and secure your Amplify
resources.
Topics
• Identity and Access Management for Amplify (p. 111)
• Cross-service confused deputy prevention (p. 138)
• Security event logging and monitoring in Amplify (p. 140)
• Data Protection in Amplify (p. 140)
• Compliance Validation for AWS Amplify (p. 141)
• Infrastructure Security in AWS Amplify (p. 142)
Topics
• Audience (p. 112)
• Authenticating with identities (p. 112)
• Managing access using policies (p. 114)
• How Amplify works with IAM (p. 115)
• Identity-based policy examples for Amplify (p. 120)
• AWS managed policies for AWS Amplify (p. 122)
• Troubleshooting Amplify identity and access (p. 130)
• Amplify permissions reference (p. 132)
111
AWS Amplify Console User Guide
Audience
Audience
How you use AWS Identity and Access Management (IAM) differs, depending on the work that you do in
Amplify.
Service user – If you use the Amplify service to do your job, then your administrator provides you with
the credentials and permissions that you need. As you use more Amplify features to do your work, you
might need additional permissions. Understanding how access is managed can help you request the
right permissions from your administrator. If you cannot access a feature in Amplify, see Troubleshooting
Amplify identity and access (p. 130).
Service administrator – If you're in charge of Amplify resources at your company, you probably have
full access to Amplify. It's your job to determine which Amplify features and resources your employees
should access. You must then submit requests to your IAM administrator to change the permissions of
your service users. Review the information on this page to understand the basic concepts of IAM. To learn
more about how your company can use IAM with Amplify, see How Amplify works with IAM (p. 115).
IAM administrator – If you're an IAM administrator, you might want to learn details about how you can
write policies to manage access to Amplify. To view example Amplify identity-based policies that you can
use in IAM, see Identity-based policy examples for Amplify (p. 120).
You must be authenticated (signed in to AWS) as the AWS account root user, an IAM user, or by assuming
an IAM role. You can also use your company's single sign-on authentication or even sign in using Google
or Facebook. In these cases, your administrator previously set up identity federation using IAM roles.
When you access AWS using credentials from another company, you are assuming a role indirectly.
To sign in directly to the AWS Management Console, use your password with your root user email
address or your IAM user name. You can access AWS programmatically using your root user or IAM
users access keys. AWS provides SDK and command line tools to cryptographically sign your request
using your credentials. If you don't use AWS tools, you must sign the request yourself. Do this using
Signature Version 4, a protocol for authenticating inbound API requests. For more information about
authenticating requests, see Signature Version 4 signing process in the AWS General Reference.
Regardless of the authentication method that you use, you might also be required to provide additional
security information. For example, AWS recommends that you use multi-factor authentication (MFA) to
increase the security of your account. To learn more, see Using multi-factor authentication (MFA) in AWS
in the IAM User Guide.
112
AWS Amplify Console User Guide
Authenticating with identities
access keys. To learn how to generate access keys, see Managing access keys for IAM users in the IAM
User Guide. When you generate access keys for an IAM user, make sure you view and securely save the key
pair. You cannot recover the secret access key in the future. Instead, you must generate a new access key
pair.
An IAM group is an identity that specifies a collection of IAM users. You can't sign in as a group. You
can use groups to specify permissions for multiple users at a time. Groups make permissions easier to
manage for large sets of users. For example, you could have a group named IAMAdmins and give that
group permissions to administer IAM resources.
Users are different from roles. A user is uniquely associated with one person or application, but a role
is intended to be assumable by anyone who needs it. Users have permanent long-term credentials, but
roles provide temporary credentials. To learn more, see When to create an IAM user (instead of a role) in
the IAM User Guide.
IAM roles
An IAM role is an identity within your AWS account that has specific permissions. It is similar to an IAM
user, but is not associated with a specific person. You can temporarily assume an IAM role in the AWS
Management Console by switching roles. You can assume a role by calling an AWS CLI or AWS API
operation or by using a custom URL. For more information about methods for using roles, see Using IAM
roles in the IAM User Guide.
IAM roles with temporary credentials are useful in the following situations:
• Temporary IAM user permissions – An IAM user can assume an IAM role to temporarily take on
different permissions for a specific task.
• Federated user access – Instead of creating an IAM user, you can use existing identities from AWS
Directory Service, your enterprise user directory, or a web identity provider. These are known as
federated users. AWS assigns a role to a federated user when access is requested through an identity
provider. For more information about federated users, see Federated users and roles in the IAM User
Guide.
• Cross-account access – You can use an IAM role to allow someone (a trusted principal) in a different
account to access resources in your account. Roles are the primary way to grant cross-account access.
However, with some AWS services, you can attach a policy directly to a resource (instead of using a role
as a proxy). To learn the difference between roles and resource-based policies for cross-account access,
see How IAM roles differ from resource-based policies in the IAM User Guide.
• Cross-service access – Some AWS services use features in other AWS services. For example, when you
make a call in a service, it's common for that service to run applications in Amazon EC2 or store objects
in Amazon S3. A service might do this using the calling principal's permissions, using a service role, or
using a service-linked role.
• Principal permissions – When you use an IAM user or role to perform actions in AWS, you are
considered a principal. Policies grant permissions to a principal. When you use some services, you
might perform an action that then triggers another action in a different service. In this case, you
must have permissions to perform both actions. To see whether an action requires additional
dependent actions in a policy, see Actions, resources, and condition keys for AWS Amplify in the
Service Authorization Reference.
• Service role – A service role is an IAM role that a service assumes to perform actions on your behalf.
An IAM administrator can create, modify, and delete a service role from within IAM. For more
information, see Creating a role to delegate permissions to an AWS service in the IAM User Guide.
• Service-linked role – A service-linked role is a type of service role that is linked to an AWS service.
The service can assume the role to perform an action on your behalf. Service-linked roles appear
in your IAM account and are owned by the service. An IAM administrator can view, but not edit the
permissions for service-linked roles.
• Applications running on Amazon EC2 – You can use an IAM role to manage temporary credentials
for applications that are running on an EC2 instance and making AWS CLI or AWS API requests.
113
AWS Amplify Console User Guide
Managing access using policies
This is preferable to storing access keys within the EC2 instance. To assign an AWS role to an EC2
instance and make it available to all of its applications, you create an instance profile that is attached
to the instance. An instance profile contains the role and enables programs that are running on the
EC2 instance to get temporary credentials. For more information, see Using an IAM role to grant
permissions to applications running on Amazon EC2 instances in the IAM User Guide.
To learn whether to use IAM roles or IAM users, see When to create an IAM role (instead of a user) in the
IAM User Guide.
Administrators can use AWS JSON policies to specify who has access to what. That is, which principal can
perform actions on what resources, and under what conditions.
Every IAM entity (user or role) starts with no permissions. In other words, by default, users can
do nothing, not even change their own password. To give a user permission to do something, an
administrator must attach a permissions policy to a user. Or the administrator can add the user to a
group that has the intended permissions. When an administrator gives permissions to a group, all users
in that group are granted those permissions.
IAM policies define permissions for an action regardless of the method that you use to perform the
operation. For example, suppose that you have a policy that allows the iam:GetRole action. A user with
that policy can get role information from the AWS Management Console, the AWS CLI, or the AWS API.
Identity-based policies
Identity-based policies are JSON permissions policy documents that you can attach to an identity, such
as an IAM user, group of users, or role. These policies control what actions users and roles can perform,
on which resources, and under what conditions. To learn how to create an identity-based policy, see
Creating IAM policies in the IAM User Guide.
Identity-based policies can be further categorized as inline policies or managed policies. Inline policies
are embedded directly into a single user, group, or role. Managed policies are standalone policies that
you can attach to multiple users, groups, and roles in your AWS account. Managed policies include AWS
managed policies and customer managed policies. To learn how to choose between a managed policy or
an inline policy, see Choosing between managed policies and inline policies in the IAM User Guide.
Resource-based policies
Resource-based policies are JSON policy documents that you attach to a resource. Examples of resource-
based policies are IAM role trust policies and Amazon S3 bucket policies. In services that support resource-
based policies, service administrators can use them to control access to a specific resource. For the
resource where the policy is attached, the policy defines what actions a specified principal can perform
on that resource and under what conditions. You must specify a principal in a resource-based policy.
Principals can include accounts, users, roles, federated users, or AWS services.
Resource-based policies are inline policies that are located in that service. You can't use AWS managed
policies from IAM in a resource-based policy.
114
AWS Amplify Console User Guide
How Amplify works with IAM
Amazon S3, AWS WAF, and Amazon VPC are examples of services that support ACLs. To learn more about
ACLs, see Access control list (ACL) overview in the Amazon Simple Storage Service Developer Guide.
• Permissions boundaries – A permissions boundary is an advanced feature in which you set the
maximum permissions that an identity-based policy can grant to an IAM entity (IAM user or role).
You can set a permissions boundary for an entity. The resulting permissions are the intersection of
entity's identity-based policies and its permissions boundaries. Resource-based policies that specify
the user or role in the Principal field are not limited by the permissions boundary. An explicit deny
in any of these policies overrides the allow. For more information about permissions boundaries, see
Permissions boundaries for IAM entities in the IAM User Guide.
• Service control policies (SCPs) – SCPs are JSON policies that specify the maximum permissions for
an organization or organizational unit (OU) in AWS Organizations. AWS Organizations is a service for
grouping and centrally managing multiple AWS accounts that your business owns. If you enable all
features in an organization, then you can apply service control policies (SCPs) to any or all of your
accounts. The SCP limits permissions for entities in member accounts, including each AWS account
root user. For more information about Organizations and SCPs, see How SCPs work in the AWS
Organizations User Guide.
• Session policies – Session policies are advanced policies that you pass as a parameter when you
programmatically create a temporary session for a role or federated user. The resulting session's
permissions are the intersection of the user or role's identity-based policies and the session policies.
Permissions can also come from a resource-based policy. An explicit deny in any of these policies
overrides the allow. For more information, see Session policies in the IAM User Guide.
115
AWS Amplify Console User Guide
How Amplify works with IAM
To get a high-level view of how Amplify and other AWS services work with most IAM features, see AWS
services that work with IAM in the IAM User Guide.
Identity-based policies are JSON permissions policy documents that you can attach to an identity, such
as an IAM user, group of users, or role. These policies control what actions users and roles can perform,
on which resources, and under what conditions. To learn how to create an identity-based policy, see
Creating IAM policies in the IAM User Guide.
With IAM identity-based policies, you can specify allowed or denied actions and resources as well as the
conditions under which actions are allowed or denied. You can't specify the principal in an identity-based
policy because it applies to the user or role to which it is attached. To learn about all of the elements
that you can use in a JSON policy, see IAM JSON policy elements reference in the IAM User Guide.
To view examples of Amplify identity-based policies, see Identity-based policy examples for
Amplify (p. 120).
Resource-based policies are JSON policy documents that you attach to a resource. Examples of resource-
based policies are IAM role trust policies and Amazon S3 bucket policies. In services that support resource-
based policies, service administrators can use them to control access to a specific resource. For the
resource where the policy is attached, the policy defines what actions a specified principal can perform
on that resource and under what conditions. You must specify a principal in a resource-based policy.
Principals can include accounts, users, roles, federated users, or AWS services.
To enable cross-account access, you can specify an entire account or IAM entities in another account as
the principal in a resource-based policy. Adding a cross-account principal to a resource-based policy is
116
AWS Amplify Console User Guide
How Amplify works with IAM
only half of establishing the trust relationship. When the principal and the resource are in different AWS
accounts, an IAM administrator in the trusted account must also grant the principal entity (user or role)
permission to access the resource. They grant permission by attaching an identity-based policy to the
entity. However, if a resource-based policy grants access to a principal in the same account, no additional
identity-based policy is required. For more information, see How IAM roles differ from resource-based
policies in the IAM User Guide.
Administrators can use AWS JSON policies to specify who has access to what. That is, which principal can
perform actions on what resources, and under what conditions.
The Action element of a JSON policy describes the actions that you can use to allow or deny access in a
policy. Policy actions usually have the same name as the associated AWS API operation. There are some
exceptions, such as permission-only actions that don't have a matching API operation. There are also
some operations that require multiple actions in a policy. These additional actions are called dependent
actions.
For a list of Amplify actions, see Actions defined by AWS Amplify in the Service Authorization Reference.
Policy actions in Amplify use the following prefix before the action:
amplify
"Action": [
"amplify:action1",
"amplify:action2"
]
To view examples of Amplify identity-based policies, see Identity-based policy examples for
Amplify (p. 120).
Administrators can use AWS JSON policies to specify who has access to what. That is, which principal can
perform actions on what resources, and under what conditions.
The Resource JSON policy element specifies the object or objects to which the action applies.
Statements must include either a Resource or a NotResource element. As a best practice, specify
a resource using its Amazon Resource Name (ARN). You can do this for actions that support a specific
resource type, known as resource-level permissions.
For actions that don't support resource-level permissions, such as listing operations, use a wildcard (*) to
indicate that the statement applies to all resources.
117
AWS Amplify Console User Guide
How Amplify works with IAM
"Resource": "*"
For a list of Amplify resource types and their ARNs, see Resource types defined by AWS Amplify in the
Service Authorization Reference. To learn with which actions you can specify the ARN of each resource,
see Actions defined by AWS Amplify.
To view examples of Amplify identity-based policies, see Identity-based policy examples for
Amplify (p. 120).
Administrators can use AWS JSON policies to specify who has access to what. That is, which principal can
perform actions on what resources, and under what conditions.
The Condition element (or Condition block) lets you specify conditions in which a statement is in
effect. The Condition element is optional. You can create conditional expressions that use condition
operators, such as equals or less than, to match the condition in the policy with values in the request.
If you specify multiple Condition elements in a statement, or multiple keys in a single Condition
element, AWS evaluates them using a logical AND operation. If you specify multiple values for a single
condition key, AWS evaluates the condition using a logical OR operation. All of the conditions must be
met before the statement's permissions are granted.
You can also use placeholder variables when you specify conditions. For example, you can grant an IAM
user permission to access a resource only if it is tagged with their IAM user name. For more information,
see IAM policy elements: variables and tags in the IAM User Guide.
AWS supports global condition keys and service-specific condition keys. To see all AWS global condition
keys, see AWS global condition context keys in the IAM User Guide.
For a list of Amplify condition keys, see Condition keys for AWS Amplify in the Service Authorization
Reference. To learn with which actions and resources you can use a condition key, see Actions defined by
AWS Amplify.
To view examples of Amplify identity-based policies, see Identity-based policy examples for
Amplify (p. 120).
Supports ACLs No
Access control lists (ACLs) control which principals (account members, users, or roles) have permissions to
access a resource. ACLs are similar to resource-based policies, although they do not use the JSON policy
document format.
118
AWS Amplify Console User Guide
How Amplify works with IAM
Attribute-based access control (ABAC) is an authorization strategy that defines permissions based on
attributes. In AWS, these attributes are called tags. You can attach tags to IAM entities (users or roles)
and to many AWS resources. Tagging entities and resources is the first step of ABAC. Then you design
ABAC policies to allow operations when the principal's tag matches the tag on the resource that they are
trying to access.
ABAC is helpful in environments that are growing rapidly and helps with situations where policy
management becomes cumbersome.
To control access based on tags, you provide tag information in the condition element of a policy using
the aws:ResourceTag/key-name, aws:RequestTag/key-name, or aws:TagKeys condition keys.
For more information about ABAC, see What is ABAC? in the IAM User Guide. To view a tutorial with steps
for setting up ABAC, see Use attribute-based access control (ABAC) in the IAM User Guide.
Some AWS services don't work when you sign in using temporary credentials. For additional information,
including which AWS services work with temporary credentials, see AWS services that work with IAM in
the IAM User Guide.
You are using temporary credentials if you sign in to the AWS Management Console using any method
except a user name and password. For example, when you access AWS using your company's single
sign-on (SSO) link, that process automatically creates temporary credentials. You also automatically
create temporary credentials when you sign in to the console as a user and then switch roles. For more
information about switching roles, see Switching to a role (console) in the IAM User Guide.
You can manually create temporary credentials using the AWS CLI or AWS API. You can then use those
temporary credentials to access AWS. AWS recommends that you dynamically generate temporary
credentials instead of using long-term access keys. For more information, see Temporary security
credentials in IAM.
When you use an IAM user or role to perform actions in AWS, you are considered a principal. Policies
grant permissions to a principal. When you use some services, you might perform an action that
then triggers another action in a different service. In this case, you must have permissions to perform
both actions. To see whether an action requires additional dependent actions in a policy, see Actions,
resources, and condition keys for AWS Amplify in the Service Authorization Reference.
A service role is an IAM role that a service assumes to perform actions on your behalf. An IAM
administrator can create, modify, and delete a service role from within IAM. For more information, see
Creating a role to delegate permissions to an AWS service in the IAM User Guide.
119
AWS Amplify Console User Guide
Identity-based policy examples
Warning
Changing the permissions for a service role might break Amplify functionality. Edit service roles
only when Amplify provides guidance to do so.
A service-linked role is a type of service role that is linked to an AWS service. The service can assume the
role to perform an action on your behalf. Service-linked roles appear in your IAM account and are owned
by the service. An IAM administrator can view, but not edit the permissions for service-linked roles.
For details about creating or managing service-linked roles, see AWS services that work with IAM in the
IAM User Guide. Find a service in the table that includes a Yes in the Service-linked role column. Choose
the Yes link to view the service-linked roles documentation for that service.
To learn how to create an IAM identity-based policy using these example JSON policy documents, see
Creating policies on the JSON tab in the IAM User Guide.
Topics
• Policy best practices (p. 120)
• Using the Amplify console (p. 121)
• Allow users to view their own permissions (p. 121)
• Get started using AWS managed policies – To start using Amplify quickly, use AWS managed policies
to give your employees the permissions they need. These policies are already available in your account
and are maintained and updated by AWS. For more information, see Get started using permissions
with AWS managed policies in the IAM User Guide.
• Grant least privilege – When you create custom policies, grant only the permissions required
to perform a task. Start with a minimum set of permissions and grant additional permissions as
necessary. Doing so is more secure than starting with permissions that are too lenient and then trying
to tighten them later. For more information, see Grant least privilege in the IAM User Guide.
• Enable MFA for sensitive operations – For extra security, require IAM users to use multi-factor
authentication (MFA) to access sensitive resources or API operations. For more information, see Using
multi-factor authentication (MFA) in AWS in the IAM User Guide.
• Use policy conditions for extra security – To the extent that it's practical, define the conditions under
which your identity-based policies allow access to a resource. For example, you can write conditions to
specify a range of allowable IP addresses that a request must come from. You can also write conditions
120
AWS Amplify Console User Guide
Identity-based policy examples
to allow requests only within a specified date or time range, or to require the use of SSL or MFA. For
more information, see IAM JSON policy elements: Condition in the IAM User Guide.
You don't need to allow minimum console permissions for users that are making calls only to the AWS
CLI or the AWS API. Instead, allow access to only the actions that match the API operation that you're
trying to perform.
With the release of the Admin UI, deleting an app or a backend requires both amplify and
amplifybackend permissions. If an IAM policy provides only amplify permissions, a user gets a
permissions error when trying to delete an app. If you are an administrator writing policies, use the
permissions reference (p. ) to determine the correct permissions to give users who need to perform
delete actions.
To ensure that users and roles can still use the Amplify console, also attach the Amplify ConsoleAccess
or ReadOnly AWS managed policy to the entities. For more information, see Adding permissions to a
user in the IAM User Guide.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ViewOwnUserInfo",
"Effect": "Allow",
"Action": [
"iam:GetUserPolicy",
"iam:ListGroupsForUser",
"iam:ListAttachedUserPolicies",
"iam:ListUserPolicies",
"iam:GetUser"
],
"Resource": ["arn:aws:iam::*:user/${aws:username}"]
},
{
"Sid": "NavigateInConsole",
"Effect": "Allow",
"Action": [
"iam:GetGroupPolicy",
"iam:GetPolicyVersion",
"iam:GetPolicy",
"iam:ListAttachedGroupPolicies",
"iam:ListGroupPolicies",
"iam:ListPolicyVersions",
"iam:ListPolicies",
"iam:ListUsers"
],
"Resource": "*"
}
121
AWS Amplify Console User Guide
AWS managed policies
]
}
To add permissions to users, groups, and roles, it is easier to use AWS managed policies than to write
policies yourself. It takes time and expertise to create IAM customer managed policies that provide your
team with only the permissions they need. To get started quickly, you can use our AWS managed policies.
These policies cover common use cases and are available in your AWS account. For more information
about AWS managed policies, see AWS managed policies in the IAM User Guide.
AWS services maintain and update AWS managed policies. You can't change the permissions in AWS
managed policies. Services occasionally add additional permissions to an AWS managed policy to
support new features. This type of update affects all identities (users, groups, and roles) where the policy
is attached. Services are most likely to update an AWS managed policy when a new feature is launched
or when new operations become available. Services do not remove permissions from an AWS managed
policy, so policy updates won't break your existing permissions.
Additionally, AWS supports managed policies for job functions that span multiple services. For example,
the ReadOnlyAccess AWS managed policy provides read-only access to all AWS services and resources.
When a service launches a new feature, AWS adds read-only permissions for new operations and
resources. For a list and descriptions of job function policies, see AWS managed policies for job functions
in the IAM User Guide.
You can attach AdministratorAccess-Amplify to your IAM entities. Amplify also attaches this
policy to a service role that allows Amplify to perform actions on your behalf. When you deploy a
backend in the Amplify console, you must create an Amplify-Backend Deployment service role that
Amplify uses to create and manage AWS resources. IAM attaches the AdministratorAccess-Amplify
managed policy to the Amplify-Backend Deployment service role.
This policy grants account administrative permissions while explicity allowing direct access to resources
that Amplify applications require to create and manage backends.
Permissions details
This policy provides access to multiple AWS services, including IAM actions. These actions allow identities
with this policy to use AWS Identity and Access Management to create other identities with any
permissions. This allows permissions escalation and this policy should be considered as powerful as the
AdministratorAccess policy.
122
AWS Amplify Console User Guide
AWS managed policies
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CLICloudformationPolicy",
"Effect": "Allow",
"Action": [
"cloudformation:CreateChangeSet",
"cloudformation:CreateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeChangeSet",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStackResource",
"cloudformation:DescribeStackResources",
"cloudformation:DescribeStacks",
"cloudformation:ExecuteChangeSet",
"cloudformation:GetTemplate",
"cloudformation:UpdateStack",
"cloudformation:ListStackResources",
"cloudformation:DeleteStackSet",
"cloudformation:DescribeStackSet",
"cloudformation:UpdateStackSet"
],
"Resource": [
"arn:aws:cloudformation:*:*:stack/amplify-*"
]
},
{
"Sid": "CLIManageviaCFNPolicy",
"Effect": "Allow",
"Action": [
"iam:ListRoleTags",
"iam:TagRole",
"iam:AttachRolePolicy",
"iam:CreatePolicy",
"iam:DeletePolicy",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:DetachRolePolicy",
"iam:PutRolePolicy",
"iam:UpdateRole",
"iam:GetRole",
"iam:GetPolicy",
"iam:GetRolePolicy",
"iam:PassRole",
"iam:ListPolicyVersions",
"iam:CreatePolicyVersion",
"iam:DeletePolicyVersion",
"iam:CreateRole",
"iam:ListRolePolicies",
"iam:PutRolePermissionsBoundary",
"iam:DeleteRolePermissionsBoundary",
"appsync:CreateApiKey",
"appsync:CreateDataSource",
"appsync:CreateFunction",
"appsync:CreateResolver",
"appsync:CreateType",
"appsync:DeleteApiKey",
"appsync:DeleteDataSource",
"appsync:DeleteFunction",
"appsync:DeleteResolver",
"appsync:DeleteType",
"appsync:GetDataSource",
"appsync:GetFunction",
"appsync:GetIntrospectionSchema",
"appsync:GetResolver",
"appsync:GetSchemaCreationStatus",
123
AWS Amplify Console User Guide
AWS managed policies
"appsync:GetType",
"appsync:GraphQL",
"appsync:ListApiKeys",
"appsync:ListDataSources",
"appsync:ListFunctions",
"appsync:ListGraphqlApis",
"appsync:ListResolvers",
"appsync:ListResolversByFunction",
"appsync:ListTypes",
"appsync:StartSchemaCreation",
"appsync:UpdateApiKey",
"appsync:UpdateDataSource",
"appsync:UpdateFunction",
"appsync:UpdateResolver",
"appsync:UpdateType",
"appsync:TagResource",
"appsync:CreateGraphqlApi",
"appsync:DeleteGraphqlApi",
"appsync:GetGraphqlApi",
"appsync:ListTagsForResource",
"appsync:UpdateGraphqlApi",
"apigateway:DELETE",
"apigateway:GET",
"apigateway:PATCH",
"apigateway:POST",
"apigateway:PUT",
"cognito-idp:CreateUserPool",
"cognito-identity:CreateIdentityPool",
"cognito-identity:DeleteIdentityPool",
"cognito-identity:DescribeIdentity",
"cognito-identity:DescribeIdentityPool",
"cognito-identity:SetIdentityPoolRoles",
"cognito-identity:GetIdentityPoolRoles",
"cognito-identity:UpdateIdentityPool",
"cognito-idp:CreateUserPoolClient",
"cognito-idp:DeleteUserPool",
"cognito-idp:DeleteUserPoolClient",
"cognito-idp:DescribeUserPool",
"cognito-idp:DescribeUserPoolClient",
"cognito-idp:ListTagsForResource",
"cognito-idp:ListUserPoolClients",
"cognito-idp:UpdateUserPoolClient",
"cognito-idp:CreateGroup",
"cognito-idp:DeleteGroup",
"cognito-identity:TagResource",
"cognito-idp:TagResource",
"cognito-idp:UpdateUserPool",
"cognito-idp:SetUserPoolMfaConfig",
"lambda:AddPermission",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:InvokeAsync",
"lambda:InvokeFunction",
"lambda:RemovePermission",
"lambda:UpdateFunctionCode",
"lambda:UpdateFunctionConfiguration",
"lambda:ListTags",
"lambda:TagResource",
"lambda:UntagResource",
"lambda:AddLayerVersionPermission",
"lambda:CreateEventSourceMapping",
"lambda:DeleteEventSourceMapping",
"lambda:DeleteLayerVersion",
"lambda:GetEventSourceMapping",
124
AWS Amplify Console User Guide
AWS managed policies
"lambda:GetLayerVersion",
"lambda:ListEventSourceMappings",
"lambda:ListLayerVersions",
"lambda:PublishLayerVersion",
"lambda:RemoveLayerVersionPermission",
"dynamodb:CreateTable",
"dynamodb:DeleteItem",
"dynamodb:DeleteTable",
"dynamodb:DescribeContinuousBackups",
"dynamodb:DescribeTable",
"dynamodb:DescribeTimeToLive",
"dynamodb:ListStreams",
"dynamodb:PutItem",
"dynamodb:TagResource",
"dynamodb:ListTagsOfResource",
"dynamodb:UpdateContinuousBackups",
"dynamodb:UpdateItem",
"dynamodb:UpdateTable",
"dynamodb:UpdateTimeToLive",
"s3:CreateBucket",
"s3:ListBucket",
"s3:PutBucketAcl",
"s3:PutBucketCORS",
"s3:PutBucketNotification",
"s3:PutBucketPolicy",
"s3:PutBucketWebsite",
"s3:PutObjectAcl",
"cloudfront:CreateCloudFrontOriginAccessIdentity",
"cloudfront:CreateDistribution",
"cloudfront:DeleteCloudFrontOriginAccessIdentity",
"cloudfront:DeleteDistribution",
"cloudfront:GetCloudFrontOriginAccessIdentity",
"cloudfront:GetCloudFrontOriginAccessIdentityConfig",
"cloudfront:GetDistribution",
"cloudfront:GetDistributionConfig",
"cloudfront:TagResource",
"cloudfront:UntagResource",
"cloudfront:UpdateCloudFrontOriginAccessIdentity",
"cloudfront:UpdateDistribution",
"events:DeleteRule",
"events:DescribeRule",
"events:ListRuleNamesByTarget",
"events:PutRule",
"events:PutTargets",
"events:RemoveTargets",
"mobiletargeting:GetApp",
"kinesis:AddTagsToStream",
"kinesis:CreateStream",
"kinesis:DeleteStream",
"kinesis:DescribeStream",
"kinesis:DescribeStreamSummary",
"kinesis:PutRecords",
"es:AddTags",
"es:CreateElasticsearchDomain",
"es:DeleteElasticsearchDomain",
"es:DescribeElasticsearchDomain",
"s3:PutEncryptionConfiguration"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:CalledVia": [
"cloudformation.amazonaws.com"
]
}
}
125
AWS Amplify Console User Guide
AWS managed policies
},
{
"Sid": "CLISDKCalls",
"Effect": "Allow",
"Action": [
"appsync:GetIntrospectionSchema",
"appsync:GraphQL",
"appsync:UpdateApiKey",
"appsync:ListApiKeys",
"amplify:*",
"amplifybackend:*",
"sts:AssumeRole",
"mobiletargeting:*",
"cognito-idp:AdminAddUserToGroup",
"cognito-idp:AdminCreateUser",
"cognito-idp:CreateGroup",
"cognito-idp:DeleteGroup",
"cognito-idp:DeleteUser",
"cognito-idp:ListUsers",
"cognito-idp:AdminGetUser",
"cognito-idp:ListUsersInGroup",
"cognito-idp:AdminDisableUser",
"cognito-idp:AdminRemoveUserFromGroup",
"cognito-idp:AdminResetUserPassword",
"cognito-idp:AdminListGroupsForUser",
"cognito-idp:ListGroups",
"cognito-idp:AdminListUserAuthEvents",
"cognito-idp:AdminDeleteUser",
"cognito-idp:AdminConfirmSignUp",
"cognito-idp:AdminEnableUser",
"cognito-idp:AdminUpdateUserAttributes",
"cognito-idp:DescribeIdentityProvider",
"cognito-idp:DescribeUserPool",
"cognito-idp:DeleteUserPool",
"cognito-idp:DescribeUserPoolClient",
"cognito-idp:CreateUserPool",
"cognito-idp:CreateUserPoolClient",
"cognito-idp:UpdateUserPool",
"cognito-idp:AdminSetUserPassword",
"cognito-idp:ListUserPools",
"cognito-idp:ListUserPoolClients",
"cognito-idp:ListIdentityProviders",
"cognito-idp:GetUserPoolMfaConfig",
"cognito-identity:GetIdentityPoolRoles",
"cognito-identity:SetIdentityPoolRoles",
"cognito-identity:CreateIdentityPool",
"cognito-identity:DeleteIdentityPool",
"cognito-identity:ListIdentityPools",
"cognito-identity:DescribeIdentityPool",
"dynamodb:DescribeTable",
"dynamodb:ListTables",
"lambda:GetFunction",
"lambda:CreateFunction",
"lambda:AddPermission",
"lambda:DeleteFunction",
"lambda:InvokeFunction",
"lambda:ListLayerVersions",
"iam:PutRolePolicy",
"iam:CreatePolicy",
"iam:AttachRolePolicy",
"iam:ListPolicyVersions",
"iam:ListAttachedRolePolicies",
"iam:CreateRole",
"iam:PassRole",
"iam:ListRolePolicies",
"iam:DeleteRolePolicy",
126
AWS Amplify Console User Guide
AWS managed policies
"iam:CreatePolicyVersion",
"iam:DeletePolicyVersion",
"iam:DeleteRole",
"iam:DetachRolePolicy",
"cloudformation:ListStacks",
"sns:CreateSMSSandboxPhoneNumber",
"sns:GetSMSSandboxAccountStatus",
"sns:VerifySMSSandboxPhoneNumber",
"sns:DeleteSMSSandboxPhoneNumber",
"sns:ListSMSSandboxPhoneNumbers",
"sns:ListOriginationNumbers",
"rekognition:DescribeCollection",
"logs:DescribeLogStreams",
"logs:GetLogEvents",
"lex:GetBot",
"lex:GetBuiltinIntent",
"lex:GetBuiltinIntents",
"lex:GetBuiltinSlotTypes",
"cloudformation:GetTemplateSummary",
"codecommit:GitPull"
],
"Resource": "*"
},
{
"Sid": "AmplifySSMCalls",
"Effect": "Allow",
"Action": [
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:GetParametersByPath",
"ssm:GetParameters",
"ssm:GetParameter",
"ssm:DeleteParameters"
],
"Resource": "arn:aws:ssm:*:*:parameter/amplify/*"
},
{
"Sid": "GeoPowerUser",
"Effect": "Allow",
"Action": [
"geo:*"
],
"Resource": "*"
},
{
"Sid": "AmplifyStorageSDKCalls",
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:PutBucketAcl",
"s3:PutBucketCORS",
"s3:PutBucketNotification",
"s3:PutBucketPolicy",
"s3:PutBucketWebsite",
"s3:PutEncryptionConfiguration",
"s3:PutObject",
127
AWS Amplify Console User Guide
AWS managed policies
"s3:PutObjectAcl"
],
"Resource": "*"
},
{
"Sid": "AmplifySSRCalls",
"Effect": "Allow",
"Action": [
"cloudfront:CreateCloudFrontOriginAccessIdentity",
"cloudfront:CreateDistribution",
"cloudfront:CreateInvalidation",
"cloudfront:GetDistribution",
"cloudfront:GetDistributionConfig",
"cloudfront:ListCloudFrontOriginAccessIdentities",
"cloudfront:ListDistributions",
"cloudfront:ListDistributionsByLambdaFunction",
"cloudfront:ListDistributionsByWebACLId",
"cloudfront:ListFieldLevelEncryptionConfigs",
"cloudfront:ListFieldLevelEncryptionProfiles",
"cloudfront:ListInvalidations",
"cloudfront:ListPublicKeys",
"cloudfront:ListStreamingDistributions",
"cloudfront:UpdateDistribution",
"cloudfront:TagResource",
"cloudfront:UntagResource",
"cloudfront:ListTagsForResource",
"iam:AttachRolePolicy",
"iam:CreateRole",
"iam:CreateServiceLinkedRole",
"iam:GetRole",
"iam:PutRolePolicy",
"iam:PassRole",
"lambda:CreateFunction",
"lambda:EnableReplication",
"lambda:DeleteFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:PublishVersion",
"lambda:UpdateFunctionCode",
"lambda:UpdateFunctionConfiguration",
"lambda:ListTags",
"lambda:TagResource",
"lambda:UntagResource",
"route53:ChangeResourceRecordSets",
"route53:ListHostedZonesByName",
"route53:ListResourceRecordSets",
"s3:CreateBucket",
"s3:GetAccelerateConfiguration",
"s3:GetObject",
"s3:ListBucket",
"s3:PutAccelerateConfiguration",
"s3:PutBucketPolicy",
"s3:PutObject",
"s3:PutBucketTagging",
"s3:GetBucketTagging",
"lambda:ListEventSourceMappings",
"lambda:CreateEventSourceMapping",
"iam:UpdateAssumeRolePolicy",
"iam:DeleteRolePolicy",
"sqs:CreateQueue",
"sqs:DeleteQueue",
"sqs:GetQueueAttributes",
"sqs:SetQueueAttributes",
"amplify:GetApp",
"amplify:GetBranch",
"amplify:UpdateApp",
128
AWS Amplify Console User Guide
AWS managed policies
"amplify:UpdateBranch"
],
"Resource": "*"
}
]
}
View details about updates to AWS managed policies for Amplify since this service began tracking these
changes. For automatic alerts about changes to this page, subscribe to the RSS feed on the Document
history for AWS Amplify (p. 144) page.
129
AWS Amplify Console User Guide
Troubleshooting
Topics
• I am not authorized to perform an action in Amplify (p. 131)
• I am not authorized to perform iam:PassRole (p. 131)
• I want to view my access keys (p. 131)
• I'm an administrator and want to allow others to access Amplify (p. 132)
• I want to allow people outside of my AWS account to access my Amplify resources (p. 132)
130
AWS Amplify Console User Guide
Troubleshooting
With the release of the Admin UI, deleting an app or a backend requires both amplify and
amplifybackend permissions. If an administrator has written an IAM policy that provides only amplify
permissions, a user will get a permissions error when trying to delete an app.
The following example error occurs when the mateojackson IAM user tries to use the
console to delete a fictional example-amplify-app resource but does not have the
amplifybackend:RemoveAllBackends permissions.
In this case, Mateo asks his administrator to update his policies to allow him to access the example-
amplify-app resource using the amplifybackend:RemoveAllBackends action.
Some AWS services allow you to pass an existing role to that service, instead of creating a new service
role or service-linked role. To do this, you must have permissions to pass the role to the service.
The following example error occurs when an IAM user named marymajor tries to use the console to
perform an action in Amplify. However, the action requires the service to have permissions granted by a
service role. Mary does not have permissions to pass the role to the service.
In this case, Mary asks her administrator to update her policies to allow her to perform the
iam:PassRole action.
Access keys consist of two parts: an access key ID (for example, AKIAIOSFODNN7EXAMPLE) and a secret
access key (for example, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY). Like a user name and
password, you must use both the access key ID and secret access key together to authenticate your
requests. Manage your access keys as securely as you do your user name and password.
Important
Do not provide your access keys to a third party, even to help find your canonical user ID. By
doing this, you might give someone permanent access to your account.
When you create an access key pair, you are prompted to save the access key ID and secret access key in
a secure location. The secret access key is available only at the time you create it. If you lose your secret
access key, you must add new access keys to your IAM user. You can have a maximum of two access keys.
131
AWS Amplify Console User Guide
Amplify permissions reference
If you already have two, you must delete one key pair before creating a new one. To view instructions,
see Managing access keys in the IAM User Guide.
To get started right away, see Creating your first IAM delegated user and group in the IAM User Guide.
• To learn whether Amplify supports these features, see How Amplify works with IAM (p. 115).
• To learn how to provide access to your resources across AWS accounts that you own, see Providing
access to an IAM user in another AWS account that you own in the IAM User Guide.
• To learn how to provide access to your resources to third-party AWS accounts, see Providing access to
AWS accounts owned by third parties in the IAM User Guide.
• To learn how to provide access through identity federation, see Providing access to externally
authenticated users (identity federation) in the IAM User Guide.
• To learn the difference between using roles and resource-based policies for cross-account access, see
How IAM roles differ from resource-based policies in the IAM User Guide.
CreateBackendEnvironment arn:aws:amplify:region:account-
amplify:CreateBackendEnvironment
id:apps/app-id
CreateDomainAssociation arn:aws:amplify:region:account-
amplify:CreateDomainAssociation
id:apps/app-id
132
AWS Amplify Console User Guide
Amplify permissions reference
DeleteBackendEnvironment arn:aws:amplify:region:account-
amplify:DeleteBackendEnvironment
id:apps/app-id
DeleteDomainAssociation arn:aws:amplify:region:account-
amplify:DeleteDomainAssociation
id:apps/app-id/
domains/domain-name
GetBackendEnvironment arn:aws:amplify:region:account-
amplify:GetBackendEnvironment
id:apps/app-id
GetDomainAssociation arn:aws:amplify:region:account-
amplify:GetDomainAssociation
id:apps/app-id/
domains/domain-name
133
AWS Amplify Console User Guide
Amplify permissions reference
ListBackendEnvironments arn:aws:amplify:region:account-
amplify:ListBackendEnvironments
id:apps/app-id
ListDomainAssociations arn:aws:amplify:region:account-
amplify:ListDomainAssociations
id:apps/app-id
or
arn:aws:amplify:region:account-
id:apps/app-id/
branches/branch-name
or
arn:aws:amplify:region:account-
id:apps/app-id/
branches/branch-name/
jobs/job-id
134
AWS Amplify Console User Guide
Amplify permissions reference
or
arn:aws:amplify:region:account-
id:apps/app-id/
branches/branch-name
or
arn:aws:amplify:region:account-
id:apps/app-id/
branches/branch-name/
jobs/job-id
UpdateDomainAssociation arn:aws:amplify:region:account-
amplify:UpdateDomainAssociation
id:apps/app-id/
domains/domain-name
The following table lists each Amplify Admin UI API operation, the corresponding permissions required
to perform the operation, and the AWS resource for which you can grant the permissions.
CloneBackend amplifybackend:CloneBackendarn:aws:amplifybackend:region:account-
id:backend/app-id
CreateBackend arn:aws:amplifybackend:region:account-
amplifybackend:CreateBackend
id:backend/app-id
CreateBackendAPI arn:aws:amplifybackend:region:account-
amplifybackend:CreateBackendAPI
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/api
CreateBackendAuth arn:aws:amplifybackend:region:account-
amplifybackend:CreateBackendAuth
id:backend/app-id
135
AWS Amplify Console User Guide
Amplify permissions reference
arn:aws:amplifybackend:region:account-
id:backend/app-id/auth
CreateBackendConfig arn:aws:amplifybackend:region:account-
amplifybackend:CreateBackendConfig
id:backend/app-id
DeleteBackend arn:aws:amplifybackend:region:account-
amplifybackend:DeleteBackend
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
DeleteBackendAPI arn:aws:amplifybackend:region:account-
amplifybackend:DeleteBackendAPI
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/api
DeleteBackendAuth arn:aws:amplifybackend:region:account-
amplifybackend:DeleteBackendAuth
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/auth
GenerateBackendAPIModels arn:aws:amplifybackend:region:account-
amplifybackend:GenerateBackendAPIModels
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/api
136
AWS Amplify Console User Guide
Amplify permissions reference
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
GetBackendAPI arn:aws:amplifybackend:region:account-
amplifybackend:GetBackendAPI
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/api
GetBackendAPIModels arn:aws:amplifybackend:region:account-
amplifybackend:GetBackendAPIModels
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/api
GetBackendAuth arn:aws:amplifybackend:region:account-
amplifybackend:GetBackendAuth
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/auth
GetBackendJob arn:aws:amplifybackend:region:account-
amplifybackend:GetBackendJob
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/job
ListBackendJobs arn:aws:amplifybackend:region:account-
amplifybackend:ListBackendJobs
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/job
RemoveAllBackends arn:aws:amplifybackend:region:account-
amplifybackend:RemoveAllBackends
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
137
AWS Amplify Console User Guide
Cross-service confused deputy prevention
RemoveBackendConfig arn:aws:amplifybackend:region:account-
amplifybackend:RemoveBackendConfig
id:backend/app-id
UpdateBackendAPI arn:aws:amplifybackend:region:account-
amplifybackend:UpdateBackendAPI
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/api
UpdateBackendAuth arn:aws:amplifybackend:region:account-
amplifybackend:UpdateBackendAuth
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/
environments
arn:aws:amplifybackend:region:account-
id:backend/app-id/auth
UpdateBackendConfig arn:aws:amplifybackend:region:account-
amplifybackend:UpdateBackendConfig
id:backend/app-id
UpdateBackendJob arn:aws:amplifybackend:region:account-
amplifybackend:UpdateBackendJob
id:backend/app-id
arn:aws:amplifybackend:region:account-
id:backend/app-id/job
We recommend using the aws:SourceArn and aws:SourceAccount global condition context keys
in resource policies to limit the permissions that AWS Amplify gives another service to the resource. If
you use both global condition context keys, the aws:SourceAccount value and the account in the
aws:SourceArn value must use the same account ID when used in the same policy statement.
The value of aws:SourceArn must be the branch ARN of the Amplify app. Specify this value in the
format arn:Partition:amplify:Region:Account:apps/AppId/branches/BranchName.
The most effective way to protect against the confused deputy problem is to use the aws:SourceArn
global condition context key with the full ARN of the resource. If you don't know the full ARN
of the resource or if you are specifying multiple resources, use the aws:SourceArn global
context condition key with wildcards (*) for the unknown portions of the ARN. For example,
arn:aws:servicename::123456789012:*.
138
AWS Amplify Console User Guide
Cross-service confused deputy prevention
The following example shows a role trust policy you can apply to limit access to any Amplify app in your
account and prevent the confused deputy problem. To use this policy, replace the red italicized text in
the example policy with your own information.
{
"Version": "2012-10-17",
"Statement": {
"Sid": "ConfusedDeputyPreventionExamplePolicy",
"Effect": "Allow",
"Principal": {
"Service": [
"amplify.me-south-1.amazonaws.com",
"amplify.eu-south-1.amazonaws.com",
"amplify.ap-east-1.amazonaws.com",
"amplifybackend.amazonaws.com",
"amplify.amazonaws.com"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:amplify:us-east-1:123456789012:apps/*"
},
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
}
The following example shows a role trust policy you can apply to limit access to a specified Amplify app
in your account and prevent the confused deputy problem. To use this policy, replace the red italicized
text in the example policy with your own information.
{
"Version": "2012-10-17",
"Statement": {
"Sid": "ConfusedDeputyPreventionExamplePolicy",
"Effect": "Allow",
"Principal": {
"Service": [
"amplify.me-south-1.amazonaws.com",
"amplify.eu-south-1.amazonaws.com",
"amplify.ap-east-1.amazonaws.com",
"amplifybackend.amazonaws.com",
"amplify.amazonaws.com"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:amplify:us-east-1:123456789012:apps/d123456789/branches/
*"
},
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
}
139
AWS Amplify Console User Guide
Logging and monitoring
• Amazon CloudWatch monitors in real time your AWS resources and the applications that you run on
AWS. You can collect and track metrics, create customized dashboards, and set alarms that notify you
or take actions when a certain metric reaches a threshold that you specify. For example, you can have
CloudWatch track CPU usage or other metrics of your Amazon Elastic Compute Cloud (Amazon EC2)
instances and automatically launch new instances when needed. For more information about using
CloudWatch metrics and alarms with Amplify, see Monitoring (p. 95).
• Amazon CloudWatch Logs enables you to monitor, store, and access your log files from Amazon EC2
instances, AWS CloudTrail, and other sources. CloudWatch Logs can monitor information in the log
files and notify you when certain thresholds are met. You can also archive your log data in highly
durable storage. For more information, see the Amazon CloudWatch Logs User Guide.
• AWS CloudTrail captures API calls and related events made by or on behalf of your AWS account and
delivers the log files to an Amazon Simple Storage Service (Amazon S3) bucket that you specify. You
can identify which users and accounts called AWS, the source IP address from which the calls were
made, and when the calls occurred. For more information, see Logging Amplify API calls using AWS
CloudTrail (p. 107).
• Amazon EventBridge is a serverless event bus service that makes it easy to connect your applications
with data from a variety of sources. EventBridge delivers a stream of real-time data from your own
applications, Software-as-a-Service (SaaS) applications, and AWS services, and routes that data to
targets such as AWS Lambda. This enables you to monitor events that happen in services and build
event-driven architectures. For more information, see the Amazon EventBridge User Guide.
For data protection purposes, we recommend that you protect AWS account credentials and set up
individual user accounts with AWS Identity and Access Management (IAM), so that each user is given only
the permissions necessary to fulfill their job duties. We also recommend that you secure your data in the
following ways:
We strongly recommend that you never put sensitive identifying information, such as your customers'
account numbers, into free-form fields such as a Name field. This includes when you work with Amplify
or other AWS services using the console, API, AWS CLI, or AWS SDKs. Any data that you enter into
Amplify or other services might get picked up for inclusion in diagnostic logs. When you provide a URL
140
AWS Amplify Console User Guide
Encryption at rest
to an external server, don't include credentials information in the URL to validate your request to that
server.
For more information about data protection, see the AWS Shared Responsibility Model and GDPR blog
post on the AWS Security Blog.
Encryption at rest
Encryption at rest refers to protecting your data from unauthorized access by encrypting data while
stored. Amplify encrypts an app's build artifacts by default using AWS KMS keys for Amazon S3 that are
managed by the AWS Key Management Service.
Amplify uses Amazon CloudFront to serve your app to your customers. CloudFront uses SSDs which
are encrypted for edge location points of presence (POPs), and encrypted EBS volumes for Regional
Edge Caches (RECs). Function code and configuration in CloudFront Functions is always stored in an
encrypted format on the encrypted SSDs on the edge location POPs, and in other storage locations used
by CloudFront.
Encryption in transit
Encryption in transit refers to protecting your data from being intercepted while it moves between
communication endpoints. Amplify Console provides encryption for data in-transit by default. All
communication between customers and Amplify and between Amplify and its downstream dependencies
is protected using TLS connections that are signed using the Signature Version 4 signing process. All
Amplify Console endpoints use SHA-256 certificates that are managed by AWS Certificate Manager
Private Certificate Authority. For more information, see Signature Version 4 signing process and What is
ACM PCA.
To learn whether Amplify or other AWS services are in scope of specific compliance programs, see AWS
Services in Scope by Compliance Program. For general information, see AWS Compliance Programs.
You can download third-party audit reports using AWS Artifact. For more information, see Downloading
Reports in AWS Artifact.
Your compliance responsibility when using AWS services is determined by the sensitivity of your data,
your company's compliance objectives, and applicable laws and regulations. AWS provides the following
resources to help with compliance:
• Security and Compliance Quick Start Guides – These deployment guides discuss architectural
considerations and provide steps for deploying baseline environments on AWS that are security and
compliance focused.
• Architecting for HIPAA Security and Compliance Whitepaper – This whitepaper describes how
companies can use AWS to create HIPAA-compliant applications.
141
AWS Amplify Console User Guide
Infrastructure Security
Note
Not all services are compliant with HIPAA.
• AWS Compliance Resources – This collection of workbooks and guides might apply to your industry
and location.
• Evaluating Resources with Rules in the AWS Config Developer Guide – The AWS Config service assesses
how well your resource configurations comply with internal practices, industry guidelines, and
regulations.
• AWS Security Hub – This AWS service provides a comprehensive view of your security state within AWS
that helps you check your compliance with security industry standards and best practices.
• AWS Audit Manager – This AWS service helps you continuously audit your AWS usage to simplify how
you manage risk and compliance with regulations and industry standards.
You use AWS published API calls to access Amplify through the network. Clients must support Transport
Layer Security (TLS) 1.0 or later. We recommend TLS 1.2 or later. Clients must also support cipher suites
with perfect forward secrecy (PFS) such as Ephemeral Diffie-Hellman (DHE) or Elliptic Curve Ephemeral
Diffie-Hellman (ECDHE). Most modern systems such as Java 7 and later support these modes.
Additionally, requests must be signed by using an access key ID and a secret access key that is associated
with an IAM principal. Or you can use the AWS Security Token Service (AWS STS) to generate temporary
security credentials to sign requests.
142
AWS Amplify Console User Guide
AWS CloudFormation support
Topics
• AWS CloudFormation support (p. 143)
• AWS Command Line Interface support (p. 143)
• Resource tagging support (p. 143)
143
AWS Amplify Console User Guide
Updated managed policies topic Updated the AWS managed November 8, 2021
policies for AWS Amplify
(p. 122) topic to describe recent
changes to the AWS managed
policies for Amplify.
Updated managed policies topic Updated the AWS managed September 27, 2021
policies for AWS Amplify
(p. 122) topic to describe recent
changes to the AWS managed
policies for Amplify.
New managed policies topic Added the AWS managed July 28, 2021
policies for AWS Amplify
(p. 122) topic to describe the
AWS managed policies for
Amplify and recent changes to
those policies.
Updated Server side rendering Updated the Deploy and host July 22, 2021
chapter server-side rendered apps
with Amplify (p. 14) chapter to
describe new support for Next.js
version 10.x.x and Next.js version
11.
Updated Configuring build Added the Monorepo build July 20, 2021
settings chapter settings (p. 43) topic to
describe how to configure the
build settings and the new
AMPLIFY_MONOREPO_APP_ROOT
environment variable when
deploying a monorepo app with
Amplify.
Updated Feature branch Added the Automatic build- June 30, 2021
deployments chapter time generation of Amplify
config (p. 59) topic to describe
how to autogenerate the aws-
exports.js file at build-time.
Added the Conditional backend
builds (p. 60) topic to describe
how to enable conditional
backend builds. Added the
Use Amplify backends across
144
AWS Amplify Console User Guide
New support for SSR feature Added the Deploy and host May 18, 2021
launch server-side rendered apps
with Amplify (p. 14) chapter to
describe Amplify support for
web apps that use server-side
rendering (SSR) and are created
with Next.js.
Updated custom builds topic Updated the Custom build March 12, 2021
images and live package
updates (p. ) topic to
describe how to configure a
custom build image hosted
in Amazon Elastic Container
Registry Public.
New CloudTrail logging topic Added the Logging Amplify February 2, 2021
API calls using AWS
CloudTrail (p. ) topic to
describe how AWS CloudTrail
captures and logs all of the API
actions for the AWS Amplify
Console API Reference and the
AWS Amplify Admin UI API
Reference.
145
AWS Amplify Console User Guide
New Admin UI feature launch Updated the Welcome to the December 1, 2020
AWS Amplify Console (p. 1)
topic to describe the new
Admin UI that provides a visual
interface for frontend web and
mobile developers to create and
manage app backends outside
the AWS Management Console.
New performance mode feature Updated the Managing app November 4, 2020
launch performance (p. ) topic
to describe how to enable
performance mode to optimize
for faster hosting performance.
Updated the custom headers Updated the Custom October 28, 2020
topic headers (p. ) topic to
describe how to define custom
headers for an Amplify app
using the console or by editing a
YML file.
New auto subdomains feature Added the Set up automatic June 20, 2020
launch subdomains for a Route 53
custom domain (p. )
topic to describe how to
use pattern-based feature
branch deployments for an
app connected to an Amazon
Route 53 custom domain. Added
the Web preview access with
subdomains (p. 70) topic to
describe how to set up web
previews from pull requests to
be accessible with subdomains.
Updated the custom domains Updated the Set up custom May 12, 2020
topic domains (p. 22) topic to improve
the procedures for adding
custom domains in Amazon
Route 53, GoDaddy, and Google
Domains. This update also
includes new troubleshooting
information for setting up
custom domains.
AWS Amplify release This release introduces the November 26, 2018
Amplify Console.
146