Como usar um ID externo ao conceder acesso aos seus recursos da AWS a terceiros - AWS Identity and Access Management

Como usar um ID externo ao conceder acesso aos seus recursos da AWS a terceiros

Às vezes, é necessário oferecer acesso a terceiros para os recursos da AWS (delegar acesso). Um aspecto importante desse cenário é o ID externo, informação opcional que você usa em uma política de confiança da função do IAM para designar quem pode assumir a função.

Importante

AWSA não trata o ID externo como um segredo. Depois de criar um segredo, como um par de chaves de acesso ou uma senha na AWS, você não poderá visualizá-las novamente. O ID externo de uma função pode ser visto por qualquer pessoa com permissão para visualizar a função.

Em um ambiente de vários locatários onde você oferece suporte a vários clientes com AWS contas diferentes, recomendamos usar um ID externo por AWS conta. Esse ID deve ser uma string aleatória gerada por um terceiro.

Para exigir que o terceiro forneça um ID externo ao assumir uma função, atualize a política de confiança da função com o ID externo de sua escolha.

Para fornecer um ID externo quando você assumir uma função, use a AWS CLI ou a API da AWS para assumir essa função. Para obter mais informações, consulte a operação da API STS AssumeRole ou a operação da CLI assume-role STS.

Por exemplo, suponha que você decida contratar uma empresa terceirizada chamada Example Corp para monitorar sua conta da AWS e ajudar a otimizar os custos. Para rastrear seus gastos diários, a Example Corp precisa de acesso aos seus recursos da AWS. A Example Corp também monitora muitas outras contas da AWS para outros clientes.

Não dê à Exemplo Corp acesso a um usuário do IAM e suas credenciais de longo prazo na sua conta da AWS. Em vez disso, use uma função do IAM e suas credenciais de segurança temporárias. Uma função do IAM fornece um mecanismo que permite o acesso de terceiros aos recursos da AWS sem a necessidade de compartilhar credenciais de longo prazo (por exemplo, uma chave de acesso do usuário do IAM).

Você pode usar uma função do IAM para estabelecer uma relação de confiança entre sua conta da AWS e a conta da Exemplo Corp. Depois que esse relacionamento for estabelecido, um membro da conta Exemplo Corp pode chamar a API AssumeRole do AWS Security Token Service para obter credenciais de segurança temporárias. Os membros da Example Corp podem usar as credenciais para acessar recursos da AWS na sua conta.

nota

Para obter mais informações sobre AssumeRole e outras APIs da AWS que você pode chamar para obter credenciais de segurança temporárias, consulte Solicitação de credenciais de segurança temporárias.

Veja aqui um detalhamento desse cenário:

  1. Contrate a Example Corp, para que eles criem um identificador de clientes exclusivo para você. Eles fornecerão o ID de cliente exclusivo e o número da conta da AWS deles. Essas informações são necessárias para criar uma função do IAM na próxima etapa.

    nota

    A Example Corp pode usar qualquer valor de string que desejar para o ExternalId, desde que seja exclusivo para cada cliente. Pode ser o número da conta de um cliente ou até mesmo uma string aleatória de caracteres, desde que dois clientes não tenham o mesmo valor. Isso não deve ser um "segredo". A Example Corp deve fornecer o valor do ExternalId para cada cliente. O essencial é que ele deve ser gerado pela Example Corp e não por seus clientes.

  2. Faça login na AWS e crie uma função do IAM que dê à Exemplo Corp acesso aos seus recursos. Como qualquer função do IAM, a função tem duas políticas, uma política de permissão e uma política de confiança. A política de confiança da função especifica quem pode assumir a função. Em nosso cenário de exemplo, a política especifica o número de conta da AWS da Example Corp como Principal. Isso permite que as identidades dessa conta assumam a função. Além disso, você adiciona um elemento Condition à política de confiança. Esse elemento Condition testa a chave de contexto ExternalId para garantir que ela corresponda ao ID do cliente exclusivo da Example Corp. Por exemplo:

    "Principal": {"AWS": "Example Corp's AWS Account ID"}, "Condition": {"StringEquals": {"sts:ExternalId": "Unique ID Assigned by Example Corp"}}
  3. A política de permissões da função especifica o que a função permite que alguém faça. Por exemplo, você pode especificar que a função permita que alguém gerencie apenas seus recursos do Amazon EC2 e Amazon RDS, mas não seus usuários ou grupos do IAM. Em nosso cenário de exemplo, use a política de permissões para dar acesso somente leitura à Example Corp a todos os recursos na sua conta.

  4. Depois de criar a função, forneça o nome de recurso da Amazon (ARN) da função à Example Corp.

  5. Quando a Exemplo Corp precisar acessar seus recursos da AWS, alguém da empresa chamará a API sts:AssumeRole da AWS. A chamada inclui o ARN da função a ser assumida e o parâmetro ExternalId que corresponde ao ID do cliente.

Se a solicitação vier de alguém que estiver usando a conta da AWS da Example Corp, e se o ARN da função e o ID externo estiverem corretos, a solicitação será bem-sucedida. Nesse caso, ela fornecerá credenciais de segurança temporárias que a Example Corp poderá usar para acessar os recursos da AWS permitidos pela sua função.

Em outras palavras, quando uma política de função incluir um ID externo, qualquer pessoa que desejar assumir a função deverá ser especificada como um principal na função e deverá incluir o ID externo correto.

Por que usar um ID externo?

Em termos abstratos, o ID externo permite que o usuário que está assumindo a função assegure as circunstâncias nas quais elas operam. Também oferece uma forma para o proprietário da conta permitir que a função seja assumida apenas em determinadas circunstâncias. A função principal do ID externo é abordar e impedir o O problema confused deputy.

Quando devo usar um ID externo?

Use um ID externo nas seguintes situações:

  • Você é proprietário de uma conta da AWS e configurou uma função para um terceiro que acessa outras contas da AWS além da sua. Você deve solicitar um ID externo ao terceiro que ele inclui quando assume a sua função. Depois, você verifica o ID externo na política de confiança da sua função. Isso garante que o terceiro externo possa assumir sua função somente quando estiver agindo em seu nome.

  • Você está na posição de assumir funções em nome de clientes diferentes, como a Example Corp em nosso cenário anterior. Você deve atribuir um ID externo exclusivo para cada cliente e instruí-los a adicionar o ID externo à política de confiança de sua função. Certifique-se de sempre incluir o ID externo correto em suas solicitações para assumir funções.

    Provavelmente, você já tem um identificador exclusivo para cada um de seus clientes e esse ID exclusivo será suficiente para ser usado como ID externo. O ID externo não é um valor especial que você precisa criar, explicitamente, ou rastrear, separadamente, apenas para essa finalidade.

    Sempre especifique o ID externo em suas chamadas de API AssumeRole. Quando um cliente oferecer a você um ARN da função, teste se você poderá assumir a função com e sem o ID externo correto. Se você assumir a função sem o ID externo correto, não armazene o ARN da função do cliente em seu sistema. Aguarde até que o cliente tenha atualizado a política de confiança de função para exigir o ID externo correto. Dessa forma, você ajudará seus clientes a agir da forma correta, mantendo-os protegidos contra o problema confused deputy.