授予对 lambda 服务主体的读取访问权限未按预期工作
Granting read access to lambda service principal doesn't work as expected
这可能是一个一般的 AWS 问题,但在我看来,CDK 允许您使用它的方式仍然会产生意想不到的结果,我不确定为什么。
在下面的代码中,我应该向 lambda 服务主体授予读取权限。
虽然这不起作用,但 lambda 无法从此存储桶中读取数据。
我能让他们工作的唯一方法是更新他们的 lambda 策略,允许他们通过 arn 访问存储桶。
为什么这行不通?并且因为它是允许的(该策略对存储桶设置良好)
这是什么意思?
谢谢!
bucket = S3.Bucket(
scope=self,
id='MyBucket',
versioned=True,
block_public_access=S3.BlockPublicAccess.BLOCK_ALL,
encryption=BucketEncryption.KMS_MANAGED,
removal_policy=core.RemovalPolicy.DESTROY,
lifecycle_rules=[bucket_lifecycle_rules],
)
lambda_service_principal = iam.ServicePrincipal('lambda.amazonaws.com')
bucket.grant_read(lambda_service_principal)
访问存储桶的不是 Lambda "service"。访问存储桶的是 Lambda 函数使用的 IAM 角色。这就是为什么您需要使用授予 IAM 角色访问权限的存储桶策略,或者(更好)向 IAM 角色添加访问存储桶的权限。
创建 Lambda 容器时,Lambda 将 'assume' 与函数关联的 IAM 角色。然后通过 EC2 实例元数据服务提供这些凭据,其方式与将角色分配给 Amazon EC2 实例的方式相同。
Lambda 函数将使用这些凭据访问服务,因此请求将来自 "from the IAM Role" 而不是来自 Lambda 服务。
这可能是一个一般的 AWS 问题,但在我看来,CDK 允许您使用它的方式仍然会产生意想不到的结果,我不确定为什么。
在下面的代码中,我应该向 lambda 服务主体授予读取权限。 虽然这不起作用,但 lambda 无法从此存储桶中读取数据。 我能让他们工作的唯一方法是更新他们的 lambda 策略,允许他们通过 arn 访问存储桶。
为什么这行不通?并且因为它是允许的(该策略对存储桶设置良好) 这是什么意思?
谢谢!
bucket = S3.Bucket(
scope=self,
id='MyBucket',
versioned=True,
block_public_access=S3.BlockPublicAccess.BLOCK_ALL,
encryption=BucketEncryption.KMS_MANAGED,
removal_policy=core.RemovalPolicy.DESTROY,
lifecycle_rules=[bucket_lifecycle_rules],
)
lambda_service_principal = iam.ServicePrincipal('lambda.amazonaws.com')
bucket.grant_read(lambda_service_principal)
访问存储桶的不是 Lambda "service"。访问存储桶的是 Lambda 函数使用的 IAM 角色。这就是为什么您需要使用授予 IAM 角色访问权限的存储桶策略,或者(更好)向 IAM 角色添加访问存储桶的权限。
创建 Lambda 容器时,Lambda 将 'assume' 与函数关联的 IAM 角色。然后通过 EC2 实例元数据服务提供这些凭据,其方式与将角色分配给 Amazon EC2 实例的方式相同。
Lambda 函数将使用这些凭据访问服务,因此请求将来自 "from the IAM Role" 而不是来自 Lambda 服务。