簡體   English   中英

AWS Firehose跨區域/帳戶策略

[英]AWS Firehose cross region/account policy

我正在嘗試創建可以通過AWS Lambda從帳戶A中的不同區域接收數據的Firehose流,並輸出到帳戶B中的紅移表。為此,我在帳戶A上創建了一個IAM角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "firehose.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

我給了它以下權限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::b-bucket/*",
                "arn:aws:s3:::b-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "redshift:*"
            ],
            "Resource": "*"
        }
    ]
}

在帳戶BI上,使用此信任策略創建了一個角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "firehose.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "11111111111"
                }
            }
        }
    ]
}

我給了該角色以下訪問權限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::b-bucket",
                "arn:aws:s3:::b-bucket/*",
                "arn:aws:s3:::b-account-logs",
                "arn:aws:s3:::b-account-logs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "redshift:*",
            "Resource": "arn:aws:redshift:us-east-1:cluster:account-b-cluster*"
        }
    ]
}

我還編輯了S3存儲桶上的訪問策略,以便訪問我的帳戶A角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::11111111111:role/AccountAXAccountBPolicy"
            },
            "Action": "s3:*",
            "Resource": ["arn:aws:s3:::b-bucket","arn:aws:s3:::b-bucket/*"]
        }
    ]
}

但是,這一切都不起作用。 當我嘗試在帳戶A中創建流時,它不會列出帳戶B中的存儲桶和紅移群集。 有沒有辦法讓這項工作?

約翰的答案是半正確的。 我建議Redshift群集的帳戶所有者創建FireHose流。 通過CLI創建需要您提供用戶名和密碼。 讓集群所有者創建流並在流上共享IAM角色權限對於安全性和憑證更改更安全。 此外,您無法創建訪問區域外的數據庫的流,因此交付應用程序可以訪問正確的流和區域。

請繼續閱讀下面的內容,了解如何創建跨帳戶流。

在我的情況下,我可以訪問這兩個帳戶並降低更改量和監控的便捷性我在帳戶A端創建了流。

但是,上述權限是正確的,您無法通過AWS控制台創建從帳戶A到帳戶B的Firehose流。 您需要通過AWS Cli執行此操作:

 aws firehose create-delivery-stream --delivery-stream-name testFirehoseStreamToRedshift 
 --redshift-destination-configuration 'RoleARN="arn:aws:iam::11111111111:role/AccountAXAccountBRole", ClusterJDBCURL="jdbc:redshift://<cluster-url>:<cluster-port>/<>",
 CopyCommand={DataTableName="<schema_name>.x_test",DataTableColumns="ID1,STRING_DATA1",CopyOptions="csv"},Username="<Cluster_User_name>",Password="<Cluster_Password>",S3Configuration={RoleARN="arn:aws:iam::11111111111:role/AccountAXAccountBRole",
 BucketARN="arn:aws:s3:::b-bucket",Prefix="test/",CompressionFormat="UNCOMPRESSED"}'

您可以通過在其他AWS賬戶上創建測試表來測試此問題:

create table test_schema.x_test
(
    ID1 INT8 NOT NULL,
    STRING_DATA1 VARCHAR(10) NOT NULL
)
distkey(ID1)
sortkey(ID1,STRING_DATA1);

您可以發送如下測試數據:

aws firehose put-record  --delivery-stream-name testFirehoseStreamToRedshift --record '{"DATA":"1,\"ABCDEFGHIJ\""}'

使用上述權限配置時,應為您創建跨帳戶訪問權限。

文檔:
創建流 - http://docs.aws.amazon.com/cli/latest/reference/firehose/create-delivery-stream.html

記錄 - http://docs.aws.amazon.com/cli/latest/reference/firehose/put-record.html

沒有。

Amazon Kinesis Firehose僅輸出到同一地區的Amazon S3存儲桶和Amazon Redshift集群。

但是,只需調用適當的端點, 任何東西都可以向Kinesis Firehose發送信息 因此,您可以在任何AWS賬戶和任何地區(或Internet上的任何地方)將應用程序發送到Firehose,然后將其存儲在與Firehose相同的區域中的存儲桶或群集中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM