As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Crie um pipeline CodePipeline que use recursos de outra AWS conta
Pode ser que você queira criar um pipeline que use os recursos criados ou gerenciados por outra conta da AWS . Por exemplo, talvez você queira usar uma conta para seu funil e outra para seus CodeDeploy recursos.
nota
Depois de criar um pipeline com ações de várias contas, você deve configurar suas ações para que ainda possam acessar artefatos dentro das limitações de pipelines entre contas. As limitações a seguir se aplicam às ações entre contas:
-
Geralmente, uma ação só pode consumir um artefato se:
-
A ação está na mesma conta que o pipeline OU
-
O artefato foi criado na conta do pipeline para uma ação em outra conta OU
-
O artefato foi produzido por uma ação anterior na mesma conta
Ou seja, você não pode transmitir um artefato de uma conta para outra se nenhuma delas for a conta do pipeline.
-
-
Ações entre contas não são compatíveis com os seguintes tipos de ações:
-
Ações de compilações Jenkins
-
Neste exemplo, você deve criar uma chave AWS Key Management Service (AWS KMS) para usar, adicionar a chave ao pipeline e configurar políticas e funções da conta para permitir o acesso entre contas. Para uma AWS KMS chave, você pode usar o ID da chave, a chave ARN ou o aliasARN.
nota
Os aliases são reconhecidos somente na conta que criou a KMS chave. Para ações entre contas, você só pode usar o ID da chave ou ARN a chave para identificar a chave. As ações entre contas envolvem o uso do perfil da outra conta (AccountB), portanto, a especificação do ID da chave usará a chave da outra conta (AccountB).
Neste passo a passo e seus exemplos, AccountA
é a conta originalmente usada para criar o pipeline. Ele tem acesso ao bucket do Amazon S3 usado para armazenar artefatos do pipeline e à função de serviço usada por. AWS CodePipelineAccountB
é a conta originalmente usada para criar o CodeDeploy aplicativo, o grupo de implantação e a função de serviço usada por CodeDeploy.
Para AccountA
para editar um pipeline para usar o CodeDeploy aplicativo criado pelo AccountB
, AccountA
deve:
-
Solicite o ID da conta ARN ou do
AccountB
(neste passo a passo, oAccountB
ID é012ID_ACCOUNT_B
). -
Crie ou use uma chave gerenciada pelo AWS KMS cliente na região para o pipeline e conceda permissões para usar essa chave para a função de serviço (
CodePipeline_Service_Role
) eAccountB
. -
Crie uma política de bucket do Amazon S3 que conceda
AccountB
acesso ao bucket do Amazon S3 (por exemplo,codepipeline-us-east-2-1234567890
). -
Crie uma política que permita
AccountA
para assumir uma função configurada porAccountB
e anexe essa política à função de serviço (CodePipeline_Service_Role
). -
Edite o pipeline para usar a AWS KMS chave gerenciada pelo cliente em vez da chave padrão.
Para AccountB
para permitir o acesso aos seus recursos a um pipeline criado em AccountA
, AccountB
deve:
-
Solicite o ID da conta ARN ou do
AccountA
(neste passo a passo, oAccountA
ID é012ID_ACCOUNT_A
). -
Crie uma política aplicada à função de EC2 instância da Amazon configurada para permitir CodeDeploy o acesso ao bucket do Amazon S3 (
codepipeline-us-east-2-1234567890
). -
Crie uma política aplicada à função de EC2 instância da Amazon configurada para CodeDeploy que permita o acesso à chave gerenciada pelo AWS KMS cliente usada para criptografar os artefatos do pipeline em
AccountA
. -
Configurar e anexar uma IAM função (
CrossAccount_Role
) com uma política de relacionamento de confiança que permite a função CodePipeline de serviço emAccountA
para assumir o papel. -
Crie uma política que permita o acesso aos recursos de implantação exigidos pelo pipeline e anexe-a ao
CrossAccount_Role
. -
Crie uma política que permita o acesso ao bucket do Amazon S3 (
codepipeline-us-east-2-1234567890
) e anexe-o aoCrossAccount_Role
.
Tópicos
Pré-requisito: criar uma chave de criptografia do AWS KMS
As chaves gerenciadas pelo cliente são específicas de uma região, assim como todas AWS KMS as chaves. Você deve criar sua AWS KMS chave gerenciada pelo cliente na mesma região em que o funil foi criado (por exemplo,us-east-2
).
Para criar uma chave gerenciada pelo cliente em AWS KMS
-
Faça login no AWS Management Console com
AccountA
e abra o AWS KMS console. -
À esquerda, escolha Chaves gerenciadas pelo cliente.
-
Escolha Create key (Criar chave). Em Configurar chave, deixe a opção padrão Simétrica selecionada e escolha Próximo.
-
Em Alias, insira um alias a ser usado para essa chave (por exemplo,
PipelineName-Key
). Opcionalmente, forneça uma descrição e tags para essa chave e escolha Avançar. -
Em Definir permissões administrativas da chave, escolha o(s) perfil(is) que devem atuar como administradores para essa chave e, em seguida, escolha Próximo.
-
Em Definir permissões de uso da chave, em Esta conta, selecione o nome da função de serviço para o pipeline (por exemplo, CodePipeline _Service_Role). Em Outras AWS contas, escolha Adicionar outra AWS conta. Insira o ID da conta para
AccountB
para concluir o eARN, em seguida, escolha Avançar. -
Em Revisar e editar política de chaves, revise a política e selecione Concluir.
-
Na lista de chaves, escolha o alias da sua chave e copie-a ARN (por exemplo,
). Você precisará disso ao editar seu pipeline e configurar políticas.arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
Etapa 1: Configurar as políticas e funções da conta
Depois de criar a AWS KMS chave, você deve criar e anexar políticas que permitirão o acesso entre contas. Isso requer ações de ambos AccountA
e AccountB
.
Tópicos
Configure políticas e funções na conta que criará o pipeline (AccountA
)
Para criar um pipeline que usa CodeDeploy recursos associados a outra AWS conta, AccountA
deve configurar políticas para o bucket do Amazon S3 usado para armazenar artefatos e para a função de serviço para. CodePipeline
Para criar uma política para o bucket do Amazon S3 que conceda acesso a AccountB (console)
-
Faça login no AWS Management Console com
AccountA
e abra o console do Amazon S3 em. https://console.aws.amazon.com/s3/ -
Na lista de buckets do Amazon S3, escolha o bucket do Amazon S3 em que os artefatos de seus pipelines serão armazenados. Esse bucket tem o nome de
codepipeline-
, onderegion
-1234567EXAMPLE
region
é a AWS região na qual você criou o pipeline e1234567EXAMPLE
é um número aleatório de dez dígitos que garante que o nome do bucket seja exclusivo (por exemplo,codepipeline-us-east-2-1234567890
). -
Na página de detalhes do bucket do Amazon S3, escolha Propriedades.
-
No painel de propriedades, expanda Permissões e depois selecione Adicionar política de bucket.
nota
Se uma política já estiver anexada ao bucket do Amazon S3, escolha Editar política de bucket. Em seguida, você pode adicionar as instruções no exemplo a seguir para a política existente. Para adicionar uma nova política, escolha o link e siga as instruções no AWS Policy Generator. Para obter mais informações, consulte Visão geral das IAM políticas.
-
Na janela do Editor de política de bucket, digite a seguinte política. Isso permitirá
AccountB
acesso aos artefatos do gasoduto, e forneceráAccountB
a capacidade de adicionar artefatos de saída se uma ação, como uma fonte personalizada ou uma ação de criação, os criar.No exemplo a seguir, o ARN é para
AccountB
é012ID_ACCOUNT_B
. O ARN para o bucket do Amazon S3 écodepipeline-us-east-2-1234567890
. Substitua-os ARNs ARN pelo da conta que você deseja permitir acesso e ARN pelo do bucket do Amazon S3:{ "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root
" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
" } ] } -
Selecione Salvar e depois feche o editor de políticas.
-
Escolha Salvar para salvar as permissões para o bucket do Amazon S3.
Para criar uma política para a função de serviço para CodePipeline (console)
-
Faça login no AWS Management Console com
AccountA
e abra o IAM console em https://console.aws.amazon.com/iam/. -
No painel de navegação, escolha Perfis.
-
Na lista de funções, em Nome da função, escolha o nome da função de serviço para CodePipeline.
-
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a JSONguia e insira a seguinte política para permitir
AccountB
para assumir o papel. No exemplo a seguir,012ID_ACCOUNT_B
é o ARN paraAccountB
:{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::
012ID_ACCOUNT_B
:role/*" ] } } -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
Configure políticas e funções na conta proprietária do AWS recurso (AccountB
)
Ao criar um aplicativo, uma implantação e um grupo de implantação no CodeDeploy, você também cria uma função de EC2 instância da Amazon. (Essa função é criada caso você use o assistente de apresentação de implantação de execução, mas também é possível criá-la manualmente.) Para um pipeline criado em AccountA
para usar CodeDeploy recursos criados em AccountB
, você deve:
-
Configurar uma política para o perfil de instância que permita o acesso ao bucket do Amazon S3 em que os artefatos do pipeline serão armazenados.
-
Crie uma segunda função em
AccountB
configurado para acesso entre contas.Essa segunda função não deve ter acesso apenas ao bucket do Amazon S3 em
AccountA
, ele também deve conter uma política que permita o acesso aos CodeDeploy recursos e uma política de relacionamento de confiança que permita a função CodePipeline de serviço emAccountA
para assumir o papel.nota
Essas políticas são específicas para configurar CodeDeploy recursos a serem usados em um pipeline criado usando uma AWS conta diferente. Outros AWS recursos exigirão políticas específicas para seus requisitos de recursos.
Para criar uma política para a função de EC2 instância da Amazon configurada para CodeDeploy (console)
-
Faça login no AWS Management Console com
AccountB
e abra o IAM console em https://console.aws.amazon.com/iam/. -
No painel de navegação, escolha Perfis.
-
Na lista de funções, em Nome da função, escolha o nome da função de serviço usada como função de EC2 instância da Amazon para o CodeDeploy aplicativo. Esse nome da função pode variar e mais de uma função de instância pode ser usada por um grupo de implantação. Para obter mais informações, consulte Criar um perfil de IAM instância para suas EC2 instâncias da Amazon.
-
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a JSONguia e insira a seguinte política para conceder acesso ao bucket do Amazon S3 usado pelo
AccountA
para armazenar artefatos para tubulações (neste exemplo,codepipeline-us-east-2-1234567890
):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890
" ] } ] } -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
-
Crie uma segunda política para AWS KMS saber onde
está ARN a chave gerenciada pelo cliente criada emarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
AccountA
e configurado para permitirAccountB
para usá-lo:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:
012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
" ] } ] }Importante
Você deve usar o ID da conta de
AccountA
nesta política como parte do recurso ARN para a AWS KMS chave, conforme mostrado aqui, ou a política não funcionará. -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
Agora, crie uma IAM função para usar no acesso entre contas e configure-a para que a função CodePipeline de serviço no AccountA
pode assumir o papel. Essa função deve conter políticas que permitam o acesso aos CodeDeploy recursos e ao bucket do Amazon S3 usados para armazenar artefatos no AccountA
.
Para configurar a função entre contas no IAM
-
Faça login no AWS Management Console com
AccountB
e abra o IAM console em https://console.aws.amazon.com/iam. -
No painel de navegação, escolha Roles. Selecione Create role.
-
Em Selecionar tipo de entidade confiável, escolha Outra conta da AWS . Em Especificar contas que podem usar essa função, em ID da AWS conta, insira a ID da conta que criará o pipeline em CodePipeline (
AccountA
) e, em seguida, escolha Avançar: Permissões.Importante
Essa etapa cria a política de relacionamento de confiança entre
AccountB
eAccountA
. No entanto, isso concede acesso de nível raiz à conta e CodePipeline recomenda reduzi-la à função CodePipeline de serviço emAccountA
. Siga a etapa 16 para restringir as permissões. -
Em Anexar políticas de permissões, escolha AmazonS3 eReadOnlyAccess, em seguida, escolha Avançar: Tags.
nota
Esta não é a política que você utilizará. Você deve escolher uma política para concluir o assistente.
-
Selecione Next: Review (Próximo: revisar). Digite um nome para essa função em Nome da função (por exemplo,
CrossAccount_Role
). Você pode nomear essa função como quiser, desde que ela siga as convenções de nomenclatura em. IAM Considere atribuir uma nome à função que indique claramente o seu propósito. Selecione Criar perfil. -
Na lista de funções, escolha a função que você acabou de criar (por exemplo,
CrossAccount_Role
) para abrir a página de resumo dessa função. -
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a JSONguia e insira a seguinte política para permitir o acesso aos CodeDeploy recursos:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }
-
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
-
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a JSONguia e insira a seguinte política para permitir que essa função recupere artefatos de entrada e coloque artefatos de saída no bucket do Amazon S3 em
AccountA
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*" ] } ] } -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
-
Na guia Permissões, encontre o AmazonS3 ReadOnlyAccess na lista de políticas em Nome da política e escolha o ícone de exclusão (X) ao lado da política. Quando solicitado, selecione Desanexar.
-
Selecione a guia Relação de Confiança e escolha Editar política de confiança. Escolha a opção Adicionar um principal na coluna da esquerda. Em Tipo principal, escolha IAMFunções e, em seguida, forneça a ARN para a função CodePipeline de serviço em
AccountA
. Removaarn:aws:iam::Account_A:root
da lista de AWS diretores e escolha Atualizar política.
Etapa 2: Editar o pipeline
Você não pode usar o CodePipeline console para criar ou editar um pipeline que usa recursos associados a outra AWS conta. No entanto, você pode usar o console para criar a estrutura geral do pipeline e, em seguida, usar o AWS CLI para editar o pipeline e adicionar esses recursos. Como alternativa, você pode usar a estrutura de um pipeline existente e adicionar manualmente os recursos.
Para adicionar os recursos associados a outra AWS conta (AWS CLI)
-
Em um terminal (Linux, macOS ou Unix) ou prompt de comando (Windows), execute o comando get-pipeline no pipeline ao qual deseja adicionar recursos. Copie a saída do comando em um JSON arquivo. Por exemplo, para um pipeline chamado MyFirstPipeline, você digitaria algo semelhante ao seguinte:
aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
A saída é enviada para o
pipeline.json
file. -
Abra o JSON arquivo em qualquer editor de texto sem formatação. Depois de entrar
"type": "S3"
no armazenamento de artefatos, adicione as informações KMSencryptionKey, ID e digite ondecodepipeline-us-east-2-1234567890
é o nome do bucket do Amazon S3 usado para armazenar artefatos para o pipeline e
é o nome da chave gerenciada pelo cliente que você acabou ARN de criar:arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
{ "artifactStore”: { "location": "
codepipeline-us-east-2-1234567890
", "type": "S3", "encryptionKey": { "id": "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
", "type": "KMS" } }, -
Adicione uma ação de implantação em um estágio para usar os CodeDeploy recursos associados ao
AccountB
, incluindo osroleArn
valores da função entre contas que você criou (CrossAccount_Role
).O exemplo a seguir mostra JSON que adiciona uma ação de implantação chamada
ExternalDeploy
. Ele usa os CodeDeploy recursos criados emAccountB
em um palco chamadoStaging
. No exemplo a seguir, o ARN paraAccountB
é012ID_ACCOUNT_B
:, { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyAppBuild" } ], "name": "
ExternalDeploy
", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "AccountBApplicationName
", "DeploymentGroupName": "AccountBApplicationGroupName
" }, "runOrder": 1, "roleArn": "arn:aws:iam::012ID_ACCOUNT_B
:role/CrossAccount_Role
" } ] }nota
Isso não é JSON para todo o pipeline, apenas para a estrutura da ação em um estágio.
-
Você deve remover as linhas
metadata
do arquivo para que o comando update-pipeline possa usá-lo. Remova a seção da estrutura do pipeline no JSON arquivo (as"metadata": { }
linhas e os"updated"
campos"created"
"pipelineARN"
, e).Por exemplo, remova as seguintes linhas da estrutura:
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" }Salve o arquivo.
-
Para aplicar suas alterações, execute o update-pipeline comando, especificando o JSON arquivo do pipeline, semelhante ao seguinte:
Importante
Não se esqueça de incluir
file://
antes do nome de arquivo. Ele é obrigatório nesse comando.aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
Este comando retorna toda a estrutura do pipeline editado.
Para testar o pipeline que usa recursos associados a outra AWS conta
-
Em um terminal (Linux, macOS ou Unix) ou prompt de comando (Windows), execute o comando start-pipeline-execution, especificando o nome do pipeline, da seguinte maneira:
aws codepipeline start-pipeline-execution --name MyFirstPipeline
Para obter mais informações, consulte Iniciar um pipeline manualmente.
-
Faça login no AWS Management Console com
AccountA
e abra o CodePipeline console em http://console.aws.amazon.com/codesuite/codepipeline/home. Os nomes de todos os pipelines associados à sua AWS conta são exibidos.
-
Em Nome, selecione o nome do pipeline recém-editado. Isso abre uma visão detalhada do pipeline, incluindo o estado de cada ação em cada estágio do pipeline.
-
Assista o progresso através do pipeline. Aguarde uma mensagem de sucesso sobre a ação que usa o recurso associado a outra AWS conta.
nota
Você receberá uma mensagem de erro se tentar visualizar os detalhes da ação enquanto estiver conectado com
AccountA
. Saia e, em seguida, entre comAccountB
para ver os detalhes da implantação em CodeDeploy.