【问题标题】:How do I reference a StringOutput in an AWS IAM policy如何在 AWS IAM 策略中引用 StringOutput
【发布时间】:2021-06-05 02:52:42
【问题描述】:

对于如何做到这一点,我已经看过很多次了。我不认为我有正确的术语。在 Golang 中使用 Pulumi 如何在字符串中引用某些资源的 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 会导致文档格式错误,因为在存储桶名称上生成了后缀。

感谢您的时间和帮助。

【问题讨论】:

    标签: amazon-web-services go pulumi


    【解决方案1】:

    Pulumi 资源返回 Outputs,这些值是 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
    })
    

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2020-12-26
      • 2014-05-02
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多