Como posso encadear chamadas da API AssumeRole do AWS IAM?

2

Há várias contas da AWS que eu não controle. Solicitei que os proprietários da conta implantassem uma função do IAM, TrustingSecurityAuditor , em suas contas, o que concede o direito de assumir a função TrustingSecurityAuditor para uma função diferente do IAM em minha conta da AWS, TrustedSecurityAuditor . ( Documentos para delegar acesso )

Isso funciona muito bem e permite que eu e minha equipe de segurança forneçam serviços de auditoria de segurança para esses outros titulares de conta na empresa. Para fazer isso, criamos uma instância ec2 com a função TrustedSecurityAuditor IAM e nosso código solicita credenciais temporárias de cada uma das contas usando STS fazendo um AssumeRole para o papel TrustingSecurityAuditor de cada conta.

Agora, quero criar um serviço adicional em execução em uma instância ec2 diferente na minha conta, que pode não apenas assumir o papel dessas contas "Confiantes", mas também fazer outras coisas em minha conta, como acessar o DynamoDB da minha conta. informação.

Se eu aplicar a função TrustedSecurityAuditor à instância, não tenho as permissões locais de que preciso (como o acesso ao DynamoDB).

Não posso aplicar várias funções do IAM a uma instância (a menos que esteja enganado).

Quando eu tento criar uma nova função, MyNewService , com acesso ao DynamoDB que pode AssumeRole à função TrustedSecurityAuditor na esperança de usar essas credenciais STS para fazer uma segunda AssumeRole com a TrustingSecurityAuditor papel na conta externa eu encontro este problema:

Eu sou capaz de AssumeRole da função MyNewService para a função TrustedSecurityAuditor , mas quando eu faço a segunda AssumeRole para a função TrustingSecurityAuditor , a AWS retorna o erro

User: arn:aws:sts::123456789012:assumed-role/TrustedSecurityAuditor/MyNewService is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/TrustingSecurityAuditor

A razão para isso é que o "usuário" que está tentando o AssumeRole é

arn:aws:sts::123456789012:assumed-role/TrustedSecurityAuditor/MyNewService

não

arn:aws:sts::123456789012:assumed-role/TrustedSecurityAuditor

O que isso implica é que você não pode encadear seu AssumeRole s porque o ARN de origem de uma chamada, quando ela vem de uma função assumida, não é apenas a função assumida, mas a função assumida com o rolename do assumidor preso no final.

Uma solução que estou relutante em usar é que eu poderia adicionar as permissões necessárias, por exemplo, a capacidade de usar o DynamoDB para a função TrustedSecurityAuditor . A razão pela qual estou relutante é que só preciso dessa permissão na instância MyNewService , não na minha instância original, que faz apenas auditoria de segurança e não precisa acessar o DynamoDB.

Alguma sugestão de como realizar o que estou procurando?

    
por gene_wood 02.06.2015 / 23:16

1 resposta

0

Cenário:

  • AccountA - sua conta
  • AccountB - conta de cliente
  • PapelA - A função da sua conta para acessar o DynamoDB, chamar o STS, etc.
  • Função B - Função TrustedSecurityAuditor em AccountB

Você precisará gerenciar dois conjuntos de credenciais. Credenciais A que são criadas a partir da função do IAM atribuída à instância do EC2. Use essas credenciais para acessar seus recursos, como o DynamoDB. Credenciais B que são criadas via STS do RoleB. Use essas credenciais para acessar os recursos de seus clientes.

Você precisará usar as credenciais de forma independente com base no que deseja fazer. Por exemplo, se você estiver usando Python, você criaria dois clientes boto3 com credenciais diferentes.

    
por 13.12.2017 / 23:54