Skip to content

Commit 267c023

Browse files
authored
fix perms where fms would fail to publish to sns (#932)
* fix perms where fms would fail to publish to sns * linting fixes * fixed typescript error Co-authored-by: hickeydh <hickeydh@amazon.com>
1 parent 8f27474 commit 267c023

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

src/deployments/cdk/src/apps/phase-1.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ export async function deploy({ acceleratorConfig, accountStacks, accounts, conte
120120
accountStacks,
121121
centralLogBucket: logBucket,
122122
config: acceleratorConfig,
123+
prefix: context.acceleratorPrefix,
123124
});
124125

125126
/**

src/deployments/cdk/src/deployments/defaults/shared.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ import { Bucket } from '@aws-accelerator/cdk-constructs/src/s3';
1818
import { createEncryptionKeyName } from '@aws-accelerator/cdk-accelerator/src/core/accelerator-name-generator';
1919
import { AccountStack } from '../../common/account-stacks';
2020
import { overrideLogicalId } from '../../utils/cdk';
21+
import { Organizations } from '@aws-accelerator/custom-resource-organization';
2122

2223
export interface KmsDetails {
2324
encryptionKey: kms.Key;
2425
alias: string;
2526
}
2627

27-
export function createDefaultS3Key(props: { accountStack: AccountStack }): KmsDetails {
28+
export function createDefaultS3Key(props: { accountStack: AccountStack; prefix: string }): KmsDetails {
2829
const { accountStack } = props;
29-
30+
const organization = new Organizations(accountStack, 'Organization');
3031
const keyAlias = createEncryptionKeyName('Bucket-Key');
3132
const encryptionKey = new kms.Key(accountStack, 'DefaultKey', {
3233
alias: `alias/${keyAlias}`,
@@ -43,7 +44,7 @@ export function createDefaultS3Key(props: { accountStack: AccountStack }): KmsDe
4344
);
4445
encryptionKey.addToResourcePolicy(
4546
new iam.PolicyStatement({
46-
sid: 'Allow AWS services to use the encryption key',
47+
sid: 'Allow ASEA Roles to use the encryption key',
4748
actions: ['kms:Encrypt', 'kms:Decrypt', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:DescribeKey'],
4849
principals: [
4950
new iam.ServicePrincipal('sns.amazonaws.com'),
@@ -55,6 +56,22 @@ export function createDefaultS3Key(props: { accountStack: AccountStack }): KmsDe
5556
resources: ['*'],
5657
}),
5758
);
59+
encryptionKey.addToResourcePolicy(
60+
new iam.PolicyStatement({
61+
sid: 'Allow AWS services to use the encryption key',
62+
actions: ['kms:Encrypt', 'kms:Decrypt', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:DescribeKey'],
63+
principals: [new iam.AnyPrincipal()],
64+
resources: ['*'],
65+
conditions: {
66+
StringEquals: {
67+
'aws:PrincipalOrgID': organization.organizationId,
68+
},
69+
StringLike: {
70+
'aws:PrincipalArn': `arn:aws:iam::*:role/${props.prefix}*`,
71+
},
72+
},
73+
}),
74+
);
5875

5976
return {
6077
encryptionKey,

src/deployments/cdk/src/deployments/defaults/step-1.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import * as kms from '@aws-cdk/aws-kms';
1717
import * as s3 from '@aws-cdk/aws-s3';
1818
import { RegionInfo } from '@aws-cdk/region-info';
1919
import { EbsDefaultEncryption } from '@aws-accelerator/custom-resource-ec2-ebs-default-encryption';
20-
import { S3CopyFiles } from '@aws-accelerator/custom-resource-s3-copy-files';
2120
import { S3PublicAccessBlock } from '@aws-accelerator/custom-resource-s3-public-access-block';
2221
import { Organizations } from '@aws-accelerator/custom-resource-organization';
2322
import { AcceleratorConfig } from '@aws-accelerator/common-config/src';
@@ -191,7 +190,6 @@ function createCentralBucketCopy(props: DefaultsStep1Props) {
191190
*/
192191
function createCentralLogBucket(props: DefaultsStep1Props) {
193192
const { accountStacks, config } = props;
194-
195193
const logAccountConfig = config['global-options']['central-log-services'];
196194
const logAccountStack = accountStacks.getOrCreateAccountStack(logAccountConfig.account);
197195

@@ -200,6 +198,7 @@ function createCentralLogBucket(props: DefaultsStep1Props) {
200198
const anyAccountPrincipal = [new iam.AnyPrincipal()];
201199
const logKey = createDefaultS3Key({
202200
accountStack: logAccountStack,
201+
prefix: props.acceleratorPrefix,
203202
});
204203

205204
const defaultLogRetention = config['global-options']['central-log-services']['s3-retention'];
@@ -546,15 +545,15 @@ function createDefaultEncryptionKeys(props: DefaultsStep1Props): LogAccountDefau
546545
console.warn(`Cannot find ${accountStack} stack in ${region}`);
547546
continue;
548547
}
549-
createKeyAndOutput(accountStack, region, defaultEncryptionKeys);
548+
createKeyAndOutput(accountStack, region, defaultEncryptionKeys, props.acceleratorPrefix);
550549
// If add-sns-topic is set true for the security account, create a default key in other regions there as well
551550
if (centralSecurityServices['add-sns-topics']) {
552551
const accountStack = accountStacks.tryGetOrCreateAccountStack(centralSecurityServices.account, region);
553552
if (!accountStack) {
554553
console.warn(`Cannot find ${accountStack} stack in ${region}`);
555554
continue;
556555
}
557-
createKeyAndOutput(accountStack, region, defaultEncryptionKeys);
556+
createKeyAndOutput(accountStack, region, defaultEncryptionKeys, props.acceleratorPrefix);
558557
}
559558
}
560559

@@ -565,11 +564,15 @@ function createKeyAndOutput(
565564
accountStack: AccountStack,
566565
region: string,
567566
defaultEncryptionKeys: LogAccountDefaultEncryptionKeys,
567+
prefix: string,
568568
) {
569569
// Create a default EBS encryption key for every other region of the log account
570570
const keyAlias = createEncryptionKeyName('Default-Key');
571571
// Default EBS encryption key
572-
const key = createDefaultS3Key({ accountStack }).encryptionKey;
572+
const key = createDefaultS3Key({
573+
accountStack,
574+
prefix,
575+
}).encryptionKey;
573576

574577
defaultEncryptionKeys[accountStack.accountKey] = {
575578
...defaultEncryptionKeys[accountStack.accountKey],

src/deployments/cdk/src/deployments/defaults/step-2.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export interface DefaultsStep2Props {
2626
accounts: Account[];
2727
config: AcceleratorConfig;
2828
centralLogBucket: s3.IBucket;
29+
prefix: string;
2930
}
3031

3132
export type DefaultsStep2Result = AccountBuckets;
@@ -59,6 +60,7 @@ function createDefaultS3Buckets(props: DefaultsStep2Props) {
5960

6061
const key = createDefaultS3Key({
6162
accountStack,
63+
prefix: props.prefix,
6264
});
6365

6466
const defaultLogRetention = config['global-options']['default-s3-retention'];

0 commit comments

Comments
 (0)