Tuesday, July 14, 2015

New – CloudWatch Metrics for Amazon WorkSpaces

AWS customers are deploying Amazon WorkSpaces at scale in medium and large organizations. For example, health care company Johnson & Johnson is using WorkSpaces to realize the long-promised security and efficacy benefits of virtual desktops, in a world populated by a diverse workforce that would like to use their own computing devices if possible (also known as BYOD – Bring Your Own Device). You can view their recent presentation, Deploying Amazon WorkSpaces at Scale, to learn more about what they did and how they now support BYOD for 16,000 contractors and employees, along with zero clients for another 8,000 users.

New Metrics
In order to help our customers to monitor their WorkSpaces deployments, we recently added additional Amazon CloudWatch metrics for WorkSpaces. These metrics are designed to provide administrators with additional insight in to the overall health and connection status of individual WorkSpaces and of all of the WorkSpaces that belong to a particular directory.

Like all CloudWatch metrics, these metrics can be viewed in the AWS Management Console, accessed via the CloudWatch APIs, and monitored by CloudWatch Alarms and third-party tools.

The new metrics are enabled by default and are available to you at no extra charge. Here’s what you get:

  • Available – WorkSpaces that respond to a status check are counted in this metric.
  • Unhealthy – WorkSpaces that do not respond to the same status check are counted in this metric.
  • ConnectionAttempt – The number of connection attempts made to a WorkSpace.
  • ConnectionSuccess – The number of successful connection attempts.
  • ConnectionFailure – The number of unsuccessful connection attempts.
  • SessionLaunchTime – The amount of time taken to initiate a session, as measured by the WorkSpaces client.
  • InSessionLatency – The round trip time between the WorkSpaces client and WorkSpaces, as measured and reported by the client.
  • SessionDisconnect – The number of user initiated and automatically closed sessions.

Here’s how you create an alarm that will fire if a user cannot connect to their WorkSpace:

Available Now
The new metrics are available now and you can start monitoring them today!

To learn more, read about Monitoring Amazon WorkSpaces.

Jeff;

Monday, July 13, 2015

AWS Week in Review – July 6, 2015

Let’s take a quick look at what happened in AWS-land last week:

Monday, July 6
Tuesday, July 7
Wednesday, July 8
Thursday, July 9
Friday, July 10
Saturday, July 11

New & Notable Open Source

  • Cloudsploit Scans runs against an AWS account and return a series of potential misconfigurations and security risks.

New AWS Marketplace Applications

New Slideshare Content

Upcoming Events

Upcoming Events at the AWS Loft (San Francisco)

Upcoming Events at the AWS Loft (New York)

  • July 14 – Chef Bootcamp (10 AM – 6 PM).
  • July 15 – Chef Bootcamp (10 AM – 6 PM).
  • July 16 – Science Logic (11 AM – Noon).
  • July 16 – Intel Lustre (4 PM – 5 PM).
  • July 17 – Chef Bootcamp (10 AM – 6 PM).
  • July 22 – Mashery (11 AM – 3 PM).
  • July 23 – An Evening with Chef (6:30 PM).
  • July 29 – Evident.io (6:30 PM).
  • August 5 – Startup Pitch Event and Summer Social (6:30 PM).
  • August 25 – Eliot Horowitz, CTO and Co-Founder of MongoDB (6:30 PM).

Help Wanted

Stay tuned for next week! In the meantime, follow me on Twitter and subscribe to the RSS feed.

Jeff;

Thursday, July 9, 2015

Amazon API Gateway – Build and Run Scalable Application Backends

I like to think of infrastructure as the part of a system that everyone needs and no one likes to work on! It is often undifferentiated & messy, tedious to work on, difficult to manage, critical to the success of whatever relies on it, and generally taken for granted (as long as it works as expected).

Many of our customers host backend web services for their mobile, web, enterprise, or IoT (Internet of Things) applications on AWS. These services have no user interface. Instead, they are accessed programmatically, typically using a REST-style interface. In order to successfully host an application backend you need to think about the infrastructure: authorization, access control, traffic management, monitoring, analytics, and version management. None of these tasks are easy, and all count as infrastructure. In many cases you also need to build, maintain, and distribute SDKs (Software Development Kits) for one or more programming languages. Put it all together, and the amount of code and resources (not to mention head-scratching) devoted to the infrastructure for web services can dwarf the actual implementation of the service. Many of our customers have told us that they would like to make investments in web services, but have little interest in building or maintaining the infrastructure for them due to the cost and complexity involved.

New API Gateway
Today we are introducing the new Amazon API Gateway. This new pay-as-you-go service allows you to quickly and easily build and run application backends that are robust, and scalable. Instead of worrying about the infrastructure, you can focus on your services.

The API Gateway makes it easy for you to connect all types of applications to API implementations that run on AWS Lambda, Amazon Elastic Compute Cloud (EC2), or a publicly addressable service hosted outside of AWS. If you use Lambda (I’ll show you how in just a moment), you can implement highly scalable APIs that are totally server-less.

You can also implement APIs that wrap around, enhance, and effectively modernize legacy systems. You can aggregate the results from multiple old-school RPC-style web services calls into a single response, filter and process the data, and even protect the backend service from overload by taking advantage of the built-in throttling feature.

The API Gateway was designed to deliver on the following promises:

  • Scalable & Efficient – Handle any number of requests per second (RPS) while making good use of system resources.
  • Self-Service & Highly Usable – Allow you to define, revise, deploy, and monitor APIs with a couple of clicks, without requiring specialized knowledge or skills, including easy SDK generation.
  • Reliable – Allow you to build services that are exceptionally dependable, with full control over error handling, including customized error responses.
  • Secure – Allow you to take advantage of the latest AWS authorization mechanisms and IAM policies to manage your APIs and your AWS resources.
  • Performant – Allow you to build services that are globally accessible (via CloudFront) for low latency access, with data transfer to the backend over the AWS network.
  • Cost-Effective – Allow you to build services that are economical to run, with no fixed costs and pay-as-you-go pricing.

We spent a lot of time focusing on the needs of developers as we designed this service. For example, many of our customers told us that they use Swagger to describe their APIs. They can import their existing definitions into the API Gateway in minutes using a tool that we supply, and connect them to new or existing implementations just as quickly.

We also support an API-first development model so that definitions can be created while the implementation is still underway. Once the APIs have been defined, the API Gateway can create JavaScript, iOS, and Android SDKs with a couple of clicks (we’ll add even more languages in the future).

There are also plenty of features designed to simplify testing and deployment. You can test your APIs from within the AWS Management Console, with full access to the HTTP status code, the response (body and headers), and the request log.

You can create multiple environments (which the gateway calls stages) of a given API and then selectively deploy them within the scope of a tag that you define (think dev, beta, prod, and so forth), again with a couple of clicks. Each operation in each version can (but need not) have a distinct implementation. When the time comes to create a new version of an API, you can clone an existing one, deploy the clone to a distinct stage, and continue to work on both, with the eventual goal of deprecating the older one. You can also use custom domain names to exercise more control over the URL of each service.

Finally, the API Gateway provides plenty of operational support!

After you deploy your API, the Gateway will expeditiously accept, handle, monitor, and respond to requests. You can configure a cache on a per-stage basis, with full control over the lifetime of cached responses and the mapping of request parameters to cache keys. Requests to your APIs are logged to Amazon CloudWatch and detailed metrics are reported to Amazon CloudWatch on a per-stage, per-method basis. Administrative actions such as creating and configuring APIs are logged to CloudTrail for auditing. You can throttle requests if they exceed a desired rate, and you can use AWS Identity and Access Management (IAM), Amazon Cognito, or OAuth credentials to authorize access to individual methods.

API Gateway in Action
Let’s walk through the process of creating an API in front of a couple of Lambda functions. Due to space constraints, I’m going to show off just a few of the Gateway’s features and I’m going to skip a couple of steps related to IAM policies. I would encourage you to read the Amazon API Gateway Developer Guide to learn more about what the service can do and to learn how to create the necessary policies.

I’ll start by opening up the API Gateway Console and creating an API:

The console shows my API in tree fashion:

Then I create a child resource within the root resource by clicking on the Create Resource button:

The new resource is created and shown in the tree:

Now I need some actual code. I switch over to the Lambda Console and create a pair of functions that will serve as implementations of methods on the /data resource. The first function is called GetHelloWorld. It takes no inputs and returns a very simple constant JSON object. Here’s the code:

The second function is called GetHelloWithName. This one is slightly more sophisticated. If it is supplied with a parameter called name, it will return that name in the JSON object. If the parameter is not present it will use the string “No-Name” instead. Here’s the code:

With the two functions ready, I can now create the methods on the resource and attach them to the code. I return to the API Gateway Console, click on Create Method, and choose an HTTP method:

I can create multiple methods (one per HTTP verb) on any of my resources. I’ll choose GET, and then designate a Lambda function as my Integration Type (we’ll talk about the other ones later on):

Now I have the option to customize each phase of the call to the API (method request & response, integration request & response):

The default settings will work just fine for me! It is time to see my method in action, so I click on the TEST icon (the lightning bolt) and then click the Test button. The API Gateway calls my method and provides me with access to the response body, response headers, and an execution log (the work that was done to prepare for, issue, and process the call to my Lambda function):

I can also hop on over to the Lambda Console and see the metrics for my function from there:

Once I am happy with my API I can deploy it so that others can make use of it. To do this I simply click on the Deploy API button, and then choose a stage. The stage becomes part of the API’s URL; it allows me to have multiple, parallel deployments (staging, beta, production, and so forth) that are isolated and independent of each other. Here’s how I create a stage called prod (for production):

Then I have the opportunity to set some options for the stage. I can opt to log API calls to CloudWatch Logs and to send per-metric metrics to CloudWatch. I can also indicate that every call to the API must include an API key in order for it to be accepted:

As you can see, the Console displays the invocation URL for the API. It also gives me the option to generate an SDK for it:

I can also create a custom domain name and expose the resulting URL as the preferred invocation URL for my service (all of this can be done via the Console, and is implemented via CloudFront):

At this point I have created and deployed a fully scalable API without having to think about the infrastructure. If my Hello World function became incredibly popular, I would need to do nothing more than to make sure that my AWS account was configured to handle the appropriate number of concurrent Lambda requests.

Enhancing Legacy Services
You (or your organization) probably has some existing web services that respond to older protocols such as XML-RPC or SOAP. You can use the API Gateway to modernize these services by taking advantage of the following features, picking and choosing as needed to suit your needs:

  • Traffic Management – You can configure the API Gateway to throttle requests if they exceed a predefined limit. This will allow you to avoid overloading existing (and possibly non-scalable) backend systems.
  • Authorization – You can enable the latest AWS-style (AWS Signature v4) authentication for the APIs that you create (check out Signing API Requests) for more information on AWS authentication. The SDKs that you generate through the API Gateway will take care of all of the necessary signing, encryption, and decryption.
  • Data Transformation – If your existing services return XML-style data, you can use the API Gateway to transform the output to JSON as part of your modernization effort. One of our early customer is in the process of moving their service implementation to a Lambda-based model, with functions that return JSON data. During the transition period they are using the API Gateway to transform the output of legacy services to JSON, allowing them to make a move that is seamless and non-disruptive. The transformation is specified using JSON-Schema, like this:
  • REST-to-RPC and Back – You can create new API endpoints that respond to GET requests, and map them to existing endpoints that are accessed using a POST. Along the way you can use the API Gateway to transform the GET parameters into the request body for the POST.

Wait, There’s More!
Let’s take a look at a couple more API Gateway features before we wrap up.

The connection between my resource definition (the resource name and the HTTP method) and some code is called an Integration Request. As you have already seen, the request can be routed to a Lambda function with a couple of clicks. It can also be routed to an arbitrary HTTP endpoint (running on EC2 or at any public accessible location). Along the way, the request can be mapped to a different HTTP method (changing a GET to a POST, for example) and an API Gateway Model can be used to transform the input into the form required by the service running at the endpoint. Models are specified using JSON-Schema and can be set up using the Console.

I can use an API function provided by an AWS service as an endpoint. This option makes use of the AWS Service Proxy included within the API Gateway. Here’s how I would set that up:

I mentioned API keys earlier. If you want to allow third parties (customers, developers, or integration partners) to access your API on a controlled basis, you can create API keys and mandate that they be used to call your API. This function is designed for metering usage; you should use one of the AWS authentication options (or OAuth) to control access to your APIs.

Available Now
The Amazon API Gateway is available today in the US East (Northern Virginia), US West (Oregon), and Europe (Ireland) regions and you can start using it today.

The pricing model is simple. You pay for calls to the API and for outbound data transfer (the information returned by your APIs). Caching is priced separately, and the price is depending on the size of the cache that you configure.

Jeff;

Wednesday, July 8, 2015

Happy Prime Day!

Amazon has announced that July 15, 2015, will be Prime Day. For nearly a century, the traditional start of the Christmas shopping season has been the Friday after Thanksgiving. I don’t recall exactly when that became “Black Friday” but it was at least 15 years ago when somebody noticed that the Christmas shopping … Continue reading Happy Prime Day!

New – Sending Authorization for the Amazon Simple Email Service

The Amazon Simple Email Service (SES) makes it easy for you to send email with minimum setup and maximum scalability. SES focuses on deliverability (see my blog post, Introducing the Amazon Simple Email Service to learn more about this) so that the messages you send have a high probability of arriving in the intended inboxes rather than heading straight for the spam folder!

Today we are making SES even more useful by giving you the ability to grant “send” permission to other AWS accounts or IAM users. This allows you to loan out an identity (an email address or domain that you have verified) while retaining control over the identity. You can monitor SES usage (delivery, bounce, and complaint notifications) and fine-tune permissions at any time.

You can use this feature in many different ways. A new post (Announcing Sending Authorization) on the Amazon Simple Email Service Blog contains a pair of examples:

  • You run email marketing campaigns for an online retailer that is already using SES. They give you permission to send marketing emails under their domain name and authorize you as a sender. You don’t have to verify the domain under your AWS account. Both parties receive bounce and complaint notifications independently.
  • Your organization uses multiple AWS accounts spread across a variety of divisions and/or departments. You can verify the common identity once, relative to a single AWS account, and then grant permission for the other accounts to use it.

As you can see in the full blog post, you start by creating a sending authorization policy that authorizes another account or IAM user to make use of the SendEmail and/or SendRawEmail functions. This policy can also restrict usage based on the email address of the sender by adding a condition that checks the ses:FromAddress property.

The Policy Generator in the SES Console can be used to create the necessary policy with a couple of clicks. Here’s how you would use it to set up a policy that allowed AWS account 123456789012 to send from domain example.com using email address marketing@example.com:

To send an email on your behalf, the sender would pass the ARN of example.com in the call to the SES function or in an email header (see the SES Developer Guide for more information).

To learn more, read Announcing Sending Authorization on the Amazon SES Blog.

Jeff;

Create Write-Once-Read-Many Archive Storage with Amazon Glacier

Many AWS customers use Amazon Glacier for long-term storage of their mission-critical data. They benefit from Glacier’s durability and low cost, along with the ease with which they can integrate it in to their existing backup and archiving regimen. To use Glacier, you create vaults and populate them with archives (either directly or by using S3 lifecycle rules).

In certain industries, long-term records retention is mandated by regulations or compliance rules, sometimes for periods of up to seven years. For example, in the financial services industry (including large banks, broker-dealers, and securities clearinghouses), SEC Rule 17a-4(f) specifies that “electronic records must be preserved exclusively in a non-rewriteable and non-erasable format.” Other industries are tasked with meeting similar requirements when they store mission-critical information.

Lock Your Vaults
Today we are introducing a new Glacier feature that allows you to lock your vault with a variety of compliance controls that are designed to support this important records retention use case. You can now create a Vault Lock policy on a vault and lock it down. Once locked, the policy cannot be overwritten or deleted. Glacier will enforce the policy and will protect your records according to the controls (including a predefined retention period) specified therein.

You cannot change the Vault Lock policy after you lock it. However, you can still alter and configure the access controls that are not related to compliance by using a separate vault access policy. For example, you can grant read access to business partners or designated third parties (as sometimes required by regulation).

The Locking Process
Because the locking policy cannot be changed or removed after it is locked down (in order to assure compliance), we have implemented a two-step locking process in order to give you an opportunity to test it before locking the vault down for good. Here’s what you need to do:

  1. Call InitiateVaultLock and pass along your Vault Lock retention policy. Glacier will install the policy and set the vault’s lock state to InProgress, and then return a unique LockID (keep this value around for 24 hours, after which it will expire).
  2. Test your retention policy thoroughly. The vault will behave as though subject to the policy during the testing period. During this period you should thoroughly test the operations that are prohibited by the policy and ensure that they fail as expected. For example, you will probably want to test DeleteArchive and DeleteVault attempts from the root account, all IAM users, and from any users with cross-account access. You should also let the 24 hour testing period go by and then test that users with proper permissions can delete the archives.
  3. If you are satisfied that the policy works as expected, call CompleteVaultLock with the LockID that you dutifully saved in step 1, dust off your hands and stroll off into the sunset. The vault’s state will be set to Locked, and the policy will remain in effect until the heat death of the universe.
  4. If the policy does not work as expected, call AbortVaultLock during the 24 hour window (or wait until it passes) in order to remove the in-progress policy. Refine the policy and start over at step 1.

In most cases, you should plan to create a vault, apply your locking policy, and then upload archives to the vault where they will be governed by the policy. This is because Vault Lock does not backdate existing archives or other activities that were performed before the vault was locked. As such, there is no way to ensure that they are in compliance with the policy.

Here’s a sample policy that implements a 365 day retention rule:

As you can see this policy denies everyone (AWS:*) the ability to use Glacier’s DeleteArchive function on the resource named vaults/BusinessCritical for a period of 365 days.

More Control
After you apply and finalize your locking policy, you can continue to use the existing vault access policy as usual. However, the vault access policy cannot reduce the effect of the retention controls in the locking policy.

In certain situations you may be faced with the need to place a legal hold on your compliance archives for an indefinite period of time, generally until an investigation of some sort is concluded. You can do this by creating a vault access policy that denies the use of Glacier’s Delete functions if the vault is tagged in a particular way. For example, the following policy will deny deletes if the LegalHold tag is present and set to true:

Once the investigation is over, you can remove the hold by changing the LegalHold tag to false.

From Our Customers
Records retention in the Financial Services industry is governed by strict regulatory requirements. In advance of today’s launch, several AWS Financial Services customers were given a sneak peek at Vault Lock to review the new features. Here’s what they had to say:

Matt Claus (Vice President and CTO of eSpeed at Nasdaq):

“Records retention in the financial services industry is subject to specific regulatory requirements that govern how and for what period of time certain data is stored. From the details we’ve reviewed with the AWS team, Amazon Glacier Vault Lock will provide a storage solution that can help regulated entities within the Nasdaq group, like eSpeed, meet data storage and retention compliance obligations in a cost-effective manner. We look forward to using this new offering. With the launch of Glacier Vault Lock, AWS continues to add solutions that provide highly available and scalable infrastructure to financial services firms.”

Rob Krugman (Head of Digital Strategy, Broadridge Financial Solutions):

“Amazon is moving into the regulatory archival space in a big way with WORM storage capability now available on Amazon Glacier, which gives us more options in product development as we design and build solutions to support the future of financial services.”

Lock up Today
This new feature is available now and you can start using it today. To learn more about this feature, read about Getting Started Amazon Glacier Vault Lock.

Jeff;

New APN Competency – Security

As part of our continued effort to allow our partners to share their expertise in particular market segments and topical areas, I’m happy to be able to tell you about our new APN Security Competency. Like all of our competencies, this one gives you access to partners with genuine, hard-earned expertise in an area that you have told us is important.

The new APN Security Competency Partners have demonstrated their success by building products and solutions that support our customers in a host of important areas including infrastructure security, policy management, identity management, security monitoring, vulnerability management, and data protection.

First Partners
The initial security competency partners are Alert Logic, Imperva, Trend Micro, Okta, OneLogin, Ping Identity, Splunk, Sumo Logic, Evident.io, Qualys, Tenable, SafeNet, and Vormetric. These partners have special expertise in infrastructure security, identity & access control, logging & monitoring, configuration & vulnerability analysis, and data protection. I’d like to offer my personal congratulations to all of them — thank you for helping to create such a strong and customer-focused ecosystem!

To learn more about these new offerings, read about the Newest APN Competency: Security Partner Solutions on the AWS Partner Network Blog.

Applying for Additional Competencies
If your organization is already an ISV member of the AWS Partner Network and are interested in gaining these new competencies, log in to the APN Portal, examine your scorecard, and click on Apply for APN Competencies to get started. You will, of course, need to share some of your customer successes and demonstrate your technical readiness!

Jeff;