Compartilhamento CloudTrail de arquivos de log entre AWS contas - 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á.

Compartilhamento CloudTrail de arquivos de log entre AWS contas

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

  • Obrigada pelo proprietário do bucket — A propriedade de objetos do S3 é uma configuração no nível do bucket do Amazon S3 que você pode usar para controlar a propriedade dos objetos enviados para o seu bucket e para desativar ou ativar listas de controle de acesso (). ACLs Por padrão, a propriedade do objeto é definida como a configuração imposta pelo proprietário do bucket e todas ACLs estão desativadas. Quando ACLs estão desativados, o proprietário do bucket é dono de todos os objetos no bucket e gerencia o acesso aos dados exclusivamente 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 CloudTrail log entre vários Contas da AWS assumindo uma função 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 uma IAM função 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 MFA caixa Exigir se quiser que o usuário forneça autenticação multifatorial antes de assumir a função.

    • Escolha a política do AmazonS3 ReadOnlyAccess.

      nota

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

    Para obter detalhes sobre o gerenciamento de permissões para IAM funções, consulte as IAMfunções no Guia IAM do usuário.

  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 uma IAM função para a conta de terceiros 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 uma ID externa ao conceder acesso aos seus AWS recursos a terceiros no Guia do IAM usuário.

    • Escolha a política do AmazonS3 ReadOnlyAccess.

      nota

      Por padrão, a ReadOnlyAccess política do AmazonS3 concede direitos de recuperação e lista a todos os buckets do Amazon S3 em 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 CloudTrail qual 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, você deve criar uma nova IAM função 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, deverá fornecer a política de confiança como um parâmetro para CreateRole API o. Se você usar o CLI para criar a função, deverá especificar a política de confiança no create-role CLI comando.

{ "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 Recurso ARN inclui o ID da conta de doze dígitos para a conta B e o prefixo que você especificou, se houver, quando ativou a conta B durante o processo de agregação. CloudTrail Para obter mais informações sobre como especificar um prefixo, consulte Criar trilhas em contas adicionais.

Importante

Você deve garantir que o prefixo na política de acesso seja exatamente o mesmo que você especificou quando ativou a conta B. Caso contrário, você deverá editar a política de acesso à IAM função na sua conta para incorporar o prefixo real da conta B. Se o prefixo na política de acesso à função não for exatamente o mesmo que você especificou quando ativou a conta B, a conta B não poderá acessar seus arquivos de log. CloudTrail CloudTrail

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

Use o processo anterior para contas adicionais.

Depois de criar funções para cada conta e especificar as políticas de confiança e acesso apropriadas, e depois que um IAM usuário em cada conta tiver recebido acesso do administrador dessa conta, um IAM usuário nas contas B ou C poderá assumir a função de forma 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ê deve criar uma IAM função separada 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 funções, consulte Criar uma IAM função.

Por exemplo, a relação de confiança criada por AWS especifica que a conta de terceiros (conta Z neste exemplo) é confiável para assumir a função 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 uma ID externa ao conceder acesso aos seus AWS recursos a terceiros no Guia do IAM usuário.

{ "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:::amzn-s3-demo-bucket/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" } ] }

Depois de criar uma função para a conta de terceiros e especificar a relação de confiança e a política de acesso adequadas, um IAM usuário na conta de terceiros deve assumir a função de forma programática para poder ler arquivos de log do bucket. Para obter mais informações, consulte Assumir uma função.

Assumir uma função

Você deve designar um IAM usuário separado para assumir cada função criada em cada conta. Em seguida, você deve garantir que cada IAM usuário tenha as permissões apropriadas.

IAMusuários e funções

Depois de criar as funções e políticas necessárias, você deve designar um IAM usuário em cada conta com a qual deseja compartilhar arquivos. Cada IAM usuário assume programaticamente a função apropriada 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 IAM identidades, consulte IAMIdentidades (usuários, grupos de usuários e funções).

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

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

Para realizar as ações permitidas por uma função, o IAM usuário deve ter permissão para chamar AWS STS AssumeRoleAPIo. Você deve editar a política para cada usuário a fim de conceder a eles as permissões apropriadas. Para fazer isso, você define um elemento de recurso na política que você anexa ao IAM usuário. O exemplo a seguir mostra uma política para um IAM usuário em outra conta que permite que esse usuário assuma uma função chamada Test criada 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 IAM console em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, escolha Policies.

  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 sua política sem entender a JSON sintaxe. 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 JSONopção de modificar sua política digitando ou colando texto na caixa de JSON texto. 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 Próximo.

      nota

      Você pode alternar entre as opções Visual e JSONEditor a qualquer momento. No entanto, se você fizer alterações ou escolher Avançar no editor visual, IAM poderá reestruturar sua política para otimizá-la para o editor visual. Para obter mais informações, consulte Reestruturação de políticas no Guia do IAM usuário.

  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.

Chamando AssumeRole

Um usuário pode assumir uma função criando um aplicativo que chama AWS STS AssumeRoleAPIe transmite o nome da sessão da função, o Amazon Resource Number (ARN) da função a ser assumida e uma ID externa 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 uma ID externa ao conceder acesso aos seus AWS recursos a terceiros no Guia do IAM usuário. Você pode recuperá-los ARN da Conta A abrindo o IAM console.

Para encontrar o ARN valor na conta A com o IAM console
  1. Escolha Roles (Funções)

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

  3. Procure a função ARN na seção Resumo.

O AssumeRole API 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

Pare de compartilhar arquivos de CloudTrail log entre AWS contas

Para parar de compartilhar arquivos de log com outra pessoa Conta da AWS, exclua a função que você criou para essa conta. Para obter mais informações sobre como excluir um perfil, consulte Excluir perfis ou perfis de instância.