[英]AWS IAM Role - AccessDenied error in one pod
我有一個服務帳戶,我試圖在同一命名空間中安裝的多個 pod 中使用該帳戶。
其中一個 pod 是由 Airflow KubernetesPodOperator 創建的。 另一個是通過 Kubernetes 部署通過 Helm 創建的。
在 Airflow 部署中,我看到分配了 IAM 角色並創建、列出了 DynamoDB 表等,但是在第二個掌舵圖表部署(或)中的測試 Pod( 如此處所示創建)中,我不斷收到 DynamoDB 中CreateTable
AccessDenied
錯誤.
我可以看到 AWS 角色 ARN 被分配給服務賬戶,服務賬戶被應用到 pod 以及相應的令牌文件也正在創建,但我看到AccessDenied
異常。
arn:aws:sts::1234567890:assumed-role/MyCustomRole/aws-sdk-java-1636152310195 is not authorized to perform: dynamodb:CreateTable on resource
服務帳號
Name: mypipeline-service-account
Namespace: abc-qa-daemons
Labels: app.kubernetes.io/managed-by=Helm
chart=abc-pipeline-main.651
heritage=Helm
release=ab-qa-pipeline
tier=mypipeline
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::1234567890:role/MyCustomRole
meta.helm.sh/release-name: ab-qa-pipeline
meta.helm.sh/release-namespace: abc-qa-daemons
Image pull secrets: <none>
Mountable secrets: mypipeline-service-account-token-6gm5b
Tokens: mypipeline-service-account-token-6gm5b
PS:使用KubernetesPodOperator
創建的客戶端代碼和通過 Helm 圖表部署創建的客戶端代碼是相同的,即相同的 docker 鏡像。 像其他屬性nodeSelector
, tolerations
等,卷安裝也是一樣的。
它們的describe pod
輸出相似,只是名稱和標簽發生了一些變化。 KubernetesPodOperator
pod 的 QoS 類為Burstable
而 Helm 圖表的 QoS 類為BestEffort
。
為什么我在 Helm 部署中獲得AccessDenied
而在KubernetesPodOperator
沒有? 如何調試這個問題?
每當我們收到AccessDenied
異常時,可能有兩個原因:
就我而言,后者是問題所在。 分配給特定角色的權限可以很復雜,即它們可以更細化。
例如,就我而言,角色可以創建/描述的 DynamoDB 表僅限於以特定前綴開頭的表,而不是所有 DynamoDB 表。
因此,無論何時出現此錯誤,始終建議檢查 IAM 角色權限。
如問題中所述,請務必使用awscli
映像檢查服務帳戶。
請記住,AWS 開發工具包中使用了一個憑證提供程序鏈,用於確定應用程序要使用的憑證。 在大多數情況下,會使用DefaultAWSCredentialsProviderChain
,其順序如下所示。 確保 SDK 正在選擇預期的提供者(在我們的例子中是WebIdentityTokenCredentialsProvider
)
super(new EnvironmentVariableCredentialsProvider(),
new SystemPropertiesCredentialsProvider(),
new ProfileCredentialsProvider(),
WebIdentityTokenCredentialsProvider.create(),
new EC2ContainerCredentialsProviderWrapper());
此外,您可能還想在記錄器中將 AWS 開發工具包類設置為調試模式,以查看正在選擇哪個憑證提供程序以及原因。
要檢查服務帳戶是否應用於 Pod,請對其進行描述並檢查 AWS 環境變量是否已設置為它,例如AWS_REGION
、 AWS_DEFAULT_REGION
、 AWS_ROLE_ARN
和AWS_WEB_IDENTITY_TOKEN_FILE
。
如果沒有,請通過描述該服務賬戶來檢查您的服務賬戶是否具有 AWS 注釋eks.amazonaws.com/role-arn
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.