網域政策 - CodeArtifact

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

網域政策

CodeArtifact 支援使用資源型許可來控制存取。資源型許可可讓您指定誰可以存取資源,以及他們可以對其執行哪些動作。根據預設,只有擁有網域AWS的帳戶才能建立和存取網域中的儲存庫。您可以將政策文件套用至網域,以允許其他IAM主體存取它。

如需詳細資訊,請參閱政策和許可以及以身分為基礎的政策和以資源為基礎的政策。

啟用網域的跨帳戶存取

資源政策是 JSON 格式的文字檔案。檔案必須指定主體 (執行者)、一或多個動作和效果 (AllowDeny)。若要在另一個帳戶擁有的網域中建立儲存庫,必須授予主體網域資源的CreateRepository許可。

例如,下列資源政策會授予帳戶在網域中建立儲存庫的123456789012許可。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:CreateRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

若要允許使用標籤建立儲存庫,您必須包含 codeartifact:TagResource 許可。這也會授予帳戶將標籤新增至網域和其中所有儲存庫的存取權。

系統會針對網域和網域內所有資源評估網域政策的所有操作。這表示網域政策可用來將許可套用至網域中的儲存庫和套件。當 Resource元素設定為 時*,陳述式會套用至網域中的所有資源。例如,如果上述政策也包含在允許IAM的動作codeartifact:DescribeRepository清單中,則政策將允許DescribeRepository對網域中的每個儲存庫進行呼叫。網域政策可用來在 Resource元素中使用特定資源,將許可套用至網域ARNs中的特定資源。

注意

網域和儲存庫政策都可用來設定許可。當兩個政策都存在時,則會評估兩個政策,如果任一政策允許,則會允許 動作。如需詳細資訊,請參閱儲存庫與網域政策之間的互動

若要存取另一個 帳戶擁有的網域中的套件,必須授予網域資源 GetAuthorizationToken許可。這可讓網域擁有者控制哪些帳戶可以讀取網域中儲存庫的內容。

例如,下列資源政策會授予帳戶123456789012許可,以擷取網域中任何儲存庫的身分驗證權杖。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:GetAuthorizationToken" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }
注意

想要從儲存庫端點擷取套件的主體,除了網域的ReadFromRepository許可之外,還必須授予儲存庫資源的GetAuthorizationToken許可。同樣地,除了 之外,還必須授予想要將套件發佈至儲存庫端點的主體PublishPackageVersion許可GetAuthorizationToken

如需 ReadFromRepositoryPublishPackageVersion許可的詳細資訊,請參閱儲存庫政策

網域政策範例

當多個帳戶使用網域時,應授予帳戶一組基本許可,以允許完整使用網域。下列資源政策會列出一組允許完整使用網域的許可。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BasicDomainPolicy", "Action": [ "codeartifact:GetDomainPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:GetAuthorizationToken", "codeartifact:DescribeDomain", "codeartifact:CreateRepository" ], "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
注意

如果網域及其所有儲存庫都由單一帳戶擁有,且只需要從該帳戶使用,則您不需要建立網域政策。

網域政策範例 AWS Organizations

您可以使用 aws:PrincipalOrgID 條件金鑰,從組織中的所有帳戶授予 CodeArtifact 網域存取權,如下所示。

{ "Version": "2012-10-17", "Statement": { "Sid": "DomainPolicyForOrganization", "Effect": "Allow", "Principal": "*", "Action": [ "codeartifact:GetDomainPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:GetAuthorizationToken", "codeartifact:DescribeDomain", "codeartifact:CreateRepository" ], "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID":["o-xxxxxxxxxxx"]} } } }

如需使用aws:PrincipalOrgID條件索引鍵的詳細資訊,請參閱 IAM 使用者指南 中的AWS全域條件內容索引鍵

設定網域政策

您可以使用 put-domain-permissions-policy命令將政策連接至網域。

aws codeartifact put-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \ --policy-document file://</PATH/TO/policy.json>

當您呼叫 時put-domains-permissions-policy,在評估許可時,會忽略網域上的資源政策。這可確保網域的擁有者無法將自己鎖定在網域之外,這將使他們無法更新資源政策。

注意

您無法將許可授予另一個 AWS 帳戶,以使用資源政策更新網域上的資源政策,因為在呼叫 時會忽略資源政策 put-domain-permissions-policy。

輸出範例:

{ "policy": { "resourceArn": "arn:aws:codeartifact:region-id:111122223333:domain/my_domain", "document": "{ ...policy document content...}", "revision": "MQlyyTQRASRU3HB58gBtSDHXG7Q3hvxxxxxxx=" } }

命令的輸出包含網域資源的 Amazon Resource Name (ARN)、政策文件的完整內容,以及修訂識別碼。put-domain-permissions-policy 修訂識別碼可以使用 --policy-revision選項傳遞至 。這可確保文件的已知修訂被覆寫,而不是由其他寫入器設定的較新版本。

讀取網域政策

若要讀取政策文件的現有版本,請使用 get-domain-permissions-policy命令。若要將輸出格式化為可讀性,請使用 --output--query policy.document搭配 Python json.tool模組,如下所示。

aws codeartifact get-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \ --output text --query policy.document | python -m json.tool

輸出範例:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BasicDomainPolicy", "Action": [ "codeartifact:GetDomainPermissionsPolicy", "codeartifact:ListRepositoriesInDomain", "codeartifact:GetAuthorizationToken", "codeartifact:CreateRepository" ], "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111122223333:root" } } ] }

刪除網域政策

使用 delete-domain-permissions-policy命令從網域刪除政策。

aws codeartifact delete-domain-permissions-policy --domain my_domain --domain-owner 111122223333

輸出的格式與 get-domain-permissions-policydelete-domain-permissions-policy命令的格式相同。