Permissões para acesso a dados usando o Amazon S3 URIs - AWS HealthOmics

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Permissões para acesso a dados usando o Amazon S3 URIs

Você pode acessar dados do armazenamento de sequências usando operações de HealthOmics API ou operações de API do Amazon S3.

Para acesso à HealthOmics API, HealthOmics as permissões são gerenciadas por meio de uma política do IAM. No entanto, o S3 Access requer dois níveis de configuração: permissão explícita na política de acesso ao S3 da loja e uma política do IAM. Para saber mais sobre como usar políticas do IAM com HealthOmics, consulte Funções de serviço para HealthOmics.

Há três maneiras de compartilhar a capacidade de ler objetos usando o Amazon APIs S3:

  1. Compartilhamento baseado em políticas — Esse compartilhamento requer habilitar o diretor do IAM na política de acesso do S3 e escrever uma política do IAM e anexá-la ao diretor do IAM. Consulte o próximo tópico para obter mais detalhes.

  2. Pré-assinado URLs — Você também pode gerar um URL pré-assinado compartilhável para um arquivo no armazenamento de sequências. Para saber mais sobre a criação de pré-assinados URLs usando o Amazon S3, consulte Uso de URLs pré-assinados na documentação do Amazon S3. A política de acesso do S3 do armazenamento de sequências oferece suporte a declarações para limitar os recursos de URL pré-assinados.

  3. Funções assumidas — Crie uma função na conta do proprietário dos dados que tenha uma política de acesso que permita que os usuários assumam essa função.

Compartilhamento baseado em políticas

Se você acessar dados do armazenamento de sequência usando um URI direto do S3, HealthOmics fornece medidas de segurança aprimoradas para a política de acesso ao bucket do S3 associada.

As regras a seguir se aplicam às novas políticas de acesso do S3. Para as políticas existentes, as regras se aplicam na próxima atualização da política:

  • As políticas de acesso do S3 oferecem suporte aos seguintes elementos de política

    • Versão, ID, Declaração, Sid, Efeito, Principal, Ação, Recurso, Condição

  • As políticas de acesso do S3 oferecem suporte às seguintes chaves de condição:

    • s3:ExistingObjectTag/<key>, s3: prefixo, s3: versão da assinatura, s3: TlsVersion

    • As políticas também oferecem suporte ao aws: PrincipalArn com os seguintes operadores de condição: ArnEquals e ArnLike

Se você tentar adicionar ou atualizar uma política para incluir um elemento ou condição sem suporte, o sistema rejeitará a solicitação.

Política de acesso padrão do S3

Quando você cria um armazenamento de sequência, HealthOmics cria uma política de acesso padrão do S3 concedendo à conta raiz do proprietário do armazenamento de dados as seguintes permissões para todos os objetos acessíveis no armazenamento de sequência: S3:GetObject, S3 e S3GetObjectTagging:. ListBucket A política padrão criada é:

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/*" } ] }

Personalizando a política de acesso

Se a política de acesso do S3 estiver em branco, nenhum acesso ao S3 será permitido. Se houver uma política existente e você precisar remover o acesso s3, use deleteS3AccessPolicy para remover todo o acesso.

Para adicionar restrições ao compartilhamento ou conceder acesso a outras contas, você pode atualizar a política usando a PutS3AccessPolicy API. As atualizações da política não podem ir além do prefixo do armazenamento de sequências ou das ações especificadas.

Política do IAM

Para permitir que um usuário ou principal do IAM acesse usando o Amazon S3 APIs, além da permissão na política de acesso do S3, uma política do IAM precisa ser criada e anexada ao principal para conceder acesso. Uma política que permite o acesso à API do Amazon S3 pode ser aplicada no nível do armazenamento de sequências ou no nível do conjunto de leitura. No nível do conjunto de leitura, a permissão pode ser restringida por meio do prefixo ou usando filtros de tag de recurso para padrões de ID de amostra ou assunto.

Se o armazenamento de sequências usar uma chave gerenciada pelo cliente (CMK), o principal também deverá ter direitos de usar a chave KMS para descriptografia. Para obter mais informações, consulte Acesso ao KMS entre contas no Guia do AWS Key Management Service desenvolvedor.

O exemplo a seguir dá ao usuário acesso a um armazenamento de sequências. Você pode ajustar o acesso com condições adicionais ou filtros baseados em recursos.

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/*" } } } ] }

Controle de acesso com base em tags

Para usar o controle de acesso baseado em tags, o armazenamento de sequências deve primeiro ser atualizado para propagar as chaves de tag que serão usadas. Essa configuração é definida durante a criação ou atualização do armazenamento de sequências. Depois que as tags são propagadas, as condições da tag podem ser usadas para adicionar mais restrições. As restrições podem ser colocadas na política de acesso do S3 ou na política do IAM. A seguir está um exemplo de uma política de acesso do S3 baseada em guias que seria definida:

{ "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" } } }

Exemplo de restrição

Cenário: criar um compartilhamento em que o proprietário dos dados possa restringir a capacidade do usuário de baixar dados “retirados”.

Nesse cenário, um proprietário de dados (conta #111111111111) gerenciava um armazenamento de dados. Esse proprietário de dados compartilha os dados com uma ampla variedade de usuários terceirizados, incluindo um pesquisador (conta #999999999999). Como parte do gerenciamento dos dados, o proprietário dos dados recebe periodicamente solicitações para retirar os dados dos participantes. Para gerenciar essa retirada, o proprietário dos dados primeiro restringe o acesso direto ao download ao receber a solicitação e, eventualmente, exclui os dados de acordo com seus requisitos.

Para atender a essa necessidade, o proprietário dos dados configura um armazenamento de sequência e cada conjunto de leitura recebe uma tag de “status” que será definida como “retirado” se a solicitação de retirada for recebida. Para dados com a tag definida com esse valor, eles querem garantir que nenhum usuário possa executar “getObject” nesse arquivo. Para fazer essa configuração, o proprietário dos dados precisará garantir que duas etapas sejam executadas.

Etapa 1. Para o armazenamento de sequências, certifique-se de que a tag de status esteja atualizada para ser propagada. Isso é feito adicionando a chave “status” propogatedSetLevelTags ao ligar createSequenceStore ou updateSequenceStore.

Etapa 2. Atualize a política de acesso s3 da loja para restringir getObject em objetos com a tag de status definida como retirada. Isso é feito atualizando a política de acesso às lojas usando a PutS3AccesPolicy API. A política a seguir permitiria que os clientes ainda vissem os arquivos retirados ao listar objetos, mas impediria que eles os acessassem:

  • Declaração 1 (restrictedGetWithdrawal): A conta 999999999999 não pode recuperar objetos que foram retirados.

  • Declaração 2 (ownerGetAll): A conta 111111111111, proprietária dos dados, pode recuperar todos os objetos, incluindo objetos que foram retirados.

  • Declaração 3 (everyoneListAll): Todas as contas compartilhadas, 111111111111 e 9999999999, podem executar a operação em todo o prefixo. 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/*" } } } ] }