GKE on AWS verwendet AWS IAM-Rollen, um Ihre Cluster und Knotenpools zu erstellen und zu verwalten. Diese Seite richtet sich an Identitäts- und Kontoadministratoren, Bediener und Entwickler, die Richtlinien zu Nutzerberechtigungen erstellen und verwalten möchten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und ‑Aufgaben.
Auf dieser Seite wird beschrieben, wie Sie die folgenden Standardrollen erstellen:
- Rolle „GKE Multi-Cloud API-Dienst-Agent“
- Die GKE Multi-Cloud API verwendet diese AWS IAM-Rolle, um Ressourcen mit AWS APIs zu verwalten. Diese Rolle wird von einem von Google verwalteten Dienstkonto verwendet, das als Dienst-Agent bezeichnet wird.
- AWS-IAM-Rolle der Steuerungsebene
- Ihre Clustersteuerungsebene verwendet diese Rolle zur Steuerung der Knotenpools.
- AWS-IAM-Rolle für Knotenpool
- Die Steuerungsebene verwendet diese Rolle zum Erstellen von Knotenpool-VMs.
Auf dieser Seite wird beschrieben, wie Sie in den folgenden Situationen Rollen erstellen:
- Standardsatz von Berechtigungen, der zum Testen hilfreich ist
- Berechtigungen für Ressourcen mit bestimmten AWS-Tags
Sie können eine dieser Optionen auswählen, um die Sicherheitsrichtlinien Ihrer Organisation zu erfüllen. Weitere Informationen zu Tags finden Sie unter AWS-Ressourcen taggen.
Optional können Sie Berechtigungen für die AWS-IAM-Rollen festlegen, die GKE on AWS verwendet, um die Anforderungen Ihrer Organisation zu erfüllen. Weitere Informationen finden Sie unter AWS IAM-Rollen.
Vorbereitung
Wenn Sie Berechtigungen erstellen möchten, die mit Ressourcen mit bestimmten Tags ausgeführt werden, müssen Sie ein Tag und einen Wert auswählen. Mit diesen Werten taggen Sie dann die Ressourcen in Ihrem Cluster, um den Zugriff darauf zu beschränken.
Rolle „GKE Multi-Cloud API-Dienst-Agent“ erstellen
Verwenden Sie zum Erstellen der Rolle GKE Multi-Cloud API-Dienst-Agent den folgenden Befehl, um Ihre Google Cloud Projektnummer abzurufen und sie zum Erstellen der Rolle zu verwenden.
PROJECT_ID="$(gcloud config get-value project)"
PROJECT_NUMBER=$(gcloud projects describe "$PROJECT_ID" \
--format "value(projectNumber)")
aws iam create-role --role-name API_ROLE \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "accounts.google.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"accounts.google.com:sub": "service-'$PROJECT_NUMBER'@gcp-sa-gkemulticloud.iam.gserviceaccount.com"
}
}
}
]
}'
Ersetzen Sie dabei API_ROLE
durch einen Namen für diese Rolle.
Speichern Sie den von diesem Befehl generierten Amazon-Ressourcennamen (ARN) zur späteren Verwendung.
Bereichsberechtigungen erstellen
Wählen Sie unten aus, ob Sie eine Richtlinie für die Rolle „GKE Multi-Cloud API-Dienst-Agent“ mit Standardberechtigungen oder auf Ressourcen mit bestimmten Tags erstellen möchten. Führen Sie dann den folgenden Befehl aus:
Standard
aws iam create-policy --policy-name API_POLICY \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateLaunchTemplate",
"ec2:CreateNetworkInterface",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:DeleteLaunchTemplate",
"ec2:DeleteNetworkInterface",
"ec2:DeleteSecurityGroup",
"ec2:DeleteTags",
"ec2:DeleteVolume",
"ec2:DescribeAccountAttributes",
"ec2:DescribeInstances",
"ec2:DescribeInternetGateways",
"ec2:DescribeKeyPairs",
"ec2:DescribeLaunchTemplates",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:GetConsoleOutput",
"ec2:ModifyInstanceAttribute",
"ec2:ModifyNetworkInterfaceAttribute",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:RunInstances",
"iam:AWSServiceName",
"iam:CreateServiceLinkedRole",
"iam:GetInstanceProfile",
"iam:PassRole",
"autoscaling:CreateAutoScalingGroup",
"autoscaling:CreateOrUpdateTags",
"autoscaling:DeleteAutoScalingGroup",
"autoscaling:DeleteTags",
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DisableMetricsCollection",
"autoscaling:EnableMetricsCollection",
"autoscaling:TerminateInstanceInAutoScalingGroup",
"autoscaling:UpdateAutoScalingGroup",
"elasticloadbalancing:AddTags",
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateTargetGroup",
"elasticloadbalancing:DeleteListener",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:DeleteTargetGroup",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:ModifyTargetGroupAttributes",
"elasticloadbalancing:RemoveTags",
"kms:DescribeKey",
"kms:Encrypt",
"kms:GenerateDataKeyWithoutPlaintext"
],
"Resource": "*"
}
]
}'
Ersetzen Sie API_POLICY
durch einen Namen für die AWS IAM-Richtlinie der GKE Multi-Cloud API.
Optional können Sie die Ressourcen einschränken, die auf diese Richtlinie angewendet werden. Setzen Sie dazu den Wert von Resource
auf arn:aws:iam::ACCOUNT_ID:*
und ersetzen Sie ACCOUNT_ID durch Ihre AWS-Konto-ID.
Auf Tags beschränkt
aws iam create-policy --policy-name API_POLICY_ec2 \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeAccountAttributes",
"ec2:DescribeInstances",
"ec2:DescribeInternetGateways",
"ec2:DescribeKeyPairs",
"ec2:DescribeLaunchTemplates",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:GetConsoleOutput"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": ["ec2:CreateSecurityGroup"],
"Resource": ["arn:aws:ec2:*:*:security-group/*"],
"Condition": {
"StringEquals": {
"aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:CreateSecurityGroup"],
"Resource": ["arn:aws:ec2:*:*:vpc/*"]
},
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:DeleteSecurityGroup",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": ["arn:aws:ec2:*:*:security-group/*"],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress"
],
"Resource": ["arn:aws:ec2:*:*:security-group-rule/*"],
"Condition": {
"StringEquals": {
"aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:CreateLaunchTemplate"],
"Resource": ["arn:aws:ec2:*:*:launch-template/*"],
"Condition": {
"StringEquals": {
"aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteLaunchTemplate"
],
"Resource": ["arn:aws:ec2:*:*:launch-template/*"],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:RunInstances"],
"Resource": ["arn:aws:ec2:*:*:image/ami-*"],
"Condition": {
"StringEquals": {
"ec2:Owner": ["099720109477", "amazon"]
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:RunInstances"],
"Resource": [
"arn:aws:ec2:*:*:subnet/*"
],
"Condition": {
"ArnLike": {
"ec2:LaunchTemplate": "arn:aws:ec2:*:*:launch-template/*"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:RunInstances"],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:key-pair/*",
"arn:aws:ec2:*:*:launch-template/*",
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"Bool": {
"ec2:IsLaunchTemplateResource": "true"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateVolume"
],
"Resource": ["arn:aws:ec2:*:*:volume/*"],
"Condition": {
"StringEquals": {
"aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteVolume"
],
"Resource": ["arn:aws:ec2:*:*:volume/*"],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateNetworkInterface"
],
"Resource": ["arn:aws:ec2:*:*:network-interface/*"],
"Condition": {
"StringEquals": {
"aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:CreateNetworkInterface"],
"Resource": ["arn:aws:ec2:*:*:security-group/*"],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:CreateNetworkInterface"],
"Resource": ["arn:aws:ec2:*:*:subnet/*"]
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteNetworkInterface",
"ec2:ModifyNetworkInterfaceAttribute"
],
"Resource": [
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:security-group/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Action": [
"ec2:CreateTags"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ec2:*:*:launch-template/*",
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:security-group-rule/*",
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Action": [
"ec2:CreateTags"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ec2:*:*:instance/*"
],
"Condition": {
"StringEquals": {
"ec2:CreateAction" : "RunInstances"
}
}
},
{
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:launch-template/*",
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:security-group-rule/*",
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifyInstanceAttribute"
],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:security-group/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE"
}
}
}
]
}'
Ersetzen Sie Folgendes:
API_POLICY
: ein Präfix für AWS IAM-Richtlinien für die GKE Multi-Cloud API.ACCESS_CONTROL_TAG_KEY
ist der Tag-Schlüssel, der für diese Richtlinie gilt.ACCESS_CONTROL_TAG_VALUE
ist der Tag-Wert, der für diese Richtlinie gilt.
Optional können Sie diese Richtlinie weiter auf eine AWS-Region und eine Konto-ID beschränken. Ersetzen Sie die Werte von Ressourcen wie arn:aws:ec2:*:*:security-group/*
durch arn:aws:ec2:AWS_REGION:ACCOUNT_ID:security-group/*
, wenn Sie die Richtlinie auf eine Region und eine Konto-ID beschränken möchten.
Kopieren Sie den für diese Richtlinie erstellten ARN zur Verwendung im folgenden Befehl.
Zusätzliche Richtlinien für die Verwendung von Tags erstellen
Führen Sie die folgenden Schritte aus, um zusätzliche Richtlinien zu erstellen, wenn Sie den Zugriff mit Tags einschränken möchten. Fahren Sie mit Richtlinien an die GKE Multi-Cloud API-Rolle anhängen fort, wenn Sie die Standardrichtlinie verwenden.
Erstellen Sie mit dem folgenden Befehl eine Richtlinie, um den Zugriff auf AWS IAM zu steuern:
aws iam create-policy --policy-name API_POLICY_iam \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iam:CreateServiceLinkedRole"], "Resource": [ "arn:aws:iam::*:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" ], "Condition": { "StringEquals": { "iam:AWSServiceName": "autoscaling.amazonaws.com" } } }, { "Effect": "Allow", "Action": ["iam:CreateServiceLinkedRole"], "Resource": [ "arn:aws:iam::*:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing" ], "Condition": { "StringEquals": { "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com" } } }, { "Effect": "Allow", "Action": ["iam:PassRole"], "Resource": ["arn:aws:iam::*:role/*"], "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } } , { "Effect": "Allow", "Action": ["iam:GetInstanceProfile"], "Resource": ["arn:aws:iam::*:instance-profile/*"] } ] }'
Erstellen Sie mit dem folgenden Befehl eine Richtlinie, um den Zugriff auf AWS EC2 Auto Scaling-Ressourcen zu steuern:
aws iam create-policy --policy-name API_POLICY_autoscaling \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["autoscaling:DescribeAutoScalingGroups"], "Resource": "*" }, { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": [ "arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/gke-*" ], "Condition": { "StringEquals": { "aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } }, { "Effect": "Allow", "Action": [ "autoscaling:CreateOrUpdateTags", "autoscaling:DeleteAutoScalingGroup", "autoscaling:DeleteTags", "autoscaling:DisableMetricsCollection", "autoscaling:EnableMetricsCollection", "autoscaling:TerminateInstanceInAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": [ "arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/gke-*" ], "Condition": { "StringEquals": { "aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } } ] }'
Speichern Sie den von diesem Befehl generierten ARN zur späteren Verwendung.
Erstellen Sie eine Richtlinie, um den Zugriff auf AWS Elastic Load Balancer-Ressourcen zu steuern.
aws iam create-policy --policy-name API_POLICY_elasticloadbalancing \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:CreateTargetGroup", "elasticloadbalancing:AddTags" ], "Resource": ["arn:aws:elasticloadbalancing:*:*:targetgroup/gke-*"], "Condition": { "StringEquals": { "aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:AddTags", "elasticloadbalancing:DeleteTargetGroup", "elasticloadbalancing:ModifyTargetGroupAttributes", "elasticloadbalancing:RemoveTags" ], "Resource": ["arn:aws:elasticloadbalancing:*:*:targetgroup/gke-*"], "Condition": { "StringEquals": { "aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:CreateListener", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:AddTags" ], "Resource": [ "arn:aws:elasticloadbalancing:*:*:listener/net/gke-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/gke-*" ], "Condition": { "StringEquals": { "aws:RequestTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:AddTags", "elasticloadbalancing:DeleteListener", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:RemoveTags" ], "Resource": [ "arn:aws:elasticloadbalancing:*:*:listener/net/gke-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/gke-*" ], "Condition": { "StringEquals": { "aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } } ] }'
Speichern Sie den von diesem Befehl generierten ARN zur späteren Verwendung.
Erstellen Sie eine Richtlinie, um den Zugriff auf AWS Key Management Service-Ressourcen zu steuern.
Weitere Informationen zu Berechtigungen für jeden einzelnen Schlüssel finden Sie unter KMS-Schlüssel mit bestimmten Berechtigungen erstellen.
aws iam create-policy --policy-name API_POLICY_kms \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["kms:DescribeKey"], "Resource": ["arn:aws:kms:*:*:key/*"] }, { "Effect": "Allow", "Action": ["kms:Encrypt"], "Resource": CONTROL_PLANE_CONFIG_KMS_KEY_ARN }, { "Effect": "Allow", "Action": ["kms:Encrypt"], "Resource": NODE_POOL_CONFIG_KMS_KEY_ARN }, { "Effect": "Allow", "Action": ["kms:GenerateDataKeyWithoutPlaintext"], "Resource": CONTROL_PLANE_MAIN_VOLUME_KMS_KEY_ARN } ] }'
Dabei gilt:
CONTROL_PLANE_CONFIG_KMS_KEY_ARN
: Ihr Verschlüsselungsschlüssel ARN der KMS-Steuerungsebene. Wenn Sie nur einen KMS-Schlüssel für Ihren Cluster verwenden, verwenden Sie hier den ARN dieses Schlüssels für alle Werte.NODE_POOL_CONFIG_KMS_KEY_ARN
: Ihr ARN des Verschlüsselungsschlüssels für die KMS-KnotenpoolkonfigurationCONTROL_PLANE_MAIN_VOLUME_KMS_KEY_ARN
: Ihr ARN Ihres Hauptschlüssels für die KMS-Steuerungsebene
Speichern Sie den von diesem Befehl generierten ARN zur späteren Verwendung.
Richtlinien an die GKE Multi-Cloud API-Rolle anhängen
Führen Sie für jede Richtlinie, die Sie in den vorherigen Schritten erstellt haben, den folgenden Befehl aus, um die Richtlinie an die GKE Multi-Cloud API-Rolle anzuhängen:
aws iam attach-role-policy \
--policy-arn API_POLICY_ARN \
--role-name API_ROLE
Ersetzen
API_POLICY_ARN
durch den ARN einer einzelnen Richtlinie, die Sie zuvor erstellt habenAPI_ROLE
durch den Namen der GKE Multi-Cloud API-Dienst-Agent-Rolle
Cluster oder Knotenpool erstellen
Wenn Sie Rollen und Richtlinien für getaggte Ressourcen erstellen, müssen Sie die Tags beim Erstellen eines Clusters oder Knotenpools angeben. Verwenden Sie dazu den Parameter --tags
für die Befehle zur Erstellung von Clustern und Knotenpools.
Cluster erstellen
Folgen Sie zum Erstellen des Clusters der Anleitung zum Erstellen eines Clusters und fügen Sie den Parameter --tags
so ein:
gcloud container aws clusters create CLUSTER_NAME \
...
--tags="ACCESS_CONTROL_TAG_KEY=ACCESS_CONTROL_TAG_VALUE"
Dabei gilt:
ACCESS_CONTROL_TAG_KEY
ist der Tag-Schlüssel, der für diese Richtlinie gilt.ACCESS_CONTROL_TAG_VALUE
ist der Tag-Wert, der für diese Richtlinie gilt.
Knotenpool erstellen
Folgen Sie der Anleitung zum Erstellen eines Knotenpools, um einen Knotenpool zu erstellen, und fügen Sie den Parameter --tags
so ein:
gcloud container aws node-pools create NODE_POOL_NAME \
...
--tags "ACCESS_CONTROL_TAG_KEY=ACCESS_CONTROL_TAG_VALUE"
Dabei gilt:
ACCESS_CONTROL_TAG_KEY
ist der Tag-Schlüssel, der für diese Richtlinie gilt.ACCESS_CONTROL_TAG_VALUE
ist der Tag-Wert, der für diese Richtlinie gilt.
Rolle der Steuerungsebene erstellen
So erstellen Sie die Rolle der Steuerungsebene mit Standardberechtigungen:
Führen Sie den folgenden Befehl aus, um diese Rolle zu erstellen:
aws iam create-role --role-name CONTROL_PLANE_ROLE \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
Ersetzen Sie
CONTROL_PLANE_ROLE
durch einen Namen für die Rolle der Steuerungsebene.Erstellen Sie eine IAM-Richtlinie für diese Rolle. Wenn Sie mehrere KMS-Schlüssel für die Datenbank- und Konfigurationsverschlüsselung erstellt haben, fügen Sie alle ARNs als durch Kommas getrennte Liste hinzu.
Wählen Sie aus, ob Sie eine direkte Verbindung zu Ihrer Steuerungsebene herstellen, oder ob Sie eine direkte Verbindung zur Steuerungsebene herstellen und Tags verwenden.
Direkte Verbindung
aws iam create-policy --policy-name CONTROL_PLANE_POLICY \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:AttachVolume", "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateRoute", "ec2:CreateSecurityGroup", "ec2:CreateSnapshot", "ec2:CreateTags", "ec2:CreateVolume", "ec2:DeleteRoute", "ec2:DeleteSecurityGroup", "ec2:DeleteSnapshot", "ec2:DeleteTags", "ec2:DeleteVolume", "ec2:DescribeAccountAttributes", "ec2:DescribeAvailabilityZones", "ec2:DescribeDhcpOptions", "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:DescribeInternetGateways", "ec2:DescribeLaunchTemplateVersions", "ec2:DescribeRegions", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSnapshots", "ec2:DescribeSubnets", "ec2:DescribeTags", "ec2:DescribeVolumes", "ec2:DescribeVolumesModifications", "ec2:DescribeVpcs", "ec2:DetachVolume", "ec2:ModifyInstanceAttribute", "ec2:ModifyVolume", "ec2:RevokeSecurityGroupIngress", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeTags", "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup", "elasticloadbalancing:AddTags", "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", "elasticloadbalancing:AttachLoadBalancerToSubnets", "elasticloadbalancing:ConfigureHealthCheck", "elasticloadbalancing:CreateListener", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:CreateLoadBalancerListeners", "elasticloadbalancing:CreateLoadBalancerPolicy", "elasticloadbalancing:CreateTargetGroup", "elasticloadbalancing:DeleteListener", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:DeleteLoadBalancerListeners", "elasticloadbalancing:DeleteTargetGroup", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeLoadBalancerPolicies", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:DetachLoadBalancerFromSubnets", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:ModifyLoadBalancerAttributes", "elasticloadbalancing:ModifyTargetGroup", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:RegisterTargets", "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer", "elasticloadbalancing:SetLoadBalancerPoliciesOfListener", "elasticfilesystem:CreateAccessPoint", "elasticfilesystem:DeleteAccessPoint", "elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems", "elasticfilesystem:DescribeMountTargets", "kms:CreateGrant", "kms:Decrypt", "kms:Encrypt", "kms:GrantIsForAWSResource" ], "Resource": "*" } ] }'
Dabei gilt:
CONTROL_PLANE_POLICY
ist der Namen für die Richtlinie der Steuerungsebene
Direkt mit Tags
aws iam create-policy --policy-name CONTROL_PLANE_POLICY_autoscaling \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup" ], "Resource": [ "arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/gke-*" ], "Condition": { "StringEquals": { "aws:ResourceTag/ACCESS_CONTROL_TAG_KEY": "ACCESS_CONTROL_TAG_VALUE" } } } ] }' aws iam create-policy --policy-name CONTROL_PLANE_POLICY_ec2 \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeAccountAttributes", "ec2:DescribeAvailabilityZones", "ec2:DescribeDhcpOptions", "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:DescribeInternetGateways", "ec2:DescribeLaunchTemplateVersions", "ec2:DescribeRegions", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSnapshots", "ec2:DescribeSubnets", "ec2:DescribeTags", "ec2:DescribeVolumes", "ec2:DescribeVolumesModifications", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": ["ec2:AttachNetworkInterface"], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ] }, { "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:CreateTags", "ec2:AttachVolume", "ec2:DeleteVolume", "ec2:DetachVolume", "ec2:ModifyVolume" ], "Resource": ["arn:aws:ec2:*:*:volume/*"] }, { "Effect": "Allow", "Action": ["ec2:AttachVolume", "ec2:DetachVolume"], "Resource": ["arn:aws:ec2:*:*:instance/*"] }, { "Effect": "Allow", "Action": ["ec2:CreateSecurityGroup", "ec2:CreateTags"], "Resource": ["arn:aws:ec2:*:*:security-group/*"] }, { "Effect": "Allow", "Action": ["ec2:CreateSecurityGroup"], "Resource": ["arn:aws:ec2:*:*:vpc/*"] }, { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:DeleteSecurityGroup", "ec2:RevokeSecurityGroupIngress" ], "Resource": ["arn:aws:ec2:*:*:security-group/*"] }, { "Effect": "Allow", "Action": ["ec2:CreateSnapshot", "ec2:CreateTags", "ec2:DeleteSnapshot"], "Resource": ["arn:aws:ec2:*:*:snapshot/*"] }, { "Effect": "Allow", "Action": ["ec2:CreateSnapshot"], "Resource": ["arn:aws:ec2:*:*:volume/*"] }, { "Effect": "Allow", "Action": ["ec2:CreateRoute", "ec2:DeleteRoute"], "Resource": ["arn:aws:ec2:*:*:route-table/*"] }, { "Effect": "Allow", "Action": ["ec2:ModifyInstanceAttribute"], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Effect": "Allow", "Action": ["ec2:DeleteTags"], "Resource": [ "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:snapshot/*", "arn:aws:ec2:*:*:volume/*" ] } ] }' aws iam create-policy --policy-name CONTROL_PLANE_POLICY_elasticloadbalancing \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeLoadBalancerPolicies", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:AddTags", "elasticloadbalancing:AttachLoadBalancerToSubnets", "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", "elasticloadbalancing:CreateListener", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:CreateLoadBalancerPolicy", "elasticloadbalancing:CreateLoadBalancerListeners", "elasticloadbalancing:ConfigureHealthCheck", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:DeleteLoadBalancerListeners", "elasticloadbalancing:DetachLoadBalancerFromSubnets", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:ModifyLoadBalancerAttributes", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer", "elasticloadbalancing:SetLoadBalancerPoliciesOfListener" ], "Resource": ["arn:aws:elasticloadbalancing:*:*:loadbalancer/*"] }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:AddTags", "elasticloadbalancing:CreateTargetGroup", "elasticloadbalancing:DeleteTargetGroup", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:ModifyTargetGroup", "elasticloadbalancing:RegisterTargets" ], "Resource": ["arn:aws:elasticloadbalancing:*:*:targetgroup/*"] }, { "Effect": "Allow", "Action": [ "elasticloadbalancing:DeleteListener", "elasticloadbalancing:ModifyListener" ], "Resource": ["arn:aws:elasticloadbalancing:*:*:listener/*"] } ] }' aws iam create-policy --policy-name CONTROL_PLANE_POLICY_elasticfilesystem \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticfilesystem:DescribeAccessPoints", "elasticfilesystem:DescribeFileSystems", "elasticfilesystem:DescribeMountTargets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "elasticfilesystem:CreateAccessPoint" ], "Resource": [ "arn:aws:elasticfilesystem:*:*:file-system/*" ] }, { "Effect": "Allow", "Action": [ "elasticfilesystem:DeleteAccessPoint" ], "Resource": [ "arn:aws:elasticfilesystem:*:*:access-point/*" ] } ] }' aws iam create-policy --policy-name CONTROL_PLANE_POLICY_kms \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["kms:Decrypt", "kms:Encrypt"], "Resource": DATABASE_KMS_KEY_ARN }, { "Effect": "Allow", "Action": ["kms:Decrypt"], "Resource": CONTROL_PLANE_CONFIG_KMS_KEY_ARN }, { "Effect": "Allow", "Action": ["kms:CreateGrant"], "Resource": CONTROL_PLANE_MAIN_VOLUME_KMS_KEY_ARN, "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }'
Dabei gilt:
CONTROL_PLANE_POLICY
ist der Namen für die Richtlinie der SteuerungsebeneACCESS_CONTROL_TAG_KEY
ist der Tag-Schlüssel, der für diese Richtlinie gilt.ACCESS_CONTROL_TAG_VALUE
ist der Tag-Wert, der für diese Richtlinie gilt.DATABASE_KMS_KEY_ARN
ist der KMS-etcd-Verschlüsselungsschlüssel ARNCONTROL_PLANE_CONFIG_KMS_KEY_ARN
: Ihr Verschlüsselungsschlüssel ARN der KMS-SteuerungsebeneCONTROL_PLANE_MAIN_VOLUME_KMS_KEY_ARN
: Ihr ARN Ihres Hauptschlüssels für die KMS-Steuerungsebene
Kopieren Sie den Wert jedes
Policy.Arn
zur Verwendung im folgenden Befehl.Wenn Sie einen HTTP-Proxy verwenden, erstellen Sie eine zusätzliche Richtlinie für AWS Secrets Manager.
aws iam create-policy --policy-name CONTROL_PLANE_POLICY_secretsmanager \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": PROXY_CONFIG_ARN } ] }'
Dabei gilt:
KMS_KEY_ARN
ist der KMS-etcd-Verschlüsselungsschlüssel ARNCONTROL_PLANE_POLICY
ist der Namen für die Richtlinie der Steuerungsebene
Kopieren Sie den Wert jedes
Policy.Arn
zur Verwendung im nächsten Befehl.Hängen Sie die neue Richtlinie an die entsprechende Rolle an.
aws iam attach-role-policy \ --policy-arn CONTROL_PLANE_POLICY_ARN \ --role-name CONTROL_PLANE_ROLE
Dabei gilt:
CONTROL_PLANE_ROLE
CONTROL_PLANE_POLICY_ARN
ist der WertPolicy.Arn
aus dem vorherigen Befehl.
Führen Sie den folgenden Befehl aus, um ein IAM-Instanzprofil zu erstellen.
aws iam create-instance-profile \ --instance-profile-name CONTROL_PLANE_PROFILE
Ersetzen Sie
CONTROL_PLANE_PROFILE
durch einen Namen für das Profil der GKE-Multi-Cloud-Steuerungsebene.Fügen Sie schließlich dem soeben erstellten Instanzprofil die neue Rolle hinzu.
aws iam add-role-to-instance-profile \ --instance-profile-name CONTROL_PLANE_PROFILE \ --role-name CONTROL_PLANE_ROLE
Dabei gilt:
CONTROL_PLANE_PROFILE
CONTROL_PLANE_ROLE
Sie verwenden den hier ausgewählten Instanznamen während der Clustererstellung.
Knotenpoolrolle erstellen
Gehen Sie so vor, um die Knotenpoolrolle mit Standardberechtigungen zu erstellen:
Erstellen Sie eine Rolle für die VMs im Knotenpool, die verwendet werden sollen.
aws iam create-role --role-name NODE_POOL_ROLE \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
Ersetzen Sie
NODE_POOL_ROLE
durch den Namen der Knotenpoolrolle.Erstellen Sie eine Richtlinie mit den Berechtigungen, die von Knotenpool-VMs benötigt werden. Wählen Sie aus, ob Sie direkt eine Verbindung zu Ihrer Steuerungsebene herstellen oder einen HTTP-Proxy verwenden möchten.
Direkt
aws iam create-policy --policy-name NODE_POOL_POLICY_kms \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["kms:Decrypt"], "Resource": NODE_POOL_CONFIG_KMS_KEY_ARN } ] }'
Ersetzen Sie Folgendes:
NODE_POOL_POLICY
: Name der KnotenpoolrichtlinieNODE_POOL_CONFIG_KMS_KEY_ARN
: Ihr ARN des Verschlüsselungsschlüssels für die KMS-Knotenpoolkonfiguration.
HTTP-Proxy
aws iam create-policy --policy-name NODE_POOL_POLICY_kms \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["kms:Decrypt"], "Resource": NODE_POOL_CONFIG_KMS_KEY_ARN } ] }' aws iam create-policy --policy-name NODE_POOL_POLICY_secretsmanager \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": PROXY_CONFIG_ARN } ] }'
Ersetzen Sie Folgendes:
KMS_KEY_ARN
: der KMS-Schlüssel Ihres Knotenpools.NODE_POOL_POLICY
: Name der KnotenpoolrichtliniePROXY_CONFIG_ARN
: der ARN Ihrer Proxy-Konfiguration. Weitere Informationen finden Sie unter Proxy-Konfiguration erstellen.
Kopieren Sie den Wert jedes Policy.Arn für die Verwendung im nächsten Befehl.
Hängen Sie die Rolle an die Richtlinie an.
aws iam attach-role-policy --role-name NODE_POOL_ROLE \ --policy-arn "NODE_POOL_POLICY_ARN"
Ersetzen Sie Folgendes:
NODE_POOL_ROLE
: Der Name der Rolle des Knotenpools.NODE_POOL_POLICY_ARN
: Der WertPolicy.Arn
aus dem vorherigen Befehl.
Wenn Ihre Arbeitslasten mit der ECR-Container Registry arbeiten müssen, hängen Sie die folgende Richtlinie für den ECR-Zugriff an:
Öffentliches Register
Erstellen Sie eine Richtlinie mit den folgenden Berechtigungen:
aws iam create-policy --policy-name NODE_POOL_POLICY_ecr \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken", "sts:GetServiceBearerToken" ], "Resource": "*" } ] }'
Wert von
Policy.Arn
alsNODE_POOL_ECR_POLICY_ARN
kopierenHängen Sie sie an die von Ihnen erstellte Knotenpoolrolle an.
aws iam attach-role-policy --role-name NODE_POOL_ROLE \ --policy-arn "NODE_POOL_ECR_POLICY_ARN"
Ersetzen Sie Folgendes:
NODE_POOL_ROLE
: Der Name der Rolle des Knotenpools.NODE_POOL_ECR_POLICY_ARN
: Der WertPolicy.Arn
aus dem vorherigen Befehl.
Private Registry
Hängen Sie AmazonEC2ContainerRegistryReadOnly an die Rolle des Knotenpools für den Zugriff auf die private Registry an:
aws iam attach-role-policy --role-name NODE_POOL_ROLE \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
Ersetzen Sie
NODE_POOL_ROLE
durch den Namen der Knotenpoolrolle.Erstellen Sie ein Instanzprofil für diese Rolle.
aws iam create-instance-profile \ --instance-profile-name NODE_POOL_PROFILE
Ersetzen Sie
NODE_POOL_PROFILE
durch den Namen Ihres Knotenpoolprofils.Fügen Sie dem Instanzprofil die neue Rolle hinzu.
aws iam add-role-to-instance-profile \ --instance-profile-name NODE_POOL_PROFILE \ --role-name NODE_POOL_ROLE
Ersetzen Sie Folgendes:
NODE_POOL_PROFILE
: der Name Ihres Knotenpoolprofils.NODE_POOL_ROLE
: Der Name der Rolle des Knotenpools.