Amazon S3 URIs를 사용한 데이터 액세스 권한 - AWS HealthOmics

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon S3 URIs를 사용한 데이터 액세스 권한

HealthOmics API 작업 또는 Amazon S3 API 작업을 사용하여 시퀀스 스토어 데이터에 액세스할 수 있습니다.

HealthOmics API 액세스의 경우 HealthOmics 권한은 IAM 정책을 통해 관리됩니다. 그러나 S3 액세스에는 스토어의 S3 액세스 정책 및 IAM 정책의 명시적 허용이라는 두 가지 수준의 구성이 필요합니다. HealthOmics에서 IAM 정책을 사용하는 방법에 대한 자세한 내용은 HealthOmics.

Amazon S3 APIs.

  1. 정책 기반 공유 -이 공유를 사용하려면 S3 액세스 정책에서 IAM 보안 주체를 활성화하고 IAM 정책을 작성하여 IAM 보안 주체에 연결해야 합니다. 자세한 내용은 다음 주제를 참조하세요.

  2. 미리 서명된 URLs- 시퀀스 스토어의 파일에 대해 공유 가능한 미리 서명된 URL을 생성할 수도 있습니다. Amazon S3를 사용하여 미리 서명된 URLs 생성하는 방법에 대한 자세한 내용은 Amazon S3 설명서의 미리 서명된 URLs 사용을 참조하세요. 시퀀스 스토어 S3 액세스 정책은 미리 서명된 URL 기능을 제한하기 위한 문을 지원합니다.

  3. 수임된 역할 - 데이터 소유자의 계정 내에 사용자가 해당 역할을 수임할 수 있도록 허용하는 액세스 정책이 있는 역할을 생성합니다.

정책 기반 공유

직접 S3 URI를 사용하여 시퀀스 스토어 데이터에 액세스하는 경우 HealthOmics는 연결된 S3 버킷 액세스 정책에 대한 향상된 보안 조치를 제공합니다.

새 S3 액세스 정책에는 다음 규칙이 적용됩니다. 기존 정책의 경우 다음에 정책을 업데이트할 때 규칙이 적용됩니다.

  • S3 액세스 정책은 다음 정책 요소를 지원합니다.

    • 버전, Id, 문, Sid, 효과, 보안 주체, 작업, 리소스, 조건

  • S3 액세스 정책은 다음 조건 키를 지원합니다.

    • s3:ExistingObjectTag/<key>, s3:prefix, s3:signatureversion, s3:TlsVersion

    • 또한 정책은 ArnEquals 및 ArnLike 조건 연산자를 사용하여 aws:PrincipalArn을 지원합니다.

지원되지 않는 요소 또는 조건을 포함하도록 정책을 추가하거나 업데이트하려고 하면 시스템에서 요청을 거부합니다.

기본 S3 액세스 정책

시퀀스 저장소를 생성할 때 HealthOmics는 데이터 저장소 소유자의 루트 계정에 S3:GetObject, S3GetObjectTagging S3GetObjectTaggingS3:ListBucket과 같은 시퀀스 저장소의 액세스 가능한 모든 객체에 대한 권한을 부여하는 기본 S3 액세스 정책을 생성합니다. 기본 생성 정책은 다음과 같습니다.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/111111111111/sequenceStore/1234567890/*" } ] }

액세스 정책 사용자 지정

S3 액세스 정책이 비어 있으면 S3 액세스가 허용되지 않습니다. 기존 정책이 있고 s3 액세스를 제거해야 하는 경우 deleteS3AccessPolicy를 사용하여 모든 액세스를 제거합니다.

공유에 대한 제한을 추가하거나 다른 계정에 액세스 권한을 부여하려면 PutS3AccessPolicy API를 사용하여 정책을 업데이트할 수 있습니다. 정책 업데이트는 시퀀스 저장소의 접두사 또는 지정된 작업을 초과할 수 없습니다.

IAM 정책

Amazon S3 APIs를 사용하여 사용자 또는 IAM 보안 주체에게 액세스를 허용하려면 S3 액세스 정책의 권한 외에도 IAM 정책을 생성하여 보안 주체에 연결하여 액세스 권한을 부여해야 합니다. Amazon S3 API 액세스를 허용하는 정책은 시퀀스 저장소 수준 또는 읽기 세트 수준에서 적용할 수 있습니다. 읽기 세트 수준에서는 접두사를 통해 또는 샘플 또는 주제 ID 패턴에 대한 리소스 태그 필터를 사용하여 권한을 제한할 수 있습니다.

시퀀스 스토어가 고객 관리형 키(CMK)를 사용하는 경우 보안 주체는 복호화에 KMS 키를 사용할 권한도 있어야 합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서의 교차 계정 KMS 액세스를 참조하세요.

다음 예제에서는 사용자에게 시퀀스 저장소에 대한 액세스 권한을 부여합니다. 추가 조건 또는 리소스 기반 필터를 사용하여 액세스를 미세 조정할 수 있습니다.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/omics:readSetStatus": "ACTIVE" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890", "Condition": { "StringLike": { "s3:prefix": "111111111111/sequenceStore/1234567890/*" } } } ] }

태그 기반 액세스 제어

태그 기반 액세스 제어를 사용하려면 먼저 시퀀스 스토어를 업데이트하여 사용할 태그 키를 전파해야 합니다. 이 구성은 시퀀스 스토어 생성 또는 업데이트 중에 설정됩니다. 태그가 전파되면 태그 조건을 사용하여 제한을 더 추가할 수 있습니다. 제한은 S3 액세스 정책 또는 IAM 정책에 배치할 수 있습니다. 다음은 설정할 탭 기반 S3 액세스 정책의 예입니다.

{ "Sid": "tagRestrictedGets", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<target_restricted_account_id>:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/tagKey1": "tagValue1", "s3:ExistingObjectTag/tagKey2": "tagValue2" } } }

제한 예제

시나리오: 데이터 소유자가 사용자의 '철회됨' 데이터 다운로드 기능을 제한할 수 있는 공유 생성.

이 시나리오에서는 데이터 소유자(계정 #111111111111)가 데이터 스토어를 관리했습니다. 이 데이터 소유자는 연구원(계정 #999999999999)을 포함하여 광범위한 타사 사용자와 데이터를 공유합니다. 데이터 관리의 일환으로 데이터 소유자는 주기적으로 참가자 데이터 철회 요청을 받습니다. 이 취소를 관리하기 위해 데이터 소유자는 먼저 요청을 수신할 때 직접 다운로드 액세스를 제한하고 결국 요구 사항에 따라 데이터를 삭제합니다.

이러한 요구 사항을 충족하기 위해 데이터 소유자는 시퀀스 저장소를 설정하고 각 읽기 세트는 철회 요청이 전달되면 "withdrawn"으로 설정되는 "status"에 대한 태그를 수신합니다. 태그가이 값으로 설정된 데이터의 경우이 파일에서 'getObject'를 실행할 수 있는 사용자가 없는지 확인합니다. 이 설정을 수행하려면 데이터 소유자가 두 단계를 수행해야 합니다.

1단계. 시퀀스 스토어의 경우 상태 태그가 전파되도록 업데이트되었는지 확인합니다. 이는 createSequenceStore 또는를 호출할 propogatedSetLevelTags 때에 “상태” 키를 추가하여 수행됩니다. updateSequenceStore.

2단계. 상태 태그가 취소됨으로 설정된 객체에서 getObject를 제한하도록 스토어의 s3 액세스 정책을 업데이트합니다. 이는 PutS3AccesPolicy API를 사용하여 스토어 액세스 정책을 업데이트하여 수행됩니다. 다음 정책을 통해 고객은 객체를 나열할 때 철회된 파일을 계속 볼 수 있지만 액세스하지 못하도록 할 수 있습니다.

  • 문 1(restrictedGetWithdrawal): 계정 999999999999은 철회된 객체를 검색할 수 없습니다.

  • 문 2(ownerGetAll): 데이터 소유자인 계정 111111111111은 철회된 객체를 포함하여 모든 객체를 검색할 수 있습니다.

  • 문 3(everyoneListAll): 모든 공유 계정 111111111111 및 999999999999은 전체 접두사에서 ListBucket 작업을 실행할 수 있습니다.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "restrictedGetWithdrawal", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::999999999999:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringNotEquals": { "s3:ExistingObjectTag/status": "withdrawn" } } }, { "Sid": "ownerGetAll", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/omics:readSetStatus": "ACTIVE" } } }, { "Sid": "everyoneListAll", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111111111111:root", "arn:aws:iam::999999999999:root" ] }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890", "Condition": { "StringLike": { "s3:prefix": "111111111111/sequenceStore/1234567890/*" } } } ] }