액세스 제어 정책 - AWS SDK for Java 1.x

AWS SDK for Java 1.x는 2024년 7월 31일부터 유지 관리 모드로 전환되었으며 2025년 12월 31일에 지원 종료될 예정입니다. 새로운 기능, 가용성 개선 및 보안 업데이트를 계속 받으려면 AWS SDK for Java 2.x로 마이그레이션하는 것이 좋습니다.

액세스 제어 정책

AWS 액세스 제어 정책을 사용하면 AWS 리소스에 대한 세분화된 액세스 제어를 지정할 수 있습니다. 액세스 제어 정책은 다음과 같은 형태의 모음으로 이루어집니다.

계정 A에는 조건 D가 적용되는 리소스 C에서 작업 B를 수행할 권한이 있습니다.

위치:

  • A보안 주체, 즉 AWS 리소스 중 하나에 대한 액세스 또는 수정을 요청하는 AWS 계정입니다.

  • B는 작업, 즉 Amazon SQS 대기열에 메시지를 보내거나 Amazon S3 버킷에 객체를 저장하는 등 AWS 리소스에 액세스하거나 수정되는 방식입니다.

  • C리소스, 즉 주체가 액세스하려는 AWS 개체(예: Amazon SQS 대기열 또는 Amazon S3에 저장된 객체)입니다.

  • D조건 집합, 즉 주체가 리소스에 액세스할 수 있도록 허용하거나 거부할 시기를 지정하는 선택적 제약 조건입니다. 여러 표현식 조건을 사용할 수 있는 일부 각 서비스에 국한됩니다. 예를 들면, 날짜 조건을 사용하여 특정 시간 이후 또는 이전에만 리소스에 대한 액세스를 허용할 수 있습니다.

Amazon S3 예제

다음 예제는 모든 사람에게 버킷의 모든 객체 읽기 액세스를 허용하되, 해당 버킷으로의 객체 업로드 액세스를 버킷 소유자의 계정 외에 특정 AWS 계정 두 개로 제한하는 정책을 보여줍니다.

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 예제

정책의 일반적인 용도 중 하나는 Amazon SQS 대기열에 대해 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));

Amazon SNS 예제

일부 서비스는 정책에 사용할 수 있는 추가 조건을 제공합니다. Amazon SNS는 주제 구독 요청의 프로토콜(예: 이메일, HTTP, HTTPS, Amazon SQS) 및 엔드포인트(예: 이메일 주소, URL, Amazon SQS ARN)에 따라 SNS 주제 구독을 허용하거나 거부하는 조건을 제공합니다.

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