我正在通過如下腳本創建 EC2 實體:
const instanceParams: EC2.Types.RunInstancesRequest = {
ImageId: AWSImageIDs.AmazonLinux_arm64,
InstanceType: 't4g.nano',
MinCount: 1,
MaxCount: 1,
UserData: userData,
SubnetId: SubnetIds.QA1,
IamInstanceProfile: {Arn: INSTANCE_PROFILE_ARN},
SecurityGroupIds: [SecurityGroupIds.QA_AllowTraffic],
};
const instance = await new EC2({apiVersion: '2016-11-15'})
.runInstances(instanceParams)
.promise()
它創建實體就好了。當我通過 AWS 控制臺訪問 EC2 時,我看到了實體,并且看到了附加到實體的實體組態檔的角色。該角色附加了 S3FullAccessPolicy。
然而,當我運行aws configure list它回傳:
profile <not set> None None
預期aws s3命令失敗并顯示unable to locate credentials. 我不確定為什么實體不相信組態檔已附加,而 AWS 控制臺卻相信?
uj5u.com熱心網友回復:
信任策略不正確。
該策略需要授予 Amazon EC2 服務器代入該角色的權限。
例如:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
這就是說 EC2 服務可以呼叫AssumeRole這個實體。EC2 服務這樣做是為了獲取通過元資料傳遞給實體的憑證。
由于您當前的信任策略僅允許 Amazon S3 服務代入該角色,因此 EC2 服務無法生成憑證。
請注意,實際的 IAM 角色可能正在授予訪問 S3 的權限,但如果將 IAM 角色分配給 EC2 實體,則信任策略必須允許 EC2 服務使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529207.html
標籤:亚马逊网络服务亚马逊-s3亚马逊-ec2aws-sdkaws-sdk-js
