Beispiele: Richten Sie eine AWS Control Tower Tower-Landezone nur mit APIs ein - AWS Control Tower

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiele: Richten Sie eine AWS Control Tower Tower-Landezone nur mit APIs ein

Bei dieser exemplarischen Vorgehensweise handelt es sich um ein Begleitdokument. Erläuterungen, Vorbehalte und weitere Informationen finden Sie unter Erste Schritte mit AWS Control Tower using APIs.

Voraussetzungen

Bevor Sie eine AWS Control Tower Tower-Landezone erstellen, müssen Sie eine Organisation, zwei gemeinsame Konten und einige IAM-Rollen erstellen. Dieses Walkthrough-Tutorial umfasst diese Schritte mit Beispielen für CLI-Befehle und -Ausgaben.

Schritt 1. Erstellen Sie die Organisation und zwei erforderliche Konten.

aws organizations create-organization --feature-set ALL aws organizations create-account --email example+log@example.com --account-name "Log archive account" aws organizations create-account --email example+aud@example.com --account-name "Audit account"

Schritt 2. Erstellen Sie die erforderlichen IAM-Rollen.

AWSControlTowerAdmin

cat <<EOF >controltower_trust.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "controltower.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF aws iam create-role --role-name AWSControlTowerAdmin --path /service-role/ --assume-role-policy-document file://controltower_trust.json cat <<EOF >ct_admin_role_policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeAvailabilityZones", "Resource": "*" } ] } EOF aws iam put-role-policy --role-name AWSControlTowerAdmin --policy-name AWSControlTowerAdminPolicy --policy-document file://ct_admin_role_policy.json aws iam attach-role-policy --role-name AWSControlTowerAdmin --policy-arn arn:aws:iam::aws:policy/service-role/AWSControlTowerServiceRolePolicy

AWSControlTowerCloudTrailRole

cat <<EOF >cloudtrail_trust.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF aws iam create-role --role-name AWSControlTowerCloudTrailRole --path /service-role/ --assume-role-policy-document file://cloudtrail_trust.json cat <<EOF >cloudtrail_role_policy.json { "Version": "2012-10-17", "Statement": [ { "Action": "logs:CreateLogStream", "Resource": "arn:aws:logs:*:*:log-group:aws-controltower/CloudTrailLogs:*", "Effect": "Allow" }, { "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:*:*:log-group:aws-controltower/CloudTrailLogs:*", "Effect": "Allow" } ] } EOF aws iam put-role-policy --role-name AWSControlTowerCloudTrailRole --policy-name AWSControlTowerCloudTrailRolePolicy --policy-document file://cloudtrail_role_policy.json

AWSControlTowerStackSetRole

cat <<EOF >cloudformation_trust.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF aws iam create-role --role-name AWSControlTowerStackSetRole --path /service-role/ --assume-role-policy-document file://cloudformation_trust.json cat <<EOF >stackset_role_policy.json { "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSControlTowerExecution" ], "Effect": "Allow" } ] } EOF aws iam put-role-policy --role-name AWSControlTowerStackSetRole --policy-name AWSControlTowerStackSetRolePolicy --policy-document file://stackset_role_policy.json

AWSControlTowerConfigAggregatorRoleForOrganizations

cat <<EOF >config_trust.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF aws iam create-role --role-name AWSControlTowerConfigAggregatorRoleForOrganizations --path /service-role/ --assume-role-policy-document file://config_trust.json aws iam attach-role-policy --role-name AWSControlTowerConfigAggregatorRoleForOrganizations --policy-arn arn:aws:iam::aws:policy/service-role/AWSConfigRoleForOrganizations

Schritt 3. Rufen Sie Konto-IDs ab und generieren Sie die Landingzone-Manifestdatei.

Die ersten beiden Befehle im folgenden Beispiel speichern die Konto-IDs für die Konten, die Sie in Schritt 1 erstellt haben, in Variablen. Diese Variablen helfen dann bei der Generierung der Landingzone-Manifestdatei.

sec_account_id=$(aws organizations list-accounts | jq -r '.Accounts[] | select(.Name == "Audit account") | .Id') log_account_id=$(aws organizations list-accounts | jq -r '.Accounts[] | select(.Name == "Log archive account") | .Id') cat <<EOF >landing_zone_manifest.json { "governedRegions": ["us-west-1", "us-west-2"], "organizationStructure": { "security": { "name": "Security" }, "sandbox": { "name": "Sandbox" } }, "centralizedLogging": { "accountId": "$log_account_id", "configurations": { "loggingBucket": { "retentionDays": 60 }, "accessLoggingBucket": { "retentionDays": 60 } }, "enabled": true }, "securityRoles": { "accountId": "$sec_account_id" }, "accessManagement": { "enabled": true } } EOF

Schritt 4. Erstellen Sie die landing zone mit der neuesten Version.

Sie müssen die landing zone mit der Manifestdatei und der neuesten Version einrichten. Dieses Beispiel zeigt Version 3.3.

aws --region us-west-1 controltower create-landing-zone --manifest file://landing_zone_manifest.json --landing-zone-version 3.3

Die Ausgabe wird einen arn und einen OperationIdentifier enthalten, wie im folgenden Beispiel gezeigt.

{ "arn": "arn:aws:controltower:us-west-1:0123456789012:landingzone/4B3H0ULNUOL2AXXX", "operationIdentifier": "16bb47f7-b7a2-4d90-bc71-7df4ca1201xx" }

Schritt 5. (Optional) Verfolge den Status deiner Operation zur Erstellung deiner landing zone, indem du eine Schleife einrichtest.

Um den Status zu verfolgen, verwenden Sie den OperationIdentifier aus der Ausgabe des vorherigen create-landing-zone Befehls.

aws --region us-west-1 controltower get-landing-zone-operation --operation-identifier 16bb47f7-b7a2-4d90-bc71-7df4ca1201xx

Beispiel für eine Statusausgabe:

{ "operationDetails": { "operationType": "CREATE", "startTime": "2024-02-28T21:49:31Z", "status": "IN_PROGRESS" } }

Sie können das folgende Beispielskript verwenden, um eine Schleife einzurichten, die den Status des Vorgangs immer wieder meldet, wie in einer Protokolldatei. Dann müssen Sie den Befehl nicht ständig eingeben.

while true; do echo "$(date) $(aws --region us-west-1 controltower get-landing-zone-operation --operation-identifier 16bb47f7-b7a2-4d90-bc71-7df4ca1201xx | jq -r .operationDetails.status)"; sleep 15; done

Um detaillierte Informationen über deine landing zone anzuzeigen

Schritt 1. Finde den ARN der landing zone

aws --region us-west-1 controltower list-landing-zones

Die Ausgabe wird die Kennung der landing zone enthalten, wie im folgenden Ausgabebeispiel gezeigt.

{ "landingZones": [ { "arn": "arn:aws:controltower:us-west-1:123456789012:landingzone/4B3H0ULNUOL2AXXX" } ] }

Schritt 2. Holen Sie sich die Informationen

aws --region us-west-1 controltower get-landing-zone --landing-zone-identifier arn:aws:controltower:us-west-1:123456789012:landingzone/4B3H0ULNUOL2AXXX

Hier ist ein Beispiel für die Art der Ausgabe, die Sie möglicherweise sehen:

{ "landingZone": { "arn": "arn:aws:controltower:us-west-1:123456789012:landingzone/4B3H0ULNUOL2AXXX", "driftStatus": { "status": "IN_SYNC" }, "latestAvailableVersion": "3.3", "manifest": { "accessManagement": { "enabled": true }, "securityRoles": { "accountId": "9750XXXX4444" }, "governedRegions": [ "us-west-1", "us-west-2" ], "organizationStructure": { "sandbox": { "name": "Sandbox" }, "security": { "name": "Security" } }, "centralizedLogging": { "accountId": "012345678901", "configurations": { "loggingBucket": { "retentionDays": 60 }, "accessLoggingBucket": { "retentionDays": 60 } }, "enabled": true } }, "status": "ACTIVE", "version": "3.3" } }

Schritt 6: (Optional) Rufen Sie die ListLandingZoneOperations API auf, um den Status aller Operationen einzusehen, die Ihre landing zone ändern.

Um den Status aller landing zone zu verfolgen, können Sie die ListLandingZoneOperations API aufrufen.