# AWS verbinden

# AWS verbinden

Costfluent liest AWS-Kosten über eine schreibgeschützte IAM-Rolle in Ihrem Konto. Die Rolle vertraut
genau einem Costfluent-Principal, und nur mit der externen ID, die Costfluent Ihrer Organisation
ausstellt. Es werden keine Zugriffsschlüssel ausgetauscht.

Die Kosten stammen aus einem AWS-Datenexport im Format **FOCUS 1.2**, der täglich in einen privaten
S3-Bucket in Ihrem eigenen Konto geliefert wird. Er enthält amortisierte Kosten, Listenkosten,
Kostenkategorien, Regionen, Ressourcen-IDs und Tags. Bis zur ersten Lieferung, und für jeden Monat,
den der Export nicht abdeckt, liest Costfluent stattdessen den Cost Explorer.

## Management- und Mitgliedskonten

Verbinden Sie das **Managementkonto** Ihrer AWS-Organisation einmal. Sein Export deckt alle
Mitgliedskonten ab, und Costfluent listet die Mitglieder an der Verbindung auf. Ein zusätzlich
verbundenes Mitgliedskonto würde seine Kosten doppelt zählen, daher lehnt Costfluent eine
Verbindung ab, deren Konten bereits eine andere AWS-Verbindung abdeckt.

Ein einzeln verbundenes **Mitgliedskonto** erhält nur die Rolle und wird aus dem Cost Explorer
gelesen. Ein Einzelkonto wird wie ein Managementkonto behandelt.

## Über die AWS-Konsole verbinden

Das ist der Standardweg. Öffnen Sie **Einstellungen**, dann **Integrationen**, wählen Sie **AWS**
und dann **Costfluent über die AWS-Konsole verbinden**.

1. Lassen Sie **Dies ist ein Management- oder Einzelkonto** aktiviert, um den Export anzulegen;
   deaktivieren Sie es für ein Mitgliedskonto.
2. AWS öffnet eine CloudFormation-Schnellerstellung in **us-east-1**, mit allen Parametern
   ausgefüllt. Bestätigen Sie, dass der Stack IAM-Ressourcen anlegt, und erstellen Sie ihn.
3. Ist der Stack fertig, meldet er sich bei Costfluent, und die Verbindung erscheint auf der Seite,
   ohne dass Sie etwas einfügen müssen. Schlägt der Stack fehl, zeigen die Seite und CloudFormation
   den Grund, und der Stack wird zurückgerollt.

Der Link gilt 24 Stunden und verbindet nur mit der Organisation, die ihn erzeugt hat.

## Über die AWS CLI verbinden

Wählen Sie unter **Weitere Verbindungsoptionen** den Eintrag **AWS CLI**. Costfluent zeigt einen
Befehl `aws cloudformation create-stack` mit derselben Vorlage und denselben Parametern. Führen
Sie ihn mit Zugangsdaten für das zu verbindende Konto aus:

```bash
aws cloudformation create-stack \
  --stack-name Costfluent-1a2b3c4d \
  --template-url <die Vorlagen-URL, die Costfluent anzeigt> \
  --capabilities CAPABILITY_IAM \
  --region us-east-1 \
  --parameters ParameterKey=CostfluentPrincipalArn,ParameterValue=... # und die übrigen
```

Der Stack meldet sich genauso zurück wie beim Weg über die Konsole.

## Mit Terraform verbinden

Das Modul `costfluent/cost-access/aws` legt die Rolle an und, wenn Sie einen Bucket angeben, den
Bucket und den Export. Die Datenquelle `costfluent_aws_provider_info` liest Principal und externe
ID für Sie:

```hcl
provider "aws" {
  region = "us-east-1"
}

data "costfluent_aws_provider_info" "this" {}

module "costfluent_aws" {
  source  = "costfluent/cost-access/aws"
  version = "~> 0.2"

  costfluent_principal_arn = data.costfluent_aws_provider_info.this.principal_arn
  external_id              = data.costfluent_aws_provider_info.this.external_id
  cost_export_bucket_name  = "acme-costfluent-export" # in einem Mitgliedskonto weglassen
}

resource "costfluent_provider" "aws" {
  key         = "aws"
  name        = "AWS"
  credentials = module.costfluent_aws.credentials
  settings    = module.costfluent_aws.settings
}
```

`costfluent_provider` versucht es bis zu drei Minuten erneut, während sich die neue Rolle in IAM
verbreitet. Damit die gelieferten Dateien in der EU bleiben, setzen Sie `cost_export_bucket_region`;
der Export selbst läuft immer in us-east-1.

## Über die IAM-Konsole verbinden

Wählen Sie unter **Weitere Verbindungsoptionen** den Eintrag **AWS-IAM-Konsole**. Costfluent zeigt
Ihre externe ID, die Vertrauensrichtlinie und die Berechtigungsrichtlinie. Legen Sie eine Rolle mit
beiden an und geben Sie dann ihren ARN ein, und den Export-Bucket, falls Sie einen angelegt haben.

Legen Sie den Export selbst an, muss er ein Export **FOCUS 1.2 with AWS columns** (`FOCUS_1_2_AWS`)
mit allen Spalten sein, mit täglicher Granularität, CSV mit GZIP-Kompression und **Overwrite
existing data export file**, geliefert in einen Bucket, den die Rolle lesen darf, unter dem Präfix
`costfluent` mit dem Exportnamen `costfluent-focus`.

## Welche Rechte Costfluent erhält

| Aktion | Ressource | Wozu |
|---|---|---|
| `ce:GetCostAndUsage` | `*` | Historie vor der ersten Lieferung, Konten ohne Export und die monatliche Kontrollsumme. |
| `organizations:ListAccounts` | `*` | Welche Mitgliedskonten die Kosten eines Managementkontos abdecken. |
| `s3:ListBucket` | der Export-Bucket | Findet die Lieferung jedes Monats. |
| `s3:GetObject` | die Objekte des Export-Buckets | Liest diese Lieferung. |

Cost Explorer und Organizations kennen keine ressourcenbezogenen Rechte, daher ist ihre Ressource
`*`; das gewährt keinen Zugriff auf irgendetwas anderes im Konto. Die S3-Rechte gibt es nur, wenn es
einen Export gibt.

## Historie und erste Lieferung

AWS liefert den ersten Export innerhalb von **24 bis 72 Stunden** nach dem Anlegen. Bis dahin zeigt
die Verbindung Kosten aus dem Cost Explorer, und Costfluent ersetzt sie durch die Zeilen des
Exports, sobald die Lieferung eintrifft. Costfluent liest bei jeder Synchronisierung den laufenden
Monat neu, in den ersten fünfzehn Tagen auch den Vormonat, weil AWS den Vormonat bis zu zwei Wochen
nach Monatsende noch aktualisiert.

Ein neuer Export beginnt mit dem laufenden Monat. Um bis zu 14 Monate Historie hineinzubringen,
eröffnen Sie beim AWS Support einen Fall (**Billing**, **Data Exports**) mit der Bitte, den Export
nachzufüllen, und bitten Sie danach den Costfluent-Support, diese Monate neu zu erfassen.

## Was es Sie kostet

Costfluent liest den Export von außerhalb von AWS, daher ist das Lesen S3-Datenübertragung nach
außen auf Ihrer Rechnung. Ein täglicher Export umfasst typischerweise wenige Megabyte im Monat. Jede
Cost-Explorer-Anfrage von Costfluent kostet 0,01 USD, und Costfluent stellt sie nur für Monate ohne
Export, für Verbindungsprüfungen und für die monatliche Kontrollsumme.

## Nach dem Verbinden

Der Tab **Verwalten** listet die Verbindung mit ihrer Konto-ID, ihrer Rolle und ihrem Export-Bucket.
Öffnen Sie das Zahnrad daneben, um zu sehen, ob die Rolle noch angenommen und der Bucket gelesen
werden kann, welche Workspaces die Verbindung speist und welche Abrechnungsmonate importiert wurden.
**Prüfungen ausführen** führt diese Prüfungen erneut aus und meldet jede einzeln.

## Zugriff entfernen

Löschen Sie den CloudFormation-Stack oder führen Sie `terraform destroy` aus, um die Rolle zu
entfernen; der Zugriff von Costfluent endet mit ihr. Der Export-Bucket bleibt erhalten, damit Ihre
Historie in Ihrem Konto bleibt. Entfernen Sie die Verbindung auch in Costfluent.
