Compartilhar arquivos de log do CloudTrail entre contas da AWS - AWS CloudTrail

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á.

Compartilhar arquivos de log do CloudTrail entre contas da AWS

Esta seção explica como compartilhar arquivos de log do CloudTrail entre várias contas da AWS. A abordagem que você usa para compartilhar logs entre Contas da AWS depende da configuração do seu bucket do S3. Estas são as opções para compartilhar arquivos de log:

  • Aplicada pelo proprietário do bucket: a Propriedade de objeto do S3 é uma configuração no nível do bucket do Amazon S3 que você pode usar para controlar a propriedade de objetos carregados no bucket e desabilitar ou habilitar as listas de controle de acesso (ACLs). Por padrão, a Propriedade de objeto está definida com a configuração Aplicada pelo proprietário do bucket e todas as ACLs estão desabilitadas. Quando as ACLs são desabilitadas, o proprietário do bucket possui todos os objetos do bucket e gerencia o acesso aos dados usando políticas de gerenciamento de acesso. Quando a opção Aplicada pelo proprietário do bucket é definida, o acesso é gerenciado por meio da política do bucket, eliminando a necessidade de os usuários presumirem um perfil.

  • Presumir um perfil para compartilhar arquivos de log: se você não tiver escolhido a configuração Aplicada pelo proprietário do bucket, os usuários precisarão presumir um perfil para acessar os arquivos de log em seu bucket do S3.

Compartilhar arquivos de log entre contas presumindo um perfil

nota

Esta seção se aplica somente aos buckets do Amazon S3 que não estão usando a configuração Aplicada pelo proprietário do bucket.

Esta seção explica como compartilhar arquivos de log do CloudTrail entre várias Contas da AWS ao presumir um perfil e descreve os cenários para compartilhar arquivos de log.

  • Cenário 1: concede acesso somente leitura às contas que geraram os arquivos de log que foram colocados no seu bucket do Amazon S3.

  • Cenário 2: concede acesso a todos os arquivos de log em seu bucket do Amazon S3 a uma conta de terceiros que possa analisar os arquivos de log para você.

Para conceder acesso somente leitura aos arquivos de log em seu bucket do Amazon S3
  1. Crie um perfil do IAM para cada conta com a qual você deseja compartilhar arquivos de log. Você precisa ser administrador para conceder permissão.

    Ao criar o perfil, faça o seguinte:

    • Escolha a opção Outra Conta da AWS.

    • Insira o ID de doze dígitos da conta que receberá o acesso.

    • Marque a caixa Require MFA se você quiser que o usuário forneça autenticação multifator antes de assumir a função.

    • Escolha a política AmazonS3ReadOnlyAccess.

      nota

      Por padrão, a política AmazonS3ReadOnlyAccess concede direitos de recuperação e de lista a todos os buckets do Amazon S3 da sua conta.

    Para ver detalhes sobre o gerenciamento de permissões de perfis do IAM, consulte Perfis do IAM no Manual do usuário do IAM.

  2. Crie uma política de acesso que conceda acesso somente leitura à conta com a qual você deseja compartilhar arquivos de log.

  3. Instrua cada conta a presumir um perfil para recuperar os arquivos de log.

Para conceder acesso somente leitura aos arquivos de log com uma conta de terceiros
  1. Crie um perfil do IAM para a conta de terceiro com a qual você deseja compartilhar arquivos de log. Você precisa ser administrador para conceder permissão.

    Ao criar o perfil, faça o seguinte:

    • Escolha a opção Outra Conta da AWS.

    • Insira o ID de doze dígitos da conta que receberá o acesso.

    • Insira um ID externo que proporcione mais controle sobre quem pode assumir a função. Para obter mais informações, consulte Como usar um ID externo ao conceder acesso aos recursos da AWS para terceiros no Manual do usuário do IAM.

    • Escolha a política AmazonS3ReadOnlyAccess.

      nota

      Por padrão, a política AmazonS3ReadOnlyAccess concede direitos de recuperação e de lista a todos os buckets do Amazon S3 da sua conta.

  2. Crie uma política de acesso que conceda acesso somente leitura à conta de terceiro com a qual você deseja compartilhar arquivos de log.

  3. Instrua a conta de terceiro a presumir um perfil para recuperar os arquivos de log.

As seções a seguir oferecem mais detalhes sobre essas etapas.

Criar uma política de acesso padrão para conceder acesso às suas contas

Como proprietário do bucket do Amazon S3, você tem controle total sobre o bucket do Amazon S3 no qual o CloudTrail grava arquivos de log para as outras contas. Você deseja compartilhar os arquivos de log de cada unidade de negócios com a unidade de negócios que os criou. Entretanto, você não quer que uma unidade consiga ler os arquivos de log das outras.

Por exemplo, para compartilhar os arquivos de log da conta B com a conta B, mas não com a conta C, será necessário criar um novo perfil do IAM na sua conta que especifique que a conta B é uma conta confiável. Essa política de confiança de perfil especifica que a conta B é confiável para presumir o perfil criado pela sua conta e deve ter a aparência mostrada no exemplo a seguir. A política de confiança é criada automaticamente quando você cria a função usando o console. Se você usar o SDK para criar a função, será necessário fornecer a política de confiança como um parâmetro para a API CreateRole. Se você usar a CLI para criar a função, será necessário especificar a política de confiança no comando create-role da CLI.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-B-id:root" }, "Action": "sts:AssumeRole" } ] }

Você também precisará criar uma política de acesso padrão para especificar que a conta B só pode ler do local em que B criou seus arquivos de log. A política de acesso padrão terá a aparência a seguir. Observe que o ARN do Resource inclui o ID da conta B de 12 dígitos e o prefixo especificado (se for o caso) ao ativar o CloudTrail para a conta B durante o processo de agregação. Para obter mais informações sobre como especificar um prefixo, consulte Criar trilhas em contas adicionais.

Importante

Você precisa garantir que o prefixo na política de acesso seja exatamente o mesmo que o prefixo especificado quando você ativou o CloudTrail para a conta B. Se não for, será necessário editar a política de acesso do perfil do IAM na sua conta para incorporar o prefixo real para a conta B. Se o prefixo na política de acesso do perfil não for exatamente o mesmo que o prefixo especificado quando você ativou na conta B, esta conta não poderá acessar os seus arquivos de log.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/account-B-id/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Use o processo anterior para contas adicionais.

Após você criar perfis para cada conta e especificar as políticas apropriadas de acesso e confiança e depois que um usuário do IAM de cada conta tiver recebido o acesso concedido pelo administrador dessa conta, um usuário do IAM das Contas B ou C poderá assumir o perfil de maneira programática.

Para obter mais informações, consulte Assumir uma função.

Criar uma política de acesso padrão para conceder acesso a um terceiro

Você precisa criar um perfil do IAM diferente para uma conta de terceiros. Ao criar o perfil, a AWS cria automaticamente a relação de confiança, que especifica que a conta do terceiro será confiável para assumir o perfil. A política de acesso padrão do perfil especifica quais ações a conta pode realizar. Para obter mais informações sobre a criação de perfis, consulte Criar um perfil do IAM.

Por exemplo, a relação de confiança criada pela AWS especifica que a conta de terceiro (a conta Z neste exemplo) é confiável para presumir o perfil que você criou. Veja abaixo um exemplo de política de confiança:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::account-Z-id:root"}, "Action": "sts:AssumeRole" }] }

Se você tiver especificado um ID externo quando criou o perfil para a conta de terceiro, sua política de acesso padrão contém um elemento Condition adicional que testa o ID exclusivo atribuído por essa conta. O teste é realizado quando o perfil é presumido. O exemplo a seguir de política de acesso padrão tem um elemento Condition.

Para obter mais informações, consulte Como usar um ID externo ao conceder acesso aos seus recursos da AWS a terceiros no Guia do usuário do IAM.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::account-Z-id:root"}, "Action": "sts:AssumeRole", "Condition": {"StringEquals": {"sts:ExternalId": "external-ID-issued-by-account-Z"}} }] }

Você também precisa criar uma política de acesso para a conta para especificar que a conta de terceiro pode ler todos os logs do bucket do Amazon S3. A política de acesso padrão deve ser parecida com o exemplo a seguir. O caractere curinga (*) no final do valor Resource indica que a conta de terceiro pode acessar qualquer arquivo de log no bucket do S3 ao qual ela recebeu acesso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Depois que você criar um perfil para a conta de terceiro e especificar a política de acesso e a relação de confiança apropriada, um usuário do IAM na conta de terceiro precisará presumir o perfil de modo programático para poder ler os arquivos de log do bucket. Para obter mais informações, consulte Assumir uma função.

Assumir uma função

É necessário designar um usuário do IAM separado para assumir cada perfil criado em cada conta. Em seguida, você deve garantir que cada usuário do IAM tenha as permissões apropriadas.

Usuários e perfis do IAM

Depois de criar as políticas e os perfis necessários, você precisará designar um usuário do IAM em cada uma das contas com as quais deseja compartilhar arquivos. Cada usuário do IAM presume de maneira programática o perfil apropriado para acessar os arquivos de log. Quando um usuário presume um perfil, a AWS retorna credenciais de segurança temporárias para esse usuário. Em seguida, o usuário pode fazer solicitações para listar, recuperar, copiar ou excluir arquivos de log, dependendo das permissões concedidas pela política de acesso associada ao perfil.

Para obter mais informações sobre como trabalhar com identidades do IAM, consulte Identidades do IAM (usuários, grupos de usuários e perfis).

A principal diferença na política de acesso que você cria para cada perfil do IAM em cada cenário.

Criar políticas de permissões para usuários do IAM

Para realizar as ações permitidas por um perfil, o usuário do IAM deve ter permissão para chamar a API AssumeRole do AWS STS. Você deve editar a política para cada usuário a fim de conceder a eles as permissões apropriadas. Desse modo, você define um elemento Recurso na política, que é anexado ao usuário do IAM. O exemplo a seguir mostra uma política de um usuário do IAM em outra conta que permite que o usuário presuma um perfil chamado Test, criado anteriormente pela conta A.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::account-A-id:role/Test" } ] }
Para editar uma política gerenciada pelo cliente (console)
  1. Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, escolha Políticas.

  3. Na lista de políticas, escolha o nome da política a editar. Você pode usar a caixa de pesquisa para filtrar a lista de políticas.

  4. Escolha a guia Permissões e depois escolha Editar.

  5. Execute um destes procedimentos:

    • Escolha a opção Visual para alterar a política sem necessidade de compreender a sintaxe JSON. Você pode fazer alterações nos serviços, ações, recursos ou condições opcionais para cada bloco de permissões na política. Também é possível importar uma política e acrescentar permissões adicionais no final da sua política. Quando terminar de fazer alterações, escolha Avançar para continuar.

    • Escolha a opção JSON para modificar a política digitando ou colando texto na caixa de texto JSON. Também é possível importar uma política e acrescentar permissões adicionais no final da sua política. Resolva os avisos de segurança, erros ou avisos gerais gerados durante a validação de política e depois escolha Avançar.

      nota

      Você pode alternar entre as opções de editor Visual e JSON a qualquer momento. Porém, se você fizer alterações ou escolher Próximo no editor Visual, o IAM poderá reestruturar a política a fim de otimizá-la para o editor visual. Para obter mais informações, consulte Restruturação de política no Guia do usuário do IAM.

  6. Na página Revisar e salvar, revise Permissões definidas nessa política e escolha Salvar alterações para salvar seu trabalho.

  7. Se a política gerenciada já tiver o máximo de cinco versões e você escolher Salvar alterações, uma caixa de diálogo será exibida. Para salvar a nova versão, a versão não padrão mais antiga da política será removida e substituída por essa nova versão. Opcionalmente, você pode definir a nova versão como a versão padrão da política.

    Escolha Salvar alterações para salvar a nova versão da política.

Chamar AssumeRole

Um usuário pode presumir um perfil ao criar uma aplicação que chama a API AssumeRole do AWS STS e transmite o nome da sessão do perfil, o Número de recurso da Amazon (ARN) do perfil a ser presumido e um ID externo opcional. O nome da sessão do perfil é definido pela conta quando ela cria o perfil a ser presumido. O ID externo, se houver, é definido pela conta de terceiro e transmitido à conta de propriedade para inclusão durante a criação do perfil. Para obter mais informações, consulte Como usar um ID externo ao conceder acesso aos recursos da AWS para terceiros no Manual do usuário do IAM. Você pode recuperar o Nome de região da Amazon (ARN) da Conta A ao abrir o console do IAM.

Para encontrar o valor do Nome de região da Amazon (ARN) na Conta A com o console do IAM
  1. Escolha Roles (Funções)

  2. Escolha a função que você deseja examinar.

  3. Procure por Role ARN (ARN da função) na seção Summary (Resumo).

A API AssumeRole retorna credenciais temporárias para usar para acessar recursos na conta própria. Neste exemplo, os recursos que você deseja acessar são o bucket do Amazon S3 e os arquivos de log contidos no bucket. As credenciais temporárias têm as permissões que você definiu na política de acesso padrão da função.

O exemplo de Python a seguir (usando AWS SDK for Python (Boto)) mostra como chamar AssumeRole e como usar as credenciais de segurança temporárias retornadas para listar todos os buckets do Amazon S3 controlados pela Conta A.

def list_buckets_from_assumed_role(user_key, assume_role_arn, session_name): """ Assumes a role that grants permission to list the Amazon S3 buckets in the account. Uses the temporary credentials from the role to list the buckets that are owned by the assumed role's account. :param user_key: The access key of a user that has permission to assume the role. :param assume_role_arn: The Amazon Resource Name (ARN) of the role that grants access to list the other account's buckets. :param session_name: The name of the STS session. """ sts_client = boto3.client( "sts", aws_access_key_id=user_key.id, aws_secret_access_key=user_key.secret ) try: response = sts_client.assume_role( RoleArn=assume_role_arn, RoleSessionName=session_name ) temp_credentials = response["Credentials"] print(f"Assumed role {assume_role_arn} and got temporary credentials.") except ClientError as error: print( f"Couldn't assume role {assume_role_arn}. Here's why: " f"{error.response['Error']['Message']}" ) raise # Create an S3 resource that can access the account with the temporary credentials. s3_resource = boto3.resource( "s3", aws_access_key_id=temp_credentials["AccessKeyId"], aws_secret_access_key=temp_credentials["SecretAccessKey"], aws_session_token=temp_credentials["SessionToken"], ) print(f"Listing buckets for the assumed role's account:") try: for bucket in s3_resource.buckets.all(): print(bucket.name) except ClientError as error: print( f"Couldn't list buckets for the account. Here's why: " f"{error.response['Error']['Message']}" ) raise

Interromper o compartilhamento de arquivos de log do CloudTrail entre contas da AWS

Para interromper o compartilhamento de arquivos de log com outra Conta da AWS, basta excluir o perfil que você criou para essa conta. Para obter mais informações sobre como excluir um perfil, consulte Excluir perfis ou perfis de instância.