Well.. that's quite a broad question, but, let me see what I can uncover for you. Let's start with your questions:
- Some services may even have that specified on the API level, for example a public service with some internal API calls (is that a bad idea?).
I'm not sure I understand what is being asked here. When you say "internal API call", I am assuming that you are referring to a private service that the public API is accessing. This is indeed "ok", assuming that the internal service is behind a strict firewall.
- How should the infrastructure interconnecting the services reflect the security policies? Are there any standard approaches to this?
Let's start with the creation of a new service. I highly recommend viewing this book, especially for access controls. Essentially, a newly created service or subject should assume the following:
- A secure default policy should be applied to any newly created subject
- The attributes of the system should not be expressed in terms that can easily be forged such as an IP address.
- A user ID or service ID should remain permanently assigned to a service/subject
Once created, the service will then need to communicate with your internal services. In terms of security and policy, this is rather difficult to answer since it depends on what you choose for transfer protocols / messaging / etc... For example, using an internal architecture such as ESB. Here are a few articles to outline utilizing ESB:
and a few security focused articles outlining SOA ESB:
However, I do know that amazon does not use ESB via this article, though I did find a few articles that may help as well:
Again, the security policies will reflect what the transfer protocol / messaging protocol, etc for service to service. For example, services communicating via proprietary ports (all behind a firewall).
Hope something in there can help!