Wie verwende ich die Funktion „IAM-Rollen für Servicekonten (IRSA) mit Amazon EKS“, um den Zugriff auf einen Amazon-S3-Bucket einzuschränken?
Ich möchte den Zugriff auf einen Amazon-Simple-Storage-Service-Bucket (Amazon S3) auf Pod-Ebene im Amazon Elastic Kubernetes Service (Amazon EKS) einschränken. Ich möchte auch Mindestberechtigungen für meine Anwendung mit AWS-Identity-and-Access-Management-Rollen (IAM) für Dienstkonten (IRSA) beibehalten.
Auflösung
Wichtig: Bevor Sie IRSA mit Amazon EKS verwenden, müssen Sie einen IAM-OIDC-Anbieter für Ihren Cluster erstellen.
Erstellen einer IAM-Richtlinie und -Rolle
1. Erstellen Sie eine JSON-Datei namens iam-policy.json.
Die folgende Beispielrichtlinie schränkt Amazon-S3- und Amazon-DynamoDB-Berechtigungen ein. IAM-Benutzer können auf einen S3-Bucket zugreifen und auf eine bestimmte DynamoDB-Tabelle zugreifen.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListAndDescribe", "Effect": "Allow", "Action": [ "dynamodb:List*", "dynamodb:Describe*" ], "Resource": "arn:aws:dynamodb:*:*:table/YOUR_TABLE" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::YOUR_BUCKET" }, { "Sid": "List", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::YOUR_BUCKET/*" } ] }
Hinweis: Ersetzen Sie YOUR_TABLE durch Ihre Tabelle. Ersetzen Sie YOUR_NAMESPACE durch Ihren Namespace.
2. Erstellen Sie eine IAM-Richtlinie namens YOUR-IAM-POLICY.
$ aws iam create-policy \ --policy-name YOUR-IAM-POLICY \ --policy-document file://iam-policy.json
Hinweis: Ersetzen Sie YOUR-IAM-POLICY durch Ihren Richtliniennamen.
3. Verwenden Sie die IAM-Konsole, um eine IAM-Rolle für Ihr Servicekonto zu erstellen, und kommentieren Sie dann ein Servicekonto mit dieser IAM-Rolle. Oder erstellen Sie mit eksctl eine IAM-Rolle für Ihr Dienstkonto. Beispiel:
$ eksctl create iamserviceaccount \ --name YOUR-SERVICEACCOUNT \ --namespace YOUR-NAMESPACE \ --cluster YOUR-CLUSTER \ --attach-policy-arn arn:aws:iam::1111122222:policy/YOUR-IAM-POLICY \ --approve
Hinweis: Ersetzen Sie 1111122222 Ihren Amazon-Ressourcennamen (ARN). Sie können auch mithilfe der IAM-Konsole eine IAM-Rolle für Ihr Servicekonto erstellen.
Erstellen Sie einen Amazon-EKS-Pod
Ersetzen Sie in den folgenden Schritten Ihre eigene Anwendung durch ein aws-cli image. Auf diese Weise können Sie überprüfen, ob Ihr Pod die angegebene IAM-Rolle mit den richtigen IAM-Berechtigungen übernehmen kann.
1. Erstellen Sie eine YAML-Datei namens aws-cli-pod.yaml.
apiVersion: v1 kind: Pod metadata: name: aws-cli namespace: YOUR_NAMESPACE spec: serviceAccountName: YOUR_SERVICEACCOUNT containers: - name: aws-cli image: amazon/aws-cli:latest command: - sleep - "3600" imagePullPolicy: IfNotPresent restartPolicy: Always
Hinweis: Ersetzen Sie YOUR_NAMESPACE durch Ihren Namespace. Ersetzen Sie SERVICE_ACCOUNT durch den Namen Ihres Kubernetes-Servicekontos.
2. Erstellen Sie einen Amazon-EKS-Pod:
$ kubectl apply -f ./aws-cli.yaml
Testen Sie Ihren Amazon-EKS-Pod
Vergewissern Sie sich, dass Ihr Pod die richtige IAM-Rolle mit Limit-Aktionen für Amazon S3 und DynamoDB verwendet. Im folgenden Beispiel kann der Pod nur den S3-Bucket (YOUR_BUCKET) und die DynamoDB-Tabelle (YOUR_TABLE) auflisten.
1. Finden Sie die IAM-Rolle, die die Anmeldeinformationen verwendet:
$ kubectl exec -it aws-cli -- aws sts get-caller-identity
Die Ausgabe sieht ähnlich aus wie:
{ "UserId": "AIDACKCEVSQ6C2EXAMPLE:botocore-session-1111122222", "Account": "111122223333", "Arn": "arn:aws:sts::111122223333:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-1111122222" }
Wenn Sie einen Namespace angeben, hängen Sie das Namespace-Argument (-n) an alle kubectl-Befehle an. Ersetzen Sie YOUR_NAMESPACE durch Ihren Namespace.
$ kubectl -n YOUR_NAMESPACE exec -it aws-cli — aws sts get-caller-identity
2. Stellen Sie sicher, dass Ihr Pod über s3:ListBuckets-Berechtigungen für Ihren S3-Bucket verfügt (YOUR_BUCKET):
$ kubectl exec -it aws-cli -- aws s3 ls s3://YOUR_BUCKET
Hinweis: Ersetzen Sie YOUR_BUCKET durch Ihren S3-Bucket.
Ausgabe:
2021-09-28 09:59:22 269 demo-test-file
3. Stellen Sie sicher, dass Ihr Pod den S3-Bucket nicht löschen kann (YOUR_BUCKET):
$ kubectl exec -it aws-cli -- aws s3 rm s3://YOUR_BUCKET/demo-test-file
Hinweis: Ersetzen Sie YOUR_BUCKET durch Ihren S3-Bucket.
Der Befehl gibt den folgenden „Zugriff verweigert“-Fehler zurück, da der Pod keine s3:DeleteObject-Berechtigungen besitzt:
delete failed: s3://YOUR_BUCKET/demo-test-file An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied command terminated with exit code 1
4. Stellen Sie sicher, dass Ihr Pod über dynamodb:List-Berechtigungen für Ihre DynamoDB-Tabelle (YOUR_TABLE) verfügt:
$ kubectl exec -it aws-cli -- aws dynamodb describe-table --table-name YOUR_TABLE
Hinweis: Ersetzen Sie YOUR_TABLE durch Ihre DynamoDB-Tabelle.
Ausgabe:
{ "Table": { "AttributeDefinitions": [ { "AttributeName": "demo", "AttributeType": "S" } ], "TableName": "YOUR_TABLE", "KeySchema": [ { "AttributeName": "demo", "KeyType": "HASH" } ], "TableStatus": "ACTIVE", "CreationDateTime": "2021-09-28T10:05:53.599000+00:00", "ProvisionedThroughput": { "NumberOfDecreasesToday": 0, "ReadCapacityUnits": 5, "WriteCapacityUnits": 5 }, "TableSizeBytes": 0, "ItemCount": 0, "TableArn": "arn:aws:dynamodb:eu-west-1:000000000000:table/YOUR_TABLE", "TableId": "42bd1238-e042-4016-b6b2-77548939c101" } }
5. Stellen Sie sicher, dass Ihr Pod die DynamoDB-Tabelle (YOUR_TABLE) nicht löschen kann:
$ kubectl exec -it aws-cli -- aws dynamodb delete-table --table-name YOUR_TABLE
Hinweis: Ersetzen Sie YOUR_TABLE durch Ihre DynamoDB-Tabelle.
Der Befehl gibt den folgenden „Zugriff verweigert“-Fehler zurück, da der Pod nicht über dynamodb:DeleteTable-Berechtigungen verfügt:
An error occurred (AccessDeniedException) when calling the DeleteTable operation: User: arn:aws:sts::1111122222:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1U7NRNSEC/botocore-session-1632822777 is not authorized to perform: dynamodb:DeleteTable on resource: arn:aws:dynamodb:eu-west-1: 1111122222:table/MyTable command terminated with exit code 254

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr