- 最好的方法是使用默认提供程序链,这意味着 [DefaultCredentialsProvider] ( https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html ) 类将根据特定的层次结构决定从哪里获取凭证:
1. Java System Properties - aws.accessKeyId and aws.secretAccessKey
2. Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
3. Web Identity Token credentials from system properties or environment variables
4. Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI
5. Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" environment variable is set and security manager has permission to access the variable,
6. Instance profile credentials delivered through the Amazon EC2 metadata service
对于本地开发,推荐的方法是使用命令设置您的凭据aws configure
,并让默认提供程序链利用它。
尽管在某些情况下环境变量可能是一个合理的选择(并且默认链将能够使用它们),但请永远不要在代码中硬编码任何凭据!
- 是的。我们可以使用 AWS CLI 代入一个角色:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
这将提供一个临时的AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
并且AWS_SESSION_TOKEN
可以提供给应用程序。该应用程序将使用代入角色提供的权限与 AWS 服务进行通信。
- 是的,如果目标是访问 S3,还有另一种方法。我们可以使用预签名的网址。