AWS SNS — HTTP(S) Subscription: manual confirmation

Artem Hatchenko
2 min readMar 11, 2020

--

When creating an HTTP/HTTPS subscription in AWS SNS, you can observe that the subscription is hanging in the status: “Pending confirmation

SNS: Confirmation

SNS to the specified URL makes a POST request in which it sends data in JSON format and expects to receive a key value in response: “SubscribeURL”. But if the application does not know how to respond to SNS, then you can enter the confirmation URL manually, but for this you need to find out.

To do this, you can use Nginx and its access_log.

Since the body of the POST request is written to the log only when using “proxy_pass”, we model proxing to the backend.

nginx.conf

user  nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}

http {
log_format postdata escape=json '"$request_body"';

server {
listen 80;
server_name _;

location /success {
return 200;
}

location / {
proxy_redirect off;
proxy_pass_request_body on;
proxy_pass $scheme://127.0.0.1:$server_port/success;
add_header X-Body $request_body;
access_log /var/log/nginx/post.log postdata;
}
}
}

In the example, the configuration is for the HTTP protocol, if you have HTTPS, add the parts of the configuration that are related to SSL.

Reload the Nginx configuration:

systemctl reload nginx

After we return to the AWS console and select the necessary one in SNS subscriptions and make a one more request “Request Confirmation

SNS: Request confirmation

Follow to Nginx log:

cat /var/log/nginx/post.log

Interested in the value of the key: “SubscribeURL”, it will be of the form:

https://sns.{REGION}.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:{REGION}:{YOUR_ACCOUNT_ID}:{YOUR_TOPIC_NAME}&Token={YOUR_TOKEN}

We copy it and return to AWS SNS. Select “Confirm Subscription

SNS: Confirm subscription

Insert the value “SubscribeURL” and confirm.

SNS: Confirm subscription

--

--