Configure an Amazon S3 Integration and Create an S3 Data Source
Private preview: The Amazon S3 integration is available to select accounts. Reach out to your Immuta representative for details.
The Amazon S3 resource allows you to create, configure, and manage your S3 integration. In this integration, Immuta provides coarse-grained access controls for data in S3 by performing permission grants using the Access Grants API so that users don't have to manage individual IAM policies themselves.
If you use server-side encryption with AWS Key Management Service (AWS KMS) keys to encrypt your data, the following permissions are required for the IAM role in the policy. If you do not use this feature, do not include these permissions in your IAM policy:
kms:Decrypt
kms:GenerateDataKey
Opt to create an AWS IAM role that Immuta can use to create Access Grants locations and issue grants. This role must have the S3 permissions listed in the permissions section. An example policy is provided below.
IAM policy example
Replace <role_arn> and <access_grants_instance_arn> in the example below with the ARNs of the role you created and your Access Grants instance, respectively. The Access Grants instance resource ARN should be scoped to apply to any future locations that will be created under this Access Grants instance. For example, "Resource": "arn:aws:s3:us-east-2:6********499:access-grants/default*" ensures that the role would have permissions for both of these locations:
name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.
awsAccountId is the ID of your AWS account.
awsRegion is the account's AWS region (such as us-east1).
awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.
awsLocationPath is the base S3 location prefix that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.
awsAccessKeyId is the AWS access key ID of the AWS account configuring the integration.
awsSecretAccessKey is the AWS secret access key of the AWS account configuring the integration.
This request configures the integration using the automatic authentication method, which searches and obtains credentials using the AWS SDK's default credential provider chain. This method requires a configured IAM role for a service account and is only supported if you're using a self-managed deployment of Immuta. Work with your Immuta representative to customize your deployment and set up an IAM role for a service account that can give Immuta the credentials to set up the integration.
name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.
awsAccountId is the ID of your AWS account.
awsRegion is the account's AWS region (such as us-east1).
awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.
awsLocationPath is the base S3 location that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.
See the config object description for parameter definitions, value types, and additional configuration options.
Response
The response returns the status of the S3 integration configuration connection. See the response schema reference for details about the response schema.
A successful response includes the validation tests statuses.
{"id":"123456789","status":"creating","validationResults": {"status":"passed","validationTests": [ {"name":"There is no existing integration matching this configuration","status":"passed" }, {"name":"The provided integration name is unique across Immuta S3 integrations","status":"passed" }, {"name":"The provided access grants location role is a valid ARN format","status":"passed" }, {"name":"The provided AWS credentials allow fetching the caller's identity via the AWS STS API","status":"passed" }, {"name":"An AWS Access Grants instance is configured in the provided AWS account and region","status":"passed" }, {"name":"The provided S3 path exists and Immuta can list prefixes","status":"passed" }, {"name":"An AWS Access Grants location does not yet exist for the provided path","status":"passed" } ] }}
An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.
{"statusCode":409,"error":"Conflict","message":"Access Grants location already exists on provided path."}
Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the GET /integrationsendpoint.
Response
The response returns an S3 integration configuration. See the response schema reference for details about the response schema. An unsuccessful response returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.
{"id":"123456789","status":"enabled","validationResults": {"status":"passed","validationTests": [ {"name":"There is no existing integration matching this configuration","status":"passed" }, {"name":"The provided integration name is unique across Immuta S3 integrations","status":"passed" }, {"name":"The provided access grants location role is a valid ARN format","status":"passed" }, {"name":"The provided AWS credentials allow fetching the caller's identity via the AWS STS API","status":"passed" }, {"name":"An AWS Access Grants instance is configured in the provided AWS account and region","status":"passed" }, {"name":"The provided S3 path exists and Immuta can list prefixes","status":"passed" }, {"name":"An AWS Access Grants location does not yet exist for the provided path","status":"passed" } ] },"type":"Native S3","autoBootstrap":false,"config": {"port":443,"name":"S3 integration","awsAccountId":"123456789","awsRegion":"us-east-1","awsLocationRole":"arn:aws:iam::123456789:role/access-grants-instance-role","awsLocationPath":"s3://","authenticationType":"accessKey","awsAccessKeyId":"123456789","awsSecretAccessKey":"123456789" } }
The response returns the configuration for all integrations. See the response schema reference for details about the response schema. An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.
[ {"id":"1","status":"enabled","validationResults": {"status":"passed","validationTests": [ {"name":"Initial Validation: Basic Connection Test","status":"passed" }, {"name":"Initial Validation: Default Warehouse Access Test","status":"passed","result": [] }, {"name":"Initial Validation: Validate access to Privileged Role","status":"passed","result": [] }, {"name":"Validate Automatic: Database Does Not Exist","status":"passed" }, {"name":"Validate Automatic: Impersonation Role Does Not Exist","status":"skipped" }, {"name":"Validate Automatic Bootstrap User Grants","status":"passed" } ] },"type":"Snowflake","autoBootstrap":true,"config": {"host":"organization.us-east-1.snowflakecomputing.com","warehouse":"SAMPLE_WAREHOUSE","database":"SNOWFLAKE_SAMPLE_DATA","port":443,"audit": {"enabled":false },"workspaces": {"enabled":false },"impersonation": {"enabled":false },"lineage": {"enabled":false },"authenticationType":"userPassword","username":"<REDACTED>","password":"<REDACTED>","role":"ACCOUNTADMIN" } }, {"id":"123456789","status":"enabled","validationResults": {"status":"passed","validationTests": [ {"name":"There is no existing integration matching this configuration","status":"passed" }, {"name":"The provided integration name is unique across Immuta S3 integrations","status":"passed" }, {"name":"The provided access grants location role is a valid ARN format","status":"passed" }, {"name":"The provided AWS credentials allow fetching the caller's identity via the AWS STS API","status":"passed" }, {"name":"An AWS Access Grants instance is configured in the provided AWS account and region","status":"passed" }, {"name":"The provided S3 path exists and Immuta can list prefixes","status":"passed" }, {"name":"An AWS Access Grants location does not yet exist for the provided path","status":"passed" } ] },"type":"Native S3","autoBootstrap":false,"config": {"port":443,"name":"S3 integration","awsAccountId":"123456789","awsRegion":"us-east-1","awsLocationRole":"arn:aws:iam::123456789:role/access-grants-instance-role","awsLocationPath":"s3://","authenticationType":"accessKey","awsAccessKeyId":"123456789","awsSecretAccessKey":"123456789" } }]
Update an integration configuration
Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML.
See the config object description for parameter definitions, value types, and additional configuration options.
Replace the {id} request parameter with the unique identifier of the integration you want to update.
Change the config values from above to your own. The editable values listed below are the only parameters that can change from the integration's existing configuration. The required parameters listed below must match the integration's existing configuration.
editable values:
name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.
authenticationType is the method used to authenticate with AWS when configuring the S3 integration (accepted values are auto or accessKey).
awsAccessKeyId is the AWS access key ID for the AWS account editing the integration.
awsSecretAccessKey is the AWS secret access key for the AWS account editing the integration.
required values from existing configuration:
awsRoleToAssume is the optional AWS IAM role ARN Immuta assumes when interacting with AWS.
awsAccountId is the ID of your AWS account.
awsRegion is the account's AWS region (such as us-east1).
awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.
awsLocationPath is the base S3 location that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.
Response
The response returns the status of the Amazon S3 integration configuration connection. See the response schema reference for details about the response schema.
A successful response includes the validation tests statuses.
{"id":"123456789","status":"editing","validationResults": {"status":"passed","validationTests": [ {"name":"There is no existing integration matching this configuration","status":"passed" }, {"name":"The provided integration name is unique across Immuta S3 integrations","status":"passed" }, {"name":"The provided access grants location role is a valid ARN format","status":"passed" }, {"name":"The provided AWS credentials allow fetching the caller's identity via the AWS STS API","status":"passed" }, {"name":"An AWS Access Grants instance is configured in the provided AWS account and region","status":"passed" }, {"name":"The provided S3 path exists and Immuta can list prefixes","status":"passed" }, {"name":"An AWS Access Grants location does not yet exist for the provided path","status":"passed" } ] }}
An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.
{"statusCode":409,"error":"Conflict","message":"Unable to edit integration with ID 123456789 in current state editing."}
Replace the {id} request parameter with the unique identifier of the integration you want to delete.
Response
The response returns the status of the S3 integration configuration that has been deleted. See the response schema reference for details about the response schema. An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.
{"id":"123456789","status":"deleting","validationResults": {"status":"passed","validationTests": [ {"name":"The provided access grants location role is a valid ARN format","status":"passed" }, {"name":"The provided AWS credentials allow fetching the caller's identity via the AWS STS API","status":"passed" }, {"name":"An AWS Access Grants instance is configured in the provided AWS account and region","status":"passed" }, {"name":"The provided S3 path exists and Immuta can list prefixes","status":"passed" } ] }}
prefix creates a data source for the prefix, bucket, or object provided in the path. If the data source prefix ends in a wildcard (), it protects all items starting with that prefix. If the data source prefix ends without a wildcard (), it protects a single object.
The response returns the ID, name, and prefix of the data source. See the response schema reference for details about the response schema. An unsuccessful response returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.