Kes*_*uri 3 amazon-s3 amazon-kms aws-cdk
我有一个在不同堆栈中定义/管理的存储桶。该存储桶由 KMS 中管理的密钥加密。在我自己的堆栈中,我尝试创建一个角色,并分别授予该角色对存储桶和密钥的读取和解密权限。
我按如下方式引用存储桶和密钥:
const otherBucket = Bucket.fromBucketName(this, 'otherBucket', '<BucketName>');
const otherKeyArn = otherBucket.encryptionKey?.keyArn || '';
Run Code Online (Sandbox Code Playgroud)
我使用密钥 arn 为我的角色创建策略语句,并且它始终返回为 ''。我在堆栈中创建了另一个存储桶,当我尝试访问该存储桶的加密密钥时,我得到了该存储桶的正确密钥 arn。
fromBucketName导致此问题的方法是否存在错误?我目前必须将键的字符串 arn 作为硬编码值存储在我的常量文件中,有更好的方法吗?
fromBucketName 方法不会进行任何 aws 调用来获取 S3 存储桶的属性,它只是创建一个传递属性的 Javascript 对象,在本例中,它只是存储桶名称。
const bucket = s3.Bucket.fromBucketName(
this,
"mybucket",
"my-bucket-name"
);
Run Code Online (Sandbox Code Playgroud)
针对这种情况的两种标准方法是:
第一种方法,将您最初创建存储桶的键的名称导出为
const myBucket = new s3.Bucket(this, "my-bucket", {
encryption: s3.BucketEncryption.KMS,
});
new cdk.CfnOutput(this, "my-bucket-arn-out", {
value: myBucket.encryptionKey?.keyArn!,
description: "This is my-bucket kms key arn",
exportName: "my-bucket-kms-key-arn",
});
Run Code Online (Sandbox Code Playgroud)
然后在我们需要的地方使用 importValue 进行导入
const s3KeyArn = cdk.Fn.importValue('my-bucket-kms-key-arn')
Run Code Online (Sandbox Code Playgroud)
第二种方法,我们可以使用自定义资源来创建 Lambda 并调用 AWS Api 在幕后获取 Key Arn。
| 归档时间: |
|
| 查看次数: |
1869 次 |
| 最近记录: |