Política de control de acceso - AWS SDK para Java 1.x

AWS SDK para Java 1.x ha entrado en modo de mantenimiento el 31 de julio de 2024 y llegará al final de soporte el 31 de diciembre de 2025. Le recomendamos que migre a AWS SDK for Java 2.x para seguir recibiendo nuevas características, mejoras de disponibilidad y actualizaciones de seguridad.

Política de control de acceso

Las políticas de control de acceso de AWS permiten especificar controles de acceso precisos en sus recursos de AWS. Una política de control de acceso se compone de un conjunto de instrucciones, con el siguiente formato:

La cuenta A tiene permiso para realizar la acción B en el recurso C donde se aplica la condición D.

Donde:

  • A es la entidad principal: la cuenta de Cuenta de AWS que hace una solicitud de acceso o modifica uno de sus recursos de AWS.

  • B es la acción: la forma en que se obtiene acceso o se modifican sus recursos de AWS, como el envío de un mensaje a una cola de Amazon SQS o el almacenamiento de un objeto en un bucket de Amazon S3.

  • C es el recurso: la entidad de AWS a la que desea obtener acceso la entidad principal, como una cola de Amazon SQS o un objeto almacenado en Amazon S3.

  • D es un conjunto de condiciones: las limitaciones opcionales que se especifican para permitir o denegar el acceso al recurso de la entidad principal. Hay muchas condiciones expresivas disponibles, algunas específicas de cada servicio. Por ejemplo, puede utilizar condiciones de fecha para permitir el acceso a los recursos únicamente después o antes de un momento específico.

Amazon S3 Ejemplo

El ejemplo siguiente ilustra una política que permite a cualquier persona tener acceso de lectura a todos los objetos de un bucket, pero restringe el acceso de carga de objetos en dicho bucket a dos cuentas de Cuenta de AWS específicas (además de la cuenta del propietario del 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());

Amazon SQS Ejemplo

Un uso común de las políticas consiste en autorizar una cola de Amazon SQS para que reciba mensajes de un tema de 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));

Ejemplo de Amazon SNS

Algunos servicios ofrecen condiciones adicionales que pueden utilizarse en las políticas. Amazon SNS proporciona condiciones para permitir o denegar suscripciones a los temas de SNS en función del protocolo (por ejemplo, correo electrónico, HTTP, HTTPS o Amazon SQS) y el punto de conexión (por ejemplo, la dirección de correo electrónico, la URL o el ARN de Amazon SQS) de la solicitud para suscribirse a un tema.

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()));