O AWS SDK para Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e o fim do suporte
Políticas de controle de acesso
As políticas de controle de acesso da AWS permitem especificar controles de acesso refinados nos recursos da AWS. Uma política de controle de acesso consiste em um conjunto de instruções, que assumem a forma:
A conta A tem permissão para realizar a ação B no recurso C em que a condição D se aplica.
Em que:
-
A é a entidade principal: a Conta da AWS que está fazendo uma requisição para acessar ou modificar um dos recursos da AWS.
-
B é a ação: a maneira como o recurso da AWS está sendo acessado ou modificado, como enviar uma mensagem para uma fila do Amazon SQS ou armazenar um objeto em um bucket do Amazon S3.
-
C é o recurso: a entidade da AWS que a entidade principal deseja acessar, como uma fila do Amazon SQS ou um objeto armazenado no Amazon S3.
-
D é um conjunto de condições: as restrições opcionais que especificam quando permitir ou negar acesso para a entidade principal acessar o recurso. Muitas condições expressivas estão disponíveis, algumas específicas de cada serviço. Por exemplo, você pode usar condições de data para permitir acesso aos recursos somente depois ou antes de uma hora específica.
Exemplo do Amazon S3
O exemplo a seguir demonstra uma política que permite que qualquer pessoa acesse para ler todos os objetos em um bucket, mas restringe o acesso para fazer upload de objetos para esse bucket a duas Conta da AWS específicas (além da conta do proprietário do bucket).
Statement allowPublicReadStatement = new Statement(Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(S3Actions.GetObject) .withResources(new S3ObjectResource(myBucketName, "*")); Statement allowRestrictedWriteStatement = new Statement(Effect.Allow) .withPrincipals(new Principal("123456789"), new Principal("876543210")) .withActions(S3Actions.PutObject) .withResources(new S3ObjectResource(myBucketName, "*")); Policy policy = new Policy() .withStatements(allowPublicReadStatement, allowRestrictedWriteStatement); AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); s3.setBucketPolicy(myBucketName, policy.toJson());
Exemplo do Amazon SQS
Um uso comum de políticas é autorizar uma fila do Amazon SQS para receber mensagens de um tópico do Amazon SNS.
Policy policy = new Policy().withStatements( new Statement(Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(SQSActions.SendMessage) .withConditions(ConditionFactory.newSourceArnCondition(myTopicArn))); Map queueAttributes = new HashMap(); queueAttributes.put(QueueAttributeName.Policy.toString(), policy.toJson()); AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); sqs.setQueueAttributes(new SetQueueAttributesRequest(myQueueUrl, queueAttributes));
Exemplo do Amazon SNS
Alguns serviços oferecem condições adicionais que podem ser usadas em políticas. O Amazon SNS oferece condições para permitir ou negar assinaturas para tópicos do SNS com base no protocolo (por exemplo, e-mail, HTTP, HTTPS, Amazon SQS) e no endpoint (por exemplo, endereço de e-mail, URL, ARN doAmazon SQS) da solicitação para assinar um tópico.
Condition endpointCondition = SNSConditionFactory.newEndpointCondition("*@mycompany.com"); Policy policy = new Policy().withStatements( new Statement(Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(SNSActions.Subscribe) .withConditions(endpointCondition)); AmazonSNS sns = AmazonSNSClientBuilder.defaultClient(); sns.setTopicAttributes( new SetTopicAttributesRequest(myTopicArn, "Policy", policy.toJson()));