Skip to content

ResourcePolicy ​

The ResourcePolicy resource allows you to define resource-based policies for AWS Kinesis, enabling fine-grained access control. For more information, refer to the AWS Kinesis ResourcePolicys documentation.

Minimal Example ​

Create a basic resource policy for a Kinesis stream that allows specific IAM users to access it.

ts
import AWS from "alchemy/aws/control";

const kinesisResourcePolicy = await AWS.Kinesis.ResourcePolicy("myKinesisPolicy", {
  ResourceArn: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream",
  ResourcePolicy: {
    Version: "2012-10-17",
    Statement: [{
      Effect: "Allow",
      Principal: {
        AWS: "arn:aws:iam::123456789012:user/my-user"
      },
      Action: "kinesis:GetRecords",
      Resource: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream",
      Condition: {
        "StringEquals": {
          "kinesis:StreamName": "my-stream"
        }
      }
    }]
  },
  adopt: true // If true, adopt existing resource instead of failing when resource already exists
});

Advanced Configuration ​

Define a more complex policy that enables cross-account access to the Kinesis stream.

ts
const crossAccountPolicy = await AWS.Kinesis.ResourcePolicy("crossAccountPolicy", {
  ResourceArn: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream",
  ResourcePolicy: {
    Version: "2012-10-17",
    Statement: [{
      Effect: "Allow",
      Principal: {
        AWS: "arn:aws:iam::098765432109:user/another-user"
      },
      Action: "kinesis:PutRecord",
      Resource: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream",
      Condition: {
        "StringEquals": {
          "kinesis:StreamName": "my-stream"
        }
      }
    }]
  }
});

Specific Use Case: Restricting Access by IP Address ​

Create a policy that restricts access to a Kinesis stream based on the requester's IP address.

ts
const ipRestrictedPolicy = await AWS.Kinesis.ResourcePolicy("ipRestrictedPolicy", {
  ResourceArn: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream",
  ResourcePolicy: {
    Version: "2012-10-17",
    Statement: [{
      Effect: "Allow",
      Principal: "*",
      Action: "kinesis:DescribeStream",
      Resource: "arn:aws:kinesis:us-east-1:123456789012:stream/my-stream",
      Condition: {
        "IpAddress": {
          "aws:SourceIp": "203.0.113.0/24"
        }
      }
    }]
  }
});