如何與 IAM AWS X-Ray 搭配使用 - AWS X-Ray

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

如何與 IAM AWS X-Ray 搭配使用

在您使用 IAM 管理 X-Ray 的存取權限之前,您應該瞭解哪些 IAM 功能可用於 X-Ray。若要深入瞭解 X-Ray 和其他人如何 AWS 服務 使用 IAM AWS 服務 ,請參閱 IAM 使用者指南中的使用 IAM

您可以使用 AWS Identity and Access Management (IAM) 將 X-Ray 許可授與帳戶中的使用者和運算資源。無論使用者使用哪個用戶端 (主控台、 AWS SDK AWS CLI),IAM 都能在 API 層級控制對 X-Ray 服務的存取,以統一強制執行許可。

若要使用 X-Ray 主控台檢視軌跡地圖和區段,您只需要讀取權限。若要啟用主控台存取,請將 AWSXrayReadOnlyAccess 受管政策新增到您的 IAM 使用者。

若要進行本機開發和測試,請建立具有讀取和寫入權限的 IAM 角色。假設角色並儲存角色的暫時認證。您可以將這些認證與 X-Ray 精靈 AWS CLI、和 AWS SDK 搭配使用。 AWS CLI如需詳細資訊,請參閱搭配使用暫時安全登入資料。

若要將已檢測的應用程式部署到 AWS,請建立具有寫入權限的 IAM 角色,並將其指派給執行應用程式的資源。 AWSXRayDaemonWriteAccess包括上傳追蹤的權限,以及一些讀取權限,以及支援使用取樣規則。如需詳細資訊,請參閱 設定取樣規則

讀取和寫入政策不包含設定加密金鑰設定及抽樣規則的許可。使用 AWSXrayFullAccess 存取這些設定,或是在自訂政策中新增組態 API。針對使用您所建立客戶受管金鑰的加密和解密,您也需要使用金鑰的許可

基於 X-Ray 身份的政策

使用 IAM 身分型政策,您可以指定允許或拒絕的動作和資源,以及在何種條件下允許或拒絕動作。X-Ray 支援特定動作、資源和條件鍵。若要了解您在 JSON 政策中使用的所有元素,請參閱 IAM 使用者指南中的 JSON 政策元素參考

動作

管理員可以使用 AWS JSON 政策來指定誰可以存取哪些內容。也就是說,哪個主體在什麼条件下可以對什麼資源執行哪些動作

JSON 政策的 Action 元素描述您可以用來允許或拒絕政策中存取的動作。原則動作通常與關聯的 AWS API 作業具有相同的名稱。有一些例外狀況,例如沒有相符的 API 操作的僅限許可動作。也有一些作業需要政策中的多個動作。這些額外的動作稱為相依動作

政策會使用動作來授予執行相關聯動作的許可。

X-Ray 中的原則動作會在動作之前使用下列前置詞:xray:例如,若要授與某人使用 X-Ray GetGroup API 作業擷取群組資源詳細資料的權限,您可以將該xray:GetGroup動作包含在他們的政策中。政策陳述式必須包含 ActionNotAction 元素。X-Ray 會定義自己的一組動作,說明您可以使用此服務執行的工作。

若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示:

"Action": [ "xray:action1", "xray:action2"

您也可以使用萬用字元 (*) 來指定多個動作。例如,若要指定開頭是 Get 文字的所有動作,請包含以下動作:

"Action": "xray:Get*"

若要查看 X-Ray 動作清單,請參閱《IAM 使用者指南》 AWS X-Ray中的 「定義的動作」。

資源

管理員可以使用 AWS JSON 政策來指定誰可以存取哪些內容。也就是說,哪個主體在什麼條件下可以對什麼資源執行哪些動作

Resource JSON 政策元素可指定要套用動作的物件。陳述式必須包含 ResourceNotResource 元素。最佳實務是使用其 Amazon Resource Name (ARN) 來指定資源。您可以針對支援特定資源類型的動作 (稱為資源層級許可) 來這麼做。

對於不支援資源層級許可的動作 (例如列出操作),請使用萬用字元 (*) 來表示陳述式適用於所有資源。

"Resource": "*"

您可以使用 IAM 政策來控制對資源的存取。針對支援資源層級許可的動作,您可以使用 Amazon Resource Name (ARN) 來識別要套用政策的資源。

所有 X-Ray 動作都可以在 IAM 政策中使用,授予或拒絕使用者使用該動作的權限。不過,並非所有 X-Ray 動作都支援資源層級權限,這可讓您指定可以執行動作的資源。

對於不支援資源層級許可的動作,您必須使用 "*" 做為資源。

下列 X-Ray 動作支援資源層級權限:

  • CreateGroup

  • GetGroup

  • UpdateGroup

  • DeleteGroup

  • CreateSamplingRule

  • UpdateSamplingRule

  • DeleteSamplingRule

以下是 CreateGroup 動作的身分型許可政策範例。此範例示範使用與有唯一 ID 之群組名稱 local-users 有關的 ARN 做為萬用字元。群組建立時產生的唯一 ID,所以無法在政策中事先預測。使用 GetGroupUpdateGroupDeleteGroup 時,您可以將此定義為萬用字元或確切的 ARN,包括 ID。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "xray:CreateGroup" ], "Resource": [ "arn:aws:xray:eu-west-1:123456789012:group/local-users/*" ] } ] }

以下是 CreateSamplingRule 動作的身分型許可政策範例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "xray:CreateSamplingRule" ], "Resource": [ "arn:aws:xray:eu-west-1:123456789012:sampling-rule/base-scorekeep" ] } ] }
注意

依其名稱定義之取樣規則的 ARN。不像群組 ARN,取樣規則沒有唯一產生的 ID。

若要查看 X-Ray 資源類型及其 ARN 的清單,請參閱《IAM 使用者指南》 AWS X-Ray的「定義資源」。若要了解您可以使用哪些動作指定每個資源的 ARN,請參閱 AWS X-Ray定義的動作

條件索引鍵

X-Ray 不提供任何服務特定的條件金鑰,但它確實支援使用某些全域條件金鑰。若要查看所有 AWS 全域條件金鑰,請參閱 IAM 使用者指南中的AWS 全域條件內容金鑰

範例

若要檢視 X-Ray 身分型原則的範例,請參閱。AWS X-Ray 以識別為基礎的原則範例

X-Ray 資源型政策

X-Ray 支援以資源為基礎的政策,用於目前和 future 的 AWS 服務 整合,例如 Amazon SNS 主動追蹤。基於 X-Ray 資源的策略可以由其他 AWS Management Console S,或通過 AWS SDK 或 CLI 進行更新。例如,Amazon SNS 主控台嘗試自動設定以資源為基礎的政策,以將追蹤傳送至 X-Ray。下列政策文件提供手動設定 X-Ray 資源型政策的範例。

範例 適用於 Amazon SNS 主動追蹤的 X-Ray 資源型政策範例

此範例政策文件指定 Amazon SNS 將追蹤資料傳送至 X-Ray 所需的許可:

{ Version: "2012-10-17", Statement: [ { Sid: "SNSAccess", Effect: Allow, Principal: { Service: "sns.amazonaws.com", }, Action: [ "xray:PutTraceSegments", "xray:GetSamplingRules", "xray:GetSamplingTargets" ], Resource: "*", Condition: { StringEquals: { "aws:SourceAccount": "account-id" }, StringLike: { "aws:SourceArn": "arn:partition:sns:region:account-id:topic-name" } } } ] }

使用 CLI 建立以資源為基礎的政策,授與 Amazon SNS 將追蹤資料傳送至 X-Ray 的許可:

aws xray put-resource-policy --policy-name MyResourcePolicy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "SNSAccess", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "xray:PutTraceSegments", "xray:GetSamplingRules", "xray:GetSamplingTargets" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "StringLike": { "aws:SourceArn": "arn:partition:sns:region:account-id:topic-name" } } } ] }'

若要使用這些範例,請將partitionregionaccount-id、和取代為您topic-name的特定 AWS 分割區、區域、帳戶 ID 和 Amazon SNS 主題名稱。若要授予所有 Amazon SNS 主題將追蹤資料傳送至 X-Ray 的權限,請將主題名稱取代為*

基於 X-Ray 標籤的授權

您可以將標籤附加到 X-Ray 群組或取樣規則,或將請求中的標籤傳遞給 X-Ray。若要根據標籤控制存取,請使用 xray:ResourceTag/key-nameaws:RequestTag/key-nameaws:TagKeys 條件金鑰,在政策的條件元素中,提供標籤資訊。若要取得有關為 X-Ray 資源貼標籤的更多資訊標記 X-Ray 取樣規則和群組

若要檢視身分型政策範例,以根據該資源上的標籤來限制存取資源,請參閱根據標籤管理 X-Ray 群組和取樣規則的存取

於本機執行您的應用程式

已檢測的應用程式會將追蹤資料傳送至 X-Ray 精靈。常駐程式會緩衝區段文件,並將它們批次上傳至 X-Ray 服務。精靈需要寫入權限,才能將追蹤資料和遙測上傳至 X-Ray 服務。

當您在本機執行精靈時,請建立 IAM 角色、擔任該角色並將臨時登入資料儲存在環境變數中,或儲存在使用者資料夾.aws中名為的資料夾中的檔案中。credentials AWS CLI如需詳細資訊,請參閱搭配使用暫時安全登入資料。

範例 ~/.aws/credentials
[default] aws_access_key_id={access key ID} aws_secret_access_key={access key} aws_session_token={AWS session token}

如果您已經設定了與 AWS SDK 搭配使用的認證 AWS CLI,或者精靈可以使用這些認證。若有多個可用的描述檔,精靈會使用預設描述檔。

執行您的應用程式 AWS

在上執行應用程式時 AWS,請使用角色將權限授與執行精靈的 Amazon EC2 執行個體或 Lambda 函數。

建立與 X-Ray 配合使用的角色
  1. 開啟 IAM 主控台

  2. 選擇角色

  3. 選擇 Create New Role (建立新角色)。

  4. Role Name (角色名稱) 中,輸入 xray-application。選擇 Next Step (後續步驟)

  5. 針對 Role Type (角色類型),選擇 Amazon EC2

  6. 附加下列受管理政策,讓您的應用程式存取權限 AWS 服務:

    • AWSXRayDaemonWriteAccess— 授予 X-Ray 守護程序上傳追蹤資料的權限。

    如果您的應用程式使用 AWS SDK 存取其他服務,請新增授與這些服務存取權的政策。

  7. 選擇 Next Step (後續步驟)

  8. 選擇建立角色

用於加密的使用者許可

X-Ray 預設會加密所有追蹤資料,您可以將其設定為使用您管理的金鑰。如果您選擇 AWS Key Management Service 客戶管理的金鑰,則必須確保金鑰的存取政策允許您授與 X-Ray 的權限,以使用該金鑰進行加密。您帳戶中的其他使用者也需要存取金鑰,才能在 X-Ray 主控台中檢視加密的追蹤資料。

對於客戶管理的金鑰,請使用允許執行下列動作的存取原則來設定金鑰:

  • 在 X-Ray 中設定金鑰的使用者有權呼叫kms:CreateGrant和。kms:DescribeKey

  • 能夠存取加密追蹤資料的使用者必須具備呼叫 kms:Decrypt 的許可。

當您在 IAM 主控台的金鑰設定區段中將使用者新增至金鑰使用者群組時,他們會擁有這兩項作業的權限。只需要在金鑰原則上設定權限,因此您不需要使用者、群組或角色的任何 AWS KMS 權限。如需詳細資訊,請參閱AWS KMS 開發人員指南中的使用金鑰原則

對於預設加密,或者如果您選擇 AWS 託管 CMK (aws/xray),權限取決於誰可以存取 X-Ray API。任何擁有 PutEncryptionConfig 存取權的人員 (包含在 AWSXrayFullAccess 中) 都可以變更加密組態。若要防止使用者變更加密金鑰,請不要給予他們使用 PutEncryptionConfig 的許可。