An enterprise is designing a multi-account AWS architecture managed under AWS Organizations with consolidated billing. The architecture consists of a Shared Services account, a Billing/Management account, and two application accounts (App-A and App-B) grouped under an Applications Organizational Unit (OU). The enterprise needs to implement a solution that satisfies the following requirements:
1. VPC subnets hosted in the Shared Services account must be shared with App-A and App-B to allow resources to be launched in a centralized network. The subnet sharing must be restricted only to accounts within the organization.
2. The enterprise has purchased a Compute Savings Plan in the Billing/Management account. The cost optimization strategy requires that App-A benefit from this Savings Plan, while App-B's volatile, non-production workloads must be excluded from absorbing the discount.
3. App-A hosts a centralized Amazon S3 bucket that must accept write operations and allow read operations from App-B. All objects in this bucket must be encrypted at rest, and the security policy dictates that App-B must have access to decrypt and write the data.
Which combination of actions will meet these requirements in the most operationally efficient and secure manner?
- Enable sharing within AWS Organizations in the AWS RAM console. In the Shared Services account, create a resource share in AWS RAM, associate the subnets, and share them with the Applications OU. In the Billing/Management account's Billing preferences, disable Savings Plans sharing specifically for App-B. In App-A, configure the S3 bucket to use Server-Side Encryption with a Customer Managed Key (SSE-KMS). Configure the KMS key policy to allow the App-B account's IAM roles to perform the kms:GenerateDataKey and kms:Decrypt actions, and configure the S3 bucket policy to grant read and write access to the App-B roles. In App-B, configure local IAM policies to allow access to the S3 bucket and the KMS key in App-A.Answer
- BEnable sharing within AWS Organizations in the AWS RAM console. In the Shared Services account, create a resource share in AWS RAM, associate the subnets, and share them with the Applications OU. In the Billing/Management account, purchase an EC2 Instance Savings Plan and attach an SCP to App-B that denies the savingsplans:ApplySavingsPlan action. In App-A, configure the S3 bucket to use SSE-KMS with the default AWS-managed KMS key (aws/s3). Share the S3 bucket and the KMS key with App-B using AWS RAM, and update App-B's IAM policies to allow access.
- CCreate a resource share in AWS RAM in the Shared Services account, associate the subnets, and share them with App-A and App-B individually without enabling organization-wide sharing. In the Billing/Management account, configure an SCP for the Applications OU that denies the aws-portal:ViewBilling and savingsplans:PurchaseSavingsPlans actions. In App-A, configure the S3 bucket to use SSE-KMS with a Customer Managed Key. Configure the KMS key policy to allow access from App-B. In App-B, create a resource share in AWS RAM to import the KMS key from App-A, and update App-B's local IAM policies to reference the shared key.
- DEnable sharing within AWS Organizations in the AWS RAM console. In the Shared Services account, create a resource share in AWS RAM, associate the subnets, and share them with the Applications OU. In the Billing/Management account, purchase an EC2 Instance Savings Plan. In the Billing Preferences, disable Savings Plans sharing for the entire organization, and create a Billing resource tag-based rule to allocate the discount to App-A. In App-A, configure the S3 bucket to use SSE-KMS with the default AWS-managed KMS key (aws/s3). Modify the S3 bucket policy in App-A to grant the App-B root account permission, and rely on IAM policies in App-B to delegate access.