Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Como configuro uma função do Lambda para assumir um perfil do IAM em outra conta da AWS?

4 minuto de leitura
0

Quero que minha função do AWS Lambda assuma um perfil do AWS Identity and Access Management (IAM) em outra conta da AWS.

Breve descrição

Para que a função do Lambda assuma um perfil do IAM em outra conta, conclua as seguintes etapas:

  1. Configure o perfil de execução da sua função do Lambda para permitir que ela assuma um perfil do IAM em outra conta da AWS.
  2. Modifique a política de confiança do seu perfil do IAM entre contas para permitir que a função do Lambda assuma o perfil.
  3. Adicione a chamada de API AssumeRole do AWS Security Token Service (AWS STS) ao código da sua função do Lambda.

Observação: uma função do Lambda pode assumir um perfil do IAM em outra conta para acessar recursos, como um bucket do Amazon Simple Storage Service (Amazon S3). A função Lambda também pode assumir o perfil para realizar tarefas, como iniciar e interromper instâncias.

Resolução

Observação: o procedimento de exemplo a seguir faz referência a dois tipos de contas:

  • Uma conta local que hospeda a função do Lambda, 111111111111
  • Uma conta cruzada que inclui o perfil do IAM que a função do Lambda assume, 222222222222

Pré-requisito

Crie o perfil do IAM que você deseja usar na conta cruzada.

Configure o perfil de execução da função do Lambda para permitir que ela assuma um perfil do IAM em outra conta

Adicione a seguinte declaração de política ao perfil do IAM da sua função Lambda na conta 111111111111:

Observação: substitua 222222222222 pelo ID da conta do perfil entre contas que sua função assume e role-on-source-account pelo nome do perfil assumido.

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::222222222222:role/role-on-source-account"
    }
}

Modifique a política de confiança do perfil do IAM entre contas para permitir que sua função do Lambda assuma o perfil

Adicione a seguinte declaração de política à política de confiança do seu perfil do IAM entre contas na conta 222222222222:

Observação: substitua 111111111111 pelo ID da conta em que sua função do Lambda está e my-lambda-execution-role pelo nome do perfil do IAM da sua função.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:role/my-lambda-execution-role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Adicione a chamada de API AssumeRole do AWS Security Token Service AWS STS ao código da sua função do Lambda

Para adicionar a chamada de API AssumeRole do AWS STS ao código da sua função, conclua as etapas em Como configurar opções da função do Lambda.

Observação: a chamada da API AssumeRole do AWS STS retorna credenciais que você pode usar para criar um cliente de serviço. Ao usar esse cliente de serviço, sua função do Lambda tem as permissões concedidas pelo perfil assumido. Para obter mais informações, consulte assume_role no site do AWS Boto 3.

Exemplo de código de função do Python que inclui a chamada de API AssumeRole do AWS STS

Observação: substitua 222222222222 pelo ID da conta da AWS do perfil entre contas que sua função assume e role-on-source-account pelo nome do perfil assumido.

import boto3
def lambda_handler(event, context):

    sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::222222222222:role/role-on-source-account",
        RoleSessionName="cross_acct_lambda"
    )

    ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
    SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
    SESSION_TOKEN = acct_b['Credentials']['SessionToken']

    # create service client using the assumed role credentials, e.g. S3
    client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )

    return "Hello from Lambda"

Informações relacionadas

Como usar políticas baseadas em recursos para o AWS Lambda

Permissões de acesso a recursos do Lambda

Como mudar para um perfil do IAM (API da AWS)

Como solucionar problemas com perfis do IAM

Como criar funções do Lambda com Python

AWS OFICIAL
AWS OFICIALAtualizada há um ano