本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS 任務執行 IAM 角色
任務執行角色會授予 Amazon ECS 容器和 Fargate 代理程式代表您進行 AWS API 呼叫的許可。任務執行 IAM 角色是必要的,視任務的需求而定。您可擁有多個任務執行角色,以用於與帳戶相關聯的不同用途和服務。如需應用程式需要執行的 IAM 許可,請參閱 Amazon ECS 任務 IAM 角色。
以下是任務執行 IAM 角色的常見使用案例:
-
您的任務託管在 AWS Fargate外部執行個體上或外部執行個體上,並且:
-
從 Amazon ECR 私有儲存庫提取容器映像。
-
從執行任務的帳戶的不同帳戶中的 Amazon ECR 私有儲存庫提取容器映像。
-
會使用日誌驅動程式將容器日誌傳送至 CloudWatch
awslogs
Logs。如需詳細資訊,請參閱將 Amazon ECS 日誌傳送至 CloudWatch 。
-
-
您的任務託管在 AWS Fargate 或 Amazon EC2 執行個體上,並且:
-
使用私有登錄驗證。如需詳細資訊,請參閱私有登錄驗證許可。
-
使用執行期監控。
-
任務定義使用 Secrets Manager 秘密或 AWS Systems Manager 參數存放區參數參考敏感資料。如需詳細資訊,請參閱Secrets Manager 或 Systems Manager 許可。
-
注意
Amazon ECS 容器代理程式 1.16.0 版及更新版本支援任務執行角色。
Amazon ECS 提供名為 AmazonECSTaskExecutionRolePolicy Word 的受管政策,其中包含上述常見使用案例所需的許可。如需詳細資訊,請參閱 AWS 受管政策參考指南中的 AmazonECSTaskExecutionRolePolicyWord。對於特殊使用案例,可能需要將內嵌政策新增至任務執行角色
Amazon ECS 主控台會建立任務執行角色。您可以手動連接任務的 受管 IAM 政策,以允許 Amazon ECS 在引入未來功能和增強功能時新增許可。您可以使用 IAM 主控台搜尋,ecsTaskExecutionRole
並查看您的帳戶是否已具有任務執行角色。如需詳細資訊,請參閱 IAM 使用者指南中的 Word 主控台搜尋。 IAM
如果您以已驗證的使用者身分提取映像,則不太可能受到 Docker Hub 提取速率限制
透過使用 Amazon ECR 和 Amazon ECR Public,您可以避免 Docker 施加的限制。如果您從 Amazon ECR 提取映像,這也有助於縮短網路提取時間,並減少流量離開 VPC 時的資料傳輸變更。
當您使用 Fargate 時,您必須使用 repositoryCredentials
對私有映像登錄檔進行驗證。無法設定 Amazon ECS 容器代理程式環境變數ECS_ENGINE_AUTH_DATA
,ECS_ENGINE_AUTH_TYPE
或修改 Fargate 上託管任務ecs.config
的檔案。如需詳細資訊,請參閱任務的私有登錄檔身分驗證。
建立任務執行 角色
如果您的帳戶尚未擁有任務執行角色,請使用下列步驟建立角色。
建立角色之後,請為角色新增下列功能的其他許可。
功能 | 額外許可 |
---|---|
使用 Secrets Manager 憑證來存取您的容器映像私有儲存庫 |
|
使用 Systems Manager 或 Secrets Manager 傳遞敏感資料 | |
讓 Fargate 任務透過介面端點提取 Amazon ECR 映像 | |
Amazon S3 儲存貯體中的主機組態檔案 | |
設定 Container Insights 以檢視 Amazon ECS 生命週期事件 | |
在 Container Insights 中檢視 Amazon ECS 生命週期事件 |
私有登錄驗證許可
若要將存取提供給您建立的秘密,請將以下許可字作為內嵌政策,新增到任務執行角色。如需詳細資訊,請參閱新增和移除 IAM 政策。
-
secretsmanager:GetSecretValue
-
kms:Decrypt
- 僅當您的金鑰使用自訂 KMS 金鑰而非預設金鑰時才需要。必須新增自訂金鑰的 Amazon Resource Name (ARN) 作為資源。
下列為新增許可的內嵌政策範例。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }
Secrets Manager 或 Systems Manager 許可
允許容器代理程式提取必要 AWS Systems Manager 或 Secrets Manager 資源的許可。如需詳細資訊,請參閱將敏感資料傳遞至 Amazon ECS 容器。
使用 Secrets Manager
若要允許存取您建立的 Secrets Manager 秘密,請將以下許可新增到任務執行角色。如需有關如何管理許可的資訊,請參閱 IAM 使用者指南中的新增和移除 Word 身分許可。 IAM
-
secretsmanager:GetSecretValue
– 如果參考 Secrets Manager 秘密,則此項目為必要。新增從 Secrets Manager 擷取密碼的許可。
下列政策範例新增必要許可。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:
region
:aws_account_id
:secret:secret_name
" ] } ] }
使用 Systems Manager
重要
對於使用 EC2 啟動類型的任務,您必須使用 ECS 代理程式組態變數ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true
才能使用此功能。您可以在建立容器執行個體期間將其新增至./etc/ecs/ecs.config
檔案,也可以將其新增至現有執行個體,然後重新啟動 ECS 代理程式。如需詳細資訊,請參閱Amazon ECS 容器代理程式組態。
若要允許存取您建立的 Systems Manager Parameter Store 參數,請將以下許可當作政策,手動新增到任務執行角色。如需有關如何管理許可的資訊,請參閱 IAM 使用者指南中的新增和移除 Word 身分許可。 IAM
-
ssm:GetParameters
– 如果參考任務定義中的 Systems Manager Parameter Store 參數,則此項目為必要。新增擷取 Systems Manager 參數的許可。 -
secretsmanager:GetSecretValue
– 如果直接參考 Secrets Manager 秘密,或者 Systems Manager Parameter Store 參數參考任務定義中的 Secrets Manager 秘密,則此項目為必要。新增從 Secrets Manager 擷取密碼的許可。 -
kms:Decrypt
– 只有在秘密使用客戶受管金鑰而非預設金鑰時,此項目為必要。自訂金鑰的 ARN 應新增為資源。新增解密客戶受管金鑰的許可。
下列政策範例新增必要許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:
region
:aws_account_id
:parameter/parameter_name
", "arn:aws:secretsmanager:region
:aws_account_id
:secret:secret_name
", "arn:aws:kms:region
:aws_account_id
:key/key_id
" ] } ] }
Fargate 任務透過介面端點許可提取 Amazon ECR 映像
當啟動使用 Fargate 啟動類型的任務時,當 Amazon ECR 設定為使用介面 VPC 端點ECR時,您可以限制任務對特定 VPC 或 VPC 端點的存取。透過為使用 IAM 條件索引鍵的任務建立任務執行角色來執行此操作。
使用下列 IAM 全域條件金鑰來限制對特定 VPC 或 VPC 端點的存取。如需詳細資訊,請參閱 AWS 全域條件內容金鑰。
-
aws:SourceVpc
- 限制對特定 VPC 的存取。您可以將 VPC 限制為託管任務和端點的 VPC。 -
aws:SourceVpce
- 限制對特定 VPC 端點的存取。
以下任務執行角色政策提供新增條件金鑰的範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "
vpce-xxxxxx
", "aws:sourceVpc": "vpc-xxxxx
" } } } ] }
Amazon S3 檔案儲存許可
當您指定託管在 Amazon S3 中的組態檔案時,任務執行角色必須包含組態檔案的s3:GetObject
許可,以及檔案所在的 Amazon S3 儲存貯體的s3:GetBucketLocation
許可。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的 Amazon S3 政策動作。
下列範例政策新增從 Amazon S3 擷取檔案所需的許可。指定 Amazon S3 儲存貯體的名稱和組態檔案名稱。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "
s3:GetObject
" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/folder_name
/config_file_name
" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] }
設定 Container Insights 以檢視 Amazon ECS 生命週期事件所需的許可
任務角色需要下列許可才能設定生命週期事件:
-
事件:PutRule
-
事件:PutTargets
-
日誌:CreateLogGroup
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:PutTargets", "logs:CreateLogGroup" ], "Resource": "*" } ] }
在 Container Insights 中檢視 Amazon ECS 生命週期事件所需的許可
檢視生命週期事件需要以下許可: 將以下許可作為內嵌政策新增至任務執行角色。如需詳細資訊,請參閱新增和移除 IAM 政策。
-
事件:DescribeRule
-
事件:ListTargetsByRule
-
日誌:DescribeLogGroups
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:DescribeRule", "events:ListTargetsByRule", "logs:DescribeLogGroups" ], "Resource": "*" } ] }