AWS CLI中是否有一项功能允许我以加密格式指定我的秘密访问密钥?
例如,Travis CI脚本可以包含S3密钥的加密版本: https://docs.travis-ci.com/user/deployment/s3
我不喜欢将AWS密钥留在易于阅读的凭证文件中的想法。
答案 0 :(得分:3)
不,没有。访问密钥和/或密钥的任何加密必须由软件使用它们来完成。
但是,使用访问密钥和机密的推荐替代方法是使用IAM角色。
如果您的Travis CI由第三方托管,那么您应该使用IAM第三方角色与该第三方而不是访问密钥。这样,第三方就可以为您的AWS账户检索有时间限制的凭据。
如果您在自己的EC2实例上托管Travis CI,则可以在启动时将EC2实例分配给EC2实例配置文件(IAM角色)。这样,所有权限都将提供给实例,而无需在实例的任何位置存储凭据。
AWS CLI支持此功能。只需在任何地方(命令行,文件或配置)分配任何凭据,它就会尝试从实例配置文件中读取凭据。
答案 1 :(得分:1)
我们可以使用AWS Key Management Service(KMS)使用aws-cli加密密钥。
请参阅下面的Windows加密命令:
aws kms create-key --description "Description For the key"
输出:
$ aws kms create-key --description "Description For the key"
{
"KeyMetadata": {
"AWSAccountId": "361925972328",
**"KeyId": "XXXX-XXXX-XXXX-XXXX",**
"Arn": "arn:aws:kms:us-east-1:361925972328:key/15971628-e4b4-42b8-a50f-038eae00b143",
"CreationDate": 1575535349.191,
"Enabled": true,
"Description": "Description For the key",
"KeyUsage": "ENCRYPT_DECRYPT",
"KeyState": "Enabled",
"Origin": "AWS_KMS",
"KeyManager": "CUSTOMER",
"CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
"EncryptionAlgorithms": [
"SYMMETRIC_DEFAULT"
]
}
}
这将创建密钥。
加密命令:
aws kms encrypt --key-id XXXX-XXXX-XXXX-XXXX --plaintext new.txt --output text --query CiphertextBlob > secrets.base64.json
certutil -decode .\secrets.base64.json secrets.encrypted.json
输出:
Input Length = 430
Output Length = 159
CertUtil: -decode command completed successfully.
答案 2 :(得分:0)
使用aws-CLI KMS进行解密的过程
命令:
aws kms decrypt --ciphertext-blob ./secrets.encrypted.json --output text --query Plaintext > secrets.decrypted.base64
会给出此错误:
调用时发生错误(InvalidCiphertextException) 解密操作提到fileb://类型表示二进制文件
命令:
aws kms decrypt --ciphertext-blob fileb://./secrets.encrypted.json --output text --query Plaintext > secrets.decrypted.base64
它将转换为base64
命令:
certutil -decode .\secrets.decrypted.base64 .\secrets.decrypted.json
输出:
Input Length = 30
Output Length = 7
CertUtil: -decode command completed successfully.