

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

# Interaja com AWS os serviços
<a name="interact-with-aws-services"></a>

Os dispositivos principais do Greengrass usam certificados X.509 para se conectar ao AWS IoT Core usando protocolos de autenticação TLS mútuos. Esses certificados permitem que os dispositivos interajam AWS IoT sem AWS credenciais, que normalmente incluem um ID de chave de acesso e em uma chave de acesso secreta. Outros produtos da AWS exigem credenciais da AWS em vez de certificados X.509 para chamar operações de API nos endpoints do serviço. O AWS IoT Core tem um provedor de credenciais que permite que os dispositivos usem seu certificado X.509 para autenticar solicitações da AWS. O provedor de credenciais do AWS IoT autentica os dispositivos usando um certificado X.509 e emite credenciais da AWS na forma de um token de segurança temporário e de privilégio limitado. Os dispositivos podem usar esse token para assinar e autenticar qualquer AWS solicitação da. Isso elimina a necessidade de armazenar AWS credenciais nos dispositivos principais do Greengrass. Para mais informações, consulte [Autorizar de chamadas diretas para serviços da AWS](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html) no *Guia do desenvolvedor do AWS IoT Core*.

Para obter credenciais do AWS IoT Greengrass, os dispositivos principais usam um alias de função que aponta para uma AWS IoT função do IAM. Essa função do IAM é chamada de *função de troca de tokens*. Você cria o alias da função e a função de troca de tokens ao instalar o software AWS IoT Greengrass Core. Para especificar o alias de função que um dispositivo principal usa, configure o parâmetro `iotRoleAlias` do [Greengrass nucleus](greengrass-nucleus-component.md).

O provedor de AWS IoT credenciais assume a função de troca de tokens em seu nome para fornecer AWS credenciais aos dispositivos principais. Você pode anexar políticas apropriadas do IAM a essa função para permitir que seus dispositivos principais acessem seus AWS recursos, como artefatos de componentes em buckets do S3. Para mais informações sobre como configurar o perfil de troca de tokens, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

Os principais dispositivos do Greengrass armazenam AWS as credenciais na memória e, por padrão, as credenciais expiram após uma hora. Se o software AWS IoT Greengrass principal for reiniciado, ele deverá buscar as credenciais novamente. Você pode usar a operação [UpdateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateRoleAlias.html) para configurar a duração em que as credenciais são válidas.

O AWS IoT Greengrass fornece um componente público, o componente do serviço de troca de tokens, que você pode definir como uma dependência em seu componente personalizado para interagir com os produtos da AWS. O serviço de troca de tokens fornece ao seu componente uma variável de ambiente,`AWS_CONTAINER_CREDENTIALS_FULL_URI`, que define o URI para um servidor local que fornece AWS credenciais. Quando você cria um cliente AWS SDK, o cliente verifica essa variável de ambiente e se conecta ao servidor local para recuperar AWS as credenciais e as usa para assinar solicitações de API. Isso permite que você use AWS SDKs e outras ferramentas para chamar AWS serviços em seus componentes. Para obter mais informações, consulte [Serviço de troca de token](token-exchange-service-component.md).

**Importante**  <a name="token-exchange-service-aws-sdk-requirement"></a>
Em 13 de julho de 2016, o suporte para adquirir credenciais da AWS dessa forma foi incluído nos AWS SDKs. Seu componente deve usar uma versão do AWS SDK criada a partir dessa data. Para obter mais informações, consulte [Como usar um AWS SDK com suporte](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#task-iam-roles-minimum-sdk) no *Guia do desenvolvedor do Amazon Elastic Container Service*.

Para adquirir credenciais da AWS em seu componente personalizado, defina `aws.greengrass.TokenExchangeService` como uma dependência na fórmula do componente. O exemplo de fórmula a seguir define um componente que instala o [boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) e executa um script Python que usa credenciais da AWS do serviço de troca de tokens para listar buckets do Amazon S3.

**nota**  
Para executar esse componente de exemplo, seu dispositivo deve ter a `s3:ListAllMyBuckets` permissão. Para obter mais informações, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.ListS3Buckets",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "A component that uses the token exchange service to list S3 buckets.",
  "ComponentPublisher": "Amazon",
  "ComponentDependencies": {
    "aws.greengrass.TokenExchangeService": {
      "VersionRequirement": "^2.0.0",
      "DependencyType": "HARD"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "install": "pip3 install --user boto3",
        "Run": "python3 -u {artifacts:path}/list_s3_buckets.py"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "install": "pip3 install --user boto3",
        "Run": "py -3 -u {artifacts:path}/list_s3_buckets.py"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.ListS3Buckets
ComponentVersion: '1.0.0'
ComponentDescription: A component that uses the token exchange service to list S3 buckets.
ComponentPublisher: Amazon
ComponentDependencies:
  aws.greengrass.TokenExchangeService:
    VersionRequirement: '^2.0.0'
    DependencyType: HARD
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      install:
        pip3 install --user boto3
      Run: |-
        python3 -u {artifacts:path}/list_s3_buckets.py
  - Platform:
      os: windows
    Lifecycle:
      install:
        pip3 install --user boto3
      Run: |-
        py -3 -u {artifacts:path}/list_s3_buckets.py
```

------

Esse componente de exemplo executa o seguinte script Python, `list_s3_buckets.py` que lista os buckets do Amazon S3.

```
import boto3
import os

try:
    print("Creating boto3 S3 client...")
    s3 = boto3.client('s3')
    print("Successfully created boto3 S3 client")
except Exception as e:
    print("Failed to create boto3 s3 client. Error: " + str(e))
    exit(1)

try:
    print("Listing S3 buckets...")
    response = s3.list_buckets()
    for bucket in response['Buckets']:
        print(f'\t{bucket["Name"]}')
    print("Successfully listed S3 buckets")
except Exception as e:
    print("Failed to list S3 buckets. Error: " + str(e))
    exit(1)
```