![](/img/trans.png)
[英]AWS Firehose delivery to Cross Account Elasticsearch in VPC
[英]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.