تكوين وصول S3 حسب دور IAM
يقدم هذا الموضوع كيفية تكوين الوصول إلى S3 حسب دور IAM عند تثبيت Milvus مع Helm. لمزيد من التفاصيل، راجع أدوار IAM.
قبل البدء
يرجى تمكين OIDC عند إنشاء مجموعة EKS باستخدام eksctl. لمزيد من التفاصيل، راجع IAM OIDC.
يفترض هذا الدليل أنك قمت بالفعل بنشر مجموعة Milvus Cluster على AWS مع Kubernetes.
إقران دور IAM بحساب خدمة Kubernetes
قم بإنشاء دلو AWS S3.
اقرأ قواعد تسمية الدلو وراقب قواعد التسمية عند تسمية دلو AWS S3 الخاص بك.
milvus_bucket_name="milvus-bucket-$(openssl rand -hex 12)" aws s3api create-bucket --bucket "$milvus_bucket_name" --region 'us-east-2' --acl private --object-ownership ObjectWriter --create-bucket-configuration LocationConstraint='us-east-2' # Output # # "Location": "http://milvus-bucket-039dd013c0712f085d60e21f.s3.amazonaws.com/"
قم بإنشاء نهج IAM لقراءة وكتابة الكائنات داخل الدلو الذي تم إنشاؤه أعلاه. استبدل اسم الدلو باسم الدلو الخاص بك.
echo '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<bucket-name>" ] }, { "Effect": "Allow", "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*" ] } ] }' > milvus-s3-policy.json aws iam create-policy --policy-name MilvusS3ReadWrite --policy-document file://milvus-s3-policy.json # Get the ARN from the command output as follows: # { # "Policy": { # "PolicyName": "MilvusS3ReadWrite", # "PolicyId": "AN5QQVVPM1BVTFlBNkdZT", # "Arn": "arn:aws:iam::12345678901:policy/MilvusS3ReadWrite", # "Path": "/", # "DefaultVersionId": "v1", # "AttachmentCount": 0, # "PermissionsBoundaryUsageCount": 0, # "IsAttachable": true, # "CreateDate": "2023-11-16T06:00:01+00:00", # "UpdateDate": "2023-11-16T06:00:01+00:00" # } # }
أنشئ دور IAM واربطه بحساب خدمة Kubernetes. استبدل
your-account-id
بمعرف حسابك.
eksctl create iamserviceaccount --name milvus-s3-access-sa --namespace milvus --cluster milvus-eks-cluster --role-name milvus-s3-access-sa \
--attach-policy-arn arn:aws:iam::<your-account-id>:policy/MilvusS3ReadWrite --approve
تحقق من إعداد الدور وحساب الخدمة
يرجى الرجوع إلى أدوار IAM.
- تأكد من تكوين سياسة الثقة الخاصة بدور IAM بشكل صحيح.
aws iam get-role --role-name milvus-s3-access-sa --query Role.AssumeRolePolicyDocument
# An example output is as follows
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:default:my-service-account",
"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
}
}
}
]
}
- تأكد من إرفاق النهج الذي أرفقته بالدور في الخطوة السابقة بالدور.
aws iam list-attached-role-policies --role-name milvus-s3-access-sa --query 'AttachedPolicies[].PolicyArn' --output text
# An example output is as follows
arn:aws:iam::12345678901:policy/MilvusS3ReadWrite
- اعرض الإصدار الافتراضي للنهج.
export policy_arn='arn:aws:iam::12345678901:policy/MilvusS3ReadWrite'
aws iam get-policy --policy-arn $policy_arn
# An example output is as follows
{
"Policy": {
"PolicyName": "MilvusS3ReadWrite",
"PolicyId": "EXAMPLEBIOWGLDEXAMPLE",
"Arn": "arn:aws:iam::12345678901:policy/MilvusS3ReadWrite",
"Path": "/",
"DefaultVersionId": "v2",
[...]
}
}
- اعرض محتويات النهج للتأكد من أن النهج يتضمن جميع الأذونات التي يحتاجها Pod الخاص بك. إذا لزم الأمر، استبدل 1 في الأمر التالي بالإصدار الذي تم إرجاعه في الإخراج السابق.
aws iam get-policy-version --policy-arn $policy_arn --version-id v2
# An example output is as follows
{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::<bucket-name>",
"arn:aws:s3:::<bucket-name>/*"
]
}
]
},
[...]
}
}
- تأكّد من أن حساب خدمة Kubernetes مُرفق بالدور.
kubectl describe serviceaccount milvus-s3-access-sa -n milvus
# An example output is as follows
Name: milvus-s3-access-sa
Namespace: milvus
Labels: app.kubernetes.io/managed-by=eksctl
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::12345678901:role/milvus-s3-access-sa
[...]
نشر ميلفوس
في هذا الدليل، سنستخدم مخططات Milvus Helm لنشر مجموعة Milvus. يمكنك العثور على المخططات هنا.
- أضف ريبو Milvus Helm Chart.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
- قم بإعداد ملف تكوين Milvus
milvus.yaml
، واستبدل<bucket-name>
باسم الدلو الذي تم إنشاؤه أعلاه.
cluster:
enabled: true
service:
type: LoadBalancer
port: 19530
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/aws-load-balancer-name: milvus-service
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
serviceAccount:
create: false
name: milvus-s3-access-sa
minio:
enabled: false
externalS3:
enabled: true
host: "s3.us-east-2.amazonaws.com"
port: "443"
useSSL: true
bucketName: "<bucket-name>"
useIAM: true
cloudProvider: "aws"
iamEndpoint: ""
rootCoordinator:
replicas: 2
activeStandby:
enabled: true
resources:
limits:
cpu: 1
memory: 2Gi
indexCoordinator:
replicas: 2
activeStandby:
enabled: true
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
queryCoordinator:
replicas: 2
activeStandby:
enabled: true
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
dataCoordinator:
replicas: 2
activeStandby:
enabled: true
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
proxy:
replicas: 2
resources:
limits:
cpu: 1
memory: 2Gi
- قم بتثبيت ملف Milvus.
helm upgrade --install milvus-demo milvus/milvus -n milvus -f milvus.yaml
تحقق من التثبيت
يرجى الرجوع إلى التحقق من التثبيت.