AWS Organizations: Centrally Manage Multiple AWS Accounts
aws.amazon.com
aws.amazon.com
I'm not saying it's not possible to do similar things within the constructs already provided, but if I'm involved in 10 different projects (or managing them) maybe I want to be able to "toggle" between projects. This way (a) I can simply assign / unassign a person to/from a project without needing to worry about permissions at a different level. If I'm a lead programmer on a project I should simply have "project-level" permissions. (b) when I "toggle" to a project I immediately see project-related resources ONLY. No more need to scroll through 10's or maybe 100's of unrelated resources just to get to what I'm looking for.
I've started tagging resources and doing a filter/sort but it would be much nicer if I could just do it once during a session rather than filtering on each service's screen.
For quick switching between projects on the Console, I use a Chrome user session per project and have them loaded up. [Chrome session is the little icon on the top right corner of browser that has your name on it]
It will indeed will be a cool Console feature to handle multiple IAM User sessions with a drop down toggle like the Region switch.
Using VPCs, security groups, IAMs, tags, etc. is great, but those are all constructs you have to take care to implement correctly yourself within your deploy scripts. One slip-up and you could accidentally expose environments to each other, or worse make a mistake that deletes or reconfigures resources in an environment you didn't intend to. Or an errant process in a test environment could unexpectedly gobble up too many resources, resulting in production being throttled.
So separate accounts is the safest isolation approach, but historically there have been drawbacks (this blog post discusses some[1]), like billing is more expensive (due how AWS charges for usage and you won't be sharing reserved instances anymore) and I wasn't sure how to handle things that need to be cross-environment, like Route53 (DNS). Looking forward to trying this out!
[1]: https://charity.wtf/2016/03/23/aws-networking-environments-a...
Ideally, the root account should have MFA enabled, all root access keys should be deleted, and individual users should have their own usernames provisioned via IAM with the principle of least privilege applied.
Not just EC2 here, I am talking about RDS, Elastic Beanstalk, Route 53, CloudFront, DynamoDB, the works. Would be nice if we could define 'stacks' for each web app and have the on one neat console to work with.
(I know there is the concept of 'Resource Groups', but that relies on tagging assets, and I don't believe tagging extends across all the AWS assets at this stage? I would love for someone to correct me on my assumptions.)
Create an account per stack, switch role from your user account into the stack account to do any management.
The existing consolidated billing works pretty well, it's just the initial per-account setup of billing and roles that's been a headache before
At first blush it might seem to have a high learning curve given the verbosity of the syntax to define a stack, but with the launch YAML support, the syntax has become more succinct. Once you use it, you'll wonder how you ever lived without it.
The product page doesn't do it justice, but in short, CloudFormation allows you to:
- Describe the AWS resources you need in a single file (YAML or JSON), this would be your "stack".
- View all the resources provisioned based on your code in a single UI grouped under the "stack" in the CloudFormation console.
- Manage changes to your resources as different versions of the code file, meaning if you update a resource's properties in code, it'll know and update the already provisioned resource.
- You can delete an entire "stack" and be certain that all associated resources are also destroyed.
- When I used it, the coverage of types of resources you can code for was wide and they're continuously adding more.
I recommend trying it out by setting up a simple S3 hosted website using this template http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuid...
If you're trying to remain cloud-agnostic, then I suggest you also checkout HashiCorp's Terraform [https://www.terraform.io/]. Think of Terraform as a scripting language that compiles into AWS CloudFormation or any other cloud provider.
Everyone wins (or at least consumers of Cloud services) from this competition. So I'm glad to hear it!
Disclosure: I work on Google Cloud.
[1] https://aws.amazon.com/blogs/aws/aws-price-reduction-42-ec2-...
[2] https://cloudplatform.googleblog.com/2014/03/google-cloud-pl...
[3] https://aws.amazon.com/blogs/aws/category/amazon-glacier/
[4] https://cloudplatform.googleblog.com/2016/10/introducing-Col...
Disclosure: I work on Google Cloud.
I think our big clue was when you said "after we released Nearline". ;)
For what it's worth, it turns out that GCP doesn't have per account bucket limits.
Azure has a similar account structure for enterprise customers. They get an root level enrollment and then have the flexibility to divide into "departments" and "accounts." Subscriptions live under accounts. Administrators and viewers can be assigned at any level and cost reporting is built into the enterprise portal. Policies cascade from higher levels down into accounts and subscriptions. Policies as JSON files that can control things like restricting regions, services, etc.
Disclaimer: I work for Microsoft and Azure is my focus.
https://24.media.tumblr.com/426ebe2f8bf2499cac61a0710fb0c43d...
(Don't even care about all the downvotes I'll get for posting Gif on HN as if it were Reddit).