Managing a bucket policy
Object Storage incorporates multiple mechanisms for managing access to resources. To learn how these mechanisms interact, see Access management methods in Object Storage: Overview.
Bucket policies set permissions for operations with buckets, objects, and object groups.
Warning
If you want to assign an access policy to a bucket and connect to it from a Hive Metastore or Yandex Managed Service for Apache Airflow™ cluster, you will need some additional infrastructure setup. For more information, see these guides for Metastore and Managed Service for Apache Airflow™.
Applying or updating a policy
The minimum role required to apply or update a bucket policy is storage.configurer
. For more information, see the role description.
Note
Applying the changes will completely overwrite any existing bucket policy.
To apply or update a bucket policy:
-
In the management console
, select Object Storage from the list of services and go to the bucket whose policy you need to configure. -
In the left-hand panel, select
Security and go to the Access policy tab. -
Click Configure access.
-
Enter a bucket policy ID.
-
Set up a rule:
-
Enter a rule ID.
-
Configure rule settings:
-
Result: Allow or deny.
-
Selection principle: Include or exclude users.
-
User: All users or specific users. To specify a list of specific users or service accounts, select their names from the drop-down list.
-
Action for which you are creating the rule. You can also enable All actions.
-
Resource: Defaults to the selected bucket. To add other resources to the rule, click Add resource.
Note
A bucket resource does not include resources of all its objects. To make sure a bucket policy rule refers to the bucket and all objects, specify them as separate resources, such as
samplebucket
andsamplebucket/*
.
-
-
If required, add a condition for the rule:
- Select Key from the list.
- Select Operator from the list. If you want the operator to apply solely to the existing fields, select Apply if the field exists. This way, if the field is missing, the condition will be considered met.
- Enter a value in Value.
- Click Add value to add another value to the condition.
You can set multiple conditions for a rule and specify multiple keys for each one. These conditions and their keys will be checked using the
AND
logic. This means the request must meet all the specified criteria at once.You can set multiple values for each condition key at the same time. These values will be checked using the
OR
logic. This means the request must match any of the specified condition key values.
-
-
Add and configure rules as required.
-
Click Save.
If you do not have the Yandex Cloud CLI yet, install and initialize it.
The folder specified in the CLI profile is used by default. You can specify a different folder through the --folder-name
or --folder-id
parameter.
-
See the description of the CLI command for editing a bucket ACL:
yc storage bucket update --help
-
Describe your bucket policy configuration as a JSON data schema:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<bucket_name>/*", "Condition": { "Bool": { "aws:SecureTransport": "true" } } } }
Where:
Version
: Version of the bucket policy description. This is an optional parameter.Statement
: Bucket policy rules:-
Effect
: Deny or allow the requested action. The possible values areAllow
andDeny
. -
Principal
: ID of the subject requesting the permission. This can be either a user or a service account. The possible values are*
and<subject_ID>
. This is an optional parameter.You can get the IDs in the following ways:
-
Action
: Action to allow when the policy is triggered. The possible values ares3:GetObject
,s3:PutObject
, and*
(if you need to apply the policy to all actions). -
Resource
: Resource to apply the rule to. -
Condition
: Condition to check. This is an optional parameter.You can set multiple conditions for a rule and specify multiple keys for each one. These conditions and their keys will be checked using the
AND
logic. This means the request must meet all the specified criteria at once.You can set multiple values for each condition key at the same time. These values will be checked using the
OR
logic. This means the request must match any of the specified condition key values.
-
-
Run this command:
yc storage bucket update \ --name <bucket_name> \ --policy-from-file <policy_file_path>
Result:
name: my-bucket folder_id: csgeoelk7fl1******** default_storage_class: STANDARD versioning: VERSIONING_SUSPENDED max_size: "10737418240" policy: Statement: Action: s3:GetObject Condition: Bool: aws:SecureTransport: "true" Effect: Allow Principal: '*' Resource: arn:aws:s3:::my-bucket Version: "2012-10-17" acl: {} created_at: "2022-12-14T08:42:16.273717Z"
Note
To manage a policy using the AWS CLI, a service account needs the storage.admin
role.
If you do not have the AWS CLI yet, install and configure it.
-
Describe your bucket policy configuration as a JSON data schema:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<bucket_name>/*", "Condition": { "Bool": { "aws:SecureTransport": "true" } } } }
Where:
Version
: Version of the bucket policy description. This is an optional parameter.Statement
: Bucket policy rules:-
Effect
: Deny or allow the requested action. The possible values areAllow
andDeny
. -
Principal
: ID of the subject requesting the permission. This can be a user or service account. The possible values are*
and<subject_ID>
. This is an optional parameter.You can get the IDs in the following ways:
-
Action
: Action to allow when the policy is triggered. The possible values ares3:GetObject
,s3:PutObject
, and*
(if you need to apply the policy to all actions). -
Resource
: Resource to apply the rule to. -
Condition
: Condition to check. This is an optional parameter.You can set multiple conditions for a rule and specify multiple keys for each one. These conditions and their keys will be checked using the
AND
logic. This means the request must meet all the specified criteria at once.You can set multiple values for each condition key at the same time. These values will be checked using the
OR
logic. This means the request must match any of the specified condition key values.
-
Once the configuration is complete, save it to a file named
policy.json
. -
Run this command:
aws s3api put-bucket-policy \ --endpoint https://storage.yandexcloud.net \ --bucket <bucket_name> \ --policy file://policy.json
Note
Terraform uses a service account to interact with Object Storage. Assign to the service account the required role, e.g., storage.admin
, for the folder where you are going to create resources.
If you don't have Terraform, install it and configure the Yandex Cloud provider.
Retrieve static access keys: a secret key and key ID used for Object Storage authentication.
-
In the configuration file, define the parameters of the resources you want to create:
resource "yandex_iam_service_account" "sa" { name = "<service_account_name>" } // Assigning a role to a service account resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<folder_ID>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Creating a static access key resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" } resource "yandex_storage_bucket" "b" { access_key = "yandex_iam_service_account_static_access_key.sa-static-key.access_key" secret_key = "yandex_iam_service_account_static_access_key.sa-static-key.secret_key" bucket = "my-policy-bucket" policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] } ] } POLICY }
Where:
access_key
: Static access key ID.secret_key
: Secret access key value.bucket
: Bucket name. This is a required parameter.policy
: Policy name. This is a required parameter.
Policy settings:
Version
: Version of the bucket policy description. This is an optional parameter.Statement
: Bucket policy rules:-
Effect
: Deny or allow the requested action. The possible values areAllow
andDeny
. -
Principal
: ID of the subject requesting the permission. This can be a user or service account. The possible values are*
and<subject_ID>
. This is an optional parameter.You can get the IDs in the following ways:
-
Action
: Action to allow when the policy is triggered. The possible values ares3:GetObject
,s3:PutObject
, and*
(if you need to apply the policy to all actions). -
Resource
: Resource to apply the rule to. -
Condition
: Condition to check. This is an optional parameter.You can set multiple conditions for a rule and specify multiple keys for each one. These conditions and their keys will be checked using the
AND
logic. This means the request must meet all the specified criteria at once.You can set multiple values for each condition key at the same time. These values will be checked using the
OR
logic. This means the request must match any of the specified condition key values.
-
For more information about the resources you can create with Terraform, see this provider reference
. -
Make sure the configuration files are correct.
-
In the command line, go to the directory where you created the configuration file.
-
Run a check using this command:
terraform plan
If you described the configuration correctly, the terminal will display a list of the resources being created and their parameters. If the configuration contains any errors, Terraform will point them out.
-
-
Deploy the cloud resources.
-
If the configuration does not contain any errors, run this command:
terraform apply
-
Confirm creating the resources.
This will create all the resources you need in the specified folder. You can check the new resources and their settings using the management console
. -
To manage a bucket policy, use the update REST API method for the Bucket resource, the BucketService/Update gRPC API call, or the PutBucketPolicy S3 API method. Applying a new bucket policy will completely overwrite any existing one.
Note
If a bucket policy with no rules is applied to the bucket, access is denied to all users. To disable request verification for a bucket policy, delete it.
Viewing a policy
The minimum role required to view a bucket policy is storage.configViewer
. For more information, see the role description.
To view the bucket policy applied to a bucket:
- In the management console
, select Object Storage from the list of services. - Select the bucket from the list.
- In the left-hand menu, select Security and go to the Access policy tab.
Run this command:
aws --endpoint https://storage.yandexcloud.net s3api get-bucket-policy \
--bucket <bucket_name> \
--output text
Result:
{
"Policy": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::<bucket_name>/*\",\"Condition\":{\"Bool\":{\"aws:SecureTransport\":\"true\"}}}}"
}
For more information about parameters, see the data schema description.
Use the GetBucketPolicy S3 API method.
Deleting a policy
The minimum role required to delete a bucket policy is storage.configurer
. For more information, see the role description.
To delete a bucket policy:
- In the management console
, select Object Storage from the list of services. - Select the bucket from the list.
- In the left-hand menu, select Security and go to the Access policy tab.
- Click
and select Delete access policy. - Click Delete.
Run this command:
aws --endpoint https://storage.yandexcloud.net s3api delete-bucket-policy \
--bucket <bucket_name>
If you don't have Terraform, install it and configure the Yandex Cloud provider.
If you applied a bucket policy using Terraform, you can delete it by following these steps:
-
Find the parameters of the previously created bucket policy to delete in the configuration file:
resource "yandex_storage_bucket" "b" { bucket = "my-policy-bucket" policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::my-policy-bucket/*", "arn:aws:s3:::my-policy-bucket" ] } ] } POLICY }
-
Delete the
policy
field describing the bucket policy settings from the configuration file. -
Make sure the configuration files are correct.
-
In the command line, navigate to the directory where you edited the configuration file.
-
Run a check using this command:
terraform plan
If the configuration is correct, the terminal will display a list of the resources to create and their parameters, without the description of the bucket policy you are deleting. If the configuration contains any errors, Terraform will point them out.
-
-
Delete the bucket policy.
-
If the configuration does not contain any errors, run this command:
terraform apply
-
Type
yes
and press Enter.
This will delete the bucket policy from the specified folder. You can check the bucket policy deletion using the management console
. -
Use the DeleteBucketPolicy S3 API method.