Skip to main content

Construct to create a private asset S3 bucket. A cognito token can be used to allow access to he S3 asset.

Project description

NPM version PyPI version .NET version Release

cdk-private-asset-bucket

A construct to create a private asset S3 bucket. Cognito will be used for token validation with Lambda@Edge.

Architecture

Diagram

Curious how I did the diagram? Have a look here https://martinmueller.dev/cdk-dia-eng .

Example

    import { PrivateAssetBucket } from 'cdk-private-assets-bucket';
    ...
    const userPool = new cognito.UserPool(stack, 'userPool', {
      removalPolicy: core.RemovalPolicy.DESTROY,
    });

    const userPoolWebClient = new cognito.UserPoolClient(stack, 'userPoolWebClient', {
      userPool: userPool,
      generateSecret: false,
      preventUserExistenceErrors: true,
      authFlows: {
        adminUserPassword: true,
        userPassword: true,
      },
      oAuth: {
        flows: {
          authorizationCodeGrant: false,
          implicitCodeGrant: true,
        },
      },
    });

    const privateAssetBucket = new PrivateAssetBucket(stack, 'privateAssetBucket', {
      userPoolId: userPool.userPoolId,
      userPoolClientId: userPoolWebClient.userPoolClientId,
      tokenUse: 'access',
    });

    new core.CfnOutput(stack, 'AssetBucketName', {
      value: privateAssetBucket.assetBucketName,
    });

    new core.CfnOutput(stack, 'AssetBucketCloudfrontUrl', {
      value: privateAssetBucket.assetBucketCloudfrontUrl,
    });

Properties

API.md

Test PrivateBucketAsset

If you forged / cloned that repo you can test directly from here. Don't forget to init with:

yarn install

Create a test cdk stack with one of the following:

yarn cdk deploy
yarn cdk deploy --watch
yarn cdk deploy --require-approval never
  • Upload a picture named like pic.png to the private asset bucket
  • Create a user pool user and get / save the token:
USER_POOL_ID=us-east-1_0Aw1oPvD6
CLIENT_ID=3eqcgvghjbv4d5rv32hopmadu8
USER_NAME=martindev
USER_PASSWORD=M@rtindev1
REGION=us-east-1
CFD=d1f2bfdek3mzi7.cloudfront.net

aws cognito-idp admin-create-user --user-pool-id $USER_POOL_ID --username $USER_NAME --region $REGION
aws cognito-idp admin-set-user-password --user-pool-id $USER_POOL_ID --username $USER_NAME --password $USER_PASSWORD  --permanent --region $REGION
ACCESS_TOKEN=$(aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id $CLIENT_ID --auth-parameters USERNAME=$USER_NAME,PASSWORD=$USER_PASSWORD  --region $REGION | jq -r '.AuthenticationResult.AccessToken')

echo "curl --location --request GET "https://$CFD/pic.png" --cookie "Cookie: token=$ACCESS_TOKEN""
  • You can use the curl for importing in Postman. but it looks like Postman can't import the cookie. So you need to set the cookie manually in Postman!
  • In Postman you should see your picture :)
  • For Debugging the Lambda@Edge with Cloudwatch go to the AWS Console --> Cloudwatch --> Log groups --> switch to the region you are closest to --> figure out which log group is correct

Planned Features

  • Support custom authorizer
  • Leverage Cloudfront Function for cheaper costs

Misc

git tag -a v2.16.0 -m "prepare tag version" && git push --tags

Thanks To

I love to work on Content Management Open Source projects. A lot from my stuff you can already use on https://github.com/mmuller88 . If you like my work there and my blog posts, please consider supporting me on Patreon:

Become a Patreon!

Buy Me a Coffee at ko-fi.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdk-private-asset-bucket-2.20.0.tar.gz (10.0 MB view details)

Uploaded Source

Built Distribution

cdk_private_asset_bucket-2.20.0-py3-none-any.whl (10.0 MB view details)

Uploaded Python 3

File details

Details for the file cdk-private-asset-bucket-2.20.0.tar.gz.

File metadata

File hashes

Hashes for cdk-private-asset-bucket-2.20.0.tar.gz
Algorithm Hash digest
SHA256 0fb754bdb16f12675e4af7af1c9254edd5f7a4d3e1fec76eb0c93d657c584e7a
MD5 7a1430c77f8e9c6978b8e0256bb7f00d
BLAKE2b-256 35649d442c7139e04e2fa7ddf04ab49985f729861456a27863412ab0ecf7a83e

See more details on using hashes here.

File details

Details for the file cdk_private_asset_bucket-2.20.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cdk_private_asset_bucket-2.20.0-py3-none-any.whl
Algorithm Hash digest
SHA256 40b75d248a0ee34ce9cc515b5af2fbda0a7396acaa89471e3b5c8705fd2e48c9
MD5 58e51798cd3fdd89bc4b4c4823cc8c41
BLAKE2b-256 6d8e2b101c4204ae800bd0eedb3b3fd467f3c73f8bcd6a2734003c9522c46d68

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page