Exemplos de políticas de bucket da API REST S3 do StorageGRID
Utilize os exemplos desta seção para criar políticas de acesso do StorageGRID para buckets.
As políticas de bucket especificam as permissões de acesso para o bucket ao qual a política está associada. Você configura uma política de bucket usando a API PutBucketPolicy do S3 por meio de uma destas ferramentas:
-
AWS CLI usando este comando (consulte "Operações em buckets"):
> aws s3api put-bucket-policy --bucket examplebucket --policy file://policy.json
Exemplo: permitir que todos tenham acesso somente leitura a um bucket
Neste exemplo, todos, incluindo anônimos, têm permissão para listar objetos no bucket e realizar operações GetObject em todos os objetos no bucket. Todas as outras operações serão negadas. Observe que essa política pode não ser particularmente útil porque ninguém, exceto o usuário raiz, tem permissões para gravar no bucket.
{
"Statement": [
{
"Sid": "AllowEveryoneReadOnlyAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [ "s3:GetObject", "s3:ListBucket" ],
"Resource": ["arn:aws:s3:::examplebucket","arn:aws:s3:::examplebucket/*"]
}
]
}
Exemplo: permitir acesso total a todos em uma conta e acesso somente leitura a um bucket para todos em outra conta
Neste exemplo, todos em uma conta específica têm permissão para acesso total a um bucket, enquanto todos em outra conta específica têm permissão apenas para listar o bucket e realizar operações GetObject em objetos no bucket que começam com o prefixo da chave do objeto shared/.
|
|
No StorageGRID, os objetos criados por uma conta que não seja a proprietária (incluindo contas anônimas) pertencem à conta proprietária do bucket. A política do bucket se aplica a esses objetos. |
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "95390887230002558202"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
},
{
"Effect": "Allow",
"Principal": {
"AWS": "31181711887329436680"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/shared/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "31181711887329436680"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::examplebucket",
"Condition": {
"StringLike": {
"s3:prefix": "shared/*"
}
}
}
]
}
Exemplo: permitir acesso somente leitura a um bucket para todos e acesso total para um grupo específico
Neste exemplo, todos, incluindo usuários anônimos, têm permissão para listar o bucket e realizar GetObject operações em todos os objetos no bucket, enquanto apenas os usuários pertencentes ao grupo Marketing na conta especificada têm acesso total.
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-group/Marketing"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
},
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:ListBucket","s3:GetObject"],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
}
]
}
Exemplo: permitir acesso de leitura e gravação a um bucket para todos os clientes se estiverem no intervalo de IP
Neste exemplo, todos, incluindo usuários anônimos, têm permissão para listar o bucket e executar quaisquer operações de objeto em todos os objetos do bucket, desde que as solicitações venham de um intervalo de IP especificado (54.240.143.0 a 54.240.143.255, exceto 54.240.143.188). Todas as outras operações serão negadas e todas as solicitações fora do intervalo de IP serão negadas.
{
"Statement": [
{
"Sid": "AllowEveryoneReadWriteAccessIfInSourceIpRange",
"Effect": "Allow",
"Principal": "*",
"Action": [ "s3:*Object", "s3:ListBucket" ],
"Resource": ["arn:aws:s3:::examplebucket","arn:aws:s3:::examplebucket/*"],
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
"NotIpAddress": {"aws:SourceIp": "54.240.143.188"}
}
}
]
}
Exemplo: permitir acesso total a um bucket exclusivamente por um usuário federado específico
Neste exemplo, o usuário federado Alex tem permissão total de acesso ao examplebucket bucket e aos seus objetos. Todos os outros usuários, incluindo ‘root', têm todas as operações explicitamente negadas. Observe, no entanto, que ‘root' nunca tem as permissões de Put/Get/DeleteBucketPolicy negadas.
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-user/Alex"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
},
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-user/Alex"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
}
]
}
Exemplo: permissão PutOverwriteObject
Neste exemplo, o `Deny`Effect para PutOverwriteObject e DeleteObject garante que ninguém possa sobrescrever ou excluir os dados do objeto, os metadados definidos pelo usuário e a marcação do objeto S3.
{
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:PutOverwriteObject",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::wormbucket/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-group/SomeGroup"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::wormbucket"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-group/SomeGroup"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::wormbucket/*"
}
]
}