簡體   English   中英

DynamoDB 請求中包含的安全令牌無效 UnrecognizedClientException

[英]DynamoDB The security token included in the request is invalid UnrecognizedClientException

我有 ~/.aws/credentials 和配置文件,我的代碼如下

clientConfiguration.setProxyHost("MYPROXY");
            clientConfiguration.setProxyPort(port);
            clientConfiguration.setProxyUsername("username");
            clientConfiguration.setProxyPassword("pw");
            clientConfiguration.setPreemptiveBasicProxyAuth(false);


            AmazonDynamoDBClient client = new AmazonDynamoDBClient(new ProfileCredentialsProvider("MY_PROFILE"),clientConfiguration);

         //client.withRegion(Regions.US_EAST_1);
         DynamoDBMapper mapper = new DynamoDBMapper(client);

         // Get a book - Id=101
         GetBook(mapper, 101);

我每次都遇到異常。我可以在 ~/.aws/credentials 的憑證文件中看到會話令牌

Error running the DynamoDBMapperQueryScanExample: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The security token included in the request is invalid. (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: UnrecognizedClientException; Request ID: S0NTUAHKE57VC68FM3CVBOFAKFVV4KQNSO5AEMVJF66Q9ASUAAJG)
    com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The security token included in the request is invalid. (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: UnrecognizedClientException; Request ID: S0NTUAHKE57VC68FM3CVBOFAKFVV4KQNSO5AEMVJF66Q9ASUAAJG)

AWS SDK 1.11.24 java 憑證文件

[TES1_AWS_STSdigital_Dev_Developer]
aws_access_key_id = XXXXX
aws_secret_access_key = AAAAA
aws_security_token = BBBBBBBB
token_expiration = 2016-08-08T16:34:48Z

[TEST2_AWS_TEST_Dev_ReadOnly]
aws_access_key_id = MMMMMM
aws_secret_access_key = NNNNNN
aws_security_token = OOOOOOO
token_expiration = 2016-08-08T16:34:48Z

[TEST3_AWS_STSdigital_Prod_ProdSupport]
aws_access_key_id = KKKKKKK
aws_secret_access_key = LLLLLLLLL
aws_security_token =FFFFFFFF
token_expiration = 2016-08-08T16:34:48Z

[TEST4_AWS_STSdigital_Prod_Monitoring]
aws_access_key_id = WWWWWW
aws_secret_access_key = SSSSSSSS
aws_security_token = VVVVVVVVV
token_expiration = 2016-08-08T16:34:48Z

~/.aws/config 中的配置文件

[DEFAULT]
scope = urn:amazon:webservices

[saml_provider]
url = https://myprivatesssaccess
default_region = us-east-1

[profile TEST1_AWS_STSdigital_Dev_Developer]
saml_role = arn:aws:iam::44444444:role/TEST1_AWS_STSdigital_Dev_Developer
region = us-east-1

[profile TEST2_AWS_TEST_Dev_ReadOnly]
saml_role = arn:aws:iam::3333333:role/TEST2_AWS_TEST_Dev_ReadOnly
region = us-east-1

[profile TEST3_STSdigital_Prod_ProdSupport]
saml_role = arn:aws:iam::222222:role/TEST3_AWS_STSdigital_Prod_ProdSupport
region = us-east-1

[profile TEST4_AWS_STSdigital_Prod_Monitoring]
saml_role = arn:aws:iam::1111111:role/TEST4_AWS_STSdigital_Prod_Monitoring
region = us-east-1

從簡單的事情開始。 你檢查過文件的權限嗎? 至少從 Linux 開始,他們需要 600 或用戶讀/寫、組和世界無訪問權限。

您是否檢查過 AWS 端以驗證這些憑證是否與您嘗試使用的賬戶相關聯?

您可以運行一個使用憑據的簡單命令嗎? 來自 Amazon 的 CLI aws命令是一個完美的起點。

aws ec2 help

很好的第一次檢查。 然后嘗試訪問一些普遍可用的信息,例如現貨 EC2 實例價格歷史記錄:

aws ec2 describe-spot-price-history --prod "Linux/UNIX" --start-time 2016-08-15

應該給你數千行輸出。 然后嘗試訪問您自己的一些帳戶信息:

aws ec2 describe-instances

此時,您知道一切都在 CLI 中運行。 下一步是非常 Java 連接,如果你從同一台機器上運行它,它現在應該可以工作,並且它與 ~/.aws/ 所在的主目錄相同。

我每天都使用 Java 訪問 DynamoDB。 一旦你清除了一些障礙,它就會很好地工作。

當我將區域設置為 RegionEndpoint.APEast1 而不是 RegionEndpoint.USEast1 時收到此錯誤。 我的錯誤,我接受了我在智能感知中看到的第一個“East1”字符串。

我正在使用 AWS-Fed 通過終端的聯合角色啟用對 AWS 的臨時訪問,而不是通過 aws configure 命令訪問。 我在使用 boto3 與 DynamoDB 交互時遇到了同樣的錯誤,並且能夠通過在終端中將 AWS Profile 設置為 saml 來解決它,如下所示

export AWS_PROFILE=saml

其他情況可能是如果您的會話已過期,請再次嘗試aws configure試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM