如何在 AWS IAM 策略中引用 StringOutput
How do I reference a StringOutput in an AWS IAM policy
我一直在寻找如何做到这一点。我不认为我有正确的术语。将 Pulumi 与 Golang 结合使用,如何在字符串中引用某些资源的 ID。
例如,我创建了一个存储桶,然后我想在 IAM 策略中引用该存储桶的 ID。这似乎是不可能的。
bucket, err := s3.NewBucket(
ctx,
photosBucketName,
&s3.BucketArgs{})
tmpJSON, err := json.Marshal(map[string]interface{}{
"Version": "2012-10-17",
"Statement": []map[string]interface{}{
{
"Effect": "Allow",
"Principal": "*",
"Action": []string{"s3:GetObject"},
"Resource": []string{fmt.Sprintf("arn:aws:s3:::%s/*", bucket.ID())},
},
},
})
输出为:
Sprintf format %s has arg bucket.ID() of wrong type github.com/pulumi/pulumi/sdk/v2/go/pulumi.IDOutput
由于存储桶名称上生成的后缀,使用 photosBucketName
会导致文档格式错误。
感谢时间和帮助。
Pulumi 资源 return 输出,这些值是 Pulumi 不知道的值,直到上游云提供商 API(在本例中为 AWS S3 API)直到资源已创建。
这意味着,如果您想以标准 Go 字符串的形式访问原始输出值,则需要以某种方式告诉 Pulumi 引擎等待该资源创建完毕。您可以使用 Pulumi 的 apply
因此,在您的特定示例中,我们希望为我们的 IAM 策略构建一个 JSON 字符串(IAM 策略仅采用字符串,它们不能采用其他 Pulumi 输出)。
bucket, err := s3.NewBucket(
ctx,
photosBucketName,
&s3.BucketArgs{})
// notice how we're using the apply function to wrap the building of the JSON string
bucketPolicy := bucket.Arn.ApplyT(func (arn string) (string, error) {
policyJSON, err := json.Marshal(map[string]interface{}{
"Version": "2012-10-17",
"Statement": []map[string]interface{}{
{
"Effect": "Allow",
"Principal": "*",
"Action": []string{"s3:GetObject"},
"Resource": []string{
arn, // I can now pass the arn directy
},
},
},
})
if err != nil {
return "", err
}
return string(policyJSON), nil
})
我一直在寻找如何做到这一点。我不认为我有正确的术语。将 Pulumi 与 Golang 结合使用,如何在字符串中引用某些资源的 ID。
例如,我创建了一个存储桶,然后我想在 IAM 策略中引用该存储桶的 ID。这似乎是不可能的。
bucket, err := s3.NewBucket(
ctx,
photosBucketName,
&s3.BucketArgs{})
tmpJSON, err := json.Marshal(map[string]interface{}{
"Version": "2012-10-17",
"Statement": []map[string]interface{}{
{
"Effect": "Allow",
"Principal": "*",
"Action": []string{"s3:GetObject"},
"Resource": []string{fmt.Sprintf("arn:aws:s3:::%s/*", bucket.ID())},
},
},
})
输出为:
Sprintf format %s has arg bucket.ID() of wrong type github.com/pulumi/pulumi/sdk/v2/go/pulumi.IDOutput
由于存储桶名称上生成的后缀,使用 photosBucketName
会导致文档格式错误。
感谢时间和帮助。
Pulumi 资源 return 输出,这些值是 Pulumi 不知道的值,直到上游云提供商 API(在本例中为 AWS S3 API)直到资源已创建。
这意味着,如果您想以标准 Go 字符串的形式访问原始输出值,则需要以某种方式告诉 Pulumi 引擎等待该资源创建完毕。您可以使用 Pulumi 的 apply
因此,在您的特定示例中,我们希望为我们的 IAM 策略构建一个 JSON 字符串(IAM 策略仅采用字符串,它们不能采用其他 Pulumi 输出)。
bucket, err := s3.NewBucket(
ctx,
photosBucketName,
&s3.BucketArgs{})
// notice how we're using the apply function to wrap the building of the JSON string
bucketPolicy := bucket.Arn.ApplyT(func (arn string) (string, error) {
policyJSON, err := json.Marshal(map[string]interface{}{
"Version": "2012-10-17",
"Statement": []map[string]interface{}{
{
"Effect": "Allow",
"Principal": "*",
"Action": []string{"s3:GetObject"},
"Resource": []string{
arn, // I can now pass the arn directy
},
},
},
})
if err != nil {
return "", err
}
return string(policyJSON), nil
})