如何在PowerShell中通过Cognito IdentityPool获取未认证角色的临时AWS凭证?
使用Cognito未认证角色通过PowerShell访问AWS S3
要通过Cognito未认证角色访问S3,核心是获取临时IAM凭证,而非硬编码长期AccessKey/SecretKey。以下是具体实现步骤:
前提准备
- 已创建Cognito身份池,并启用未认证访问
- 身份池关联的未认证角色已配置对应S3权限(如
s3:ListBucket、s3:GetObject等) - 本地已安装AWS Tools for PowerShell(可通过
Install-Module -Name AWSPowerShell.NetCore安装)
实现代码
# 1. 设置目标AWS区域 Set-DefaultAWSRegion -Region "us-east-1" # 2. 替换为你的Cognito身份池ID $identityPoolId = "us-east-1:xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # 3. 获取未认证用户的Cognito身份ID $identityResponse = Get-CognitoIdentityId -IdentityPoolId $identityPoolId -UseUnauthenticatedCredentials $identityId = $identityResponse.IdentityId # 4. 获取临时IAM凭证 $credentialResponse = Get-CredentialsForIdentity -IdentityId $identityId $tempCredentials = $credentialResponse.Credentials # 5. 用临时凭证初始化S3客户端 $s3Client = New-AWSAmazonS3Client -AccessKey $tempCredentials.AccessKeyId ` -SecretKey $tempCredentials.SecretAccessKey ` -SessionToken $tempCredentials.SessionToken ` -Region "us-east-1" # 6. 示例操作:列出指定Bucket内的对象 Get-S3Object -BucketName "your-target-bucket" -Client $s3Client
关键说明
- 临时凭证默认有效期为1小时,过期后需重新执行步骤3-5获取新凭证
- 未认证角色的IAM策略需严格限定权限,避免过度授权,示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::your-target-bucket", "arn:aws:s3:::your-target-bucket/*" ] } ] }
- 若使用AWS Tools for PowerShell最新版本,也可直接通过
Get-CredentialsForIdentity返回的凭证对象初始化客户端,无需手动拆分密钥
内容的提问来源于stack exchange,提问作者Josh Barton
相关产品推荐
相关产品推荐

