대상에 이벤트 알림 메시지 게시 권한 부여
대상에 이벤트 알림 메시지 게시 권한 부여
Amazon S3가 이벤트 알림 메시지를 대상에 게시할 수 있도록, Amazon S3 프린시펄에 SNS 주제, SQS 대기열, 또는 Lambda 함수에 메시지를 게시하는 관련 API를 호출하는 데 필요한 권한을 부여해야 해요. 이벤트 알림 메시지를 대상에 게시하는 문제를 해결하려면 Amazon Simple Notification Service 주제에 Amazon S3 이벤트 알림 게시 문제 해결을 참고하세요.
출처: Granting permissions to publish event notification messages to a destination
본문
AWS Lambda 함수를 호출할 권한 부여
Amazon S3는 Lambda 함수를 호출하고 이벤트 메시지를 인자로 제공해 이벤트 메시지를 AWS Lambda에 게시해요. Amazon S3 콘솔로 Lambda 함수에 대한 이벤트 알림을 Amazon S3 버킷에 구성하면, 콘솔이 Lambda 함수에 필요한 권한을 자동으로 설정해요. 그래야 Amazon S3가 버킷에서 함수를 호출할 수 있어요. 자세한 내용은 Amazon S3 콘솔로 이벤트 알림 활성화 및 구성을 참고하세요.
AWS Lambda에서 Amazon S3에 사용자의 Lambda 함수를 호출할 권한을 부여할 수도 있어요. 자세한 내용은 AWS Lambda 개발자 안내서의 튜토리얼: AWS Lambda와 Amazon S3 사용을 참고하세요.
SNS 주제 또는 SQS 대기열에 메시지를 게시할 권한 부여
Amazon S3가 SNS 주제나 SQS 대기열에 메시지를 게시할 권한을 부여하려면, 대상 SNS 주제 또는 SQS 대기열에 AWS Identity and Access Management(IAM) 정책을 연결하세요. SNS 주제나 SQS 대기열에 정책을 연결하는 예제는 연습: 버킷에 알림 구성(SNS 주제 또는 SQS 대기열)을 참고하세요. 권한에 대한 자세한 내용은 다음 주제를 참고하세요.
- Amazon Simple Notification Service 개발자 안내서의 Amazon SNS 액세스 제어 예제 사례
- Amazon Simple Queue Service 개발자 안내서의 Amazon SQS의 Identity and access management
대상 SNS 주제에 대한 IAM 정책 – 다음은 대상 SNS 주제에 연결하는 AWS Identity and Access Management(IAM) 정책 예제예요. 이 정책을 사용해 이벤트 알림용 대상 Amazon SNS 주제를 설정하는 방법은 연습: 버킷에 알림 구성(SNS 주제 또는 SQS 대기열)을 참고하세요.
{
"Version":"2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "Example SNS topic policy",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:us-east-1: 111122223333 : example-sns-topic ",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:s3::: amzn-s3-demo-bucket "
},
"StringEquals": {
"aws:SourceAccount": " bucket-owner-123456789012 "
}
}
}
]
}
대상 SQS 대기열에 대한 IAM 정책 – 다음은 대상 SQS 대기열에 연결하는 IAM 정책 예제예요. 이 정책을 사용해 이벤트 알림용 대상 Amazon SQS 대기열을 설정하는 방법은 연습: 버킷에 알림 구성(SNS 주제 또는 SQS 대기열)을 참고하세요. 이 정책을 사용하려면 Amazon SQS 대기열 ARN, 버킷 이름, 버킷 소유자의 AWS 계정 ID를 업데이트해야 해요.
{
"Version":"2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "arn:aws:sqs: us-east-1 : 111122223333 : queue-name ",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:*:*: amzn-s3-demo-bucket "
},
"StringEquals": {
"aws:SourceAccount": " bucket-owner-123456789012 "
}
}
}
]
}
Amazon SNS와 Amazon SQS IAM 정책 모두에서 ArnLike 조건 대신 StringLike 조건을 지정할 수 있어요. ArnLike를 사용하면 ARN의 파티션, 서비스, 계정 ID, 리소스 유형, 리소스 ID 일부가 요청 컨텍스트의 ARN과 정확히 일치해야 해요. 리전과 리소스 경로만 부분 일치가 허용돼요. ArnLike 대신 StringLike를 사용하면 ARN 구조를 무시하고 부분 일치를 허용하며, 와일드카드 문자로 교체되는 부분이 어디든 매칭돼요. 자세한 내용은 IAM 사용 안내서의 IAM JSON 정책 요소를 참고하세요.
"Condition": {
"StringLike": {
"aws:SourceArn": "arn:aws:s3:*:*: amzn-s3-demo-bucket "
}
}
AWS KMS 키 정책 – SQS 대기열이나 SNS 주제가 AWS Key Management Service(AWS KMS) 고객 관리형 키로 암호화되어 있으면, Amazon S3 서비스 프린시펄에 암호화된 주제나 대기열을 다룰 권한을 부여해야 해요. Amazon S3 서비스 프린시펄에 권한을 부여하려면 고객 관리형 키의 키 정책에 다음 문장을 추가하세요.
{
"Version":"2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
AWS KMS 키 정책에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS KMS에서 키 정책 사용을 참고하세요. Amazon SQS와 Amazon SNS에서 AWS KMS를 사용한 서버 측 암호화에 대한 자세한 내용은 다음을 참고하세요.
- Amazon Simple Notification Service 개발자 안내서의 키 관리
- Amazon Simple Queue Service 개발자 안내서의 키 관리
- AWS Compute Blog의 AWS KMS로 Amazon SNS에 게시된 메시지 암호화