Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(s3-notifications): fixing circular dependency when Bucket and SQS are encrypted by same KMS is used for s3 notification #31155

Closed
wants to merge 3 commits into from

Conversation

stm29
Copy link
Contributor

@stm29 stm29 commented Aug 19, 2024

Issue #3067

Closes #3067

If you are reading this from discussion redirection (or landed here from searching in issue) run cdk synth in your app and look for warning displayed and look for @aws-cdk/aws-s3-notifications. You will find out the solution.

Reason for this change

  • we can't cdk deploy, when we use same same KMS for S3 and SQS.
  • This was partially addressed on fix(s3-notifications): notifications allowed with imported kms keys #18989 , rather than fixing, this PR adds a warning when policy is unable to add to KMS.
    • But issue arises when the policy is added. It creates Circular dependency.
    • When, we didn't add this permission, then we can't send message event to SQS.

So, we need to draw a fair line on how to handle this. approaches considered,

  1. Issue arises, when we are constraining the polices in KMS. so what happens is, KMS depends on Bucket, Bucket depends on KMS, exactly explained by Circular dependency on s3 notification to a destination when both destination and s3 are encrypted by same CMK #3067 (comment)
  • We can just expand the scope of Policy to Service level (s3.amazonaws.com), rather than constraining with Resource level (BucketName), this may not be security wise advised, but this better than allowing user to deploy than just showing circular dependency.
  1. We can optionally, ask use wether to add this relaxed permission added. If doesn't wish to add this, he can opt out and add his constrained policy.
  2. In both the cases we will show FAIR warning on how this will result in Security / Runtime Exception (Circular Dependency).

Description of changes

  • Added optional parameter shouldAddGlobalS3PermissionToKMSandSQS , defaulted to true, as it will be backward compatible
  • Based on this Flag, we are showing warning during cdk synth
    • Circular Dependency Violation when false is provided, as they will try to add imported Bucket Value to add permission
    • Security Warning - as Service Level permission is granted

Description of how you validated changes

  • Unit Tests
  • Integration Tests

Checklist


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

…d SQS are encrypted by same KMS is used for s3 notification
@github-actions github-actions bot added bug This issue is a bug. effort/small Small work item – less than a day of effort p2 labels Aug 19, 2024
@aws-cdk-automation aws-cdk-automation requested a review from a team August 19, 2024 22:26
@github-actions github-actions bot added the beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK label Aug 19, 2024
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter has failed. See the aws-cdk-automation comment below for failure reasons. If you believe this pull request should receive an exemption, please comment and provide a justification.

A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed add Clarification Request to a comment.

@stm29 stm29 changed the title fix(aws-s3-notifications) : fixing circular dependency when Bucket and SQS are encrypted by same KMS is used for s3 notification fix(aws-s3-notifications): fixing circular dependency when Bucket and SQS are encrypted by same KMS is used for s3 notification Aug 19, 2024
@stm29 stm29 changed the title fix(aws-s3-notifications): fixing circular dependency when Bucket and SQS are encrypted by same KMS is used for s3 notification fix(s3-notifications): fixing circular dependency when Bucket and SQS are encrypted by same KMS is used for s3 notification Aug 19, 2024
@aws-cdk-automation aws-cdk-automation dismissed their stale review August 19, 2024 22:33

✅ Updated pull request passes all PRLinter validations. Dismissing previous PRLinter review.

@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: 4ca7bf1
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@aws-cdk-automation aws-cdk-automation added the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Aug 19, 2024
@aws-cdk-automation
Copy link
Collaborator

This PR has been in the MERGE CONFLICTS state for 3 weeks, and looks abandoned. To keep this PR from being closed, please continue work on it. If not, it will automatically be closed in a week.

Comment on lines +33 to +39
const warning = 'Consider passing \`shouldAddGlobalS3PermissionToKMSandSQS:false\` and add restricted permission with condition - \'aws:SourceArn\': bucket.bucketArn';
Annotations.of(_scope).addWarningV2('@aws-cdk/aws-s3-notifications:securityWarning', warning);
} else {
// If user didn't want this to be Global, then we will show CRITICAL warning calling out to add
// the required permission without using imported values.
const warning = 'You have opted out to add global permission for KMS & SQS Key Policy. Consider manually adding kms.grantEncryptDecrypt(), queue.grantSendMessages()';
Annotations.of(_scope).addWarningV2('@aws-cdk/aws-s3-notifications:sqsKMSPermissionsNotAdded', warning);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we're going to tell the user that this is a better way of implementing this, it's probably best if we have a new integration test that does it and ensures that it works. I'm not entirely sure that I understand how moving this condition out of the SqsDestination.bind method and making the user do it manually actually resolves the circular dependency while still allowing the more specific policy.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure that I understand how moving this condition out of the SqsDestination.bind method and making the user do it manually actually resolves the circular dependency while still allowing the more specific policy

So, Given the Condition, we can't depend on Class's members to get the name, to add the policy like us do in CDK by itself.
There are 2 ways,

  1. User Needs to add the permissions by himself, as a constant defined by himself (this will relax the Circular dependency between both), Only thing I am seeing here is, At this moment, we can't make CDK to do this automatically.
  2. Allow Global access.

What are we trying to resolve here is, "cdk deploy" is even failing at this moment.
@laurelmay Please let me know wether there is any suggested alternatives.

@aws-cdk-automation
Copy link
Collaborator

This PR has been deemed to be abandoned, and will be automatically closed. Please create a new PR for these changes if you think this decision has been made in error.

@aws-cdk-automation aws-cdk-automation added the closed-for-staleness This issue was automatically closed because it hadn't received any attention in a while. label Oct 21, 2024
Copy link

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 21, 2024
@aws-cdk-automation aws-cdk-automation removed the pr/needs-community-review This PR needs a review from a Trusted Community Member or Core Team Member. label Oct 21, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK bug This issue is a bug. closed-for-staleness This issue was automatically closed because it hadn't received any attention in a while. effort/small Small work item – less than a day of effort p2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Circular dependency on s3 notification to a destination when both destination and s3 are encrypted by same CMK
3 participants